4.1 需求分析
主订单的应付金额【origin_total_amount】一般是由所有订单明细的商品单价*数量
汇总【order_price*sku_num】组成。
但是由于优惠、运费等都是以订单为单位进行计算的,所以减掉优惠、加上运费会得到
一个最终实付金额【
final_total_amount】。
但问题在于如果是以商品进行交易额分析,就需要把优惠、运费分摊到购买的每个商品
中。
4.2 如何分摊
一般是由订单明细每种商品的消费占总订单的比重进行分摊,比如总价 1000 元的商品,
由 600 元和 400 元的 A、B 两种商品组成,
但是经过打折和加运费后,实际付款金额变为
810,那么 A 的分摊实付金额为 486 元和 B 的分摊实付金额为 324 元。
4.3 麻烦的情况
由于明细的分摊是由占比而得,那就会进行除法,除法就有可能出现除不尽的情况。
比如:原价 90 元 ,三种商品每件 30 元。没有优惠但有 10 元运费,总实付金额为 100
元。按占比分摊各三分之一,就会出现三个 33.33 元。加起来就会出现 99.99 元。就会出
现差一分钱的情况。
而我们要求所有订单明细的实付分摊加总必须和订单的总实付相等。
所以我们要的是 100=33.33+33.33+33.34
4.4 解决思路
➢ 核心思路:就是需要用两种算法来计算金额
算法一:如果计算时该明细不是最后一笔
使用乘除法公式:实付分摊金额 / 实付总金额 = (数量*单价)/原始总金额
调整移项可得 实付分摊金额 = 实付总金额 * (数量 * 单价) / 原始总金额
算法二:
如果计算时该明细是最后一笔
使用减法公式:
实付分摊金额= 实付总金额 - (其他明细已经计算好的【实付分摊金额】的合计)
判断是否是最后一笔
判断公式:
如果 该条明细 (数量*单价) == 原始总金额 -(其他明细
【数量*单价】的合计)
整个计算中需要的两个合计值:
其他明细已经计算好的【实付分摊金额】的合计
订单的已经计算完的明细的【数量*单价】的合计
如何保存这两个合计?保存在 redis 中。
4.5 代码实现

(61).订单明细实付金额分摊实现相关推荐

  1. 56.订单明细实付金额分摊(实时)

    第1章 需求分析及实现思路 1.1 需求分析 主订单的应付金额[origin_total_amount]一般是由所有订单明细的商品单价*数量 汇总[sku_price*sku_num]组成. 但是由于 ...

  2. 【实时数仓】DWM层订单宽表之需求分析、订单和订单明细关联源码

    文章目录 一 DWM层-订单宽表 1 需求分析与思路 2 订单和订单明细关联代码实现 (1)从Kafka的dwd层接收订单和订单明细数据 a 创建订单实体类 b 创建订单明细实体类 c 在dwm包下创 ...

  3. 订单和订单明细继承等级结构简单介绍

    一,概述 在现在的管理软件中,一般都会涉及到订单的管理,比如采购订单,采购进货单,销售订单,销售退货订单,库存变动单,采购付款单等等.在这些订单中,都会存在共同的信息.现在就介绍一下一个订单继承等级结 ...

  4. Mark一下 | 当当优惠码,实付满150减30 | + 荐书

    囤书囤书 我们一起阅读经典,紧跟前沿技术不掉队 这次继续给爱读书的你们最大的优惠力度   当当网自营图书大促 >> 每满100减50  << 满200减100 满300减150 ...

  5. 解答篇:金蝶K3WISE-付款单:被关联的订单******的付款关联金额超过最大可钩稽数值

    金蝶K3WISE15.0免费全套图文实例教程 +V信syfpindao进金蝶学习交流群.微信空位不多(备注:金蝶+城市+姓名)) 使用问题 被关联的订单******的付款关联金额超过最大可钩稽数值 如 ...

  6. 58.订单明细实时表和商品、品牌、spu 等维表关联

    2.3.1 关联方式 (1)方法 1:用明细表依次和每个维度表进行关联 ➢ 订单明细和商品关联 order_detail --> sku_id ➢ 订单明细商品宽表和 spu 关联 订单明细宽表 ...

  7. 多对多查询:一个用户创建多个订单,一个订单包含多个订单明细,一个订单明细包含一个商品

    <!-- 多对多查询:一个用户创建多个订单,一个订单包含多个订单明细,一个订单明细包含一个商品 --><resultMap type="com.hbut.po.User&q ...

  8. mybatis使用resultMap实现一对多查询 (需求:查询订单以及订单明细)

    使用resultMap将查询出的订单明细信息映射Order,java的属性中 在Orders.java创建订单明细属性(一个集合对象,一订单对应多个订单明细) public class Orders ...

  9. 2018.06.19 订单明细修改

    -----------------------------2018-06-06 订单明细修改---------------------- 订单明细页面修改 shipping-platform\web\ ...

最新文章

  1. lambda表达式(详)
  2. PM-Summit 2019全球产品经理大会北京站即将开幕!
  3. ubuntu 安装spark
  4. ios调用restful接口_Postman调用https异常解决
  5. electron 入坑记
  6. hdu 1556:Color the ball(第二类树状数组 —— 区间更新,点求和)
  7. SpringBoot 整合 RabbitMQ 实践
  8. Win能ping通win7,但是无法访问共享的解决方法
  9. Python-二分及bisect模块
  10. Background Intelligent Transfer Service 服务错误(BITS服务失败) 的修复解决方案
  11. sqlserver 数据库文件损坏、数据库可疑修复处理
  12. EPUB、CAJ 、PDF 格式的区别,windows上有什么好用的epub阅读器
  13. python自动语音电话_用 Python 实现自己的智能语音助理(百度语音 + 图灵机器人)...
  14. 人工智能粒子群优化和群智能
  15. c语言解决约瑟夫问题,C语言解决约瑟夫问题详解的代码
  16. Java Blend_Expression Blend的替代品[关闭]
  17. 夜曲歌词 拼音_矢野真纪《夜曲》罗马拼音歌词
  18. Java接入支付宝扫码支付
  19. boost哪些库需要编译
  20. 资源分配问题(动态规划)

热门文章

  1. 软件工程——软件设计方法(概要设计)
  2. 人工智能技术的应用领域
  3. STM32F429IGT6 ETH—LwIP 以太网通信——学习笔记5(PHY:LAN8720A)
  4. 干货丨金仓JDBC读写分离介绍和最佳实践
  5. 基于MNIST数据集实现车牌识别--初步演示版
  6. 第二章 记忆游戏卡片
  7. html 清除文字阴影,CSS3文字阴影text-shadow使用详解
  8. 爱普生Epson WorkForce Pro WF-4730 打印机驱动
  9. HTML/ CSS 入门
  10. png在IE6下去除显示阴影的解决办法