一、优惠券核销
优惠券核销主要在订单提交时进行,需要进行以下三个方面的判定和计算:
- 可用判定:判定订单的时间、商品、金额等维度是否符合优惠券的要求。一般在进入确定订单页面时,即进行相关校验。
- 抵扣计算:优惠券在订单中实际抵扣的金额计算,主要涉及到与其他优惠活动,或者积分等叠加计算规则。一般在选择优惠券后进行计算。
- 优惠金额分摊:将实际的抵扣金额,按比例分摊至适用范围内的每个商品。主要用于售后退款以及销售数据计算。
1. 可用判定
可用判定指优惠券对于订单是否可用,主要进行以下两个校验:
- 优惠券是否可用。即优惠券是否在未使用状态,且当前时间在优惠券有效期内;
- 订单中适用优惠券的商品是否在优惠券的范围内,适用范围内的商品是否达到满额要求。
一般在进入确定订单页面前,会对用户持有的所有优惠券进行如上两个校验。并在确定订单页面进行显示。参考下图淘宝和饿了么确定订单页面:
左图为淘宝确定订单页面,右图为饿了么确定订单页面,两者均在进入确定订单页面前校验了可用优惠券。不同之处在于,淘宝中默认选中了适用的最大金额优惠券,饿了么仅做了可用优惠券提示,并未直接选中。
2. 抵扣计算
大多数情况下,优惠券的抵扣计算都是比较简单的。以满减券为例,大多数场景,适用商品总金额减去抵扣金额,不可小于0即可。
在优惠券可用的基础上,假设m=订单中优惠券范围内商品总价,n=优惠券的抵扣额度。
则:实际抵扣金额=min(m,n);
举例:用户持有全场无门槛100元优惠券,商品A每件40元,用户使用优惠券购买两件A,则优惠券实际抵扣金额为80元。
更为复杂的场景为和其他促销活动叠加生效时,对于订单金额和优惠券抵扣金额的计算。
举例:
A商品销售价40,B商品销售价100,C商品销售价80;
用户持有双11优惠券适用于A,B的优惠券,无门槛300元优惠券;
B商品每件最高可使用积分以10:1的比例抵扣60元,C商品最高可抵扣50元;
商城营销活动:双11前30分钟A,C商品首件半价;
用户在双11前30分钟购买3件A,1件B,2件C时,最高可使用多少积分?优惠券实际抵扣金额为多少?订单最终需要支付多少金额?
要解决以上问题,需要对促销活动进行分层,可按如下方式进行分层:
优惠券和其他促销活动按照层级依次进行计算。以后有机会针对促销活动进行详述,此处不再展开。
3. 优惠券金额分摊
优惠券金额分摊指将订单层面的优惠券抵扣金额,按照商品价格比例分摊到各个商品。主要用于计算商品的实付金额,用于售后退款和数据统计。
优惠券金额分摊的原则是:在适用范围内,按照折后价格进行按比例分摊。
优惠券金额分摊是比抵扣计算更加复杂的过程。仅从优惠券层面分摊,假设商品1单价为m,订单中优惠券范围内商品总价为n,优惠券实际抵扣金额为x,则:
一件商品1的分摊优惠券抵扣金额y=(m/n)*x。
值得注意的是:对于分摊时小数点取整时,需要在保持总值不变的情况下进行大入小舍,单纯进行四舍五入会产生误差。
举例:
商品A和B,均为10元,优惠券为满20减11.11,则按照分摊计算方式,
A和B的抵扣金额均y=(10/20)*11.11=5.555
如果单纯进行分位的四舍五入到5.56,会导致分摊后的优惠券之和大于订单优惠券抵扣额度。此种情况一般的处理方式为,随机A和B其中一个进1,一个舍掉,保证能够总账能够对应。
二、优惠券前端设计
前端设计仅做简述参考,主要涉及到券包和抵扣页面和消息通知。
1. 我的优惠券
上图为一种较为简洁的设计方式,适用于优惠券数量相对较少的情况,比较清晰明了。
2. 抵扣过程
确定订单页面自动选中最大可抵扣优惠券,用户也可以重新选择其他优惠券,或不使用优惠券。
3. 推送通知
推送通知主要起到提醒用户的作用,优惠券相关的提醒场景有两个:
- 新优惠券。用户获得系统发放的优惠券时,进行通知提醒;
- 过期提醒。优惠券即将过期时,进行提醒使用。
小结
核销是优惠券生命周期的重要一环,与订单关系密切,同时与其他促销活动也有着复杂的关联。
原文地址:https://www.cnblogs.com/chuangye95/p/10170416.html