From 2f67dbf8e585cbff4ed5737c08d0b0061e8b4d50 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Wed, 23 Apr 2025 17:50:20 +0800
Subject: [PATCH] refactor(mall): 重构投票活动相关接口和数据结构

---
 src/main/java/cc/mrbird/febs/mall/controller/activity/ViewHappyActivityController.java        |    7 --
 src/main/java/cc/mrbird/febs/mall/dto/activity/ApiVoteOptionInPageDto.java                    |   24 ++++++++
 src/main/java/cc/mrbird/febs/mall/vo/activity/ApiCategoryInfoVo.java                          |    2 
 src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityCategoryController.java |    2 
 src/main/resources/mapper/modules/HappyActivityOptionMapper.xml                               |   19 ++++++
 src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java                  |   45 +++-----------
 src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityCategoryServiceImpl.java          |    2 
 src/main/java/cc/mrbird/febs/mall/vo/ApiActivityOptionVo.java                                 |   14 +---
 src/main/java/cc/mrbird/febs/mall/service/HappyActivityService.java                           |    3 
 src/main/java/cc/mrbird/febs/mall/mapper/HappyActivityMapper.java                             |    8 ++
 src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityController.java         |    7 +-
 src/main/java/cc/mrbird/febs/mall/vo/ApiActivityOptionListVo.java                             |    7 -
 12 files changed, 74 insertions(+), 66 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityCategoryController.java b/src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityCategoryController.java
index 60eb729..347d96b 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityCategoryController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityCategoryController.java
@@ -2,7 +2,7 @@
 
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.mall.service.HappyActivityCategoryService;
-import cc.mrbird.febs.mall.vo.ApiCategoryInfoVo;
+import cc.mrbird.febs.mall.vo.activity.ApiCategoryInfoVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityController.java b/src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityController.java
index 72ed54a..85fd0bf 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityController.java
@@ -3,6 +3,7 @@
 import cc.mrbird.febs.common.annotation.Limit;
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.mall.dto.*;
+import cc.mrbird.febs.mall.dto.activity.ApiVoteOptionInPageDto;
 import cc.mrbird.febs.mall.service.HappyActivityService;
 import cc.mrbird.febs.mall.vo.*;
 import io.swagger.annotations.Api;
@@ -56,10 +57,10 @@
     @ApiResponses({
             @ApiResponse(code = 200, message = "success", response = ApiActivityOptionListVo.class)
     })
