From 5b61384b8db46b9412425cb10f1247ddfc3da706 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Sun, 27 Apr 2025 09:52:21 +0800
Subject: [PATCH] fix(mapper): 更新 HappyActivityOptionMapper 映射逻辑

---
 src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java |  163 +++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 155 insertions(+), 8 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 5188d8b..531879d 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
@@ -7,8 +7,7 @@
 import cc.mrbird.febs.common.utils.MallUtils;
 import cc.mrbird.febs.common.utils.ShareCodeUtil;
 import cc.mrbird.febs.mall.dto.*;
-import cc.mrbird.febs.mall.dto.activity.ApiActivityOrderListDto;
-import cc.mrbird.febs.mall.dto.activity.ApiVoteOptionInPageDto;
+import cc.mrbird.febs.mall.dto.activity.*;
 import cc.mrbird.febs.mall.entity.*;
 import cc.mrbird.febs.mall.mapper.*;
 import cc.mrbird.febs.mall.service.HappyActivityService;
@@ -17,9 +16,11 @@
 import cc.mrbird.febs.mall.dto.ApiOperateDoDto;
 import cc.mrbird.febs.mall.vo.activity.ApiActivityOrderInfoVo;
 import cc.mrbird.febs.mall.vo.activity.ApiActivityOrderListVo;
+import cc.mrbird.febs.mall.vo.activity.ApiCheckOrderVo;
 import cc.mrbird.febs.mall.vo.activity.ApiVoteActivityHotVo;
 import cc.mrbird.febs.pay.model.BrandWCPayRequestData;
 import cc.mrbird.febs.pay.service.IXcxPayService;
+import cc.mrbird.febs.rabbit.producter.AgentProducer;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateTime;
@@ -58,6 +59,7 @@
     private final IXcxPayService iXcxPayService;
     private final IApiMallMemberWalletService iApiMallMemberWalletService;
     private final HappyActivityCategoryMapper happyActivityCategoryMapper;
+    private final AgentProducer agentProducer;
 
     @Override
     public FebsResponse activityList(ApiActivityInfoDto dto) {
@@ -75,7 +77,6 @@
             // 查询关注点赞转发记录,筛选出关注活动类型且未删除的关注记录,并按ID升序排序,限制结果数量为3
             List<HappyFollow> happyFollows = happyFollowMapper.selectList(
                     new LambdaQueryWrapper<HappyFollow>()
-                            .select(HappyFollow::getMemberId)
                             .eq(HappyFollow::getSourceType, StateUpDownEnum.SOURCE_TYPE_ACTIVITY.getCode())
                             .in(HappyFollow::getSourceId, ids)
                             .eq(HappyFollow::getDeleteFlag, StateUpDownEnum.DOWN.getCode())
@@ -149,6 +150,14 @@
     }
 
     @Override
+    public FebsResponse voteOptionRecordInPage(ApiVoteOptionRecordInPageDto dto) {
+        // 创建分页对象,传入当前页和每页大小
+        Page<ApiActivityOptionListVo> page = new Page<>(dto.getPageNow(), dto.getPageSize());
+        Page<ApiActivityOptionListVo> voteRecordInPage = this.baseMapper.getVoteOptionRecordInPage(page, dto);
+        return new FebsResponse().success().data(voteRecordInPage);
+    }
+
+    @Override
     public FebsResponse voteOption(Long id) {
 
         ApiActivityOptionVo apiActivityOptionVo = new ApiActivityOptionVo();
@@ -156,6 +165,44 @@
         if(happyActivityOption != null){
             BeanUtil.copyProperties(happyActivityOption, apiActivityOptionVo);
         }
+
+        //投票人数
+        List<HappyFollow> happyFollows = happyFollowMapper.selectList(
+                new LambdaQueryWrapper<HappyFollow>()
+                        .select(HappyFollow::getId)
+                        .eq(HappyFollow::getSourceOptionId, id)
+                        .eq(HappyFollow::getType, StateUpDownEnum.VOTE.getCode())
+                        .eq(HappyFollow::getDeleteFlag, StateUpDownEnum.DOWN.getCode())
+                        .groupBy(HappyFollow::getMemberId)
+        );
+        apiActivityOptionVo.setVoteCnt(CollUtil.isNotEmpty(happyFollows) ? happyFollows.size() : 0);
+
+        List<HappyActivityOption> happyActivityOptions = happyActivityOptionMapper.selectList(
+                new LambdaQueryWrapper<HappyActivityOption>()
+                        .select(HappyActivityOption::getId,HappyActivityOption::getLikesCnt)
+                        .eq(HappyActivityOption::getActivityId, happyActivityOption.getActivityId())
+                        .eq(HappyActivityOption::getDeleteFlag, StateUpDownEnum.DOWN.getCode())
+                        .eq(HappyActivityOption::getState, StateUpDownEnum.VOTE_OPTION_STATE_AUDIT_SUCCESS.getCode())
+                .orderByDesc(HappyActivityOption::getLikesCnt)
+        );
+        //获取上一个名次的数据
+        int firstCnt = 1;
+        int distanceCnt = 0;
+        for (HappyActivityOption option : happyActivityOptions){
+            if(option.getId().equals(id)){
+                apiActivityOptionVo.setFirstCnt(firstCnt);
+                if( firstCnt == 1 ){
+                    apiActivityOptionVo.setDistanceCnt(distanceCnt);
+                }else{
+                    apiActivityOptionVo.setDistanceCnt(distanceCnt- option.getLikesCnt());
+                }
+                break;
+            }else{
+                firstCnt = firstCnt + 1;
+                distanceCnt = option.getLikesCnt();
+            }
+        }
+
         return new FebsResponse().success().data(apiActivityOptionVo);
     }
 
@@ -250,7 +297,6 @@
                 new LambdaQueryWrapper<HappyFollow>()
                         .eq(HappyFollow::getMemberId, memberId)
                         .eq(HappyFollow::getSourceId, sourceId)
-                        .eq(HappyFollow::getSourceOptionId, sourceOptionId)
                         .eq(HappyFollow::getType, type)
                         .gt(HappyFollow::getCreatedTime, DateUtil.beginOfDay(new Date()))
         );
