当前位置: 首页> 游戏> 评测 > 商丘网红楼_深圳市中心在哪里最繁华_seo公司上海牛巨微_软文标题大全

商丘网红楼_深圳市中心在哪里最繁华_seo公司上海牛巨微_软文标题大全

时间:2025/7/12 0:05:37来源:https://blog.csdn.net/qq_55209223/article/details/147521964 浏览次数:0次
商丘网红楼_深圳市中心在哪里最繁华_seo公司上海牛巨微_软文标题大全

UserCouponServiceImpl

 /*** 兑换码兑换优惠券* @param code*/@Transactional@Overridepublic void exchangeCoupon(String code) {//1、校验code是否为空if (StringUtils.isBlank(code)) {throw new BadRequestException("非法参数!");}//2、解析兑换码,得到自增idlong serialNum = CodeUtil.parseCode(code); //获取自增id//3、判断兑换码是否已兑换,采用redis的bitMap命令  setbit key offset value=1  如果方法返回true,则说明该兑换码已兑换boolean result = exchangeCodeService.updateExchangeCodeMark(serialNum, true);if (result) {//说明兑换码已经被兑换throw new BizIllegalException("该兑换码已被兑换!");}try {//4、判断兑换码是否存在,根据自增id 查询兑换码信息ExchangeCode exchangeCode = exchangeCodeService.getById(serialNum);if (exchangeCode == null) {throw new BizIllegalException("该兑换码不存在!");}//5、判断是否过期if (LocalDateTime.now().isAfter(exchangeCode.getExpiredTime())) {throw new BizIllegalException("该兑换码已过期!");}//校验并生成用户券Long userId = UserContext.getUser();//查询优惠券信息Coupon coupon = couponMapper.selectById(exchangeCode.getExchangeTargetId());if (coupon == null) {throw new BizIllegalException("该优惠券不存在!");}//6、判断是否超出限领的数量//7、优惠券已发放数量+1//8、生成用户券//9、更新兑换码的状态synchronized (userId.toString().intern()) {//从AOP上下文中,获取当前类代理对象IUserCouponService userCouponServiceProxy = (IUserCouponService) AopContext.currentProxy();//checkAndCreateUserCoupon(userId, coupon, serialNum);//这种写法是调用原对象的方法userCouponServiceProxy.checkAndCreateUserCoupon(userId, coupon, serialNum); //这种写法是调用代理对象方法,方法是有事务处理的}} catch (Exception e) {//10、将兑换码的状态重置exchangeCodeService.updateExchangeCodeMark(serialNum, false);throw e;}}

只需要在调用checkAndCreateUserCoupon时加上悲观锁处理方式,以及处理事务失效即可,更改代码如下:

synchronized (userId.toString().intern()) {
//从AOP上下文中,获取当前类代理对象
IUserCouponService userCouponServiceProxy = (IUserCouponService) AopContext.currentProxy();
//checkAndCreateUserCoupon(userId, coupon, serialNum);//这种写法是调用原对象的方法
userCouponServiceProxy.checkAndCreateUserCoupon(userId, coupon, serialNum); //这种写法是调用代理对象方法,方法是有事务处理的
}

关键字:商丘网红楼_深圳市中心在哪里最繁华_seo公司上海牛巨微_软文标题大全

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: