商品退款价格的计算方案 # 背景 项目以前的订单退款是跟着订单走,即不管订单里有多少个商品,一旦退款后,订单整个退款。这种模式随着业务的不断扩大已经逐渐不在适用。需要更改为退款跟着订单某个商品退款,即现在淘宝退款的这种模式。 # 经过 淘宝退款的模式网上大量方案解析,包含各种的数据库方案。 本文主要记录在订单使用优惠券,后台改价,优惠方案等情况下,如何记录每个子商品最多可退款的金额。 举个例子 > 订单总价100元,包含A,B两个商品,其中A 60元,B 40元,使用优惠券20 (100-20),订单实付80。当用户希望A退款时,此时需要计算A商品最多可退多少钱,反正肯定不可能退60。 # 解决方案 - 假设商品A(60元),B(40元),假设用户下单同时购买A,B。使用优惠券20,实付80元。 此时用户希望退款商品A,问A最多可退多少钱?优惠券退不退? > 答:退款商品采用等比例原则,可退余额 = 单价 x 实付款 / 订单总价。依照公式可得A商品可退余额 = 60 * 80 / 100 = 48元。此 时A商品最多可退48元。 优惠券用于整体订单,除非所有商品退款,否则优惠券不退。 - 假设商品A(60元),B(40元),假设用户下单同时购买A,B。使用优惠券20,客服改价为60元,实付60元。 此时用户希望退款商品A,问A最多可退多少钱? > 答:退款商品采用等比例原则,可退余额 = 单价 x 实付款 / 订单总价。依照公式可得A商品可退余额 = 60 * 60 / 100 = 36元。此 时A商品最多可退36元。 - 订单如果只有一个商品退款,流程怎么走? > 答:只要订单有一个商品未退款,订单流程按正常走。 - 订单所有商品都退款了,流程怎么走? > 答:订单所有商品退款后,订单关闭,并返回客户使用的优惠券,但原则上不累加优惠券可用时长。 - 关于退款中运费的退款方案 假设商品A(60元),B(40元),假设用户下单同时购买A,B。使用优惠券满100-20,累计运费20元(优惠券不可抵用运费,A商品运费15,B商品运费5),客户实付100。 当A商品发生退款时,A商品最多可退多少? > 答:当退款时,需要判断当前订单处在什么状态。 如订单为未发货状态,A商品最多可退金额为48元+15元运费 = 63元。 如订单为已发货状态,A商品最多可退金额为48元,运费不退。 当然现实中的退款会根据自己的业务做出调整,如运费支持到付,当前商品价格为0,使用公式时出现除数为0等情况,需要灵活判断。