记得上下班打卡 | git大法好,push需谨慎

Commit e2bbf431 authored by wangyifan's avatar wangyifan

草莓护照-徽章添加排序

parent 293461cf
......@@ -70,3 +70,6 @@ CREATE TABLE `adam_caomei_badge_apply_record` (
KEY `idx_user_id` (`user_id`),
KEY `idx_audit_status` (`audit_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='草莓护照-徽章补签申请记录表';
-- 2026-04-13 新增排序字段
ALTER TABLE `adam_caomei_badge` ADD COLUMN `sort` int(11) NOT NULL DEFAULT 0 COMMENT '排序值,数值越大越靠前' AFTER `display_status`;
\ No newline at end of file
......@@ -31,4 +31,7 @@ public class AdamCaomeiBadgeParam {
@ApiModelProperty(value = "上架状态: 0-下架(默认), 1-已发布")
private Integer displayStatus;
@ApiModelProperty(value = "排序值,数值越大越靠前")
private Integer sort;
}
......@@ -34,6 +34,9 @@ public class AdamCaomeiBadgeVo {
@ApiModelProperty(value = "上架状态: 0-下架(默认), 1-已发布")
private Integer displayStatus;
@ApiModelProperty(value = "排序值,数值越大越靠前")
private Integer sort;
@ApiModelProperty(value = "添加时间")
private Date createdAt;
......@@ -42,4 +45,5 @@ public class AdamCaomeiBadgeVo {
@ApiModelProperty(value = "领取人数")
private Integer claimedCount;
}
package com.liquidnet.client.admin.web.controller.zhengzai.adam;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.liquidnet.client.admin.common.annotation.Log;
import com.liquidnet.client.admin.common.core.controller.BaseController;
import com.liquidnet.client.admin.common.core.domain.AjaxResult;
......@@ -24,7 +22,6 @@ import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@Api(tags = "草莓护照-徽章管理")
@Controller
......@@ -47,25 +44,7 @@ public class AdamCaomeiBadgeController extends BaseController {
@ResponseBody
public TableDataInfo list(AdamCaomeiBadgeSearchParam param) {
startPage();
LambdaQueryWrapper<AdamCaomeiBadge> queryWrapper = Wrappers.lambdaQuery(AdamCaomeiBadge.class);
if (StringUtils.isNotBlank(param.getName())) {
queryWrapper.like(AdamCaomeiBadge::getName, param.getName());
}
if (param.getType() != null) {
queryWrapper.eq(AdamCaomeiBadge::getType, param.getType());
}
if (param.getDisplayStatus() != null) {
queryWrapper.eq(AdamCaomeiBadge::getDisplayStatus, param.getDisplayStatus());
}
queryWrapper.orderByDesc(AdamCaomeiBadge::getCreatedAt);
List<AdamCaomeiBadge> list = adamCaomeiBadgeAdminService.list(queryWrapper);
List<AdamCaomeiBadgeVo> voList = list.stream().map(item -> {
AdamCaomeiBadgeVo vo = new AdamCaomeiBadgeVo();
BeanUtils.copyProperties(item, vo);
vo.setClaimedCount(0); // TODO: 关联 user_badge 表统计领取人数
return vo;
}).collect(Collectors.toList());
List<AdamCaomeiBadgeVo> voList = adamCaomeiBadgeAdminService.listWithClaimedCount(param);
return getDataTable(voList);
}
......@@ -83,6 +62,9 @@ public class AdamCaomeiBadgeController extends BaseController {
BeanUtils.copyProperties(param, badge);
badge.setBadgeId(IDGenerator.nextSnowId());
badge.setDisplayStatus(0); // 默认下架
if (badge.getSort() == null) {
badge.setSort(0);
}
badge.setCreatedAt(new Date());
badge.setUpdatedAt(new Date());
......
......@@ -29,6 +29,12 @@
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">排序:</label>
<div class="col-sm-8">
<input name="sort" class="form-control" type="number" min="0" value="0" placeholder="数值越大越靠前">
</div>
</div>
<div class="form-group" id="ticketTimesDiv" style="display: none;">
<label class="col-sm-3 control-label is-required">关联演出场次:</label>
<div class="col-sm-8">
......
......@@ -42,6 +42,12 @@
<div class="form-control-static" th:if="*{displayStatus == 0}">下架</div>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">排序:</label>
<div class="col-sm-8">
<div class="form-control-static" th:text="*{sort}"></div>
</div>
</div>
</form>
</div>
<th:block th:include="include :: footer" />
......
......@@ -30,6 +30,12 @@
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">排序:</label>
<div class="col-sm-8">
<input name="sort" th:field="*{sort}" class="form-control" type="number" min="0" placeholder="数值越大越靠前">
</div>
</div>
<div class="form-group" id="ticketTimesDiv" th:style="${badge.type == 2 ? 'display:block;' : 'display:none;'}">
<label class="col-sm-3 control-label is-required">关联演出场次:</label>
<div class="col-sm-8">
......
......@@ -108,6 +108,10 @@
field: 'claimedCount',
title: '领取人数'
},
{
field: 'sort',
title: '排序(越大越靠前)'
},
{
field: 'displayStatus',
title: '状态',
......
package com.liquidnet.client.admin.zhengzai.adam.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.service.adam.dto.param.AdamCaomeiBadgeSearchParam;
import com.liquidnet.service.adam.dto.vo.AdamCaomeiBadgeVo;
import com.liquidnet.service.adam.entity.AdamCaomeiBadge;
import java.util.List;
/**
* 草莓护照-徽章管理
*/
public interface IAdamCaomeiBadgeAdminService extends IService<AdamCaomeiBadge> {
/**
* 徽章管理(每个徽章领取人数)
* @param param
* @return
*/
List<AdamCaomeiBadgeVo> listWithClaimedCount(AdamCaomeiBadgeSearchParam param);
}
package com.liquidnet.client.admin.zhengzai.adam.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.client.admin.zhengzai.adam.service.IAdamCaomeiBadgeAdminService;
import com.liquidnet.service.adam.dto.AdamCaomeiBadgeClaimCountDto;
import com.liquidnet.service.adam.dto.param.AdamCaomeiBadgeSearchParam;
import com.liquidnet.service.adam.dto.vo.AdamCaomeiBadgeVo;
import com.liquidnet.service.adam.entity.AdamCaomeiBadge;
import com.liquidnet.service.adam.mapper.AdamCaomeiBadgeMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Slf4j
@Service
public class AdamCaomeiBadgeAdminServiceImpl extends ServiceImpl<AdamCaomeiBadgeMapper, AdamCaomeiBadge> implements IAdamCaomeiBadgeAdminService {
@Override
public List<AdamCaomeiBadgeVo> listWithClaimedCount(AdamCaomeiBadgeSearchParam param) {
LambdaQueryWrapper<AdamCaomeiBadge> queryWrapper = Wrappers.lambdaQuery(AdamCaomeiBadge.class);
if (StringUtils.isNotBlank(param.getName())) {
queryWrapper.like(AdamCaomeiBadge::getName, param.getName());
}
if (param.getType() != null) {
queryWrapper.eq(AdamCaomeiBadge::getType, param.getType());
}
if (param.getDisplayStatus() != null) {
queryWrapper.eq(AdamCaomeiBadge::getDisplayStatus, param.getDisplayStatus());
}
queryWrapper.orderByDesc(AdamCaomeiBadge::getSort, AdamCaomeiBadge::getUpdatedAt);
List<AdamCaomeiBadge> badges = this.list(queryWrapper);
if (badges.isEmpty()) {
return Collections.emptyList();
}
List<String> badgeIds = badges.stream()
.map(AdamCaomeiBadge::getBadgeId)
.filter(StringUtils::isNotBlank)
.collect(Collectors.toList());
// key: 徽章ID,value: 领取人数
Map<String, Integer> countMap = badgeIds.isEmpty() ? Collections.emptyMap() :
baseMapper.selectClaimedCountByBadgeIds(badgeIds).stream()
.collect(Collectors.toMap(AdamCaomeiBadgeClaimCountDto::getBadgeId, AdamCaomeiBadgeClaimCountDto::getClaimedCount, (a, b) -> a));
return badges.stream().map(item -> {
AdamCaomeiBadgeVo vo = new AdamCaomeiBadgeVo();
BeanUtils.copyProperties(item, vo);
vo.setClaimedCount(countMap.getOrDefault(item.getBadgeId(), 0));
return vo;
}).collect(Collectors.toList());
}
}
package com.liquidnet.service.adam.dto;
import lombok.Data;
@Data
public class AdamCaomeiBadgeClaimCountDto {
private String badgeId;
private Integer claimedCount;
}
......@@ -53,6 +53,11 @@ public class AdamCaomeiBadge implements Serializable {
*/
private Integer displayStatus;
/**
* 排序值,数值越大越靠前
*/
private Integer sort;
/**
* 添加时间
*/
......
package com.liquidnet.service.adam.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.liquidnet.service.adam.dto.AdamCaomeiBadgeClaimCountDto;
import com.liquidnet.service.adam.entity.AdamCaomeiBadge;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface AdamCaomeiBadgeMapper extends BaseMapper<AdamCaomeiBadge> {
@Select({
"<script>",
"select badge_id as badgeId, count(1) as claimedCount",
"from adam_caomei_user_badge",
"where badge_id in",
"<foreach collection='badgeIds' item='badgeId' open='(' separator=',' close=')'>",
"#{badgeId}",
"</foreach>",
"group by badge_id",
"</script>"
})
List<AdamCaomeiBadgeClaimCountDto> selectClaimedCountByBadgeIds(@Param("badgeIds") List<String> badgeIds);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment