diff --git a/src/main/java/com/yunhai/userbase/common/converter/UserGroupRelStatusEnumConverter.java b/src/main/java/com/yunhai/userbase/common/converter/UserGroupRelStatusEnumConverter.java new file mode 100644 index 0000000..d38d1f3 --- /dev/null +++ b/src/main/java/com/yunhai/userbase/common/converter/UserGroupRelStatusEnumConverter.java @@ -0,0 +1,18 @@ +package com.yunhai.userbase.common.converter; + +import com.yunhai.userbase.enums.UserGroupRelStatusEnum; + +import javax.persistence.AttributeConverter; + +/** + * UserGroupRelStatusEnum 专用 JPA 转换器(int <-> 枚举)。
+ * 继承通用基类 CommonIntEnumConverter,仅在构造器绑定枚举 class 即可。 + * + * @author chenx + */ +public class UserGroupRelStatusEnumConverter extends CommonIntEnumConverter { + + public UserGroupRelStatusEnumConverter() { + super(UserGroupRelStatusEnum.class); + } +} diff --git a/src/main/java/com/yunhai/userbase/enums/UserGroupRelStatusEnum.java b/src/main/java/com/yunhai/userbase/enums/UserGroupRelStatusEnum.java new file mode 100644 index 0000000..c8f2e15 --- /dev/null +++ b/src/main/java/com/yunhai/userbase/enums/UserGroupRelStatusEnum.java @@ -0,0 +1,34 @@ +package com.yunhai.userbase.enums; + +import com.yunhai.platform.utils.enums.IEnum; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author chenx + * @date 2026/8/26 + * @description 用户-组关联状态(sys_user_group_rel.status):0=正常,1=转出。
+ * 区别于全局启用/禁用({@link StatusEnum},挂 sys_user 上),本枚举表达用户在某个组上的状态; + * 转出仅作关系标记,不影响成员查询、组织链与下游推送。 + */ +@Getter +@AllArgsConstructor +public enum UserGroupRelStatusEnum implements IEnum { + + NORMAL(0, "正常"), + TRANSFERRED_OUT(1, "转出"); + + private Integer key; + private String value; + + @Override + public Integer getKey() { + return this.key; + } + + @Override + public String getValue() { + return this.value; + } +} diff --git a/src/main/java/com/yunhai/userbase/model/sysuser/SysUserGroupStateRequest.java b/src/main/java/com/yunhai/userbase/model/sysuser/SysUserGroupStateRequest.java new file mode 100644 index 0000000..ba50830 --- /dev/null +++ b/src/main/java/com/yunhai/userbase/model/sysuser/SysUserGroupStateRequest.java @@ -0,0 +1,28 @@ +package com.yunhai.userbase.model.sysuser; + +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @description 开放接口:设置用户组状态请求(转出/恢复,按 (userId, groupId) 维度,学校范围限定)。 + */ +@Data +public class SysUserGroupStateRequest { + + /** 用户ID。 */ + @NotNull(message = "用户ID不能为空") + private Integer userId; + + /** 组ID(用户所在的具体组)。 */ + @NotNull(message = "组ID不能为空") + private Integer groupId; + + /** 学校组ID:限定操作范围,groupId 必须属于该校子树。 */ + @NotNull(message = "学校ID不能为空") + private Integer schoolId; + + /** 目标状态:0=恢复正常,1=转出。 */ + @NotNull(message = "状态不能为空") + private Integer state; +} diff --git a/src/main/java/com/yunhai/userbase/model/sysuser/SysUserTransferSchoolRequest.java b/src/main/java/com/yunhai/userbase/model/sysuser/SysUserTransferSchoolRequest.java new file mode 100644 index 0000000..28896f4 --- /dev/null +++ b/src/main/java/com/yunhai/userbase/model/sysuser/SysUserTransferSchoolRequest.java @@ -0,0 +1,28 @@ +package com.yunhai.userbase.model.sysuser; + +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @description 开放接口:跨校转入请求(用户在源学校标记转出后,迁移到目标学校的指定组)。 + */ +@Data +public class SysUserTransferSchoolRequest { + + /** 待迁移用户ID。 */ + @NotNull(message = "用户ID不能为空") + private Integer userId; + + /** 原学校组ID(源学校,须真实存在且为学校组):要求用户在该学校存在至少一条「转出」状态的组关系。 */ + @NotNull(message = "原学校ID不能为空") + private Integer fromSchoolId; + + /** 目标学校组ID(转入后的学校)。 */ + @NotNull(message = "目标学校ID不能为空") + private Integer schoolId; + + /** 目标组ID(目标学校内挂载的具体组,迁移后的主归属组)。 */ + @NotNull(message = "目标组ID不能为空") + private Integer groupId; +} diff --git a/src/main/resources/sql/sys_user_group_rel_add_status.sql b/src/main/resources/sql/sys_user_group_rel_add_status.sql new file mode 100644 index 0000000..d5e50f8 --- /dev/null +++ b/src/main/resources/sql/sys_user_group_rel_add_status.sql @@ -0,0 +1,7 @@ +-- 为 sys_user_group_rel 关联表新增 status 字段,用于表达「用户在某组上」的状态:0=正常,1=转出。 +-- 转出仅作关系标记:不影响成员查询、组织链与下游推送;改组/移动(changeGroups 覆盖式重建)时状态随用户继承。 +-- 存量数据默认 0=正常(迁移前未转出的所有关系视为正常)。 +-- 执行方式:由 DBA 在 dev / prod 各自手工执行,AI 不代跑(本地 dev 靠 ddl-auto=update 自动加列)。 + +ALTER TABLE sys_user_group_rel + ADD COLUMN status TINYINT NOT NULL DEFAULT 0 COMMENT '组内状态 0=正常 1=转出';