营销项目--6. 抽奖中规则过滤
问题背景
刺激用户的抽奖欲望:当用户抽奖次数到一定值时才会解锁新的奖品。eg: 一个用户前3次抽奖只能抽到1-6号奖品,第4次开始就解锁了更好的奖品。第7次又会解锁更好的奖品。这样就可以更快速的消耗用户积分
所以在上一节DefaultLogicFactory
已经实现了黑名单过滤规则和权重范围过滤规则的基础上,再实现次数过滤:即任何一个奖品配置抽奖n次后才能解锁的操作 rule_lock
开发流程
- 实现
RuleLockLogicFilter
, 主要是过滤用户抽奖次数和奖品对应的rule_value
就行比对,如果小于,就接管,如果大于就放行 - 增加了
StrategyAwardRuleModelVO
作为仓库查询对应的奖品规则返回值 - 补充
AbstractRaffleStrategy
的抽奖一般流程,补充抽奖中的规则过滤 - 增加了
doCheckRaffleCenterLogic
方法
RuleLockLogicFilter
RuleLockLogicFilter
实现了一个抽奖前的过滤规则,名为 “次数锁规则”。该规则的目的是,当用户的抽奖次数达到某个设定值后,才会解锁更好的奖品,这样可以激励用户更快消耗积分。这种逻辑通过 rule_lock
规则实现。
- 通过仓储查询到当前策略和抽到的奖品对应的
rule_lock
的rule_value
。得到的raffleCount
是用户需要达到的抽奖次数,才能解锁这个奖品 - 如果用户抽奖次数大于
raffleCount
,放行 - 反之拦截
StrategyAwardRuleModelVO
值对象VO,Value Object
, 存储ruleModel
, 并提供raffleCenterRuleModelList
和raffkeAfterRuleModelList
用来过滤抽奖不同阶段的规则
StrategyAwardRuleModelVO
的作用是将原始的策略规则字符串转换为系统可以使用的规则集合,按阶段(如抽奖前、抽奖中、抽奖后)进行分类和筛选。- 它为抽奖流程中的不同阶段提供了规则支持,确保每个阶段使用正确的规则来处理用户行为。
AbstractRaffleStrategy
- 拿到奖品id后,通过
queryStrategyAwardRuleModelVO
查询对应奖品的规则`rule_Model - 将
rule_model
中是抽奖中的字段筛选出来rule_lock
,并作为doCheckRaffleCenterLogic
的入参。 抽奖过程中,会检查抽奖中的规则(例如解锁次数),如果用户的抽奖次数小于设定值,会触发“幸运奖”或其他的兜底奖品策略。 - 如果通过了所有规则过滤,则返回最终的奖品信息。
改bug
1.在DefaultRaffleStrategy的doCheckRaffleBeforeLogic,增加检查logics是否为空的逻辑,因为当策略的ruleModel为空时,这里会发生空指针
2.在strategyEntity的getRuleWeight增加了判断ruleModel为空的逻辑,同上
- 在assembleLotteryStrategy修改了这个:repository.storeStrategyAwardRateSearchTable(key, new BigDecimal(shuffleStrategyAwardRateSearchTable.size()), shuffleStrategyAwardRateSearchTable); 这样就可以保证抽出来的奖品不为空,但是不知道为什么
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Priska's blog!