From 2a873a04ab9c600b8e0836d1f866a66d87c4b64f Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期一, 22 九月 2025 22:16:22 +0800
Subject: [PATCH] 修改bug

---
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/activity/ActivityServiceImpl.java |   58 +++++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 53 insertions(+), 5 deletions(-)

diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/activity/ActivityServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/activity/ActivityServiceImpl.java
index a8096f9..92e7702 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/activity/ActivityServiceImpl.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/activity/ActivityServiceImpl.java
@@ -42,6 +42,7 @@
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Function;
@@ -192,7 +193,8 @@
                         BigDecimal activityPrice = mgtActivityGoodsEditDto.getActivityPrice();
                         BigDecimal activitySubscription = mgtActivityGoodsEditDto.getActivitySubscription();
                         Integer activityNumber = mgtActivityGoodsEditDto.getActivityNumber();
-                        if(goodsId.equals(goodsId1) && activitySubscription1.compareTo(activitySubscription) != 0){
+                        if(null != activitySubscription && null != activitySubscription1 &&
+                                goodsId.equals(goodsId1) && activitySubscription1.compareTo(activitySubscription) != 0){
                             throw new ServiceException("不能修改定金");
                         }
                         if(goodsId.equals(goodsId1) && activityPrice1.compareTo(activityPrice) != 0){
@@ -269,6 +271,9 @@
         this.saveOrUpdate(activity);
         // 获取活动商品信息
         List<MgtActivityGoodsEditDto> mgtActivityGoodsEditDtoList = mgtActivityEditDto.getMgtActivityGoodsEditDtoList();
+
+        //存储需要更新缓存的库存数量
+        List<Map<String, Object>> goods = new ArrayList<>();
         // 如果活动商品信息不为空,则保存活动商品信息
         if (!mgtActivityGoodsEditDtoList.isEmpty()) {
             List<ActivityGoods> activityGoodsList = mgtActivityGoodsEditDtoList.stream().map(
@@ -278,7 +283,12 @@
                                 .eq(ActivityGoods::getGoodsId, dto.getGoodsId())
                                 .eq(ActivityGoods::getDelFlag, 0)
                         );
+                        int number = 0;
                         if(null != activityGoods){
+                            //剩余数量
+                            Integer surpNum = redisService.getCacheObject(SecurityConstant.ACTIVITY_GOODS + "-" + activity.getActivityId() + "-" + dto.getGoodsId());
+                            surpNum = null == surpNum ? 0 : surpNum;
+                            number = surpNum + (dto.getActivityNumber() - activityGoods.getActivityNumber());
                             activityGoods.setActivityId(activity.getActivityId());
                             activityGoods.setActivityPrice(dto.getActivityPrice());
                             activityGoods.setActivitySubscription(dto.getActivitySubscription());
@@ -288,6 +298,7 @@
                             activityGoods.setPurchaseLimitationFlag(activity.getPurchaseLimitationFlag());
                             activityGoods.setLimitNumber(activity.getLimitNumber());
                         }else{
+                            number = dto.getActivityNumber();
                             activityGoods = new ActivityGoods();
                             activityGoods.setDelFlag(0);
                             activityGoods.setGoodsId(dto.getGoodsId());
@@ -302,6 +313,10 @@
                             activityGoods.setPurchaseLimitationFlag(activity.getPurchaseLimitationFlag());
                             activityGoods.setLimitNumber(activity.getLimitNumber());
                         }
+                        Map<String, Object> map = new HashMap<>();
+                        map.put("goodsId", dto.getGoodsId());
+                        map.put("number", number);
+                        goods.add(map);
                         return activityGoods;
                     }
             ).collect(Collectors.toList());
@@ -309,6 +324,16 @@
                 activityGoodsService.saveOrUpdateBatch(activityGoodsList);
             }
         }
