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