From ebbaeee181ac2af28194e5b14456dedf2ad5e0eb Mon Sep 17 00:00:00 2001 From: chenxing Date: Thu, 27 Aug 2026 10:08:58 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=90=AF=E7=94=A8=E4=B8=8D?= =?UTF-8?q?=E5=90=AF=E7=94=A8=E6=8E=A5=E5=8F=A3=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/oapi/UserController.java | 22 +++++++++++++++++++ .../model/groupauthz/UserGroupNodeVo.java | 2 +- .../sysuser/SysUserChangeStatusRequest.java | 20 +++++++++++++++++ .../service/impl/GroupAuthzService.java | 18 +++++++++++---- 4 files changed, 57 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/yunhai/userbase/model/sysuser/SysUserChangeStatusRequest.java diff --git a/src/main/java/com/yunhai/userbase/controller/oapi/UserController.java b/src/main/java/com/yunhai/userbase/controller/oapi/UserController.java index 6a812ec..245cc4f 100644 --- a/src/main/java/com/yunhai/userbase/controller/oapi/UserController.java +++ b/src/main/java/com/yunhai/userbase/controller/oapi/UserController.java @@ -10,6 +10,8 @@ import com.yunhai.userbase.common.annotation.OapiLog; import com.yunhai.userbase.common.validation.ValidationGroups; import com.yunhai.userbase.config.Config; import com.yunhai.userbase.entity.ApplicationInfo; +import com.yunhai.userbase.model.sysuser.BatchChangeStatusRequest; +import com.yunhai.userbase.model.sysuser.SysUserChangeStatusRequest; import com.yunhai.userbase.model.sysuser.SysUserGroupDeleteItem; import com.yunhai.userbase.model.sysuser.SysUserGroupStateRequest; import com.yunhai.userbase.model.sysuser.SysUserMoveRequest; @@ -272,4 +274,24 @@ public class UserController { request.getSchoolId(), request.getGroupId()); return userCenterService.getUserInfoWithDeptById(request.getUserId()); } + + /** + * 设置单个用户状态(启用/禁用账号,语义同管理端 sysuser/Enable、sysuser/Disable 的合并版)。
+ * disabled=true 禁用、false 启用;变更后自动推送「编辑用户」订阅。
+ * 鉴权由过滤器层强制签名;POST 自动记 OapiLog。 + */ + @PostMapping("changeStatus") + public void changeStatus(@RequestBody @Validated SysUserChangeStatusRequest request) { + sysUserService.changeStatus(request.getUserId(), request.getDisabled()); + } + + /** + * 批量设置用户状态(启用/禁用,语义同管理端 sysuser/BatchChangeStatus)。
+ * 任一 userId 无效则整体拒绝;变更后自动推送「编辑用户」订阅。
+ * 鉴权由过滤器层强制签名;POST 自动记 OapiLog。 + */ + @PostMapping("batchChangeStatus") + public void batchChangeStatus(@RequestBody @Validated BatchChangeStatusRequest request) { + sysUserService.batchChangeStatus(request.getUserIds(), request.getDisabled()); + } } diff --git a/src/main/java/com/yunhai/userbase/model/groupauthz/UserGroupNodeVo.java b/src/main/java/com/yunhai/userbase/model/groupauthz/UserGroupNodeVo.java index 5212e4f..3dbfc81 100644 --- a/src/main/java/com/yunhai/userbase/model/groupauthz/UserGroupNodeVo.java +++ b/src/main/java/com/yunhai/userbase/model/groupauthz/UserGroupNodeVo.java @@ -21,7 +21,7 @@ public class UserGroupNodeVo { /** 组名称。 */ private String name; - /** 是否用户直接归属的组(叶子高亮用);祖先组为 false。 */ + /** 是否用户主归属组(isMain=1,无主归属时取第一个直接归属组);祖先组为 false。 */ private Boolean own; /** 子节点(仅含祖先链上的节点)。 */ diff --git a/src/main/java/com/yunhai/userbase/model/sysuser/SysUserChangeStatusRequest.java b/src/main/java/com/yunhai/userbase/model/sysuser/SysUserChangeStatusRequest.java new file mode 100644 index 0000000..31c981f --- /dev/null +++ b/src/main/java/com/yunhai/userbase/model/sysuser/SysUserChangeStatusRequest.java @@ -0,0 +1,20 @@ +package com.yunhai.userbase.model.sysuser; + +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @description 开放接口:设置用户状态请求(启用/禁用账号)。 + */ +@Data +public class SysUserChangeStatusRequest { + + /** 用户ID。 */ + @NotNull(message = "用户ID不能为空") + private Integer userId; + + /** 是否禁用:true=禁用,false=启用。 */ + @NotNull(message = "状态不能为空") + private Boolean disabled; +} diff --git a/src/main/java/com/yunhai/userbase/service/impl/GroupAuthzService.java b/src/main/java/com/yunhai/userbase/service/impl/GroupAuthzService.java index a7cfe08..eec531b 100644 --- a/src/main/java/com/yunhai/userbase/service/impl/GroupAuthzService.java +++ b/src/main/java/com/yunhai/userbase/service/impl/GroupAuthzService.java @@ -1026,12 +1026,22 @@ public class GroupAuthzService implements IGroupAuthzService { if (!sysUserRepository.existsById(userId)) { throw new DException("用户不存在"); } - // 1. 用户直接归属的组 + // 1. 用户直接归属的组;主归属组(isMain=1)用于「本组」标记,无主归属时取第一个兜底(与 searchUsers 一致) List rels = sysUserGroupRelRepository.findByUserId(userId); Set selfGroupIds = new LinkedHashSet<>(); + Integer mainGroupId = null; + boolean hasMainGroup = false; for (SysUserGroupRel rel : rels) { - if (rel.getGroupId() != null) { - selfGroupIds.add(rel.getGroupId()); + if (rel.getGroupId() == null) { + continue; + } + selfGroupIds.add(rel.getGroupId()); + if (!hasMainGroup && rel.getIsMain() != null && rel.getIsMain() == 1) { + mainGroupId = rel.getGroupId(); + hasMainGroup = true; + } + if (mainGroupId == null) { + mainGroupId = rel.getGroupId(); } } if (selfGroupIds.isEmpty()) { @@ -1053,7 +1063,7 @@ public class GroupAuthzService implements IGroupAuthzService { UserGroupNodeVo vo = new UserGroupNodeVo(); vo.setId(id); vo.setName(g == null || g.getName() == null ? String.valueOf(id) : g.getName()); - vo.setOwn(selfGroupIds.contains(id)); + vo.setOwn(mainGroupId != null && id.equals(mainGroupId)); voMap.put(id, vo); } List roots = new ArrayList<>();