优惠卷模块
2022-04-25 16:20:04 0 举报
优惠卷模块分析
作者其他创作
大纲/内容
没有过期的优惠卷
判断优惠卷的个数是否相匹配
保存到数据库Redis存一份
手动领取优惠卷
领取优惠卷码,保存数据库,设置到Cache
结束
手动领取的话获取到所有用户可以手动领取的优惠卷模板,过滤掉所有的已经过期的优惠卷模板,返回对应未过期的优惠卷id,获取指定的优惠卷领取数量,创建一个集合把可用的用户手动领取的优惠券储存到里面,进一步过滤掉达到用户领取限制的优惠卷模板,然后获取当前用户对应的优惠卷模板领取优惠卷的数量,进行相关的判断,是否达到限制数量,优惠卷剩余数量,达到数量或者优惠卷剩余数量为0就进行相应的提示不给予用户领取,没达到限制数量就把用户领取到的优惠卷码通过消息队列发送异步消息保存数据添加到数据库中,并往redist中存一份。
异步生成优惠卷生成唯一id
生成优惠卷
结算模块的话,我主要负责的是用户在生成订单后对订单的金额进行优惠,具体的话先获取到订单信息中商品的信息,再通过商品的信息获取到订单中所有商品的id,在根据商品的id获取商品的具体价格,然后在从redis中获取到用户对应的所有优惠卷,并过滤掉已经过期的优惠卷,根据优惠卷的使用规则来判断该商品是否可以优惠,如果可以优惠的话计算一下商品的价格,对所有可优惠的优惠卷进行优惠判断,筛选出最优的优惠方案提供给客户。
存入到数据库存入缓存
移出已过期的可用优惠卷
有对应的优惠卷
查询数据库
从Redis中获取对应用户的优惠卷
优惠卷结算
将数据设置到缓存中
自动领卷
没有优惠卷
返回可用优惠卷
领取优惠卷
获取需要用户手动领取优惠卷的信息
用户领取优惠卷
过滤过期优惠卷
没有数据
结算
获取到用户领取的优惠卷
遍历相应个数存入集合
手动领取
判断有没有达到限领张数
过滤过期的优惠卷
用户进入到活动页
系统自动分发的话先获取到所有的系统分发的优惠卷模板,根据状态码筛选掉所有的已经过期的优惠卷模板,返回未过期的优惠卷模板id,然后获取用户领取指定优惠卷领取的数量,然后查询一下用户已经领取的优惠卷,根据用户已经领取到的优惠卷的id,判断是否有相对应的优惠卷,有的话先获取对应优惠卷模板限制领取的数量来进行判断是否达到领取的限制,如果达到领取的限制的话,做一些相对应的处理,返回给用户已经领取过该优惠卷的提示,如果用户没有领取过该优惠卷的话,先查询一下优惠卷剩余的数量,如果优惠卷数量也就是集合里面的元素为0的话,也需要为用户提供相对应的优惠券发完了提示信息,否则容易获取空数据,如果能领取到,那就添加对应优惠卷模板的优惠卷码存入到用户信息中,在redis缓存中添加对应的优惠卷码,将用户领取对应的优惠券数量+1,
返回
查询可用优惠卷
自动领取优惠卷
判断,限制用户领取数量
生成订单
获取系统分发的优惠卷
在Redis中插入空的优惠卷,并返回空的集合
获取优惠卷模板
判断最优的优惠价格
能否领取(优惠卷有没有被领完)
判断用户是否超过先领次数
获取订单id,价格
开启二级缓存
检查优惠卷是否过期
再次判断
筛选是否有过期数据
获取用户可领优惠卷
从Redis中获取
存入数据库Redis存入一份
这里的话因为需要异步生成优惠卷码,在优惠卷模板生成的同时也生成对应的优惠卷码,可以减少程序响应的时间,为了防止重复优惠券码的生成,我们是获取到开始的时间,优惠卷码的数量,优惠卷码相对于种类的前缀以及优惠卷模板的id还有雪花算法来生成的,根据优惠卷的个数开始遍历生成不同的优惠卷码,当生产完毕后判断一下生成优惠卷的个数,由于优惠卷码是存放在set集合中的,存在生成相同的优惠卷码无法存入集合中,再次判断一下集合元素的个数如果小于要生成优惠卷码的总个数的话,再次遍历生成相对应个数优惠卷码添加到集合,再次进行判断,把生成所有的优惠券码存入到数据库中,并在redis中存一份,然后开启二级缓存,提高对sql的查询效率,优惠卷码生成完成后返回对应的提示信息给运营人员
0 条评论
下一页