Просмотр исходного кода

红德堂-V1.2 app中奖记录调整不进行抽奖通过重新看课触发

Long 4 дней назад
Родитель
Сommit
ac5b3a269c

+ 127 - 123
fs-service/src/main/java/com/fs/course/service/impl/FsCourseCheckinReceiveServiceImpl.java

@@ -278,18 +278,7 @@ public class FsCourseCheckinReceiveServiceImpl implements IFsCourseCheckinReceiv
             return result;
         }
 
-        // 4. 检查是否已创建领取记录
-        FsCourseCheckinReceive query = new FsCourseCheckinReceive();
-        query.setActivityId(activity.getActivityId());
-        query.setUserId(fsCourseSendRewardUParam.getUserId());
-        List<FsCourseCheckinReceive> existList = fsCourseCheckinReceiveMapper.selectFsCourseCheckinReceiveList(query);
-        if (!existList.isEmpty()) {
-            result.put("success", false);
-            result.put("msg", "已创建领取记录");
-            return result; // 已创建领取记录
-        }
-
-        // 5. 查询奖品(一个活动只配一个奖品)
+        // 4. 查询奖品(一个活动只配一个奖品)
         List<FsCourseCheckinPrize> prizeList = fsCourseCheckinPrizeMapper.selectFsCourseCheckinPrizeByActivityId(activity.getActivityId());
         if (prizeList.isEmpty()) {
             result.put("success", false);
@@ -297,35 +286,76 @@ public class FsCourseCheckinReceiveServiceImpl implements IFsCourseCheckinReceiv
             return result;
         }
 
-        // 6. 创建单个领取记录
-        Date now = new Date();
+        FsCourseCheckinReceive receive;
         FsCourseCheckinPrize prize = prizeList.get(0); // 只取第一个奖品
-        FsCourseCheckinReceive receive = new FsCourseCheckinReceive();
-        receive.setActivityId(activity.getActivityId());
-        receive.setPrizeId(prize.getPrizeId());
-        receive.setUserId(fsCourseSendRewardUParam.getUserId());
-        receive.setCompanyId(checkinUser.getCompanyId());
-        receive.setProjectId(checkinUser.getProjectId());
-        receive.setPrizeType(prize.getPrizeType());
-        receive.setPrizeName(prize.getPrizeName());
-        receive.setRedpacketAmount(prize.getRedpacketAmount());
-        receive.setGoodsId(prize.getGoodsId());
-        receive.setGrandGiftId(prize.getGrandGiftId());
-        receive.setReceiveStatus(0); // 待发放
-        receive.setCreateTime(now);
-        //创建批次号
-        String code =  OrderCodeUtils.getOrderSn();
-        if (StringUtils.isEmpty(code)) {
-            return R.error("红包单号生成失败,请重试");
-        }
-        receive.setOutBatchNo("fsCourse"+cloudHostProper.getProjectCode() + code);
-
-        fsCourseCheckinReceiveMapper.insertFsCourseCheckinReceive(receive);
-
-        // 7. 发放奖励
-        result = sendPrize(receive.getReceiveId(), fsCourseSendRewardUParam, prize.getFreeCouponId());
 
