From 33cf3c5609ea2eecc8c8a2c480f38bc5ee70b186 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Thu, 24 Apr 2025 16:51:29 +0800
Subject: [PATCH] refactor(votesActivity): 优化订单列表功能

---
 src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java |  146 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 144 insertions(+), 2 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 6ef0daf..5188d8b 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
@@ -17,6 +17,7 @@
 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.ApiVoteActivityHotVo;
 import cc.mrbird.febs.pay.model.BrandWCPayRequestData;
 import cc.mrbird.febs.pay.service.IXcxPayService;
 import cn.hutool.core.bean.BeanUtil;
@@ -130,7 +131,6 @@
         HappyActivity happyActivity = this.baseMapper.selectOne(
                 new LambdaQueryWrapper<HappyActivity>()
                         .eq(HappyActivity::getId, dto.getId())
-                        .eq(HappyActivity::getType, dto.getType())
                         .eq(HappyActivity::getDeleteFlag, StateUpDownEnum.DOWN.getCode())
                         .ne(HappyActivity::getState, StateUpDownEnum.ACTIVITY_STATE_NOT_START.getCode())
         );
@@ -231,6 +231,12 @@
         if(StateUpDownEnum.ACTIVITY_TYPE_VOTE.getCode() != happyActivity.getType()){
             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("活动已结束");
+        }
 
         HappyActivityOption happyActivityOption = happyActivityOptionMapper.selectById(sourceOptionId);
         if (null == happyActivityOption) {
@@ -290,12 +296,54 @@
     @Override
     public FebsResponse operateRegister(ApiOperateRegisterActivityDto dto) {
         Long memberId = LoginUserUtil.getLoginUser().getId();
-        return null;
+
+        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("您已经报名过了");
+        }
+
+        Integer optionCnt = happyActivityOptionMapper.selectCount(
+                new LambdaQueryWrapper<HappyActivityOption>()
+                        .eq(HappyActivityOption::getActivityId, dto.getActivityId())
+                        .eq(HappyActivityOption::getDeleteFlag, StateUpDownEnum.DOWN.getCode())
+        );
+
+        HappyActivityOption happyActivityOption = new HappyActivityOption();
+        BeanUtil.copyProperties(dto, happyActivityOption);
+        happyActivityOption.setOrderCnt(optionCnt + 1);
+        happyActivityOption.setMemberId(memberId);
+        happyActivityOption.setOptionName(dto.getRealName());
+        happyActivityOptionMapper.insert(happyActivityOption);
+        return new FebsResponse().success().message("报名成功");
     }
 
     @Override
     public FebsResponse addConnect(ApiOperateRegisterUserDto dto) {
         Long memberId = LoginUserUtil.getLoginUser().getId();
+
+        List<HappyActivityConnect> happyActivityConnects = happyActivityConnectMapper.selectList(
+                new LambdaQueryWrapper<HappyActivityConnect>()
+                        .eq(HappyActivityConnect::getMemberId, memberId)
+                        .eq(HappyActivityConnect::getName, dto.getName())
+        );
+        if(CollUtil.isNotEmpty(happyActivityConnects)){
+            throw new FebsException("已经添加过该联系人");
+        }
 
         HappyActivityConnect happyActivityConnect = new HappyActivityConnect();
         happyActivityConnect.setMemberId(memberId);
@@ -573,6 +621,7 @@
         if(ObjectUtil.isNotEmpty(dto.getState())){
             happyActivityOrderLambdaQueryWrapper.eq(HappyActivityOrder::getState, dto.getState());
         }
+        happyActivityOrderLambdaQueryWrapper.eq(HappyActivityOrder::getDeleteFlag, StateUpDownEnum.DOWN.getCode());
         happyActivityOrderLambdaQueryWrapper.orderByDesc(HappyActivityOrder::getCreatedTime);
         Page<HappyActivityOrder> page = new Page<>(dto.getPageNum(), dto.getPageSize());
         Page<HappyActivityOrder> voteActivityPage = happyActivityOrderMapper.selectPage(page, happyActivityOrderLambdaQueryWrapper);
@@ -655,6 +704,99 @@
         return new FebsResponse().success().data(apiActivityOrderInfoVos);
     }
 
