From 4f6bdfb31697377020126710bdbd500a363ba278 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期一, 08 九月 2025 13:41:13 +0800
Subject: [PATCH] 定时任务,优惠卷领取状态

---
 buyer-api/src/main/java/cn/lili/controller/promotion/CouponBuyerController.java |   82 +++++++++++++++++++++++++++++++++++++----
 1 files changed, 74 insertions(+), 8 deletions(-)

diff --git a/buyer-api/src/main/java/cn/lili/controller/promotion/CouponBuyerController.java b/buyer-api/src/main/java/cn/lili/controller/promotion/CouponBuyerController.java
index a6d4674..e9b092e 100644
--- a/buyer-api/src/main/java/cn/lili/controller/promotion/CouponBuyerController.java
+++ b/buyer-api/src/main/java/cn/lili/controller/promotion/CouponBuyerController.java
@@ -6,6 +6,7 @@
 import cn.lili.common.security.context.UserContext;
 import cn.lili.common.vo.PageVO;
 import cn.lili.common.vo.ResultMessage;
+import cn.lili.modules.promotion.entity.dos.Coupon;
 import cn.lili.modules.promotion.entity.dos.MemberCoupon;
 import cn.lili.modules.promotion.entity.dto.CouponActivityTrigger;
 import cn.lili.modules.promotion.entity.dto.search.CouponSearchParams;
@@ -18,10 +19,13 @@
 import cn.lili.modules.promotion.service.CouponService;
 import cn.lili.modules.promotion.service.MemberCouponService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -86,22 +90,62 @@
     @GetMapping
     @ApiOperation(value = "鑾峰彇鍙鍙栦紭鎯犲埜鍒楄〃")
     public ResultMessage<IPage<CouponVO>> getCouponList(CouponSearchParams queryParam, PageVO page) {
-        System.out.println("------------------------------------");
         System.out.println(queryParam);
         queryParam.setPromotionStatus(PromotionsStatusEnum.START.name());
         queryParam.setGetType(CouponGetEnum.FREE.name());
-        IPage<CouponVO> canUseCoupons = couponService.pageVOFindAll(queryParam, page);
+        // 鏌ヨ鍘熷鍒嗛〉鏁版嵁
+        IPage<CouponVO> originalPage = couponService.pageVOFindAll(queryParam, page);
+        List<CouponVO> originalRecords = originalPage.getRecords();
 
-        List<CouponVO> list = canUseCoupons.getRecords();
-        couponService.getUserCouponsStatus(list);
-        //鏇村叿鐢ㄦ埛id
-        return ResultUtil.data(canUseCoupons);
+//        // 鑾峰彇鐢ㄦ埛浼樻儬鍒哥姸鎬�
+//        couponService.getUserCouponsStatus(originalRecords);
+
+        //
+        originalRecords.forEach(couponVO -> {
+            couponVO.setOwned(Boolean.FALSE);
+            // 鍙戣鏁伴噺涓�0琛ㄧず涓嶉檺鍒讹紝鍙鏌ョ敤鎴烽鍙栭檺鍒�
+            if (couponVO.getPublishNum() == 0) {
+                 if(shouldRemoveCoupon(couponVO)){
+                     couponVO.setOwned(Boolean.TRUE);
+                 }
+
+            } else {
+                // 璁$畻鍓╀綑鏁伴噺
+                int residueNum = couponVO.getPublishNum() - couponVO.getReceivedNum();
+                // 鍓╀綑鏁伴噺涓�0鎴栫敤鎴疯揪鍒伴鍙栭檺鍒讹紝閮介渶瑕佸垹闄�
+                 if(residueNum == 0 || shouldRemoveCoupon(couponVO)){
+                     couponVO.setOwned(Boolean.TRUE);
+                 }
+            }
+        });
+
+
+
+        return ResultUtil.data(originalPage);
+    }
+
+    /**
+     * 鍒ゆ柇鏄惁闇�瑕佹爣璁颁紭鎯犲埜涓嶅彲棰嗗彇
+     * 鐢ㄦ埛棰嗗彇鏁伴噺杈惧埌闄愬埗鏃惰繑鍥瀟rue
+     */
+    private boolean shouldRemoveCoupon(CouponVO couponVO) {
+        if (couponVO == null || couponVO.getCouponLimitNum() == null) {
+            return false;
+        }
+
+        Long userCouponCount = couponService.getCouponsCountByIdAndMemberId(couponVO.getId());
+
+        if (userCouponCount == null) {
+            return false;
+        }
+
+        // 鐢ㄦ埛棰嗗彇鏁伴噺 >= 闄愬埗鏁伴噺鏃讹紝闇�瑕佺Щ闄�
+        return userCouponCount >= couponVO.getCouponLimitNum();
     }
 
     @ApiOperation(value = "鑾峰彇褰撳墠浼氬憳鐨勪紭鎯犲埜鍒楄〃")
     @GetMapping("/getCoupons")
     public ResultMessage<IPage<MemberCoupon>> getCoupons(MemberCouponSearchParams param, PageVO pageVo) {
-        System.out.println("------------------------------------");
         System.out.println(param);
         AuthUser currentUser = Objects.requireNonNull(UserContext.getCurrentUser());
         param.setMemberId(currentUser.getId());
@@ -129,8 +173,30 @@
     @GetMapping("/receive/{couponId}")
     public ResultMessage<Object> receiveCoupon(@NotNull(message = "浼樻儬鍒窱D涓嶈兘涓虹┖") @PathVariable("couponId") String couponId) {
         AuthUser currentUser = Objects.requireNonNull(UserContext.getCurrentUser());
+        //鍦ㄨ繖閲屽垽鏂鍙�
         memberCouponService.receiveBuyerCoupon(couponId, currentUser.getId(), currentUser.getNickName());
-        return ResultUtil.success();
+
+        Coupon coupon = couponService.getById(couponId);
+        CouponVO couponVO = new CouponVO();
+        BeanUtils.copyProperties(coupon,couponVO);
+        System.out.println(couponVO);
+        couponVO.setOwned(Boolean.FALSE);
+        // 鍙戣鏁伴噺涓�0琛ㄧず涓嶉檺鍒讹紝鍙鏌ョ敤鎴烽鍙栭檺鍒�
+        if (couponVO.getPublishNum() == 0) {
+            if(shouldRemoveCoupon(couponVO)){
+                couponVO.setOwned(Boolean.TRUE);
+            }
+
+        } else {
+            // 璁$畻鍓╀綑鏁伴噺
+            int residueNum = couponVO.getPublishNum() - couponVO.getReceivedNum();
+            // 鍓╀綑鏁伴噺涓�0鎴栫敤鎴疯揪鍒伴鍙栭檺鍒讹紝閮介渶瑕佸垹闄�
+            if(residueNum == 0 || shouldRemoveCoupon(couponVO)){
+                couponVO.setOwned(Boolean.TRUE);
+            }
+        }
+
+        return ResultUtil.data(couponVO);
     }
 
     @ApiOperation(value = "閫氳繃id鑾峰彇")

--
Gitblit v1.8.0