-        return result;
+        String lockKey = String.format(CHECKIN_PRIZE_LOCK, fsCourseSendRewardUParam.getUserId());
+        RLock lock = redissonClient.getLock(lockKey);
+
+        try {
+            boolean locked = lock.tryLock(5, 300, TimeUnit.SECONDS);
+            if (!locked) {
+                logger.error("获取锁失败 - 用户ID: {}", fsCourseSendRewardUParam.getUserId());
+                result.put("success", false);
+                result.put("msg", "系统繁忙,请稍后重试");
+                return result;
+            }
+
+            // 5. 检查是否已创建领取记录
+            FsCourseCheckinReceive query = new FsCourseCheckinReceive();
+            query.setActivityId(activity.getActivityId());
+            query.setUserId(fsCourseSendRewardUParam.getUserId());
+            List<FsCourseCheckinReceive> existList = fsCourseCheckinReceiveMapper.selectFsCourseCheckinReceiveList(query);
+            if (!existList.isEmpty()) {
+                receive = existList.get(0);
+                if (receive.getReceiveStatus() == 1 || receive.getReceiveStatus() == 2) {
+                    result.put("success", false);
+                    result.put("msg", "已创建领取记录");
+                    return result; // 已创建领取记录
+                }
+            } else {
+                // 6. 创建单个领取记录
+                receive = new FsCourseCheckinReceive();
+                receive.setActivityId(activity.getActivityId());
+                receive.setPrizeId(prize.getPrizeId());
+                receive.setUserId(fsCourseSendRewardUParam.getUserId());
+                receive.setCompanyId(checkinUser.getCompanyId());
+                receive.setProjectId(checkinUser.getProjectId());
+                receive.setPrizeType(prize.getPrizeType());
+                receive.setPrizeName(prize.getPrizeName());
+                receive.setRedpacketAmount(prize.getRedpacketAmount());
+                receive.setGoodsId(prize.getGoodsId());
+                receive.setGrandGiftId(prize.getGrandGiftId());
+                receive.setReceiveStatus(0); // 待发放
+                receive.setCreateTime(new Date());
+                //创建批次号
+                String code =  OrderCodeUtils.getOrderSn();
+                if (StringUtils.isEmpty(code)) {
+                    result.put("success", false);
+                    result.put("msg", "红包单号生成失败,请重试");
+                    return result;
+                }
+                receive.setOutBatchNo("fsCourse"+cloudHostProper.getProjectCode() + code);
+
+                fsCourseCheckinReceiveMapper.insertFsCourseCheckinReceive(receive);
+            }
+
+            // 7. 发放奖励
+            result = sendPrize(receive.getReceiveId(), fsCourseSendRewardUParam, prize.getFreeCouponId());
+
+            return result;
+
+        } catch (InterruptedException e) {
+            logger.error("获取锁被中断 - 用户ID: {}", fsCourseSendRewardUParam.getUserId(), e);
+            Thread.currentThread().interrupt();
+            result.put("success", false);
+            result.put("msg", "系统异常,请稍后重试");
+            return result;
+        } finally {
+            if (lock.isHeldByCurrentThread()) {
+                lock.unlock();
+            }
+        }
     }
 
     /**
@@ -357,99 +387,72 @@ public class FsCourseCheckinReceiveServiceImpl implements IFsCourseCheckinReceiv
         }
         FsUser user = fsUserMapper.selectFsUserById(receive.getUserId());
 
-        String lockKey = String.format(CHECKIN_PRIZE_LOCK, receiveId);
-        RLock lock = redissonClient.getLock(lockKey);
+        Date now = new Date();
+        Map<String, Object> result = new HashMap<>();
+        boolean success = false;
+        if (receive.getPrizeType() == 1) {
+            // 红包类型 - 调用红包发放接口
+            success = sendRedpacket(receive, param, user);
+        } else if (receive.getPrizeType() == 2) {
+            // 发放积分商品优惠券
+            FsCoupon coupon = fsCouponMapper.selectFsCouponByCouponId(freeCouponId);
+            if (coupon != null && coupon.getStatus() != 0) {
+                int receiveCount = fsUserCouponMapper.checkReceive(param.getUserId(), coupon.getCouponId());
+                if (receiveCount < coupon.getLimitCount()) {
+                    FsUserCoupon fsUserCoupon = new FsUserCoupon();
+                    fsUserCoupon.setCouponId(coupon.getCouponId());
+                    fsUserCoupon.setCouponCode("C"+System.currentTimeMillis());
+                    fsUserCoupon.setUserId(param.getUserId());
+                    fsUserCoupon.setCreateTime(DateUtils.getNowDate());
+                    if (coupon.getLimitType() == 2){
+                        long limitDay = coupon.getLimitDay().longValue() * 24 * 60 * 60 * 1000;
+                        long time = new Date().getTime();
+                        fsUserCoupon.setLimitTime(new Date(limitDay+time));
+                    }else {
+                        fsUserCoupon.setLimitTime(coupon.getLimitTime());
+                    }
+                    fsUserCoupon.setStatus(0);
+                    fsUserCouponMapper.insertFsUserCoupon(fsUserCoupon);
 
-        try {
-            boolean locked = lock.tryLock(5, 300, TimeUnit.SECONDS);
-            if (!locked) {
-                logger.error("获取锁失败 - 领取记录ID: {}", receiveId);
-                Map<String, Object> result = new HashMap<>();
-                result.put("success", false);
-                result.put("msg", "系统繁忙,请稍后重试");
-                return result;
-            }
+                    //更新剩余数量
+                    fsCouponMapper.updateRemainCount(coupon.getCouponId());
 
-            Date now = new Date();
-            Map<String, Object> result = new HashMap<>();
-            boolean success = false;
-            if (receive.getPrizeType() == 1) {
-                // 红包类型 - 调用红包发放接口
-                success = sendRedpacket(receive, param, user);
-            } else if (receive.getPrizeType() == 2) {
-                // 发放积分商品优惠券
-                FsCoupon coupon = fsCouponMapper.selectFsCouponByCouponId(freeCouponId);
-                if (coupon != null && coupon.getStatus() != 0) {
-                    int receiveCount = fsUserCouponMapper.checkReceive(param.getUserId(), coupon.getCouponId());
-                    if (receiveCount < coupon.getLimitCount()) {
-                        FsUserCoupon fsUserCoupon = new FsUserCoupon();
-                        fsUserCoupon.setCouponId(coupon.getCouponId());
-                        fsUserCoupon.setCouponCode("C"+System.currentTimeMillis());
-                        fsUserCoupon.setUserId(param.getUserId());
-                        fsUserCoupon.setCreateTime(DateUtils.getNowDate());
-                        if (coupon.getLimitType() == 2){
-                            long limitDay = coupon.getLimitDay().longValue() * 24 * 60 * 60 * 1000;
-                            long time = new Date().getTime();
-                            fsUserCoupon.setLimitTime(new Date(limitDay+time));
-                        }else {
-                            fsUserCoupon.setLimitTime(coupon.getLimitTime());
-                        }
-                        fsUserCoupon.setStatus(0);
-                        fsUserCouponMapper.insertFsUserCoupon(fsUserCoupon);
-
-                        //更新剩余数量
-                        fsCouponMapper.updateRemainCount(coupon.getCouponId());
-
-                        success = true;
-                        result.put("prizeType", 2);
-                        result.put("freeCouponId", fsUserCoupon.getId());
-                        result.put("goodsId", coupon.getFreeGoodsId());
-
-                        // 更新领取记录中的优惠券ID
-                        receive.setFreeCouponId(fsUserCoupon.getId());
-                        receive.setGoodsId(coupon.getFreeGoodsId());
-                    }
+                    success = true;
+                    result.put("prizeType", 2);
+                    result.put("freeCouponId", fsUserCoupon.getId());
+                    result.put("goodsId", coupon.getFreeGoodsId());
+
+                    // 更新领取记录中的优惠券ID
+                    receive.setFreeCouponId(fsUserCoupon.getId());
+                    receive.setGoodsId(coupon.getFreeGoodsId());
                 }
-            } else if (receive.getPrizeType() == 3) {
-                success = true;
-                result.put("prizeType", 3);
-                result.put("grandGiftId", receive.getGrandGiftId());
-                result.put("receiveId", receiveId);
             }
+        } else if (receive.getPrizeType() == 3) {
+            success = true;
+            result.put("prizeType", 3);
+            result.put("grandGiftId", receive.getGrandGiftId());
+            result.put("receiveId", receiveId);
+        }
 
-            if (success) {
-                //红包类型, 积分商品免单券
-                if (receive.getPrizeType() == 1 || receive.getPrizeType() == 2) {
-                    receive.setReceiveStatus(1); // 发放成功
-                    receive.setReceiveTime(now);
-                }else {
-                    receive.setReceiveStatus(0); // 待发放
-                }
-                result.put("success", true);
-                result.put("msg", "发放成功");
-            } else {
-                receive.setReceiveStatus(2); // 发放失败
+        if (success) {
+            //红包类型, 积分商品免单券
+            if (receive.getPrizeType() == 1 || receive.getPrizeType() == 2) {
+                receive.setReceiveStatus(1); // 发放成功
                 receive.setReceiveTime(now);
-                result.put("success", false);
-                result.put("msg", "发放失败");
             }
-
-            receive.setUpdateTime(now);
-            fsCourseCheckinReceiveMapper.updateFsCourseCheckinReceive(receive);
-
-            return result;
-        } catch (InterruptedException e) {
-            logger.error("获取锁被中断 - 领取记录ID: {}", receiveId, e);
-            Thread.currentThread().interrupt();
-            Map<String, Object> result = new HashMap<>();
+            result.put("success", true);
+            result.put("msg", "发放成功");
+        } else {
+            receive.setReceiveStatus(2); // 发放失败
+            receive.setReceiveTime(now);
             result.put("success", false);
-            result.put("msg", "系统异常,请稍后重试");
-            return result;
-        } finally {
-            if (lock.isHeldByCurrentThread()) {
-                lock.unlock();
-            }
+            result.put("msg", "发放失败");
         }
+
+        receive.setUpdateTime(now);
+        fsCourseCheckinReceiveMapper.updateFsCourseCheckinReceive(receive);
+
+        return result;
     }
 
     /**
@@ -679,6 +682,7 @@ public class FsCourseCheckinReceiveServiceImpl implements IFsCourseCheckinReceiv
     public List<FsCourseCheckinReceive> selectReceiveListByUserId(Long userId) {
         FsCourseCheckinReceive query = new FsCourseCheckinReceive();
         query.setUserId(userId);
+        query.setReceiveStatus(1);
         List<FsCourseCheckinReceive> list = fsCourseCheckinReceiveMapper.selectFsCourseCheckinReceiveList(query);
         if (list == null || list.isEmpty()) {
             return new ArrayList<>();