+    @Override
+    public FebsResponse orderDelete(Long id) {
+        // 获取当前登录用户的ID
+        Long memberId = LoginUserUtil.getLoginUser().getId();
+
+        List<HappyActivityOrder> happyActivityOrders = happyActivityOrderMapper.selectList(
+                new LambdaQueryWrapper<HappyActivityOrder>()
+                        .eq(HappyActivityOrder::getId, id)
+                        .eq(HappyActivityOrder::getMemberId, memberId)
+        );
+        if(CollUtil.isNotEmpty(happyActivityOrders)){
+            happyActivityOrders.forEach(happyActivityOrder -> {
+                happyActivityOrder.setDeleteFlag(StateUpDownEnum.UP.getCode());
+                happyActivityOrderMapper.updateById(happyActivityOrder);
+            });
+        }
+        return new FebsResponse().success();
+    }
+
+    @Override
+    public void activityEnd() {
+        Date date = new Date();
+        List<HappyActivity> happyActivities = this.baseMapper.selectList(
+                new LambdaQueryWrapper<HappyActivity>()
+                        .eq(HappyActivity::getState, StateUpDownEnum.ACTIVITY_STATE_ENROLLING.getCode())
+                        .le(HappyActivity::getEndTime, date)
+        );
+        if(CollUtil.isEmpty(happyActivities)){
+            return;
+        }
+        happyActivities.forEach(happyActivity -> {
+            happyActivity.setState(StateUpDownEnum.ACTIVITY_STATE_END.getCode());
+            this.baseMapper.updateById(happyActivity);
+        });
+    }
+
+    /**
+     * 当活动即将开始时自动更新活动状态
+     * 此方法旨在查询所有即将开始的活动,并将它们的状态更新为报名进行中
+     */
+    @Override
+    public void activityStart() {
+        // 获取当前日期和时间
+        DateTime date = DateUtil.date();
+
+        // 查询所有状态为未开始且当前时间在活动开始时间结束时间之间的活动
+        List<HappyActivity> happyActivities = this.baseMapper.selectList(
+                new LambdaQueryWrapper<HappyActivity>()
+                        .eq(HappyActivity::getState, StateUpDownEnum.ACTIVITY_STATE_NOT_START.getCode())
+                        .le(HappyActivity::getStartTime, date)
+                        .ge(HappyActivity::getEndTime, date)
+        );
+
+        // 如果没有找到任何符合条件的活动,则直接返回
+        if(CollUtil.isEmpty(happyActivities)){
+            return;
+        }
+
+        // 遍历每个符合条件的活动,将其状态更新为报名进行中,并保存更新
+        happyActivities.forEach(happyActivity -> {
+            happyActivity.setState(StateUpDownEnum.ACTIVITY_STATE_ENROLLING.getCode());
+            this.baseMapper.updateById(happyActivity);
+        });
+    }
+
+    @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>()
+                        .eq(HappyActivityOption::getActivityId, id)
+                        .eq(HappyActivityOption::getDeleteFlag, StateUpDownEnum.DOWN.getCode())
+                        .eq(HappyActivityOption::getState, StateUpDownEnum.VOTE_OPTION_STATE_AUDIT_SUCCESS.getCode())
+        );
+        apiVoteActivityHotVo.setOptionCnt(optionCnt);
+
+        Integer followVoteCnt = happyFollowMapper.selectCount(
+                new LambdaQueryWrapper<HappyFollow>()
+                        .eq(HappyFollow::getSourceType, StateUpDownEnum.SOURCE_TYPE_ACTIVITY.getCode())
+                        .eq(HappyFollow::getSourceId, id)
+                        .eq(HappyFollow::getType, StateUpDownEnum.VOTE.getCode())
+                        .eq(HappyFollow::getDeleteFlag, StateUpDownEnum.DOWN.getCode())
+        );
+        apiVoteActivityHotVo.setFollowVoteCnt(followVoteCnt);
+
+        return new FebsResponse().success().data(apiVoteActivityHotVo);
+    }
+
 
     public static void main(String[] args) {
         Date date = new Date();

--
Gitblit v1.9.1