设计模式使用(成本扣除)

news2024/11/23 22:18:04

前言

名词解释

基础名词

订单金额:用户下单时支付的金额,这个最好理解

产品分成:也就是跟其他人合做以后我方能分到的金额,举个例子,比如用户订单金额是 100 块,我方的分成是 80%,那么也就是我方能得到 80 块

联运商分成:跟产品分成类似,就是说我方还需要分去一部分的前给联运商(比如广告商,巨量,快手等),一般是不高的,也就10%左右

综合例子:订单金额 100 块,产品分成 80%,联运商分成10%,那么最终我方得到的金额就是如下的计算公司 100 * (80 -10)%  = 70 块

行业名词

LTV:表示用户在时间段内的下单增长情况,比如第1天下了100块,第二天下了200块。然后去除以注册用户

ROI:类似于LTV的算法,只不过金额部分需要减去分成的情况,也就是第1天70块,第二天下了140块,然后去除以消耗的金额

原有设计

         原来的LTV和ROI是使用的同一张表格,里面的金额存的是用户的真正金额,获取LTV的时候就直接拿出来即可,而在获取ROI的时候就是结合金额*分成比例(提前算好入库的)

        也不能说这样有问题,但是这种算法就只能适应分成比例不变的情况下

目前需求

        之前由于分成比例是固定不变的,但是现在ROI分成金额还需要增加微信、支付宝的分成,而用户选择支付宝还是微信支付是人为不可控的,因此需要把LTV和ROI拆开进行处理,才能符合。

需要解决的问题

        1. 拆开LTV和ROI逻辑,不讲

        2. 历史的LTV数据迁移,看情况而地

        3. 新的ROI表设计,核心,主要还是讲设计模式的运用

问题解决

 首先算法如下,可以看到还区分IOS和安卓,以及切支付(这里就不细说了,主要讲设计思路)

按不同维度统计的总充值*(产品分成比例-联运商分成比例-支付宝/微信) 安卓

按不同维度统计的总充值(产品分成比例-联运商分成比例) iOS
按不同维度统计的总充值
(产品分成比例-支付宝/微信) iOS切支付

设计模式-策略模式使用

设计图如下

AbstractCostStrategy 抽象类

    //处理类型
    public abstract int getCode();

    protected abstract double doDeductCostAmount(OrderInfo orderInfo, DeductCostVo deductCostVo, double productDividedRatio, double finalDividedRatio, boolean applePay, boolean aliPay, boolean webPay);


    public double deductCostAmount(OrderInfo orderInfo, DeductCostVo deductCostVo, GameProduct gameProduct)


AndroidCostStrategyImpl 安卓实现,IOS实现类似

    @Override
    public int getCode() {
        return ProductSubTypeEnum.ANDROID.getCode();
    }

    @Override
    public double doDeductCostAmount(OrderInfo orderInfo, DeductCostVo deductCostVo, double productDividedRatio, double finalDividedRatio, boolean applePay, boolean aliPay, boolean webPay)


CostStrategyComponent: 对外暴漏类


@Resource
    private List<AbstractCostStrategy> abstractCostStrategyList;


    public AbstractCostStrategy getCostStrategy(GameProduct gameProduct) 






主要是动态控制变化,不写死

public class DeductCostVo {

    //支付宝分成
    private double aliDivide;
    //微信分成
    private double webDivide;
}

设计描述

        其实关键在于AbstractCostStrategy的设计,可以看到deductCostAmount是public的,也就是对外使用的,而通用的逻辑被放置在了这里,而doDeductCostAmount是一个抽象的方法,也就是子类需要实现的,具体因安卓和IOS不同,getCode就是子类来进行实现的

        DeductCostVo的结构主要是为了不写死分成,搞成可配置的

        CostStrategyComponent主要是为了使用端不需要介入系统内部逻辑而设计的

        这样其实就已经完成了设计,到这里本来就已经完成了,但是中途需求方又发生了变化,需要根据每个具体的商户进行分成统计,也就是说订单支付到哪个具体的商户号其实也是不定的,那么DeductCostVo的数据就不能是全局配置了,需要根据订单支付时的商户来找到对应的分成进行统计,但是原有的设计是不是就废弃了,其实并不是,因为可以使用,所以才有了如下的设计

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1690168.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

