diff --git a/agileboot-admin/src/main/java/com/agileboot/admin/controller/ab98/tag/Ab98UserTagController.java b/agileboot-admin/src/main/java/com/agileboot/admin/controller/ab98/tag/Ab98UserTagController.java index 0701988..e17394f 100644 --- a/agileboot-admin/src/main/java/com/agileboot/admin/controller/ab98/tag/Ab98UserTagController.java +++ b/agileboot-admin/src/main/java/com/agileboot/admin/controller/ab98/tag/Ab98UserTagController.java @@ -65,4 +65,11 @@ public class Ab98UserTagController extends BaseController { ab98UserTagApplicationService.deleteAb98UserTag(new BulkOperationCommand<>(ids)); return ResponseDTO.ok(); } + + @Operation(summary = "获取所有标签名称") + @GetMapping("/names") + public ResponseDTO> getDistinctTagNames() { + List tagNames = ab98UserTagApplicationService.selectDistinctTagNames(); + return ResponseDTO.ok(tagNames); + } } \ No newline at end of file diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/ab98/tag/Ab98UserTagApplicationService.java b/agileboot-domain/src/main/java/com/agileboot/domain/ab98/tag/Ab98UserTagApplicationService.java index b2a7df0..f586a13 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/ab98/tag/Ab98UserTagApplicationService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/ab98/tag/Ab98UserTagApplicationService.java @@ -58,4 +58,8 @@ public class Ab98UserTagApplicationService { public Ab98UserTagEntity getByTagId(Long tagId) { return ab98UserTagService.getByTagId(tagId); } + + public List selectDistinctTagNames() { + return ab98UserTagService.selectDistinctTagNames(); + } } \ No newline at end of file diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/ab98/tag/db/Ab98UserTagMapper.java b/agileboot-domain/src/main/java/com/agileboot/domain/ab98/tag/db/Ab98UserTagMapper.java index b948b04..4436760 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/ab98/tag/db/Ab98UserTagMapper.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/ab98/tag/db/Ab98UserTagMapper.java @@ -35,4 +35,7 @@ public interface Ab98UserTagMapper extends BaseMapper { @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 selectDistinctTagNames(); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/ab98/tag/db/Ab98UserTagService.java b/agileboot-domain/src/main/java/com/agileboot/domain/ab98/tag/db/Ab98UserTagService.java index cd3deea..933826a 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/ab98/tag/db/Ab98UserTagService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/ab98/tag/db/Ab98UserTagService.java @@ -22,4 +22,6 @@ public interface Ab98UserTagService extends IService { Ab98UserTagEntity getFirstEnabledTag(); Ab98UserTagEntity getByTagId(Long tagId); + + List selectDistinctTagNames(); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/ab98/tag/db/Ab98UserTagServiceImpl.java b/agileboot-domain/src/main/java/com/agileboot/domain/ab98/tag/db/Ab98UserTagServiceImpl.java index abab9f9..f2142e6 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/ab98/tag/db/Ab98UserTagServiceImpl.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/ab98/tag/db/Ab98UserTagServiceImpl.java @@ -41,4 +41,9 @@ public class Ab98UserTagServiceImpl extends ServiceImpl selectDistinctTagNames() { + return baseMapper.selectDistinctTagNames(); + } } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/ab98/user/Ab98UserApplicationService.java b/agileboot-domain/src/main/java/com/agileboot/domain/ab98/user/Ab98UserApplicationService.java index d757f93..9f7f3c2 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/ab98/user/Ab98UserApplicationService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/ab98/user/Ab98UserApplicationService.java @@ -29,7 +29,7 @@ public class Ab98UserApplicationService { private final Ab98UserModelFactory userModelFactory; public PageDTO getUserList(SearchAb98UserQuery query) { - Page page = userService.getUserList(query); + Page page = userService.getUserListWithTagFilter(query); List dtoList = page.getRecords().stream() .map(Ab98UserDTO::new) .collect(Collectors.toList()); diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/ab98/user/db/Ab98UserMapper.java b/agileboot-domain/src/main/java/com/agileboot/domain/ab98/user/db/Ab98UserMapper.java index 30ef98c..e59fa30 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/ab98/user/db/Ab98UserMapper.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/ab98/user/db/Ab98UserMapper.java @@ -46,4 +46,13 @@ public interface Ab98UserMapper extends BaseMapper { @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 getUserListWithTagFilter( + Page page, + @Param(Constants.WRAPPER) Wrapper queryWrapper + ); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/ab98/user/db/Ab98UserService.java b/agileboot-domain/src/main/java/com/agileboot/domain/ab98/user/db/Ab98UserService.java index e3d1c06..8eeea70 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/ab98/user/db/Ab98UserService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/ab98/user/db/Ab98UserService.java @@ -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 { - Page getUserList(AbstractPageQuery query); + Page getUserListWithTagFilter(AbstractPageQuery query); List selectAll(); diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/ab98/user/db/Ab98UserServiceImpl.java b/agileboot-domain/src/main/java/com/agileboot/domain/ab98/user/db/Ab98UserServiceImpl.java index e8af14f..1492c8b 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/ab98/user/db/Ab98UserServiceImpl.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/ab98/user/db/Ab98UserServiceImpl.java @@ -20,8 +20,8 @@ import java.util.List; public class Ab98UserServiceImpl extends ServiceImpl implements Ab98UserService { @Override - public Page getUserList(AbstractPageQuery query) { - return this.page(query.toPage(), query.toQueryWrapper()); + public Page getUserListWithTagFilter(AbstractPageQuery query) { + return baseMapper.getUserListWithTagFilter(query.toPage(), query.toQueryWrapper()); } @Override diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/ab98/user/query/SearchAb98UserQuery.java b/agileboot-domain/src/main/java/com/agileboot/domain/ab98/user/query/SearchAb98UserQuery.java index a6fed8c..c327d91 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/ab98/user/query/SearchAb98UserQuery.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/ab98/user/query/SearchAb98UserQuery.java @@ -21,21 +21,23 @@ public class SearchAb98UserQuery extends AbstractPageQuery { private Boolean registered; private Date startTime; private Date endTime; + private String tagName; @Override public QueryWrapper addQueryCondition() { QueryWrapper 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";