From ffd170c8219bbf290a87a1b411a518968fce98d4 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Sun, 27 Apr 2025 17:55:26 +0800
Subject: [PATCH] refactor(mall): 移除活动报名相关接口的限流注解

---
 src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java |  154 +++++++++++++++++++++++++++------------------------
 1 files changed, 81 insertions(+), 73 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java
index 531879d..399aee3 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java
@@ -30,7 +30,6 @@
 import cn.hutool.crypto.SecureUtil;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
@@ -71,55 +70,33 @@
         // 检查分页结果是否包含数据
         if(CollUtil.isNotEmpty(happyActivityPage.getRecords())){
             List<ApiActivityInfoVo> records = happyActivityPage.getRecords();
-            // 使用Stream流操作records,获取所有活动的ID
-            List<Long> ids = records.stream().map(ApiActivityInfoVo::getId).collect(Collectors.toList());
-
-            // 查询关注点赞转发记录,筛选出关注活动类型且未删除的关注记录,并按ID升序排序,限制结果数量为3
-            List<HappyFollow> happyFollows = happyFollowMapper.selectList(
-                    new LambdaQueryWrapper<HappyFollow>()
-                            .eq(HappyFollow::getSourceType, StateUpDownEnum.SOURCE_TYPE_ACTIVITY.getCode())
-                            .in(HappyFollow::getSourceId, ids)
-                            .eq(HappyFollow::getDeleteFlag, StateUpDownEnum.DOWN.getCode())
-                            .orderByAsc(HappyFollow::getId)
-                            .last("limit 3")
-            );
-
-            // 检查关注记录是否不为空
-            if(CollUtil.isNotEmpty(happyFollows)){
-                // 使用Stream流操作关注记录,获取所有成员ID的集合
-                Set<Long> memberIds = happyFollows.stream().collect(Collectors.mapping(HappyFollow::getMemberId, Collectors.toSet()));
-
-                // 查询成员信息,获取成员的ID和头像
-                List<MallMember> mallMembers = mallMemberMapper.selectList(
-                        new LambdaQueryWrapper<MallMember>()
-                                .select(MallMember::getId,MallMember::getAvatar)
-                                .in(MallMember::getId, memberIds)
+            // 遍历活动记录,为每个活动添加成员头像信息
+            records.forEach(record -> {
+                // 查询关注点赞转发记录,筛选出关注活动类型且未删除的关注记录,并按ID升序排序,限制结果数量为3
+                List<HappyFollow> happyFollows = happyFollowMapper.selectList(
+                        new LambdaQueryWrapper<HappyFollow>()
+                                .eq(HappyFollow::getSourceType, StateUpDownEnum.SOURCE_TYPE_ACTIVITY.getCode())
+                                .eq(HappyFollow::getSourceId, record.getId())
+                                .eq(HappyFollow::getDeleteFlag, StateUpDownEnum.DOWN.getCode())
+                                .groupBy(HappyFollow::getMemberId)
+                                .orderByAsc(HappyFollow::getId)
+                                .last("limit 3")
                 );
+                // 检查关注记录是否不为空
+                if(CollUtil.isNotEmpty(happyFollows)){
+                    // 使用Stream流操作关注记录,获取所有成员ID的集合
+                    Set<Long> memberIds = happyFollows.stream().collect(Collectors.mapping(HappyFollow::getMemberId, Collectors.toSet()));
 
-                // 使用Stream流操作成员信息,生成一个以成员ID为键,成员信息为值的Map
-                Map<Long, MallMember> memberMap = mallMembers.stream()
-                        .collect(Collectors.toMap(MallMember::getId, member -> member));
-
-                // 使用Stream流操作关注记录,生成一个以活动ID为键,成员ID列表为值的Map
-                Map<Long, List<Long>> followMap = happyFollows.stream()
-                        .collect(Collectors.groupingBy(
-                                HappyFollow::getSourceId,
-                                Collectors.mapping(HappyFollow::getMemberId, Collectors.toList())
-                        ));
-
-                // 遍历活动记录,为每个活动添加成员头像信息
-                records.forEach(record -> {
-                    List<Long> memberIdsForRecord = followMap.get(record.getId());
-                    if (CollUtil.isNotEmpty(memberIdsForRecord)) {
-                        List<String> memberAvatars = memberIdsForRecord.stream()
-                                .map(memberMap::get)
-                                .filter(member -> member != null)
-                                .map(MallMember::getAvatar)
-                                .collect(Collectors.toList());
-                        record.setMemberAvatars(memberAvatars);
-                    }
-                });
-            }
+                    // 查询成员信息,获取成员的ID和头像
+                    List<MallMember> mallMembers = mallMemberMapper.selectList(
+                            new LambdaQueryWrapper<MallMember>()
+                                    .select(MallMember::getAvatar)
+                                    .in(MallMember::getId, memberIds)
+                    );
+                    List<String> memberAvatars = mallMembers.stream().map(MallMember::getAvatar).collect(Collectors.toList());
+                    record.setMemberAvatars(memberAvatars);
+                }
+            });
         }
         // 返回成功响应,包含活动分页数据
         return new FebsResponse().success().data(happyActivityPage);
@@ -137,6 +114,25 @@
         );
         if(happyActivity != null){
             BeanUtil.copyProperties(happyActivity,apiActivityVo);
+            List<HappyFollow> happyFollows = happyFollowMapper.selectList(
+                    new LambdaQueryWrapper<HappyFollow>()
+                            .select(HappyFollow::getId, HappyFollow::getType)
+                            .eq(HappyFollow::getSourceType, StateUpDownEnum.SOURCE_TYPE_ACTIVITY.getCode())
+                            .eq(HappyFollow::getSourceId, happyActivity.getId())
+                            .in(HappyFollow::getType, Arrays.asList(StateUpDownEnum.LIKE.getCode(), StateUpDownEnum.SHARE.getCode()))
+                            .eq(HappyFollow::getDeleteFlag, StateUpDownEnum.DOWN.getCode())
+            );
+            if(CollUtil.isNotEmpty(happyFollows)){
+                //  使用Stream流操作happyFollows,按照type分类,返回每一个不同type的总数量,并返回一个Map
+                Map<Integer, Long> typeCountMap = happyFollows.stream()
+                        .collect(Collectors.groupingBy(HappyFollow::getType, Collectors.counting()));
+                Long zanCnt = ObjectUtil.defaultIfNull(typeCountMap.get(StateUpDownEnum.LIKE.getCode()), 0L);
+                apiActivityVo.setZanCnt(Math.toIntExact(zanCnt));
+                Long sendCnt = ObjectUtil.defaultIfNull(typeCountMap.get(StateUpDownEnum.SHARE.getCode()), 0L);
+                apiActivityVo.setSendCnt(Math.toIntExact(sendCnt));
+            }
+
+
         }
         return new FebsResponse().success().data(apiActivityVo);
     }
