From 5e8bfebfdc013cb09fa084b6cb57d164b66d8d87 Mon Sep 17 00:00:00 2001 From: OpenCode Date: Fri, 24 Jul 2026 14:24:12 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=BB=84=E7=BB=87=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E6=8E=88=E6=9D=83=E3=80=81=E6=88=90=E5=91=98=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=88=86=E9=A1=B5=E3=80=81=E8=A7=92=E8=89=B2=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - AppOrgEntity: 添加 @JsonIgnoreProperties(ignoreUnknown=true) 支持moduleKeys参数 - AppOrgServiceImpl: modifyAfter钩子处理UPDATE时自动授权模块 - AppOrgServiceImpl: createOrg中设置role.userId修复NOT NULL约束 - AppOrgServiceImpl: updatePerms第三个参数null改为new Long[0]避免NPE - AppOrgUserServiceImpl: getMemberList支持分页+可选orgId筛选+组织名称关联 - AdminAppOrgUserController: memberList接口支持page/size分页参数 - AppOrgUserController: App端同步更新getMemberList调用 --- .../admin/AdminAppOrgUserController.java | 8 +++-- .../controller/app/AppOrgUserController.java | 3 +- .../cool/modules/org/entity/AppOrgEntity.java | 2 ++ .../org/service/AppOrgUserService.java | 2 +- .../org/service/impl/AppOrgServiceImpl.java | 15 ++++++++- .../service/impl/AppOrgUserServiceImpl.java | 33 +++++++++++++++---- 6 files changed, 49 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/cool/modules/org/controller/admin/AdminAppOrgUserController.java b/src/main/java/com/cool/modules/org/controller/admin/AdminAppOrgUserController.java index 5b11171..185773a 100644 --- a/src/main/java/com/cool/modules/org/controller/admin/AdminAppOrgUserController.java +++ b/src/main/java/com/cool/modules/org/controller/admin/AdminAppOrgUserController.java @@ -28,12 +28,14 @@ public class AdminAppOrgUserController extends BaseController> members = appOrgUserService.getMemberListByOrgId(orgId); - return R.ok(members); + Integer page = requestParams.getInt("page"); + Integer size = requestParams.getInt("size"); + Map result = appOrgUserService.getMemberList(orgId, page, size); + return R.ok(result); } @Operation(summary = "提升/降级App端管理员") diff --git a/src/main/java/com/cool/modules/org/controller/app/AppOrgUserController.java b/src/main/java/com/cool/modules/org/controller/app/AppOrgUserController.java index 5d22643..8b53f46 100644 --- a/src/main/java/com/cool/modules/org/controller/app/AppOrgUserController.java +++ b/src/main/java/com/cool/modules/org/controller/app/AppOrgUserController.java @@ -8,7 +8,6 @@ import com.cool.core.util.CoolSecurityUtil; import com.cool.modules.org.service.AppOrgUserService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import java.util.List; import java.util.Map; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.PostMapping; @@ -27,7 +26,7 @@ public class AppOrgUserController { Long orgId = requestParams.getLong("orgId"); Long userId = CoolSecurityUtil.getCurrentUserId(); CoolPreconditions.check(!appOrgUserService.isOrgMember(userId, orgId), "无权查看该组织成员"); - List> members = appOrgUserService.getMemberListByOrgId(orgId); + Map members = appOrgUserService.getMemberList(orgId, null, null); return R.ok(members); } diff --git a/src/main/java/com/cool/modules/org/entity/AppOrgEntity.java b/src/main/java/com/cool/modules/org/entity/AppOrgEntity.java index e0e91d1..75ee673 100644 --- a/src/main/java/com/cool/modules/org/entity/AppOrgEntity.java +++ b/src/main/java/com/cool/modules/org/entity/AppOrgEntity.java @@ -4,11 +4,13 @@ import com.cool.core.base.BaseEntity; import com.mybatisflex.annotation.Table; import com.cool.core.annotation.ColumnDefine; import com.tangzc.mybatisflex.autotable.annotation.UniIndex; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.Getter; import lombok.Setter; @Getter @Setter +@JsonIgnoreProperties(ignoreUnknown = true) @Table(value = "app_org", comment = "组织表") public class AppOrgEntity extends BaseEntity { diff --git a/src/main/java/com/cool/modules/org/service/AppOrgUserService.java b/src/main/java/com/cool/modules/org/service/AppOrgUserService.java index 809c861..734c868 100644 --- a/src/main/java/com/cool/modules/org/service/AppOrgUserService.java +++ b/src/main/java/com/cool/modules/org/service/AppOrgUserService.java @@ -17,7 +17,7 @@ public interface AppOrgUserService extends BaseService { List> getOrgListByUserId(Long userId); - List> getMemberListByOrgId(Long orgId); + Map getMemberList(Long orgId, Integer page, Integer size); boolean isOrgAdmin(Long userId, Long orgId); diff --git a/src/main/java/com/cool/modules/org/service/impl/AppOrgServiceImpl.java b/src/main/java/com/cool/modules/org/service/impl/AppOrgServiceImpl.java index 9f43e25..ef2ec04 100644 --- a/src/main/java/com/cool/modules/org/service/impl/AppOrgServiceImpl.java +++ b/src/main/java/com/cool/modules/org/service/impl/AppOrgServiceImpl.java @@ -7,6 +7,7 @@ import cn.hutool.json.JSONObject; import com.cool.core.base.BaseServiceImpl; import com.cool.core.cache.CoolCache; import com.cool.core.enums.UserTypeEnum; +import com.cool.core.base.ModifyEnum; import com.cool.core.exception.CoolPreconditions; import com.cool.core.security.jwt.JwtTokenUtil; import com.cool.core.security.jwt.JwtUser; @@ -47,6 +48,16 @@ public class AppOrgServiceImpl extends BaseServiceImpl moduleKeys = requestParams.getBeanList("moduleKeys", String.class); + if (moduleKeys != null) { + authorizeModules(entity.getId(), moduleKeys); + } + } + } + @Override @Transactional public void createOrg(JSONObject requestParams, AppOrgEntity entity) { @@ -55,7 +66,9 @@ public class AppOrgServiceImpl extends BaseServiceImpl> getMemberListByOrgId(Long orgId) { - List orgUsers = list(QueryWrapper.create() - .eq(AppOrgUserEntity::getOrgId, orgId) - .eq(AppOrgUserEntity::getStatus, 1)); + public Map getMemberList(Long orgId, Integer page, Integer size) { + int pageNum = (page != null && page > 0) ? page : 1; + int pageSize = (size != null && size > 0) ? size : 10; - List> result = new ArrayList<>(); - for (AppOrgUserEntity ou : orgUsers) { + QueryWrapper qw = QueryWrapper.create() + .eq(AppOrgUserEntity::getStatus, 1); + if (orgId != null) { + qw.eq(AppOrgUserEntity::getOrgId, orgId); + } + qw.orderBy(AppOrgUserEntity::getJoinTime, false); + + com.mybatisflex.core.paginate.Page pg = page( + com.mybatisflex.core.paginate.Page.of(pageNum, pageSize), qw); + + List> list = new ArrayList<>(); + for (AppOrgUserEntity ou : pg.getRecords()) { Map item = new HashMap<>(); item.put("id", ou.getId()); item.put("userId", ou.getUserId()); + item.put("orgId", ou.getOrgId()); item.put("role", ou.getRole()); item.put("joinTime", ou.getJoinTime()); + AppOrgEntity org = appOrgMapper.selectOneById(ou.getOrgId()); + if (org != null) { + item.put("orgName", org.getName()); + } + UserInfoEntity user = userInfoMapper.selectOneById(ou.getUserId()); if (user != null) { item.put("nickName", user.getNickName()); item.put("avatarUrl", user.getAvatarUrl()); item.put("phone", user.getPhone()); } - result.add(item); + list.add(item); } + + Map result = new HashMap<>(); + result.put("list", list); + result.put("pagination", Map.of("total", pg.getTotalRow(), "page", pageNum, "size", pageSize)); return result; }