From c1ff1058eeb0067c224ee53e1dc61ace051375c8 Mon Sep 17 00:00:00 2001 From: 陶杰 <1378534974@qq.com> Date: 星期三, 11 九月 2024 17:14:02 +0800 Subject: [PATCH] 1.异常抛出信息修改 --- src/main/java/com/mzl/flower/service/impl/coupon/CouponTemplateServiceImpl2.java | 92 +++++++++++++++++++++++++++------------------- 1 files changed, 54 insertions(+), 38 deletions(-) diff --git a/src/main/java/com/mzl/flower/service/impl/coupon/CouponTemplateServiceImpl2.java b/src/main/java/com/mzl/flower/service/impl/coupon/CouponTemplateServiceImpl2.java index dd40bfd..4c11832 100644 --- a/src/main/java/com/mzl/flower/service/impl/coupon/CouponTemplateServiceImpl2.java +++ b/src/main/java/com/mzl/flower/service/impl/coupon/CouponTemplateServiceImpl2.java @@ -29,6 +29,7 @@ import com.mzl.flower.service.coupon.CouponTemplateCustomerService; import com.mzl.flower.service.coupon.CouponTemplateService2; import com.mzl.flower.service.menber.MemberService; +import com.mzl.flower.service.payment.RedisLockService; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; @@ -77,6 +78,9 @@ @Autowired private MemberService memberService; + + @Autowired + private RedisLockService lockService; @@ -237,7 +241,7 @@ // 根据发放后有效期来设置时间 if (couponTemplateDO.getUsageTimeNum() == null || couponTemplateDO.getUsageTimeNum() <= 0) { - throw new IllegalArgumentException("使用时间数量必须为正整数"); + throw new ValidationException("使用时间数量必须为正整数"); } LocalDateTime currentTime = LocalDateTime.now(); couponTemplateDO.setUsageStartDate(currentTime); @@ -393,46 +397,58 @@ } @Override - public synchronized void exchangeCoupon(ExchangeCouponDTO dto) { - dto.setNum(1); + public void exchangeCoupon(ExchangeCouponDTO dto) { - final CouponTemplateDO couponTemplateDO = couponTemplateService.getById(dto.getCouponId()); - if(couponTemplateDO==null){ - throw new ValidationException("优惠券不存在"); + String key="EXCHANGE_COUPON:"+dto.getCouponId()+":"+SecurityUtils.getUserId(); + boolean lock = lockService.getObjectLock(key, ""); + if(!lock){ + throw new ValidationException("系统操作频繁,请稍后重试"); + } + try { + dto.setNum(1); + final CouponTemplateDO couponTemplateDO = couponTemplateService.getById(dto.getCouponId()); + if(couponTemplateDO==null){ + throw new ValidationException("优惠券不存在"); + } + + CustomerPoint cp = customerPointMapper.selectOne(new LambdaQueryWrapper<CustomerPoint>() + .eq(CustomerPoint::getUserId, SecurityUtils.getUserId())); + if(cp == null || (cp.getTotalPoint()-cp.getUsedPoint()-cp.getExpiredPoint()- cp.getExpiredPoint()) < couponTemplateDO.getPoint() * dto.getNum()){ + throw new ValidationException("积分不足"); + } + + CreateCouponRecordDTO recordDTO =new CreateCouponRecordDTO(); + recordDTO.setCouponId(dto.getCouponId()); + recordDTO.setUserId(SecurityUtils.getUserId()); + Customer customer = customerMapper.selectOne(new LambdaQueryWrapper<Customer>() + .eq(Customer::getUserId, SecurityUtils.getUserId())); + if(customer == null){ + throw new ValidationException("商户不存在"); + } + recordDTO.setCustomerId(customer.getId()); + couponRecordService.createCouponRecord(recordDTO); + + //更新积分汇总 + cp.setUsedPoint(cp.getUsedPoint()+couponTemplateDO.getPoint()); + customerPointMapper.updateById(cp); + + //记录积分明细 + CustomerPointDetail detail = new CustomerPointDetail(); + detail.setUserId(customer.getUserId()); + detail.setCustomerId(customer.getId()); + detail.setPoint(couponTemplateDO.getPoint()); + detail.setChangeType(Constants.POINT_CHANGE_TYPE.reduce.name()); + detail.setType(Constants.POINT_TYPE.exchange.name()); + detail.setRecordDate(LocalDate.now()); + detail.setRemarks(couponTemplateDO.getCouponName()); + detail.create(SecurityUtils.getUserId()); + customerPointDetailMapper.insert(detail); + }catch (Exception e){ + throw new ValidationException("兑换失败"); + }finally { + lockService.releaseObjectLock(key,""); } - CustomerPoint cp = customerPointMapper.selectOne(new LambdaQueryWrapper<CustomerPoint>() - .eq(CustomerPoint::getUserId, SecurityUtils.getUserId())); - if(cp == null || (cp.getTotalPoint()-cp.getUsedPoint()-cp.getExpiredPoint()) < couponTemplateDO.getPoint() * dto.getNum()){ - throw new ValidationException("积分不足"); - } - - CreateCouponRecordDTO recordDTO =new CreateCouponRecordDTO(); - recordDTO.setCouponId(dto.getCouponId()); - recordDTO.setUserId(SecurityUtils.getUserId()); - Customer customer = customerMapper.selectOne(new LambdaQueryWrapper<Customer>() - .eq(Customer::getUserId, SecurityUtils.getUserId())); - if(customer == null){ - throw new ValidationException("商户不存在"); - } - recordDTO.setCustomerId(customer.getId()); - couponRecordService.createCouponRecord(recordDTO); - - //更新积分汇总 - cp.setUsedPoint(cp.getUsedPoint()+couponTemplateDO.getPoint()); - customerPointMapper.updateById(cp); - - //记录积分明细 - CustomerPointDetail detail = new CustomerPointDetail(); - detail.setUserId(customer.getUserId()); - detail.setCustomerId(customer.getId()); - detail.setPoint(couponTemplateDO.getPoint()); - detail.setChangeType(Constants.POINT_CHANGE_TYPE.reduce.name()); - detail.setType(Constants.POINT_TYPE.exchange.name()); - detail.setRecordDate(LocalDate.now()); - detail.setRemarks(couponTemplateDO.getCouponName()); - detail.create(SecurityUtils.getUserId()); - customerPointDetailMapper.insert(detail); } @Override -- Gitblit v1.9.3