+
+        //进行中的活动更新缓存中库存数量
+        if(activity.getActivityStatus() == 1){
+            for (Map<String, Object> good : goods) {
+                String goodsId = good.get("goodsId").toString();
+                Integer number = Integer.valueOf(good.get("number").toString());
+                redisService.setCacheObject(SecurityConstant.ACTIVITY_GOODS+"-"+activity.getActivityId()+"-"+goodsId,number);
+            }
+        }
+
         //如果活动在1小时内生成自动开始任务的延时任务
         Date checkTime = DateUtils.addMinutes(new Date(),61);
         if(checkTime.compareTo(activityStartTime)>0){
@@ -384,11 +409,11 @@
                 if(endDelayTask.getEndTime().compareTo(activityEndTime)!=0){
                     remoteConfigService.deleteDelayTask(DelayTaskEnum.ACTIVITY_END_TASK.getCode() + "-" + activityId);
                     redisService.deleteObject(DelayTaskEnum.ACTIVITY_END_TASK.getCode() + "-" + activityId);
-                    redisService.setCacheObject(DelayTaskEnum.ACTIVITY_END_TASK.getCode() + "-" + activityId, activityEndTime, startTimeDifference, TimeUnit.MILLISECONDS);
+                    redisService.setCacheObject(DelayTaskEnum.ACTIVITY_END_TASK.getCode() + "-" + activityId, activityEndTime, endTimeDifference, TimeUnit.MILLISECONDS);
                     endDelayTask = new DelayTask();
                     endDelayTask.setDelFlag(0);
                     endDelayTask.setCreateTime(new Date());
-                    endDelayTask.setEndTime(activityStartTime);
+                    endDelayTask.setEndTime(activityEndTime);
                     endDelayTask.setRedisKey(DelayTaskEnum.ACTIVITY_END_TASK.getCode() + "-" + activityId);
                     remoteConfigService.addDelayTask(endDelayTask);
                 }
@@ -486,7 +511,7 @@
             MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto();
             mgtBaseBathDto = new MgtBaseBathDto();
             mgtBaseBathDto.setIds(userJoinedString);
-            List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(mgtBaseBathDto).getData();
+            List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(userJoinedString).getData();
             Map<Long, MgtSimpleMemberVo> userMap = simpleMemberVoList.stream()
                     .collect(Collectors.toMap(MgtSimpleMemberVo::getUserId, Function.identity()));
             for (MgtActivityRecordPageVo mgtActivityRecordPageVo : activityRecordPageVoList) {
@@ -665,7 +690,7 @@
     public void startActivity(String activityId){
         log.debug(activityId+"活动开始");
         Activity activity = this.getById(activityId);
-        if(activity!=null&&activity.getActivityStatus()==0){
+        if(activity!=null && activity.getActivityStatus() == 0){
             activity.setActivityStatus(1);
             List<ActivityGoods> activityGoodsList = activityGoodsService.listByActivityId(activityId);
             if(activityGoodsList!=null&&!activityGoodsList.isEmpty()){
@@ -800,4 +825,27 @@
         }
         return judge;
     }
+
+    /**
+     * 立即结束活动
+     * @param mgtBaseGetDto
+     */
+    @Override
+    public R endImmediately(MgtBaseGetDto mgtBaseGetDto) {
+        Activity activity = this.getById(mgtBaseGetDto.getId());
+        if(null == activity){
+            return R.fail("活动不存在");
+        }
+        //判断是否在活动中
+        Date now = new Date();
+        if (now.before(activity.getActivityStartTime())||now.after(activity.getActivityEndTime())){
+            return R.fail("未在活动时间范围内,不能执行立即结束操作");
+        }
+        activity.setActivityEndTime(now);
+        activity.setUpdateTime(now);
+        activity.setUpdateUserId(mgtBaseGetDto.getUserId());
+        activity.setActivityStatus(2);
+        this.updateById(activity);
+        return R.ok();
+    }
 }

--
Gitblit v1.7.1