假设买家购买了3件商品(1个SKU,即同种商品),商品的销售价是10元,商品总金额是30元
买家应付金额是 30 元,买家使用5个金币抵扣5元,买家实付金额是 25 元。
后来买家退货 2 件,怎么退款和退币呢?
要将金币分摊到每件商品上,计算每件商品的实付金额(即实际售价)。
5 ➗ 3 = 1 余 2,那么其中两件商品分摊 1 个金币,其中一件商品分摊 3 个金币(1+2=3)
计算每件商品分摊的金币数,要分三种情况: 1.被除数大于除数(即商数>1时,即金币总数大于商品总数),余数>0 时,其中一件商品分摊的金币数=商数+余数,其它商品分摊的金币数=商数 2.被除数等于除数,每件商品分摊的金币数=商数,其实就是1个币 3.被除数小于除数,除数-被除数=没有分摊金币的商品数,其余的商品均摊1个币
1件商品的实付金额 = 销售单价 - 金币抵扣金额 1件商品的应付金额 = 商品的销售单价
商品1:分摊金币 3 个,实付金额 10-3=7 商品2:分摊金币 1 个,实付金额 10-1=9 商品3:分摊金币 1 个,实付金额 10-1=9
将分摊金币最多的商品+另外两件均摊金币的其中一件商品作为买家实际的退货商品,再计算应该返还多少金币和多少现金。
返还金币= 两件退货商品分摊金币的和=3+1=4 返还现金=两件退货商品的实付金额的和=7+9=16
退货成功后,最后返还给买家金币 4个,现金 16 元。
这个SKU再次退货时,就要计算剩余可退的金币,剩余可退的商品数量,再计算每个商品分摊的金币,再计算每个商品实付金额,从而最终计算得到要返还给买家多少个金币和多少现金。建议把剩余可退的金币,剩余可退金额,剩余可退数量记录在子单上,用户下次退货时直接取值做判断或下一步的计算,从而提高程序的运算效率。
退还有偿优惠券1.无偿优惠券 在订单未付款时取消订单,可以退还无偿的优惠券,下单付款前,优惠券状态为“被冻结”,取消订单后,状态置为“未使用”,付款后优惠券的状态置为“已使用”,付款后无偿优惠券不退还 2.有偿优惠券 在订单未付款时取消订单,可以退还有偿的优惠券,下单付款前,优惠券状态为“被冻结”,取消订单后,状态置为“未使用”,付款后优惠券的状态置为“已使用”,付款后有偿优惠券的面额换算成金币退还
这里涉及到几个非常重要的实体设计,具体参见《SaaS电商系统的销售订单设计》。