From 20983e788f1635ebee477569fe7394eec5c0e423 Mon Sep 17 00:00:00 2001
From: gongzuming <gongzuming>
Date: 星期三, 11 九月 2024 08:30:48 +0800
Subject: [PATCH] 优化
---
src/main/java/com/mzl/flower/service/impl/coupon/CouponTemplateServiceImpl2.java | 90 ++++++++++++++++++++++++++------------------
1 files changed, 53 insertions(+), 37 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..f5d61b6 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;
@@ -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