@@ -221,16 +217,18 @@
                     throw new FebsException("活动不存在");
                 }
 
-                if (StateUpDownEnum.ACTIVITY_TYPE_VOTE.getCode() == happyActivity.getType()) {
-                    Long sourceOptionId = dto.getSourceOptionId();
-                    if (sourceOptionId == null) {
-                        throw new FebsException("选项ID不能为空");
-                    }
-                    this.operateDoVote(memberId, StateUpDownEnum.SOURCE_TYPE_ACTIVITY.getCode(), sourceId, sourceOptionId, type);
-                    this.addLikeCnt(sourceOptionId);
-                } else {
-                    this.operateDo(memberId, StateUpDownEnum.SOURCE_TYPE_ACTIVITY.getCode(), sourceId, type);
-                }
+                this.operateDo(memberId, StateUpDownEnum.SOURCE_TYPE_ACTIVITY.getCode(), sourceId, type);
+
+//                if (StateUpDownEnum.ACTIVITY_TYPE_VOTE.getCode() == happyActivity.getType()) {
+//                    Long sourceOptionId = dto.getSourceOptionId();
+//                    if (sourceOptionId == null) {
+//                        throw new FebsException("选项ID不能为空");
+//                    }
+//                    this.operateDoVote(memberId, StateUpDownEnum.SOURCE_TYPE_ACTIVITY.getCode(), sourceId, sourceOptionId, type);
+//                    this.addLikeCnt(sourceOptionId);
+//                } else {
+//                    this.operateDo(memberId, StateUpDownEnum.SOURCE_TYPE_ACTIVITY.getCode(), sourceId, type);
+//                }
             } else if (StateUpDownEnum.SOURCE_TYPE_SOCIAL_CIRCLE.getCode() == sourceType) {
                 // 朋友圈点赞或关注
                 this.operateDo(memberId, StateUpDownEnum.SOURCE_TYPE_SOCIAL_CIRCLE.getCode(), sourceId, type);
@@ -491,9 +489,9 @@
             throw new FebsException("活动已结束");
         }
 
