From 336b30aa1c28e2ff824e9ddf4dca08e4fd3138c3 Mon Sep 17 00:00:00 2001
From: peng <peng.com>
Date: 星期一, 15 九月 2025 14:00:20 +0800
Subject: [PATCH] 调整领取逻辑

---
 framework/src/main/java/cn/lili/modules/lmk/service/impl/CouponVirtualServiceImpl.java |   31 ++++++++++++++++++++++++++++---
 1 files changed, 28 insertions(+), 3 deletions(-)

diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/CouponVirtualServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/CouponVirtualServiceImpl.java
index b9d97a4..72fb330 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/service/impl/CouponVirtualServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/CouponVirtualServiceImpl.java
@@ -4,10 +4,12 @@
 import cn.lili.common.exception.ServiceException;
 import cn.lili.common.security.AuthUser;
 import cn.lili.common.security.context.UserContext;
+import cn.lili.modules.goods.service.GoodsService;
 import cn.lili.modules.lmk.domain.entity.CouponVirtual;
 import cn.lili.modules.lmk.domain.form.CouponVirtualForm;
 import cn.lili.modules.lmk.domain.query.CouponVirtualQuery;
 import cn.lili.modules.lmk.domain.vo.CouponVirtualVO;
+import cn.lili.modules.lmk.domain.vo.CouponVirtualVOInfo;
 import cn.lili.modules.lmk.mapper.CouponVirtualMapper;
 import cn.lili.modules.lmk.service.CouponVirtualService;
 import cn.lili.modules.order.order.entity.dos.Order;
@@ -19,6 +21,7 @@
 import cn.lili.modules.order.order.service.OrderItemService;
 import cn.lili.modules.order.order.service.OrderService;
 import cn.lili.modules.promotion.service.MemberCouponService;
+import cn.lili.utils.COSUtil;
 import cn.lili.utils.PageUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -62,6 +65,10 @@
     private final OrderService orderService;
 
     private final MemberCouponService memberCouponService;
+
+    private final GoodsService goodsService;
+
+    private final COSUtil cosUtil;
     /**
      * 娣诲姞
      *
@@ -126,6 +133,12 @@
     public Result page(CouponVirtualQuery query) {
         IPage<CouponVirtualVO> page = PageUtil.getPage(query, CouponVirtualVO.class);
         baseMapper.getPage(page, query);
+        for (CouponVirtualVO record : page.getRecords()) {
+            String original = record.getOriginal();
+            if (StringUtils.isNotBlank(original) && !original.contains("http")) {
+                record.setOriginal(cosUtil.getPreviewUrl(original));
+            }
+        }
         return Result.ok().data(page.getRecords()).total(page.getTotal());
     }
 
@@ -169,8 +182,12 @@
         RLock lock = null;
         try {
             lock = redissonClient.getLock(LOCK_COUPON_VIRTUAL_CARD_ID + cardId);
+            lock.lock();
             LambdaQueryWrapper<CouponVirtual> forUpdate = Wrappers.<CouponVirtual>lambdaQuery().eq(CouponVirtual::getId, cardId).last("FOR UPDATE");
             CouponVirtual cardInfo = this.getOne(forUpdate);
+            if (cardInfo == null) {
+                throw new ServiceException("褰撳墠浼樻儬鍗蜂笉瀛樺湪");
+            }
             if (ClaimStatusEnum.CLAIM.name().equals(cardInfo.getClaimStatus())) {
                 throw new ServiceException("褰撳墠璐墿鍗″凡缁忚棰嗗彇");
             }
@@ -203,6 +220,7 @@
             cardInfo.setUserNickname(nickName);
             cardInfo.setUserId(userId);
             cardInfo.setClaimStatus(ClaimStatusEnum.CLAIM.name());
+            cardInfo.setShareStatus(ShareStatusEnum.SHARE.name());
             cardInfo.setClaimTime(new Date());
             boolean b = this.updateById(cardInfo);
             //鍘婚鍙栦紭鎯犲嵎
@@ -211,8 +229,7 @@
             }
             return Result.ok().data(cardInfo.getCouponId());
         } finally {
-            assert lock != null;
-            if (lock.isHeldByCurrentThread()) {
+            if ( lock != null && lock.isHeldByCurrentThread()) {
                 lock.unlock();
             }
         }
@@ -232,6 +249,14 @@
         if (couponVirtual == null) {
             throw new ServiceException("褰撳墠璐墿鍗′笉瀛樺湪");
         }
-        return Result.ok().data(couponVirtual);
+        CouponVirtualVOInfo virtualVOInfo = new CouponVirtualVOInfo();
+        BeanUtils.copyProperties(couponVirtual, virtualVOInfo);
+
+        String goodsId = virtualVOInfo.getGoodsId();
+        String url = goodsService.getById(goodsId).getOriginal();
+        if (StringUtils.isNotBlank(url) && !url.contains("http")) {
+            virtualVOInfo.setGoodsUrl(cosUtil.getPreviewUrl(url));
+        }
+        return Result.ok().data(virtualVOInfo);
     }
 }

--
Gitblit v1.8.0