feat: 组织列表增加成员数列,成员管理支持按组织名筛选和昵称跳转用户列表

- AppOrgEntity 添加 memberCount 虚拟字段(@Column(ignore))
- AdminAppOrgController page查询通过transformValue实时计算成员数
- AppOrgUserService/Impl 新增 getMemberList(orgId, orgName, page, size) 支持按组织名模糊筛选
- AdminAppOrgUserController memberList 接口新增 orgName 参数
This commit is contained in:
OpenCode
2026-07-24 19:22:39 +08:00
parent 5e8bfebfdc
commit c49925636e
5 changed files with 44 additions and 2 deletions
@@ -5,7 +5,10 @@ import com.cool.core.annotation.CoolRestController;
import com.cool.core.base.BaseController;
import com.cool.core.request.R;
import com.cool.modules.org.entity.AppOrgEntity;
import com.cool.modules.org.entity.AppOrgUserEntity;
import com.cool.modules.org.service.AppOrgService;
import com.cool.modules.org.service.AppOrgUserService;
import com.mybatisflex.core.query.QueryWrapper;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletRequest;
@@ -20,10 +23,22 @@ import org.springframework.web.bind.annotation.RequestBody;
public class AdminAppOrgController extends BaseController<AppOrgService, AppOrgEntity> {
private final AppOrgService appOrgService;
private final AppOrgUserService appOrgUserService;
@Override
protected void init(HttpServletRequest request, JSONObject requestParams) {
setPageOption(createOp());
setPageOption(
createOp().transformValue(obj -> {
if (obj instanceof AppOrgEntity entity) {
long count = appOrgUserService.count(
QueryWrapper.create()
.eq(AppOrgUserEntity::getOrgId, entity.getId())
.eq(AppOrgUserEntity::getStatus, 1)
);
entity.setMemberCount(count);
}
})
);
}
@Operation(summary = "创建组织")
@@ -32,9 +32,10 @@ public class AdminAppOrgUserController extends BaseController<AppOrgUserService,
@PostMapping("/memberList")
public R memberList(@RequestAttribute JSONObject requestParams) {
Long orgId = requestParams.getLong("orgId");
String orgName = requestParams.getStr("orgName");
Integer page = requestParams.getInt("page");
Integer size = requestParams.getInt("size");
Map<String, Object> result = appOrgUserService.getMemberList(orgId, page, size);
Map<String, Object> result = appOrgUserService.getMemberList(orgId, orgName, page, size);
return R.ok(result);
}
@@ -2,6 +2,7 @@ package com.cool.modules.org.entity;
import com.cool.core.base.BaseEntity;
import com.mybatisflex.annotation.Table;
import com.mybatisflex.annotation.Column;
import com.cool.core.annotation.ColumnDefine;
import com.tangzc.mybatisflex.autotable.annotation.UniIndex;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@@ -41,4 +42,7 @@ public class AppOrgEntity extends BaseEntity<AppOrgEntity> {
@ColumnDefine(comment = "组织级扩展配置", type = "text")
private String config;
@Column(ignore = true)
private Long memberCount;
}
@@ -19,6 +19,8 @@ public interface AppOrgUserService extends BaseService<AppOrgUserEntity> {
Map<String, Object> getMemberList(Long orgId, Integer page, Integer size);
Map<String, Object> getMemberList(Long orgId, String orgName, Integer page, Integer size);
boolean isOrgAdmin(Long userId, Long orgId);
boolean isOrgMember(Long userId, Long orgId);
@@ -136,14 +136,34 @@ public class AppOrgUserServiceImpl extends BaseServiceImpl<AppOrgUserMapper, App
@Override
public Map<String, Object> getMemberList(Long orgId, Integer page, Integer size) {
return getMemberList(orgId, null, page, size);
}
@Override
public Map<String, Object> getMemberList(Long orgId, String orgName, Integer page, Integer size) {
int pageNum = (page != null && page > 0) ? page : 1;
int pageSize = (size != null && size > 0) ? size : 10;
QueryWrapper qw = QueryWrapper.create()
.eq(AppOrgUserEntity::getStatus, 1);
if (orgId != null) {
qw.eq(AppOrgUserEntity::getOrgId, orgId);
} else if (StrUtil.isNotBlank(orgName)) {
List<AppOrgEntity> orgs = appOrgMapper.selectListByQuery(
QueryWrapper.create().like(AppOrgEntity::getName, orgName)
);
if (!orgs.isEmpty()) {
List<Long> orgIds = orgs.stream().map(AppOrgEntity::getId).toList();
qw.in(AppOrgUserEntity::getOrgId, orgIds);
} else {
Map<String, Object> result = new HashMap<>();
result.put("list", new ArrayList<>());
result.put("pagination", Map.of("total", 0, "page", pageNum, "size", pageSize));
return result;
}
}
qw.orderBy(AppOrgUserEntity::getJoinTime, false);
com.mybatisflex.core.paginate.Page<AppOrgUserEntity> pg = page(