1:优惠券的发放
(1)优惠券通过管理后台进行发放
管理人员可以通过系统管理端进行优惠券的管理和发放;
增加优惠券时候可以指定使用范围、折扣类型、推广方式、发放的数量和每人限领数;
使用范围可选择全部产品或者指定范围产品
折扣类型可以选择每满减、满减、无门槛或者折扣
推广方式就是可以选择在用户端进行抢券或者使用兑换码进行兑换优惠券;
(2)兑换券生成:
它不能只是一个简单的字符串,他要满足可读性好、数据量大、具有唯一性、不可重兑、防止被爆刷还要满足高效性;
Base32转码:将任意字符串按照字节进行切分,并将每个字节对应的二进制值(不足8比特高位补0)串联起来,按照5比特一组进行切分,并将每组二进制值转换成十进制来对应32个可打印字符中的一个。
(3)优惠券的发放可以选择优惠券的发放的时间区间、优惠券的使用期限
发放时间的选择有两种:立即发放到规定时间和定时发放
立即发放即开始时间为当前时间到规定时间
定时发放就是开始时间为一个规定时间;
使用期限也分为两种,一种为固定时间端,就是可以选择优惠券的使用区间
一种为固定天数,就是当前时间到到期时间的天数
像定时发放的开始时间、领券的规定时间、固定时间使用优惠券和到期时间这些有时间差的我们都通过 MQ的延迟消息对列进行完成的。
2: 领取优惠券:
在用户端设置了一个专门领取优惠券的窗口,可以不进行登录即可看到可手动领取优惠券,需要领取则需要进行登录;登录后点击领取即可领取,在领取优惠券时由于这个操作是并发执行的,会发生超卖和单人多次领取等现象,这样我们就需要通过加锁保证操作的准确性;
3:使用优惠券
在用户的个人中心可以看到该用户持有的优惠券数量和种类;
在支付时就可以选择可以使用的优惠券,系统也会提供使用优惠券的最佳方法;
在使用优惠券时,我们要对优惠券先进行初步筛选,判断优惠券是否满足使用的门槛,先不关心券的适用范围,把不满足门槛的先筛掉再进行细筛,根据适用范围筛选,然后进行全排列筛选最优解