- 锁写在包含事务的方法里,如果在事务结束之前,提前释放锁,如果释放锁之后的代码抛出异常,则会出现数据不一致的情况。
- 应该
- try{}
- catch{}
- finally{
- //释放锁
- }
- 场景:业务员快速扫码获取成长值,如果没有正确处理事务与锁的关系,最后会导致成长值总和和成长值明细不一致的情况。
-
-
- 成长值升级
- 1.查询是否存在成长值任务 taskId
- 不能taskeventid不能重复(该会员成长任务值已添加,重复提交请求)
- 2.判断周期内最多可以执行多少次任务
- 3.查询会员信息、会员体系
- 4.计算成长值(固定成长值和非固定成长值)
- 5.插入成长值流水
- 6.根据成长值去Grade表查询等级
- 7.如果新的成长值和成长等级和老的成长值和成长等级不同,则
- 失效原来成长值流水记录
- 插入新的成长值流水记录
- 否则:只更新members表的成长值