Administrator
9 days ago e187e18fc4fd2f120b67a9fdba4d9d2864f293fb
feat(mall): 添加投票活动排行榜功能并优化相关接口

- 新增投票活动排行榜接口和相关 DTO
- 实现投票活动排行榜的查询逻辑
- 优化投票活动列表查询接口,增加模糊搜索功能
- 调整活动热度接口,移除不必要的活动时间字段
1 files added
8 files modified
118 ■■■■ changed files
src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityController.java 13 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/activity/ApiVoteOptionInPageDto.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/activity/ApiVoteOptionRecordInPageDto.java 28 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/HappyActivityMapper.java 3 ●●●●● 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/AdminHappyActivityServiceImpl.java 2 ●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java 12 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/activity/ApiVoteActivityHotVo.java 10 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/HappyActivityOptionMapper.xml 44 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/activity/ApiHappyActivityController.java
@@ -4,6 +4,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.dto.activity.ApiVoteOptionRecordInPageDto;
import cc.mrbird.febs.mall.service.HappyActivityService;
import cc.mrbird.febs.mall.vo.*;
import cc.mrbird.febs.mall.vo.activity.ApiVoteActivityHotVo;
@@ -58,12 +59,22 @@
    @ApiResponses({
            @ApiResponse(code = 200, message = "success", response = ApiActivityOptionListVo.class)
    })
    @GetMapping(value = "/voteOptionInPage")
    @PostMapping(value = "/voteOptionInPage")
    public FebsResponse voteOptionInPage(@RequestBody @Validated ApiVoteOptionInPageDto dto) {
        return happyActivityService.voteOptionInPage(dto);
    }
    @ApiOperation(value = "投票活动-排行榜", notes = "投票活动-排行榜")
    @ApiResponses({
            @ApiResponse(code = 200, message = "success", response = ApiActivityOptionListVo.class)
    })
    @PostMapping(value = "/voteOptionRecordInPage")
    public FebsResponse voteOptionRecordInPage(@RequestBody @Validated ApiVoteOptionRecordInPageDto dto) {
        return happyActivityService.voteOptionRecordInPage(dto);
    }
    @ApiOperation(value = "投票活动-活动热度", notes = "投票活动-活动热度")
    @ApiResponses({
            @ApiResponse(code = 200, message = "success", response = ApiVoteActivityHotVo.class)
src/main/java/cc/mrbird/febs/mall/dto/activity/ApiVoteOptionInPageDto.java
@@ -21,4 +21,7 @@
    @NotNull(message = "活动ID不能为空")
    @ApiModelProperty(value = "活动ID")
    private Long activityId;
    @ApiModelProperty(value = "搜索条件")
    private String query;
}
src/main/java/cc/mrbird/febs/mall/dto/activity/ApiVoteOptionRecordInPageDto.java
New file
@@ -0,0 +1,28 @@
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 = "ApiVoteOptionRecordInPageDto", description = "参数")
public class ApiVoteOptionRecordInPageDto {
    @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;
    @ApiModelProperty(value = "搜索条件")
    private String query;
}
src/main/java/cc/mrbird/febs/mall/mapper/HappyActivityMapper.java
@@ -2,6 +2,7 @@
import cc.mrbird.febs.mall.dto.activity.AdminHappyActivityOrderDto;
import cc.mrbird.febs.mall.dto.activity.ApiVoteOptionInPageDto;
import cc.mrbird.febs.mall.dto.activity.ApiVoteOptionRecordInPageDto;
import cc.mrbird.febs.mall.entity.HappyActivity;
import cc.mrbird.febs.mall.dto.ApiActivityInfoDto;
import cc.mrbird.febs.mall.entity.HappyActivityOrder;
@@ -24,4 +25,6 @@
    Page<ApiActivityOptionListVo> getVoteOptionInPage(Page<ApiActivityOptionListVo> page, @Param("record")ApiVoteOptionInPageDto dto);
    Page<HappyActivityOrder> selectOrderInPage(Page<HappyActivityOrder> page, @Param("record")AdminHappyActivityOrderDto dto);
    Page<ApiActivityOptionListVo> getVoteOptionRecordInPage(Page<ApiActivityOptionListVo> page, ApiVoteOptionRecordInPageDto dto);
}
src/main/java/cc/mrbird/febs/mall/service/HappyActivityService.java
@@ -5,6 +5,7 @@
import cc.mrbird.febs.mall.dto.activity.ApiActivityOrderListDto;
import cc.mrbird.febs.mall.dto.activity.ApiCheckOrderDto;
import cc.mrbird.febs.mall.dto.activity.ApiVoteOptionInPageDto;
import cc.mrbird.febs.mall.dto.activity.ApiVoteOptionRecordInPageDto;
import cc.mrbird.febs.mall.entity.HappyActivity;
import cc.mrbird.febs.mall.dto.ApiOperateDoDto;
import cc.mrbird.febs.mall.dto.ApiOperateVoteDto;
@@ -19,6 +20,8 @@
    FebsResponse voteOptionInPage(ApiVoteOptionInPageDto dto);
    FebsResponse voteOptionRecordInPage(ApiVoteOptionRecordInPageDto dto);
    FebsResponse voteActivityHot(Long id);
    FebsResponse voteOption(Long id);