-    @GetMapping(value = "/voteOptionList/{id}")
-    public FebsResponse voteOptionList(@PathVariable("id") Long id) {
+    @GetMapping(value = "/voteOptionInPage")
+    public FebsResponse voteOptionInPage(@RequestBody @Validated ApiVoteOptionInPageDto dto) {
 
-        return happyActivityService.voteOptionList(id);
+        return happyActivityService.voteOptionInPage(dto);
     }
 
     @ApiOperation(value = "投票活动-选项详情", notes = "投票活动-选项详情")
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/activity/ViewHappyActivityController.java b/src/main/java/cc/mrbird/febs/mall/controller/activity/ViewHappyActivityController.java
index 7e467c5..97a1e8d 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/activity/ViewHappyActivityController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/activity/ViewHappyActivityController.java
@@ -2,8 +2,6 @@
 
 import cc.mrbird.febs.common.controller.BaseController;
 import cc.mrbird.febs.common.entity.FebsConstant;
-import cc.mrbird.febs.common.entity.FebsResponse;
-import cc.mrbird.febs.common.entity.QueryRequest;
 import cc.mrbird.febs.common.utils.FebsUtil;
 import cc.mrbird.febs.common.utils.RedisUtils;
 import cc.mrbird.febs.mall.entity.HappyActivity;
@@ -12,19 +10,14 @@
 import cc.mrbird.febs.mall.mapper.HappyActivityCategoryMapper;
 import cc.mrbird.febs.mall.mapper.HappyActivityOptionMapper;
 import cc.mrbird.febs.mall.service.IAdminHappyActivityService;
-import cc.mrbird.febs.mall.vo.activity.VoteActivityVo;
-import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.StrUtil;
 import lombok.RequiredArgsConstructor;
-import lombok.SneakyThrows;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
-
-import java.util.Map;
 
 @Controller("votesActivityView")
 @RequestMapping(FebsConstant.VIEW_PREFIX + "modules/votesActivity")
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/activity/ApiVoteOptionInPageDto.java b/src/main/java/cc/mrbird/febs/mall/dto/activity/ApiVoteOptionInPageDto.java
new file mode 100644
index 0000000..21938ef
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/dto/activity/ApiVoteOptionInPageDto.java
@@ -0,0 +1,24 @@
+package cc.mrbird.febs.mall.dto.activity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+@Data
+@ApiModel(value = "ApiVoteOptionInPageDto", description = "参数")
+public class ApiVoteOptionInPageDto {
+
+
+    @NotNull(message = "页码不能为空")
+    @ApiModelProperty(value = "页码", example = "1")
+    private Integer pageNow;
+
+    @NotNull(message = "每页数量不能为空")
+    @ApiModelProperty(value = "每页数量", example = "10")
+    private Integer pageSize;
+
+    @NotNull(message = "活动ID不能为空")
+    @ApiModelProperty(value = "活动ID")
+    private Long activityId;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/HappyActivityMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/HappyActivityMapper.java
index 440c582..d968a9f 100644
--- a/src/main/java/cc/mrbird/febs/mall/mapper/HappyActivityMapper.java
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/HappyActivityMapper.java
@@ -1,9 +1,11 @@
 package cc.mrbird.febs.mall.mapper;
 
+import cc.mrbird.febs.mall.dto.activity.ApiVoteOptionInPageDto;
 import cc.mrbird.febs.mall.entity.HappyActivity;
 import cc.mrbird.febs.mall.dto.ApiActivityInfoDto;
 import cc.mrbird.febs.mall.vo.ApiActivityInfoVo;
 import cc.mrbird.febs.mall.dto.ApiVoteRecordInPageDto;
+import cc.mrbird.febs.mall.vo.ApiActivityOptionListVo;
 import cc.mrbird.febs.mall.vo.ApiVoteRecordInPageVo;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -13,5 +15,9 @@
 
     Page<ApiActivityInfoVo> selectActivityPage(Page<ApiActivityInfoVo> page, @Param("record")ApiActivityInfoDto dto);
 
-    Page<ApiVoteRecordInPageVo> getVoteRecordInPage(Page<ApiActivityInfoVo> page, @Param("record")ApiVoteRecordInPageDto dto);
+    Page<ApiVoteRecordInPageVo> getVoteRecordInPage(Page<ApiVoteRecordInPageVo> page, @Param("record")ApiVoteRecordInPageDto dto);
+
+    void updateHappyActivityOptionLikeCnt(@Param("id")Long sourceOptionId);
+
+    Page<ApiActivityOptionListVo> getVoteOptionInPage(Page<ApiActivityOptionListVo> page, @Param("record")ApiVoteOptionInPageDto dto);
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/service/HappyActivityService.java b/src/main/java/cc/mrbird/febs/mall/service/HappyActivityService.java
index 0460af0..d7a6612 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/HappyActivityService.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/HappyActivityService.java
@@ -2,6 +2,7 @@
 
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.mall.dto.*;
+import cc.mrbird.febs.mall.dto.activity.ApiVoteOptionInPageDto;
 import cc.mrbird.febs.mall.entity.HappyActivity;
 import cc.mrbird.febs.mall.dto.ApiOperateDoDto;
 import cc.mrbird.febs.mall.dto.ApiOperateVoteDto;
@@ -14,7 +15,7 @@
 
     FebsResponse activityInfo(ApiActivityDto dto);
 
-    FebsResponse voteOptionList(Long id);
+    FebsResponse voteOptionInPage(ApiVoteOptionInPageDto dto);
 
     FebsResponse voteOption(Long id);
 
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityCategoryServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityCategoryServiceImpl.java
index 13e5f6f..d7cd306 100644
--- a/src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityCategoryServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityCategoryServiceImpl.java
@@ -5,7 +5,7 @@
 import cc.mrbird.febs.mall.entity.HappyActivityCategory;
 import cc.mrbird.febs.mall.mapper.HappyActivityCategoryMapper;
 import cc.mrbird.febs.mall.service.HappyActivityCategoryService;
-import cc.mrbird.febs.mall.vo.ApiCategoryInfoVo;
+import cc.mrbird.febs.mall.vo.activity.ApiCategoryInfoVo;
 import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
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 773d5c5..a0df434 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,6 +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.ApiVoteOptionInPageDto;
 import cc.mrbird.febs.mall.entity.*;
 import cc.mrbird.febs.mall.mapper.*;
 import cc.mrbird.febs.mall.service.HappyActivityService;
@@ -134,37 +135,11 @@
     }
 
     @Override
-    public FebsResponse voteOptionList(Long id) {
-        ArrayList<ApiActivityOptionListVo> apiActivityOptionListVos = new ArrayList<>();
-
-
-        HappyActivity happyActivity = this.baseMapper.selectById(id);
-        if(StateUpDownEnum.ACTIVITY_TYPE_VOTE.getCode() != happyActivity.getType()){
-            throw new FebsException("投票活动才可获取投票选项");
-        }
-
-        List<HappyActivityOption> happyActivityOptions = happyActivityOptionMapper.selectList(
-                new LambdaQueryWrapper<HappyActivityOption>()
-                        .select(
-                                HappyActivityOption::getId,
-                                HappyActivityOption::getOptionName,
-                                HappyActivityOption::getRank,
-                                HappyActivityOption::getLikesCnt,
-                                HappyActivityOption::getImage
-                        )
-                .eq(HappyActivityOption::getActivityId,id)
-                .eq(HappyActivityOption::getState,StateUpDownEnum.VOTE_OPTION_STATE_AUDIT_SUCCESS.getCode())
-                .eq(HappyActivityOption::getDeleteFlag,StateUpDownEnum.DOWN.getCode())
-                .orderByAsc(HappyActivityOption::getRank)
-        );
-        if(CollUtil.isNotEmpty(happyActivityOptions)){
-            happyActivityOptions.forEach(option -> {
-                ApiActivityOptionListVo apiActivityOptionListVo = new ApiActivityOptionListVo();
-                BeanUtil.copyProperties(option, apiActivityOptionListVo);
-                apiActivityOptionListVos.add(apiActivityOptionListVo);
-            });
-        }
-        return new FebsResponse().success().data(apiActivityOptionListVos);
+    public FebsResponse voteOptionInPage(ApiVoteOptionInPageDto dto) {
+        // 创建分页对象,传入当前页和每页大小
+        Page<ApiActivityOptionListVo> page = new Page<>(dto.getPageNow(), dto.getPageSize());
+        Page<ApiActivityOptionListVo> voteRecordInPage = this.baseMapper.getVoteOptionInPage(page, dto);
+        return new FebsResponse().success().data(voteRecordInPage);
     }
 
     @Override
@@ -252,7 +227,7 @@
         }
 
         HappyActivityOption happyActivityOption = happyActivityOptionMapper.selectById(sourceOptionId);
-        if (happyActivityOption == null) {
+        if (null == happyActivityOption) {
             throw new FebsException("投票对象不存在");
         }
         if (StateUpDownEnum.VOTE_OPTION_STATE_AUDIT_SUCCESS.getCode() != happyActivityOption.getState()) {
@@ -268,17 +243,17 @@
                         .gt(HappyFollow::getCreatedTime, DateUtil.beginOfDay(new Date()))
         );
         if (CollUtil.isNotEmpty(happyFollows) && happyFollows.size() >= happyActivity.getVoteCnt()){
-            throw new FebsException("今日已经投票");
+            throw new FebsException("今日已经投完票");
         }
+        this.baseMapper.updateHappyActivityOptionLikeCnt(sourceOptionId);
         this.operateDoVote(memberId, sourceType, sourceId, sourceOptionId, type);
-        this.addLikeCnt(sourceOptionId);
         return new FebsResponse().success();
     }
 
     @Override
     public FebsResponse voteRecordInPage(ApiVoteRecordInPageDto dto) {
         // 创建分页对象,传入当前页和每页大小
-        Page<ApiActivityInfoVo> page = new Page<>(dto.getPageNow(), dto.getPageSize());
+        Page<ApiVoteRecordInPageVo> page = new Page<>(dto.getPageNow(), dto.getPageSize());
         Page<ApiVoteRecordInPageVo> voteRecordInPage = this.baseMapper.getVoteRecordInPage(page, dto);
 
         List<ApiVoteRecordInPageVo> records = voteRecordInPage.getRecords();
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/ApiActivityOptionListVo.java b/src/main/java/cc/mrbird/febs/mall/vo/ApiActivityOptionListVo.java
index fa07419..3e296ba 100644
--- a/src/main/java/cc/mrbird/febs/mall/vo/ApiActivityOptionListVo.java
+++ b/src/main/java/cc/mrbird/febs/mall/vo/ApiActivityOptionListVo.java
@@ -14,13 +14,10 @@
     @ApiModelProperty(value = "选项名称")
     private String optionName;
 
-    @ApiModelProperty(value = "排名")
-    private Integer rank;
-
-    @ApiModelProperty(value = "点赞数量")
+    @ApiModelProperty(value = "投票数量")
     private Integer likesCnt;
 
-    @ApiModelProperty(value = "投票选项图片 URL")
+    @ApiModelProperty(value = "封面")
     private String image;
 
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/ApiActivityOptionVo.java b/src/main/java/cc/mrbird/febs/mall/vo/ApiActivityOptionVo.java
index 9f9d7e3..763d1a5 100644
--- a/src/main/java/cc/mrbird/febs/mall/vo/ApiActivityOptionVo.java
+++ b/src/main/java/cc/mrbird/febs/mall/vo/ApiActivityOptionVo.java
@@ -14,23 +14,17 @@
     @ApiModelProperty(value = "选项名称")
     private String optionName;
 
-    @ApiModelProperty(value = "排名")
-    private Integer rank;
-
-    @ApiModelProperty(value = "点赞数量")
+    @ApiModelProperty(value = "票数")
     private Integer likesCnt;
 
-    @ApiModelProperty(value = "投票选项图片 URL")
+    @ApiModelProperty(value = "封面头像")
     private String image;
 
-    @ApiModelProperty(value = "投票选项视频URL")
+    @ApiModelProperty(value = "作品")
     private String videoUrl;
 
     @ApiModelProperty(value = "选项描述")
     private String description;
-
-    @ApiModelProperty(value = "名称")
-    private String realName;
 
     @ApiModelProperty(value = "性别 0-女1-男  2-保密")
     private Integer sex;
@@ -41,6 +35,4 @@
     @ApiModelProperty(value = "是否签约mcn机构 0否 1是")
     private Integer mcnState;
 
-    @ApiModelProperty(value = "投票数量")
-    private Integer voteCnt;
 }
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/ApiCategoryInfoVo.java b/src/main/java/cc/mrbird/febs/mall/vo/activity/ApiCategoryInfoVo.java
similarity index 93%
rename from src/main/java/cc/mrbird/febs/mall/vo/ApiCategoryInfoVo.java
rename to src/main/java/cc/mrbird/febs/mall/vo/activity/ApiCategoryInfoVo.java
index a6ba03a..7dfdef8 100644
--- a/src/main/java/cc/mrbird/febs/mall/vo/ApiCategoryInfoVo.java
+++ b/src/main/java/cc/mrbird/febs/mall/vo/activity/ApiCategoryInfoVo.java
@@ -1,4 +1,4 @@
-package cc.mrbird.febs.mall.vo;
+package cc.mrbird.febs.mall.vo.activity;
 
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
diff --git a/src/main/resources/mapper/modules/HappyActivityOptionMapper.xml b/src/main/resources/mapper/modules/HappyActivityOptionMapper.xml
index 02086bc..af7ebca 100644
--- a/src/main/resources/mapper/modules/HappyActivityOptionMapper.xml
+++ b/src/main/resources/mapper/modules/HappyActivityOptionMapper.xml
@@ -42,4 +42,23 @@
         order by a.id desc
     </select>
 
+
+    <update id="updateHappyActivityOptionLikeCnt" >
+        update happy_activity_option set likes_cnt = likes_cnt + 1 where id = #{id}
+    </update>
+
+    <select id="getVoteOptionInPage" resultType="cc.mrbird.febs.mall.vo.ApiActivityOptionListVo">
+        select
+            a.id as id,
+            a.option_name as optionName,
+            a.image as image,
+            a.likes_cnt as likesCnt
+        from happy_activity_option a
+        where
+            a.state = 1
+          and a.activity_id = #{record.activityId}
+          and a.DELETE_FLAG = 1
+        order by a.order_cnt asc
+    </select>
+
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.1