feat(用户标签): 添加获取用户标签名称列表功能并支持标签过滤用户列表

在用户标签模块中新增了获取所有标签名称的功能,并在用户列表查询中加入了标签过滤条件。这些改动是为了支持前端展示标签名称列表以及根据标签筛选用户的需求。
This commit is contained in:
dzq 2025-05-22 15:43:25 +08:00
parent 3ef4c71258
commit 68bffc0b73
10 changed files with 47 additions and 13 deletions

View File

@ -65,4 +65,11 @@ public class Ab98UserTagController extends BaseController {
ab98UserTagApplicationService.deleteAb98UserTag(new BulkOperationCommand<>(ids));
return ResponseDTO.ok();
}
@Operation(summary = "获取所有标签名称")
@GetMapping("/names")
public ResponseDTO<List<String>> getDistinctTagNames() {
List<String> tagNames = ab98UserTagApplicationService.selectDistinctTagNames();
return ResponseDTO.ok(tagNames);
}
}

View File

@ -58,4 +58,8 @@ public class Ab98UserTagApplicationService {
public Ab98UserTagEntity getByTagId(Long tagId) {
return ab98UserTagService.getByTagId(tagId);
}
public List<String> selectDistinctTagNames() {
return ab98UserTagService.selectDistinctTagNames();
}
}

View File

@ -35,4 +35,7 @@ public interface Ab98UserTagMapper extends BaseMapper<Ab98UserTagEntity> {
@Select("SELECT * FROM ab98_user_tag WHERE tag_id = #{tagId} LIMIT 1")
Ab98UserTagEntity selectByTagId(@Param("tagId") Long tagId);
@Select("SELECT DISTINCT tag_name FROM ab98_user_tag WHERE deleted = 0")
List<String> selectDistinctTagNames();
}

View File

@ -22,4 +22,6 @@ public interface Ab98UserTagService extends IService<Ab98UserTagEntity> {
Ab98UserTagEntity getFirstEnabledTag();
Ab98UserTagEntity getByTagId(Long tagId);
List<String> selectDistinctTagNames();
}

View File

@ -41,4 +41,9 @@ public class Ab98UserTagServiceImpl extends ServiceImpl<Ab98UserTagMapper, Ab98U
public Ab98UserTagEntity getByTagId(Long tagId) {
return baseMapper.selectByTagId(tagId);
}
@Override
public List<String> selectDistinctTagNames() {
return baseMapper.selectDistinctTagNames();
}
}

View File

@ -29,7 +29,7 @@ public class Ab98UserApplicationService {
private final Ab98UserModelFactory userModelFactory;
public PageDTO<Ab98UserDTO> getUserList(SearchAb98UserQuery<Ab98UserEntity> query) {
Page<Ab98UserEntity> page = userService.getUserList(query);
Page<Ab98UserEntity> page = userService.getUserListWithTagFilter(query);
List<Ab98UserDTO> dtoList = page.getRecords().stream()
.map(Ab98UserDTO::new)
.collect(Collectors.toList());

View File

@ -46,4 +46,13 @@ public interface Ab98UserMapper extends BaseMapper<Ab98UserEntity> {
@Select("SELECT * FROM ab98_user WHERE openid = #{openid} AND userid = #{userid} LIMIT 1")
Ab98UserEntity selectByOpenidAndUserid(@Param("openid")String openid, @Param("userid")String userid);
@Select("SELECT DISTINCT u.* " +
"FROM ab98_user u " +
"LEFT JOIN ab98_user_tag t ON u.ab98_user_id = t.ab98_user_id " +
"${ew.customSqlSegment}")
Page<Ab98UserEntity> getUserListWithTagFilter(
Page<Ab98UserEntity> page,
@Param(Constants.WRAPPER) Wrapper<Ab98UserEntity> queryWrapper
);
}

View File

@ -1,6 +1,8 @@
package com.agileboot.domain.ab98.user.db;
import com.agileboot.common.core.page.AbstractPageQuery;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.ibatis.annotations.Param;
@ -16,7 +18,7 @@ import java.util.List;
* @since 2025-05-10
*/
public interface Ab98UserService extends IService<Ab98UserEntity> {
Page<Ab98UserEntity> getUserList(AbstractPageQuery<Ab98UserEntity> query);
Page<Ab98UserEntity> getUserListWithTagFilter(AbstractPageQuery<Ab98UserEntity> query);
List<Ab98UserEntity> selectAll();

View File

@ -20,8 +20,8 @@ import java.util.List;
public class Ab98UserServiceImpl extends ServiceImpl<Ab98UserMapper, Ab98UserEntity> implements Ab98UserService {
@Override
public Page<Ab98UserEntity> getUserList(AbstractPageQuery<Ab98UserEntity> query) {
return this.page(query.toPage(), query.toQueryWrapper());
public Page<Ab98UserEntity> getUserListWithTagFilter(AbstractPageQuery<Ab98UserEntity> query) {
return baseMapper.getUserListWithTagFilter(query.toPage(), query.toQueryWrapper());
}
@Override

View File

@ -21,21 +21,23 @@ public class SearchAb98UserQuery<T> extends AbstractPageQuery<T> {
private Boolean registered;
private Date startTime;
private Date endTime;
private String tagName;
@Override
public QueryWrapper<T> addQueryCondition() {
QueryWrapper<T> queryWrapper = new QueryWrapper<>();
queryWrapper
.eq(ab98UserId != null, "ab98_user_id", ab98UserId)
.eq(StrUtil.isNotEmpty(openid), "openid", openid)
.eq(StrUtil.isNotEmpty(userid), "userid", userid)
.like(StrUtil.isNotEmpty(name), "name", name)
.like(StrUtil.isNotEmpty(tel), "tel", tel)
.like(StrUtil.isNotEmpty(idnum), "idnum", idnum)
.eq(StrUtil.isNotEmpty(sex), "sex", sex)
.eq(registered != null, "registered", registered)
.between(startTime != null && endTime != null, "create_time", startTime, endTime);
.eq(ab98UserId != null, "u.ab98_user_id", ab98UserId)
.eq(StrUtil.isNotEmpty(openid), "u.openid", openid)
.eq(StrUtil.isNotEmpty(userid), "u.userid", userid)
.like(StrUtil.isNotEmpty(name), "u.name", name)
.like(StrUtil.isNotEmpty(tel), "u.tel", tel)
.like(StrUtil.isNotEmpty(idnum), "u.idnum", idnum)
.eq(StrUtil.isNotEmpty(tagName), "t.tag_name", tagName)
.eq(StrUtil.isNotEmpty(sex), "u.sex", sex)
.eq(registered != null, "u.registered", registered)
.between(startTime != null && endTime != null, "u.create_time", startTime, endTime);
this.timeRangeColumn = "create_time";