双向链表C++,C#,Java版,这些程序大多已经过测试,一直在用。

先C版吧&#xff0c;我最先用的是C#,后来是Java&#xff0c;后来改用C版的&#xff0c;因为现在一直在用C&#xff0c;单链 表一直没写上去&#xff0c;因为我很少用&#xff0c;用的是双链表。 执行代码例子1&#xff1a; int main() { _DList<_string> s…

小恐龙跳一跳源码

小恐龙跳一跳源码是前两年就火爆过一次的小游戏源码&#xff0c;不知怎么了今年有火爆了&#xff0c;所以今天就吧这个源码分享出来了&#xff01;有喜欢的直接下载就行&#xff0c;可以本地单机直接点击index.html进行运行&#xff0c;又或者放在虚拟机或者服务器上与朋友进行…

基于RV1126的AI网络摄像机AHD、CVBS、HDMI接口的区别有哪些?支持8路AHD摄像头,支持AI实时分析

网络摄像机AHD、CVBS、HDMI接口的区别有哪些&#xff1f;应用场景有哪些&#xff1f; AHD、CVBS和HDMI是不同的视频传输接口&#xff0c;分别适用于不同的应用场景。下面是它们的主要应用场景&#xff1a; 1.AHD&#xff08;Analog High Definition&#xff09;&#xff1a;A…

Nextjs 动态路由获取参数

目录 一、创建page目录下的路由文件 二、通过useRouter来获取动态参数 先看官方文档&#xff1a;Routing: Dynamic Routes | Next.js 使用Nextjs13版本参考官方文档后实现仍有问题&#xff0c;网上的材料大多和官网一致&#xff0c;经过测试后&#xff0c;我找到了这个解决方…

【Linux】用户级缓冲区

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 如果文章对…

【linux】详解linux权限

目录 用户 文件属性 更改文件权限 更改文件拥有者 更改文件所属组 用户的权限 文件掩码 粘滞位 总结 基本指令可参考&#xff1a; 【linux】详解linux基本指令-CSDN博客 【linux】详解linux基本指令-CSDN博客 用户 超级用户&#xff08;root&#xff09;&#xff…

【C++算法】BFS解决多源最短路问题相关经典算法题

1.01矩阵 既然本章是BFS解决多源最短路问题&#xff0c;也就是说有若干个起点&#xff0c;那我们就可以暴力一点&#xff0c;直接把多源最短路径问题转化成若干个单源最短路径问题&#xff0c;然后将每次的步数比较一下&#xff0c;取到最短的就是最短路径的结果&#xff0c;这…

安卓部署ffmpeg全平台so并实现命令行调用

安卓 FFmpeg系列 第一章 Ubuntu生成ffmpeg安卓全平台so 第二章 Windows生成ffmpeg安卓全平台so 第三章 生成支持x264的ffmpeg安卓全平台so 第四章 部署ffmpeg安卓全平台so并使用&#xff08;本章&#xff09; 文章目录 安卓 FFmpeg系列前言一、添加so1、拷贝ffmpeg到项目2、bu…

华为CE6851-48S6Q-HI升级设备版本及补丁

文章目录 升级前准备工作笔记本和交换机设备配置互联地址启用FTP设备访问FTP设备升级系统版本及补丁 升级前准备工作 使用MobaXterm远程工具连接设备&#xff0c;并作为FTP服务器准备升级所需的版本文件及补丁文件 笔记本和交换机设备配置互联地址 在交换机接口配置IP&#…

文件传输服务应用1——java集成smb2/3实现文件共享方案详细教程和windows共享服务使用配置

在实际项目开发过程中&#xff0c;读取网络资源或者局域网内主机的文件是必要的操作和需求。而FTP&#xff08;文件传输协议&#xff09;和SMB&#xff08;服务器消息块&#xff09;是两种最为常见的文件传输协议。它们各自在文件传输领域拥有独特的优势和特点&#xff0c;但同…

3DMax

先转换为可编辑多边形 按“1”选择为点&#xff0c;点击目标焊接&#xff08;CtrlShiftw&#xff09;&#xff0c;然后点击一个顶点拉到另一个定点上&#xff1b; 选择一个面&#xff0c;点击塌陷&#xff08;CtrlAltC&#xff09;&#xff0c;四点合并为一个点&#xff1b; …

Ai指令-公众号内训课:学会ai指令+公众号的底层逻辑(7节课)

课程目录 第一课:详解公众号的流量机制.mp4 第二课:快速搞定公众号号设化装修.mp4 第三课:一期学员直呼牛X的课程&#xff0c;正确的爆文利用姿势.mp4 第五课:颗粒度级别拆解AI公众号爆文.mp4 第六课:AI提示词进阶技巧课。提示词自动化.mp4 第七课.实操演示提示词撰写工作…

element-ui输入框和多行文字输入框字体不一样解决

element-ui的type"textarea"的字体样式与其他样式不同 <el-input type"textarea"></el-input> <el-input ></el-input>设置&#xff1a; .el-textarea__inner::placeholder {font-family: "Helvetica Neue", Helvetic…

GPIO模拟spi时序点亮数码管

目录 spi.h spi.c main.c 实验效果 spi.h #ifndef __SPI_H__ #define __SPI_H__#include "stm32mp1xx_gpio.h" #include "stm32mp1xx_rcc.h"//spi初始化 void spi_init(); //spi写入数据 void spi_write(unsigned char data);#endif spi.c #include…

C#编程-.NET Framework使用工具类简化对象之间的属性复制和操作

在C#编程中&#xff0c;对象之间的属性复制和操作是一个常见的需求。为此&#xff0c;.NET Framework提供了多种实用工具库&#xff0c;如AutoMapper、ValueInjecter和ExpressMapper。这些库通过简化代码&#xff0c;提高了开发效率。本文将介绍这些工具库&#xff0c;比较它们…

Html基础笔记

Html超文本标记语言 (HyperText Markup Language) 超文本 指的是网页中可以显示的内容(图片,超链接,视频,) 标记语言 标记–>标签(标注) 例如:买东西的时候—>商品具有标签,看到标签就知道商品的属性(价格,材质,型号等,) 标记语言就是提供了很多的标签,不同的标签…

Android 几个简单的自定义对话框介绍

Android 几个简单的自定义对话框介绍 文章目录 一、前言二、对话框相关内容1、效果2、对话框显示的调用代码&#xff08;1&#xff09;原生对话框代码&#xff1a;&#xff08;2&#xff09;自定义对话框代码&#xff1a; 3、对话框SweetAlertDialog 主要实现代码&#xff1a;4…

在DAYU200上实现OpenHarmony跳转拨号界面

一、简介 日常生活中&#xff0c;打电话是最常见的交流方式之一&#xff0c;那么如何在OpenAtom OpenHarmony&#xff08;简称“OpenHarmony”&#xff09;中进行电话服务相关的开发呢&#xff1f;今天我们可以一起来了解一下如何通过电话服务系统支持的API实现拨打电话的功能…

噱头还是风口?剖析AI短剧出海的未来

导语 |去年以来&#xff0c;低成本、高回报的土味短剧在国内爆火&#xff0c;而这股风也成功地刮到海外。2024 年&#xff0c;越来越多的人把目光投向了拥有庞大市场的国外“蓝海”&#xff0c;当人们还在高谈阔论 Sora 是否颠覆影视行业的时候&#xff0c;AI 已经在出海短剧中…

Linux系统搭建Tale个人博客网站并实现无公网IP访问本地博客

文章目录 前言1. Tale网站搭建1.1 检查本地环境1.2 部署Tale个人博客系统1.3 启动Tale服务1.4 访问博客地址 2. Linux安装Cpolar内网穿透3. 创建Tale博客公网地址4. 使用公网地址访问Tale 前言 今天给大家带来一款基于 Java 语言的轻量级博客开源项目——Tale&#xff0c;Tale…