-        Integer joinCnt = happyActivity.getJoinCnt();
-        if(joinCnt < numCnt){
-            throw new FebsException("报名额度剩下"+joinCnt+",请减少报名人数");
+        Integer surplusCnt = happyActivity.getSurplusCnt();
+        if(surplusCnt < numCnt){
+            throw new FebsException("报名额度剩下"+surplusCnt+",请减少报名人数");
         }
         //支付总金额
         BigDecimal amount = happyActivity.getPayAmount().multiply(new BigDecimal(dto.getNumCnt())).setScale(2, RoundingMode.DOWN);
@@ -526,7 +524,8 @@
             happyActivityOrderItemMapper.insert(happyActivityOrderItem);
         }
 
-        this.substructJoinCnt(activityId, happyActivityOrder.getNumCnt());
+        this.baseMapper.updateHappyActivitySurplusCnt(activityId, happyActivityOrder.getNumCnt() * (-1));
+
         HashMap<String, Object> stringObjectHashMap = new HashMap<>();
         stringObjectHashMap.put("orderId",happyActivityOrder.getId());
         stringObjectHashMap.put("amount",amount);
@@ -613,17 +612,6 @@
         happyActivityOption.setLikesCnt(happyActivityOption.getLikesCnt() + 1);
         happyActivityOptionMapper.updateById(happyActivityOption);
     }
-
-    @Override
-    public void substructJoinCnt(Long activityId, Integer numCnt) {
-        HappyActivity happyActivity = this.baseMapper.selectById(activityId);
-        if(ObjectUtil.isNotEmpty(happyActivity)){
-            happyActivity.setJoinCnt(happyActivity.getJoinCnt() -numCnt);
-            this.baseMapper.updateById(happyActivity);
-        }
-    }
-
-
 
     // 处理无需支付订单
     private void processNoPayOrder(HappyActivityOrder order, Long orderId) {
@@ -920,6 +908,26 @@
     }
 
     @Override
+    public void overtimeJob() {
+        List<HappyActivityOrder> happyActivityOrders = happyActivityOrderMapper.selectList(
+                new LambdaQueryWrapper<HappyActivityOrder>()
+                        .eq(HappyActivityOrder::getState, StateUpDownEnum.ORDER_STATE_WAIT_PAY.getCode())
+                        .lt(HappyActivityOrder::getCreatedTime, DateUtil.offsetMinute(new Date(), -10))
+        );
+        if(CollUtil.isNotEmpty(happyActivityOrders)){
+            happyActivityOrders.forEach(happyActivityOrder -> {
+
+                Long activityId = happyActivityOrder.getActivityId();
+                Integer numCnt = happyActivityOrder.getNumCnt();
+                this.baseMapper.updateHappyActivitySurplusCnt(activityId,numCnt);
+
+                happyActivityOrder.setDeleteFlag(StateUpDownEnum.UP.getCode());
+                happyActivityOrderMapper.updateById(happyActivityOrder);
+            });
+        }
+    }
+
+    @Override
     public FebsResponse voteActivityHot(Long id) {
 
         ApiVoteActivityHotVo apiVoteActivityHotVo = new ApiVoteActivityHotVo();

--
Gitblit v1.9.1