src/main/java/cc/mrbird/febs/mall/service/impl/AdminHappyActivityServiceImpl.java
@@ -380,7 +380,7 @@
            );
            if(CollUtil.isNotEmpty(happyActivityOrderItems)){
                happyActivityOrderItems.forEach(happyActivityOrderItem -> {
                    happyActivityOrderItem.setState(StateUpDownEnum.ORDER_STATE_USED.getCode());
                    happyActivityOrderItem.setState(StateUpDownEnum.UP.getCode());
                    happyActivityOrderItemMapper.updateById(happyActivityOrderItem);
                });
            }
src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java
@@ -10,6 +10,7 @@
import cc.mrbird.febs.mall.dto.activity.ApiActivityOrderListDto;
import cc.mrbird.febs.mall.dto.activity.ApiCheckOrderDto;
import cc.mrbird.febs.mall.dto.activity.ApiVoteOptionInPageDto;
import cc.mrbird.febs.mall.dto.activity.ApiVoteOptionRecordInPageDto;
import cc.mrbird.febs.mall.entity.*;
import cc.mrbird.febs.mall.mapper.*;
import cc.mrbird.febs.mall.service.HappyActivityService;
@@ -149,6 +150,14 @@
        // 创建分页对象,传入当前页和每页大小
        Page<ApiActivityOptionListVo> page = new Page<>(dto.getPageNow(), dto.getPageSize());
        Page<ApiActivityOptionListVo> voteRecordInPage = this.baseMapper.getVoteOptionInPage(page, dto);
        return new FebsResponse().success().data(voteRecordInPage);
    }
    @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);
    }
@@ -850,9 +859,6 @@
    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>()
src/main/java/cc/mrbird/febs/mall/vo/activity/ApiVoteActivityHotVo.java
@@ -17,14 +17,4 @@
    @ApiModelProperty(value = "累计总票数")
    private Integer followVoteCnt;
    @ApiModelProperty(value = "活动开始时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date startTime;
    @ApiModelProperty(value = "活动结束时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date endTime;
}
src/main/resources/mapper/modules/HappyActivityOptionMapper.xml
@@ -56,10 +56,20 @@
            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
        <where>
            and a.state = 1
            and a.activity_id = #{record.activityId}
            and a.DELETE_FLAG = 0
            <if test="record != null">
                <if test="record.query != null and record.query != ''">
                    and (
                    a.name like CONCAT('%', CONCAT(#{record.query}, '%'))
                    or
                    a.order_cnt = #{record.query}
                    )
                </if>
            </if>
        </where>
        order by a.order_cnt asc
    </select>
@@ -88,4 +98,30 @@
        order by a.id desc
    </select>
    <select id="getVoteOptionRecordInPage" 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>
            and a.state = 1
            and a.activity_id = #{record.activityId}
            and a.DELETE_FLAG = 0
            <if test="record != null">
                <if test="record.query != null and record.query != ''">
                    and (
                    a.name like CONCAT('%', CONCAT(#{record.query}, '%'))
                    or
                    a.order_cnt = #{record.query}
                    )
                </if>
            </if>
        </where>
        order by a.likes_cnt desc
    </select>
</mapper>