Administrator
2025-04-23 2f67dbf8e585cbff4ed5737c08d0b0061e8b4d50
refactor(mall): 重构投票活动相关接口和数据结构

- 修改了 ApiActivityOptionListVo 和 ApiActivityOptionVo 的字段名称和含义
- 重命名了 ApiCategoryInfoVo 类的位置
- 更新了 ApiHappyActivityController 中的 voteOptionList 接口,改为 voteOptionInPage
- 新增了 ApiVoteOptionInPageDto 类作为分页查询参数
- 更新了相关服务层和 Mapper 层的接口和实现
1 files added
1 files renamed
10 files modified
140 ■■■■ changed files
src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityCategoryController.java 2 ●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityController.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/activity/ViewHappyActivityController.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/activity/ApiVoteOptionInPageDto.java 24 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/HappyActivityMapper.java 8 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/HappyActivityService.java 3 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityCategoryServiceImpl.java 2 ●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java 45 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/ApiActivityOptionListVo.java 7 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/ApiActivityOptionVo.java 14 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/activity/ApiCategoryInfoVo.java 2 ●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/HappyActivityOptionMapper.xml 19 ●●●●● patch | view | raw | blame | history
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;
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 = "投票活动-选项详情")
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")
src/main/java/cc/mrbird/febs/mall/dto/activity/ApiVoteOptionInPageDto.java
New file
@@ -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;
}
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);
}
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);
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;
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();
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;
}
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;
}
src/main/java/cc/mrbird/febs/mall/vo/activity/ApiCategoryInfoVo.java
File was renamed from src/main/java/cc/mrbird/febs/mall/vo/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;
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>