@@ -272,7 +318,7 @@
         if(CollUtil.isNotEmpty(records)){
             //stream流操作records,获取全部的memberId(全部投票人)
             Set<Long> memberIds = records.stream().map(ApiVoteRecordInPageVo::getMemberId).collect(Collectors.toSet());
-            if(CollUtil.isEmpty(memberIds)){
+            if(CollUtil.isNotEmpty(memberIds)){
                 List<MallMember> mallMembers = mallMemberMapper.selectList(
                         new LambdaQueryWrapper<MallMember>()
                                 .select(MallMember::getId, MallMember::getName, MallMember::getAvatar)
@@ -291,6 +337,31 @@
 
 
         return new FebsResponse().success().data(voteRecordInPage);
+    }
+
+    @Override
+    public FebsResponse operateValidRegister(ApiOperateValidRegisterActivityDto dto) {
+        Long memberId = LoginUserUtil.getLoginUser().getId();
+        HappyActivity happyActivity = this.baseMapper.selectById(dto.getActivityId());
+
+        if (StateUpDownEnum.ACTIVITY_STATE_END.getCode() == happyActivity.getState()) {
+            throw new FebsException("活动已结束");
+        }
+        if (StateUpDownEnum.DOWN.getCode() == happyActivity.getAddState()) {
+            throw new FebsException("活动尚未开启报名");
+        }
+        //判断用户是否重复报名
+        Integer registerCnt = happyActivityOptionMapper.selectCount(
+                new LambdaQueryWrapper<HappyActivityOption>()
+                        .eq(HappyActivityOption::getMemberId, memberId)
+                        .eq(HappyActivityOption::getActivityId, dto.getActivityId())
+                        .ne(HappyActivityOption::getState, StateUpDownEnum.VOTE_OPTION_STATE_AUDIT_REFUSE.getCode())
+                        .eq(HappyActivityOption::getDeleteFlag, StateUpDownEnum.DOWN.getCode())
+        );
+        if (registerCnt > 0) {
+            throw new FebsException("您已经报名过了");
+        }
+        return new FebsResponse().success();
     }
 
     @Override
@@ -412,6 +483,12 @@
         HappyActivity happyActivity = this.baseMapper.selectById(activityId);
         if (ObjectUtil.isEmpty(happyActivity)) {
             throw new FebsException("活动不存在");
+        }
+        if (StateUpDownEnum.ACTIVITY_STATE_NOT_START.getCode() == happyActivity.getState()) {
+            throw new FebsException("活动尚未开始");
+        }
+        if (StateUpDownEnum.ACTIVITY_STATE_END.getCode() == happyActivity.getState()) {
+            throw new FebsException("活动已结束");
         }
 
         Integer joinCnt = happyActivity.getJoinCnt();
@@ -770,12 +847,82 @@
     }
 
     @Override
+    public FebsResponse checkOrder(ApiCheckOrderDto dto) {
+        // 获取当前登录用户的ID
+        Long memberId = LoginUserUtil.getLoginUser().getId();
+
+        MallMember mallMember = mallMemberMapper.selectById(memberId);
+
+        if(StateUpDownEnum.UP.getCode() != mallMember.getCheckOrder()){
+            throw new FebsException("您不是核销员!");
+        }
+
+        String orderItemCode = dto.getOrderItemCode();
+
+        HappyActivityOrderItem happyActivityOrderItem = happyActivityOrderItemMapper.selectOne(
+                new LambdaQueryWrapper<HappyActivityOrderItem>()
+                        .eq(HappyActivityOrderItem::getCode, orderItemCode)
+                        .eq(HappyActivityOrderItem::getState, StateUpDownEnum.DOWN.getCode())
+                .last("limit 1")
+        );
+        if(happyActivityOrderItem != null){
+            happyActivityOrderItem.setState(StateUpDownEnum.UP.getCode());
+            happyActivityOrderItem.setTransferItemId(memberId);
+            happyActivityOrderItemMapper.updateById(happyActivityOrderItem);
+
+            agentProducer.sendCheckActivityItem(happyActivityOrderItem.getOrderId());
+
+            HappyActivity happyActivity = this.baseMapper.selectById(happyActivityOrderItem.getActivityId());
+            ApiCheckOrderVo apiCheckOrderVo = new ApiCheckOrderVo();
+            apiCheckOrderVo.setActivityName(happyActivity.getName());
+            apiCheckOrderVo.setActivityStartTime(happyActivity.getStartTime());
+            apiCheckOrderVo.setActivityEndTime(happyActivity.getEndTime());
+            apiCheckOrderVo.setActivityAddress(happyActivity.getAddress());
+            apiCheckOrderVo.setCode(happyActivityOrderItem.getCode());
+            apiCheckOrderVo.setName(happyActivityOrderItem.getName());
+            apiCheckOrderVo.setPhone(happyActivityOrderItem.getPhone());
+            apiCheckOrderVo.setPrice(happyActivityOrderItem.getPrice());
+
+            return new FebsResponse().success().data(apiCheckOrderVo);
+        }
+
+        return new FebsResponse().fail().message("核销失败!");
+    }
+
+    /**
+     * 检查活动订单项的状态
+     * 当指定订单的所有活动订单项都不处于"未使用"状态时,将订单状态更新为"已使用"
+     *
+     * @param orderId 订单ID,用于查询活动订单项和订单信息
+     */
+    @Override
+    public void checkActivityItem(Long orderId) {
+        // 查询指定订单ID的活动订单项数量,且状态为"未使用"
+        Integer integer = happyActivityOrderItemMapper.selectCount(
+                new LambdaQueryWrapper<HappyActivityOrderItem>()
+                        .eq(HappyActivityOrderItem::getOrderId, orderId)
+                        .eq(HappyActivityOrderItem::getState, StateUpDownEnum.DOWN.getCode())
+        );
+        // 如果没有找到任何未使用的活动订单项
+        if(0 == integer){
+            // 根据订单ID查询订单信息
+            HappyActivityOrder happyActivityOrder = happyActivityOrderMapper.selectById(orderId);
+            if(happyActivityOrder == null){
+                return;
+            }
+            // 更新订单状态为"已使用"
+            happyActivityOrder.setState(StateUpDownEnum.ORDER_STATE_USED.getCode());
+            // 保存更新后的订单信息
+            happyActivityOrderMapper.updateById(happyActivityOrder);
+        }
+        // 结束方法执行
+        return;
+    }
+
+    @Override
     public FebsResponse voteActivityHot(Long id) {
 
         ApiVoteActivityHotVo apiVoteActivityHotVo = new ApiVoteActivityHotVo();
-        HappyActivity happyActivity = this.baseMapper.selectById(id);
-        apiVoteActivityHotVo.setStartTime(happyActivity.getStartTime());
-        apiVoteActivityHotVo.setEndTime(happyActivity.getEndTime());
 
         Integer optionCnt = happyActivityOptionMapper.selectCount(
                 new LambdaQueryWrapper<HappyActivityOption>()

--
Gitblit v1.9.1