From 4eeeb59f6c514b61c78aec2acc95cff4807810e1 Mon Sep 17 00:00:00 2001
From: peng <peng.com>
Date: 星期五, 05 九月 2025 10:52:49 +0800
Subject: [PATCH] 抽奖活动中奖跳转

---
 framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java |    4 ++
 manager-api/src/main/java/cn/lili/controller/lmk/CustomerBlackController.java         |    2 
 framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeServiceImpl.java        |   49 +++++++++++++++++++++++-
 framework/src/main/java/cn/lili/modules/lmk/domain/vo/PrizeResultVO.java              |   48 ++++++++++++++++++++++++
 README.md                                                                             |    8 ++++
 5 files changed, 107 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index fdf869a..33883c6 100644
--- a/README.md
+++ b/README.md
@@ -173,3 +173,11 @@
 鍚姩锛歑xlJobAdminApplication鍚庤闂細http://127.0.0.1:9001/xxl-job-admin/
 鐢ㄦ埛鍚嶏細admin
 瀵嗙爜锛�111111
+
+
+鏈嶅姟鍣ㄦ儏鍐�
+java鏈嶅姟/mnt/java
+h5椤甸潰/myk/html
+nginx閰嶇疆/www/server/panel/vhost/nginx/www.meiyikuang.com.conf 鍩熷悕杞彂鏈嶅姟
+/www/server/nginx/conf/nginx.conf 杞彂鍒板叿浣撴湇鍔″櫒
+
diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/PrizeResultVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/PrizeResultVO.java
new file mode 100644
index 0000000..e067590
--- /dev/null
+++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/PrizeResultVO.java
@@ -0,0 +1,48 @@
+package cn.lili.modules.lmk.domain.vo;
+
+import cn.lili.mybatis.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 娲诲姩濂栧搧鍏宠仈琛�
+ *
+ * @author peng
+ * @since 2025-08-14
+ */
+@Data
+public class PrizeResultVO extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    /** 鎶藉娲诲姩id */
+    private String prizeActivityId;
+
+    /** 濂栧搧id */
+    private String prizeId;
+
+    /** 濂栧搧鍐呭 */
+    private String prizeContent;
+
+    /** 濂栧搧鏁伴噺 */
+    private Integer prizeNum;
+
+    /** 姣忔棩鏈�澶т腑濂栨暟 */
+    private Integer maxPreDay;
+
+    /** 涓皢姒傜巼 */
+    private BigDecimal prizeProbability;
+
+    /** 涔愯閿� */
+    private Integer version;
+
+    /** 鍓╀綑鏁伴噺 */
+    private Integer remainNum;
+    /**
+     * 浼樻儬鍗穒d
+     */
+    private String couponId;
+}
diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeServiceImpl.java
index 60f23e6..60c0963 100644
--- a/framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeServiceImpl.java
@@ -5,6 +5,7 @@
 import cn.lili.common.properties.RocketmqCustomProperties;
 import cn.lili.common.security.AuthUser;
 import cn.lili.common.security.context.UserContext;
+import cn.lili.common.utils.BeanUtil;
 import cn.lili.common.utils.StringUtils;
 import cn.lili.modules.lmk.domain.entity.*;
 import cn.lili.modules.lmk.domain.form.AddPrizeNumForm;
@@ -12,20 +13,26 @@
 import cn.lili.modules.lmk.domain.vo.PrizeDetailVO;
 import cn.lili.modules.lmk.domain.vo.PrizeProbabilityVO;
 import cn.lili.modules.lmk.domain.vo.PrizeRecordTimeVO;
+import cn.lili.modules.lmk.domain.vo.PrizeResultVO;
 import cn.lili.modules.lmk.enums.general.*;
 import cn.lili.modules.lmk.service.*;
+import cn.lili.modules.promotion.entity.dos.Coupon;
+import cn.lili.modules.promotion.service.CouponService;
 import cn.lili.mybatis.BaseEntity;
 import cn.lili.rocketmq.RocketmqSendCallbackBuilder;
 import cn.lili.utils.COSUtil;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.rocketmq.spring.core.RocketMQTemplate;
 import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
+import org.springframework.beans.BeanUtils;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -42,6 +49,7 @@
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
+@Slf4j
 @Service
 @RequiredArgsConstructor
 public class PrizeServiceImpl implements PrizeService {
@@ -57,6 +65,7 @@
     private final RocketmqCustomProperties rocketmqCustomProperties;
     private final RocketMQTemplate rocketMQTemplate;
     private final COSUtil cosUtil;
+    private final CouponService couponService;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -216,6 +225,12 @@
         }
         BigDecimal max = currentProbability.multiply(BigDecimal.valueOf(100));
         BigDecimal bigDecimal = generateRandom(BigDecimal.ONE, max);
+        try {
+            log.info("鎶藉鍙风爜涓�---------------------------->{}", bigDecimal);
+            log.info("鎶藉姒傜巼闆嗗悎涓�------------------------->{}", JSONObject.toJSONString(prizeProbabilityList));
+        } catch (Exception e) {
+            log.error("鎵撳嵃鎶藉淇℃伅鎶ラ敊----------------------->", e);
+        }
         for (PrizeProbabilityVO prizeProbabilityVO : prizeProbabilityList) {
             BigDecimal minP = prizeProbabilityVO.getProbability()[0][0];
             BigDecimal maxP = prizeProbabilityVO.getProbability()[0][1];
@@ -223,6 +238,31 @@
                 prizeWon = prizeProbabilityVO.getActivityPrizeRefId();
                 break;
             }
