金额拆分需求说明
拆分公式
拆分到SKU上的优惠金额= 优惠金额 * (SKU售价/ 所有SKU售价)
sku售价是指:上一个优惠后的金额,比如A商品原价100元,单品立减减10元,之后有参与满减,那么参与满减的金额为90元(100-10)
拆分逻辑
- 先对SKU的售价乘数量进行排序,如果Am < Bn,则skuA先进行拆分。
- 拆分满减券(X元)在skuA上面享受的优惠。公式为S1 = X A m / (A m + B n)。此时注意是先优惠金额乘SKU的金额,再除以SKU总金额。为什么是先乘再除呢?反过来先除再乘是否可以?是不可以的,因为这样会有丢失精度的问题,也是为了保证所有系统数据的一致性。
- 拆分满减券(X元)在skuB上面享受的优惠。公式为S2 = X - S1。其他的订单级别优惠采用类似的方式。(补差)
精度要求
- 小数点保留2位,四舍五入
- 最后sku的计算要用补差法,保证总和平衡
举例
商品 | 单价 | 数量 |
---|---|---|
A | 6 | 10 |
B | 4 | 10 |
优惠活动1
满100减10元,A、B都适用
退款金额
商品 | 优惠分摊(总计) | 实付 | 退款(单价) | 全部退款 |
---|---|---|---|---|
A | 6 | 60-6=54 | (54/购买数量)*退货数量 | 54 |
B | 4 | 40-4=36 | (36/购买数量)*退货数量 | 36 |
全部退款退实付
优惠活动2
满50减10元,A适用