feat(mall): 添加投票活动排行榜功能并优化相关接口
- 新增投票活动排行榜接口和相关 DTO
- 实现投票活动排行榜的查询逻辑
- 优化投票活动列表查询接口,增加模糊搜索功能
- 调整活动热度接口,移除不必要的活动时间字段
1 files added
8 files modified
| | |
| | | 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; |
| | |
| | | @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) |
| | |
| | | @NotNull(message = "活动ID不能为空") |
| | | @ApiModelProperty(value = "活动ID") |
| | | private Long activityId; |
| | | |
| | | @ApiModelProperty(value = "搜索条件") |
| | | private String query; |
| | | } |
New file |
| | |
| | | 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; |
| | | } |
| | |
| | | |
| | | 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; |
| | |
| | | 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); |
| | | } |
| | |
| | | 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; |
| | |
| | | |
| | | FebsResponse voteOptionInPage(ApiVoteOptionInPageDto dto); |
| | | |
| | | FebsResponse voteOptionRecordInPage(ApiVoteOptionRecordInPageDto dto); |
| | | |
| | | FebsResponse voteActivityHot(Long id); |
| | | |
| | | FebsResponse voteOption(Long id); |
| | |
| | | ); |
| | | if(CollUtil.isNotEmpty(happyActivityOrderItems)){ |
| | | happyActivityOrderItems.forEach(happyActivityOrderItem -> { |
| | | happyActivityOrderItem.setState(StateUpDownEnum.ORDER_STATE_USED.getCode()); |
| | | happyActivityOrderItem.setState(StateUpDownEnum.UP.getCode()); |
| | | happyActivityOrderItemMapper.updateById(happyActivityOrderItem); |
| | | }); |
| | | } |
| | |
| | | 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; |
| | |
| | | // 创建分页对象,传入当前页和每页大小 |
| | | 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); |
| | | } |
| | | |
| | |
| | | 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>() |
| | |
| | | @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; |
| | | |
| | | |
| | | } |
| | |
| | | a.image as image, |
| | | a.likes_cnt as likesCnt |
| | | from happy_activity_option a |
| | | where |
| | | a.state = 1 |
| | | <where> |
| | | and a.state = 1 |
| | | and a.activity_id = #{record.activityId} |
| | | and a.DELETE_FLAG = 1 |
| | | 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> |
| | | |
| | |
| | | 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> |