+        }
+        Coupon coupon = null;
+        //鏍¢獙浼樻儬鍗锋槸鍚﹀厑璁哥敤鎴峰棰嗕笉鍏佽褰撴湭涓澶勭悊
+        if (prizeWon != null) {
+            ActivityRefPrize activityRefPrize = canPrizeMap.get(prizeWon);
+            String prizeDrawId = activityRefPrize.getPrizeId();
+            PrizeDraw prizeDraw = prizeDrawService.getById(prizeDrawId);
+            String couponId = prizeDraw.getCouponId();
+            coupon = couponService.getById(couponId);
+            if (coupon == null) {
+                prizeWon = null;
+            } else {
+                Integer couponLimitNum = coupon.getCouponLimitNum();
+                //鑾峰彇鐢ㄦ埛杩欎釜浼樻儬鍗风殑涓鎯呭喌
+                LambdaQueryWrapper<PrizeRecord> eq = Wrappers.<PrizeRecord>lambdaQuery()
+                        .eq(PrizeRecord::getUserId, userId)
+                        .eq(PrizeRecord::getPrizeActivityId, prizeId)
+                        .eq(PrizeRecord::getPrizeId, prizeDrawId);
+                int size = prizeRecordService.list(eq).size();
+                if ( couponLimitNum>0 && size >= couponLimitNum) {
+                    log.info("瑙﹀彂浼樻儬鍗烽鍙栭檺鍒�---------->{}",prizeWon);
+                    prizeWon = null;
+                }
+            }
+
         }
         //鏈腑濂栫殑鎯呭喌
         if (prizeWon == null) {
@@ -290,6 +330,7 @@
 //        if (!lock.equals(nowLock)) {
 //            throw new RuntimeException("褰撳墠娲诲姩澶伀鐖嗕簡璇风◢鍚庡啀璇�");
 //        }
+        String couponId = coupon.getId();
         // 璧癿q寮傛澶勭悊
         TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
             @Override
@@ -298,7 +339,10 @@
                 rocketMQTemplate.asyncSend(destination, JSON.toJSONString(prizeRecord), RocketmqSendCallbackBuilder.commonCallback());
             }
         });
-        return Result.ok().data(activityRefPrize);
+        PrizeResultVO prizeResultVO = new PrizeResultVO();
+        BeanUtils.copyProperties(activityRefPrize, prizeResultVO);
+        prizeResultVO.setCouponId(couponId);
+        return Result.ok().data(prizeResultVO);
     }
 
     public static BigDecimal generateRandom(BigDecimal min, BigDecimal max) {
@@ -468,8 +512,7 @@
         if (actionEnum == null) {
             throw new ServiceException("褰撳墠绫诲瀷涓嶅瓨鍦�");
         }
-       Boolean check ;
-         //todo 杩涜鏁版嵁鏍¢獙
+        //todo 杩涜鏁版嵁鏍¢獙
         switch (actionEnum) {
             case BUY:
                 System.err.println("BUY");
diff --git a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java
index 8102863..4d9dd28 100644
--- a/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java
+++ b/framework/src/main/java/cn/lili/modules/order/order/serviceimpl/OrderServiceImpl.java
@@ -71,6 +71,7 @@
 import cn.lili.trigger.util.DelayQueueTools;
 import cn.lili.utils.COSUtil;
 import cn.lili.utils.CommonUtil;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -672,9 +673,12 @@
     public Order delivery(String orderSn, String logisticsNo, String logisticsId) {
         Order order = OperationalJudgment.judgment(this.getBySn(orderSn));
         //濡傛灉璁㈠崟鏈彂璐э紝骞朵笖璁㈠崟鐘舵�佸�肩瓑浜庡緟鍙戣揣
+        log.info("鑾峰彇鍒扮殑璁㈠崟淇℃伅涓簕}", JSON.toJSONString(order));
         if (order.getDeliverStatus().equals(DeliverStatusEnum.UNDELIVERED.name()) && order.getOrderStatus().equals(OrderStatusEnum.UNDELIVERED.name())) {
             //鑾峰彇瀵瑰簲鐗╂祦
             Logistics logistics = logisticsService.getById(logisticsId);
+            log.info("鑾峰彇鍒扮殑鐗╂祦淇℃伅id涓簕}", logisticsId);
+            log.info("鑾峰彇鍒扮殑鐗╂祦淇℃伅涓簕}", JSON.toJSONString(logistics));
             if (logistics == null) {
                 throw new ServiceException(ResultCode.ORDER_LOGISTICS_ERROR);
             }
diff --git a/manager-api/src/main/java/cn/lili/controller/lmk/CustomerBlackController.java b/manager-api/src/main/java/cn/lili/controller/lmk/CustomerBlackController.java
index 166bb37..58488b6 100644
--- a/manager-api/src/main/java/cn/lili/controller/lmk/CustomerBlackController.java
+++ b/manager-api/src/main/java/cn/lili/controller/lmk/CustomerBlackController.java
@@ -14,7 +14,7 @@
 import java.util.List;
 import org.springframework.validation.annotation.Validated;
 import javax.validation.constraints.NotEmpty;
-import io.swagger.annotations.Api;;
+import io.swagger.annotations.Api;
 import org.springframework.web.bind.annotation.*;
 
 /**

--
Gitblit v1.8.0