diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/exception/enums/ServiceErrorCodeRange.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/exception/enums/ServiceErrorCodeRange.java index 31070345..78037c6d 100644 --- a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/exception/enums/ServiceErrorCodeRange.java +++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/exception/enums/ServiceErrorCodeRange.java @@ -45,4 +45,15 @@ public class ServiceErrorCodeRange { // 模块 ai 错误码区间 [1-022-000-000 ~ 1-023-000-000) + // 模块 databus 错误码区间 [1-023-000-000 ~ 1-024-000-000) + // 模块 rule 错误码区间 [1-024-000-000 ~ 1-025-000-000) + // 模块 gateway 错误码区间 [1-025-000-000 ~ 1-026-000-000) + // 模块 convert 错误码区间 [1-026-000-000 ~ 1-027-000-000) + // 模块 base 错误码区间 [1-027-000-000 ~ 1-028-000-000) + // 模块 manage 错误码区间 [1-028-000-000 ~ 1-029-000-000) + // 模块 supply 错误码区间 [1-029-000-000 ~ 1-030-000-000) + // 模块 mes 错误码区间 [1-030-000-000 ~ 1-031-000-000) + // 模块 logistics 错误码区间 [1-031-000-000 ~ 1-032-000-000) + // 模块 qms 错误码区间 [1-032-000-000 ~ 1-033-000-000) + } diff --git a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/dataobject/BusinessBaseDO.java b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/dataobject/BusinessBaseDO.java index c346dd57..e1ffb198 100644 --- a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/dataobject/BusinessBaseDO.java +++ b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/dataobject/BusinessBaseDO.java @@ -34,6 +34,12 @@ public class BusinessBaseDO extends BaseDO { * 多租户编号 */ private Long tenantId; + /** 创建人名称 */ + @TableField(fill = FieldFill.INSERT, jdbcType = JdbcType.VARCHAR) + private String creatorName; + /** 更新人名称 */ + @TableField(fill = FieldFill.INSERT_UPDATE, jdbcType = JdbcType.VARCHAR) + private String updaterName; @TableField(exist = false) private List inputStrs; @@ -49,6 +55,8 @@ public class BusinessBaseDO extends BaseDO { this.deptId = null; this.deptName = null; this.postId = null; + this.creatorName = null; + this.updaterName = null; } } diff --git a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/handler/DefaultDBFieldHandler.java b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/handler/DefaultDBFieldHandler.java index 8bc50227..c894bc73 100644 --- a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/handler/DefaultDBFieldHandler.java +++ b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/handler/DefaultDBFieldHandler.java @@ -7,6 +7,7 @@ import cn.iocoder.yudao.framework.mybatis.core.annotation.BusinessCode; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BusinessBaseDO; import cn.iocoder.yudao.framework.security.core.LoginUser; +import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import jakarta.annotation.Resource; @@ -51,6 +52,7 @@ public class DefaultDBFieldHandler implements MetaObjectHandler { } Long userId = WebFrameworkUtils.getLoginUserId(); + String userNickname = SecurityFrameworkUtils.getLoginUserNickname(); // 当前登录用户不为空,创建人为空,则当前登录用户为创建人 if (Objects.nonNull(userId) && Objects.isNull(baseDO.getCreator())) { baseDO.setCreator(userId.toString()); @@ -65,6 +67,9 @@ public class DefaultDBFieldHandler implements MetaObjectHandler { // 需要在业务层手动设置 autoFillDeptInfo(businessBaseDO); + // 自动填充用户名称字段 + autoFillUserNames(businessBaseDO); + // 自动填充带 @BusinessCode 注解的字段序列 autoFillBusinessCode(businessBaseDO); } @@ -81,9 +86,32 @@ public class DefaultDBFieldHandler implements MetaObjectHandler { // 当前登录用户不为空,更新人为空,则当前登录用户为更新人 Object modifier = getFieldValByName("updater", metaObject); Long userId = WebFrameworkUtils.getLoginUserId(); + String userNickname = SecurityFrameworkUtils.getLoginUserNickname(); if (Objects.nonNull(userId) && Objects.isNull(modifier)) { setFieldValByName("updater", userId.toString(), metaObject); } + + // 对于 BusinessBaseDO,自动填充更新人名称 + if (Objects.nonNull(metaObject) && metaObject.getOriginalObject() instanceof BusinessBaseDO) { + Object updaterNameVal = getFieldValByName("updaterName", metaObject); + if (Objects.nonNull(userNickname) && Objects.isNull(updaterNameVal)) { + setFieldValByName("updaterName", userNickname, metaObject); + } + } + } + + private void autoFillUserNames(BusinessBaseDO businessBaseDO) { + String userNickname = SecurityFrameworkUtils.getLoginUserNickname(); + if (Objects.nonNull(userNickname)) { + // 创建人名称为空,则填充当前用户昵称 + if (Objects.isNull(businessBaseDO.getCreatorName())) { + businessBaseDO.setCreatorName(userNickname); + } + // 更新人名称为空,则填充当前用户昵称 + if (Objects.isNull(businessBaseDO.getUpdaterName())) { + businessBaseDO.setUpdaterName(userNickname); + } + } } private void autoFillBusinessCode(BusinessBaseDO businessBaseDO) { diff --git a/yudao-module-bpm/yudao-module-bpm-server/src/main/resources/application-dev.yaml b/yudao-module-bpm/yudao-module-bpm-server/src/main/resources/application-dev.yaml index 4a619a33..b6b318c4 100644 --- a/yudao-module-bpm/yudao-module-bpm-server/src/main/resources/application-dev.yaml +++ b/yudao-module-bpm/yudao-module-bpm-server/src/main/resources/application-dev.yaml @@ -50,8 +50,8 @@ spring: # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 data: redis: - host: 172.16.46.63:30379 # 地址 - port: 6379 # 端口 + host: 172.16.46.63 # 地址 + port: 30379 # 端口 database: 1 # 数据库索引 # password: 123456 # 密码,建议生产环境开启 diff --git a/yudao-module-infra/yudao-module-infra-server/src/main/resources/application-dev.yaml b/yudao-module-infra/yudao-module-infra-server/src/main/resources/application-dev.yaml index a798c6d7..3af94dde 100644 --- a/yudao-module-infra/yudao-module-infra-server/src/main/resources/application-dev.yaml +++ b/yudao-module-infra/yudao-module-infra-server/src/main/resources/application-dev.yaml @@ -50,8 +50,8 @@ spring: # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 data: redis: - host: 172.16.46.63:30379 # 地址 - port: 6379 # 端口 + host: 172.16.46.63 # 地址 + port: 30379 # 端口 database: 1 # 数据库索引 # password: 123456 # 密码,建议生产环境开启 diff --git a/yudao-module-report/yudao-module-report-server/src/main/resources/application-dev.yaml b/yudao-module-report/yudao-module-report-server/src/main/resources/application-dev.yaml index e6381563..594645b5 100644 --- a/yudao-module-report/yudao-module-report-server/src/main/resources/application-dev.yaml +++ b/yudao-module-report/yudao-module-report-server/src/main/resources/application-dev.yaml @@ -50,8 +50,8 @@ spring: # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 data: redis: - host: 172.16.46.63:30379 # 地址 - port: 6379 # 端口 + host: 172.16.46.63 # 地址 + port: 30379 # 端口 database: 1 # 数据库索引 # password: 123456 # 密码,建议生产环境开启 diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/dept/DeptSourceEnum.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/dept/DeptSourceEnum.java new file mode 100644 index 00000000..2a34d30d --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/dept/DeptSourceEnum.java @@ -0,0 +1,27 @@ +package cn.iocoder.yudao.module.system.enums.dept; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 部门来源枚举 + * + * @author ZT + */ +@AllArgsConstructor +@Getter +public enum DeptSourceEnum { + + EXTERNAL(1, "外部部门"), // 系统创建的部门 + SYNC(2, "同步部门"); // 通过 OrgSyncService 同步的部门 + + /** + * 类型 + */ + private final Integer source; + /** + * 名字 + */ + private final String name; + +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/user/UserSourceEnum.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/user/UserSourceEnum.java new file mode 100644 index 00000000..9dcfab76 --- /dev/null +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/user/UserSourceEnum.java @@ -0,0 +1,27 @@ +package cn.iocoder.yudao.module.system.enums.user; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 用户来源枚举 + * + * @author ZT + */ +@AllArgsConstructor +@Getter +public enum UserSourceEnum { + + EXTERNAL(1, "外部用户"), // 系统创建、注册等方式产生的用户 + SYNC(2, "同步用户"); // 通过 UserSyncService 同步的用户 + + /** + * 类型 + */ + private final Integer source; + /** + * 名字 + */ + private final String name; + +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptSaveReqVO.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptSaveReqVO.java index 78b6be18..97b4ea36 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/dept/vo/dept/DeptSaveReqVO.java @@ -56,4 +56,7 @@ public class DeptSaveReqVO { @Schema(description = "是否集团", example = "false") private Boolean isGroup; + @Schema(description = "部门来源类型", example = "1") + private Integer deptSource; + } diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSaveReqVO.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSaveReqVO.java index 4500da28..f0a13227 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/controller/admin/user/vo/user/UserSaveReqVO.java @@ -70,6 +70,9 @@ public class UserSaveReqVO { @DiffLogField(name = "用户头像") private String avatar; + @Schema(description = "用户来源类型", example = "1") + private Integer userSource; + // ========== 仅【创建】时,需要传递的字段 ========== @Schema(description = "密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456") diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/DeptDO.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/DeptDO.java index 3256a646..c82026fa 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/DeptDO.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/dept/DeptDO.java @@ -75,4 +75,11 @@ public class DeptDO extends TenantBaseDO { */ private Boolean isGroup; + /** + * 部门来源类型 + * + * 枚举 {@link cn.iocoder.yudao.module.system.enums.dept.DeptSourceEnum} + */ + private Integer deptSource; + } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/AdminUserDO.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/AdminUserDO.java index 006754cb..787f4b3a 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/AdminUserDO.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/AdminUserDO.java @@ -110,4 +110,11 @@ public class AdminUserDO extends TenantBaseDO { */ private LocalDateTime loginDate; + /** + * 用户来源类型 + * + * 枚举 {@link cn.iocoder.yudao.module.system.enums.user.UserSourceEnum} + */ + private Integer userSource; + } diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java index 5a301716..3b6c9164 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java @@ -30,6 +30,8 @@ import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils. import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; +import cn.iocoder.yudao.module.system.enums.dept.DeptSourceEnum; + /** * 部门 Service 实现类 * @@ -61,6 +63,10 @@ public class DeptServiceImpl implements DeptService { // 插入部门 DeptDO dept = BeanUtils.toBean(createReqVO, DeptDO.class); + // 设置部门来源:如果未指定,默认为外部部门 + if (dept.getDeptSource() == null) { + dept.setDeptSource(DeptSourceEnum.EXTERNAL.getSource()); + } deptMapper.insert(dept); return dept.getId(); } diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/sync/OrgSyncServiceImpl.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/sync/OrgSyncServiceImpl.java index 0f75def2..95ac2023 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/sync/OrgSyncServiceImpl.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/sync/OrgSyncServiceImpl.java @@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptSaveReqV import cn.iocoder.yudao.module.system.controller.admin.sync.vo.org.*; import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; import cn.iocoder.yudao.module.system.enums.dept.DeptTypeEnum; +import cn.iocoder.yudao.module.system.enums.dept.DeptSourceEnum; import cn.iocoder.yudao.module.system.service.dept.DeptService; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; @@ -32,6 +33,8 @@ public class OrgSyncServiceImpl implements OrgSyncService { if (requestVO.getDeptType() != null) { bean.setIsCompany(DeptTypeEnum.isCompany(requestVO.getDeptType())); } + // 设置为同步部门 + bean.setDeptSource(DeptSourceEnum.SYNC.getSource()); LoginUser loginUser = getLoginUser(); bean.setTenantId(Optional.ofNullable(loginUser).orElse(new LoginUser()).getTenantId()); Long deptId = deptService.createDept(bean); diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/sync/UserSyncServiceImpl.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/sync/UserSyncServiceImpl.java index fcf7b47b..d0925d30 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/sync/UserSyncServiceImpl.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/sync/UserSyncServiceImpl.java @@ -14,6 +14,7 @@ import cn.iocoder.yudao.module.system.service.dept.PostService; import cn.iocoder.yudao.module.system.service.user.AdminUserService; import cn.iocoder.yudao.module.system.service.userdept.UserDeptService; import cn.iocoder.yudao.module.system.util.sync.SyncVerifyUtil; +import cn.iocoder.yudao.module.system.enums.user.UserSourceEnum; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; @@ -46,6 +47,8 @@ public class UserSyncServiceImpl implements UserSyncService { TenantContextHolder.setTenantId(tenantId); // 中铝 e 办不会设置密码,设置默认密码 saveReqVO.setPassword("ZLEB"); + // 设置为同步用户 + saveReqVO.setUserSource(UserSourceEnum.SYNC.getSource()); Long userId = adminUserService.createUser(saveReqVO); UserCreateResponseVO resp = new UserCreateResponseVO(); resp.setUid(String.valueOf(userId)); diff --git a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java index 1586b2c5..467a3166 100644 --- a/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java +++ b/yudao-module-system/yudao-module-system-server/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java @@ -28,6 +28,7 @@ import cn.iocoder.yudao.module.system.service.dept.PostService; import cn.iocoder.yudao.module.system.service.permission.PermissionService; import cn.iocoder.yudao.module.system.service.tenant.TenantService; import cn.iocoder.yudao.module.system.service.userdept.UserDeptService; +import cn.iocoder.yudao.module.system.enums.user.UserSourceEnum; import com.google.common.annotations.VisibleForTesting; import com.mzt.logapi.context.LogRecordContext; import com.mzt.logapi.service.impl.DiffParseFunction; @@ -108,6 +109,10 @@ public class AdminUserServiceImpl implements AdminUserService { LoginUser loginUser = getLoginUser(); user.setTenantId(Optional.ofNullable(loginUser).orElse(new LoginUser()).getTenantId()); } + // 设置用户来源:如果未指定,默认为外部用户 + if (user.getUserSource() == null) { + user.setUserSource(UserSourceEnum.EXTERNAL.getSource()); + } user.setPassword(encodePassword(createReqVO.getPassword())); userMapper.insert(user); // 2.2 插入关联部门 @@ -145,6 +150,7 @@ public class AdminUserServiceImpl implements AdminUserService { // 2. 插入用户 AdminUserDO user = BeanUtils.toBean(registerReqVO, AdminUserDO.class); user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启 + user.setUserSource(UserSourceEnum.EXTERNAL.getSource()); // 注册用户设为外部用户 user.setPassword(encodePassword(registerReqVO.getPassword())); // 加密密码 userMapper.insert(user); return user.getId(); diff --git a/yudao-module-system/yudao-module-system-server/src/test/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImplTest.java b/yudao-module-system/yudao-module-system-server/src/test/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImplTest.java index bcf55bda..ebe78af9 100644 --- a/yudao-module-system/yudao-module-system-server/src/test/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-server/src/test/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImplTest.java @@ -7,10 +7,10 @@ import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqV import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; import cn.iocoder.yudao.module.system.dal.mysql.dept.DeptMapper; +import jakarta.annotation.Resource; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.Import; -import jakarta.annotation.Resource; import java.util.Arrays; import java.util.List; import java.util.Set; @@ -42,7 +42,7 @@ public class DeptServiceImplTest extends BaseDbUnitTest { o.setId(null); // 防止 id 被设置 o.setParentId(DeptDO.PARENT_ID_ROOT); o.setStatus(randomCommonStatus()); - }); + }).setDeptSource(1); // 调用 Long deptId = deptService.createDept(reqVO); @@ -56,7 +56,7 @@ public class DeptServiceImplTest extends BaseDbUnitTest { @Test public void testUpdateDept() { // mock 数据 - DeptDO dbDeptDO = randomPojo(DeptDO.class, o -> o.setStatus(randomCommonStatus())); + DeptDO dbDeptDO = randomPojo(DeptDO.class, o -> o.setStatus(randomCommonStatus())).setDeptSource(null); deptMapper.insert(dbDeptDO);// @Sql: 先插入出一条存在的数据 // 准备参数 DeptSaveReqVO reqVO = randomPojo(DeptSaveReqVO.class, o -> { @@ -64,7 +64,7 @@ public class DeptServiceImplTest extends BaseDbUnitTest { o.setParentId(DeptDO.PARENT_ID_ROOT); o.setId(dbDeptDO.getId()); o.setStatus(randomCommonStatus()); - }); + }).setDeptSource(1); // 调用 deptService.updateDept(reqVO); @@ -76,7 +76,7 @@ public class DeptServiceImplTest extends BaseDbUnitTest { @Test public void testDeleteDept_success() { // mock 数据 - DeptDO dbDeptDO = randomPojo(DeptDO.class); + DeptDO dbDeptDO = randomPojo(DeptDO.class).setDeptSource(null); deptMapper.insert(dbDeptDO);// @Sql: 先插入出一条存在的数据 // 准备参数 Long id = dbDeptDO.getId(); @@ -90,13 +90,13 @@ public class DeptServiceImplTest extends BaseDbUnitTest { @Test public void testDeleteDept_exitsChildren() { // mock 数据 - DeptDO parentDept = randomPojo(DeptDO.class); + DeptDO parentDept = randomPojo(DeptDO.class).setDeptSource(null); deptMapper.insert(parentDept);// @Sql: 先插入出一条存在的数据 // 准备参数 DeptDO childrenDeptDO = randomPojo(DeptDO.class, o -> { o.setParentId(parentDept.getId()); o.setStatus(randomCommonStatus()); - }); + }).setDeptSource(null); // 插入子部门 deptMapper.insert(childrenDeptDO); @@ -126,12 +126,12 @@ public class DeptServiceImplTest extends BaseDbUnitTest { @Test public void testValidateParentDept_parentIsChild() { // mock 数据(父节点) - DeptDO parentDept = randomPojo(DeptDO.class); + DeptDO parentDept = randomPojo(DeptDO.class).setDeptSource(null); deptMapper.insert(parentDept); // mock 数据(子节点) DeptDO childDept = randomPojo(DeptDO.class, o -> { o.setParentId(parentDept.getId()); - }); + }).setDeptSource(null); deptMapper.insert(childDept); // 准备参数 @@ -145,7 +145,7 @@ public class DeptServiceImplTest extends BaseDbUnitTest { @Test public void testValidateNameUnique_duplicate() { // mock 数据 - DeptDO deptDO = randomPojo(DeptDO.class); + DeptDO deptDO = randomPojo(DeptDO.class).setDeptSource(null); deptMapper.insert(deptDO); // 准备参数 @@ -161,7 +161,7 @@ public class DeptServiceImplTest extends BaseDbUnitTest { @Test public void testGetDept() { // mock 数据 - DeptDO deptDO = randomPojo(DeptDO.class); + DeptDO deptDO = randomPojo(DeptDO.class).setDeptSource(1); deptMapper.insert(deptDO); // 准备参数 Long id = deptDO.getId(); @@ -175,9 +175,9 @@ public class DeptServiceImplTest extends BaseDbUnitTest { @Test public void testGetDeptList_ids() { // mock 数据 - DeptDO deptDO01 = randomPojo(DeptDO.class); + DeptDO deptDO01 = randomPojo(DeptDO.class).setDeptSource(1); deptMapper.insert(deptDO01); - DeptDO deptDO02 = randomPojo(DeptDO.class); + DeptDO deptDO02 = randomPojo(DeptDO.class).setDeptSource(1); deptMapper.insert(deptDO02); // 准备参数 List ids = Arrays.asList(deptDO01.getId(), deptDO02.getId()); @@ -196,7 +196,7 @@ public class DeptServiceImplTest extends BaseDbUnitTest { DeptDO dept = randomPojo(DeptDO.class, o -> { // 等会查询到 o.setName("开发部"); o.setStatus(CommonStatusEnum.ENABLE.getStatus()); - }); + }).setDeptSource(1); deptMapper.insert(dept); // 测试 name 不匹配 deptMapper.insert(ObjectUtils.cloneIgnoreId(dept, o -> o.setName("发"))); @@ -217,14 +217,14 @@ public class DeptServiceImplTest extends BaseDbUnitTest { @Test public void testGetChildDeptList() { // mock 数据(1 级别子节点) - DeptDO dept1 = randomPojo(DeptDO.class, o -> o.setName("1")); + DeptDO dept1 = randomPojo(DeptDO.class, o -> o.setName("1")).setDeptSource(1); deptMapper.insert(dept1); - DeptDO dept2 = randomPojo(DeptDO.class, o -> o.setName("2")); + DeptDO dept2 = randomPojo(DeptDO.class, o -> o.setName("2")).setDeptSource(1); deptMapper.insert(dept2); // mock 数据(2 级子节点) - DeptDO dept1a = randomPojo(DeptDO.class, o -> o.setName("1-a").setParentId(dept1.getId())); + DeptDO dept1a = randomPojo(DeptDO.class, o -> o.setName("1-a").setParentId(dept1.getId())).setDeptSource(1); deptMapper.insert(dept1a); - DeptDO dept2a = randomPojo(DeptDO.class, o -> o.setName("2-a").setParentId(dept2.getId())); + DeptDO dept2a = randomPojo(DeptDO.class, o -> o.setName("2-a").setParentId(dept2.getId())).setDeptSource(1); deptMapper.insert(dept2a); // 准备参数 Long id = dept1.getParentId(); @@ -240,14 +240,14 @@ public class DeptServiceImplTest extends BaseDbUnitTest { @Test public void testGetChildDeptListFromCache() { // mock 数据(1 级别子节点) - DeptDO dept1 = randomPojo(DeptDO.class, o -> o.setName("1")); + DeptDO dept1 = randomPojo(DeptDO.class, o -> o.setName("1")).setDeptSource(1); deptMapper.insert(dept1); - DeptDO dept2 = randomPojo(DeptDO.class, o -> o.setName("2")); + DeptDO dept2 = randomPojo(DeptDO.class, o -> o.setName("2")).setDeptSource(1); deptMapper.insert(dept2); // mock 数据(2 级子节点) - DeptDO dept1a = randomPojo(DeptDO.class, o -> o.setName("1-a").setParentId(dept1.getId())); + DeptDO dept1a = randomPojo(DeptDO.class, o -> o.setName("1-a").setParentId(dept1.getId())).setDeptSource(1); deptMapper.insert(dept1a); - DeptDO dept2a = randomPojo(DeptDO.class, o -> o.setName("2-a").setParentId(dept2.getId())); + DeptDO dept2a = randomPojo(DeptDO.class, o -> o.setName("2-a").setParentId(dept2.getId())).setDeptSource(1); deptMapper.insert(dept2a); // 准备参数 Long id = dept1.getParentId(); @@ -263,7 +263,7 @@ public class DeptServiceImplTest extends BaseDbUnitTest { @Test public void testValidateDeptList_success() { // mock 数据 - DeptDO deptDO = randomPojo(DeptDO.class).setStatus(CommonStatusEnum.ENABLE.getStatus()); + DeptDO deptDO = randomPojo(DeptDO.class).setStatus(CommonStatusEnum.ENABLE.getStatus()).setDeptSource(null); deptMapper.insert(deptDO); // 准备参数 List ids = singletonList(deptDO.getId()); @@ -284,7 +284,7 @@ public class DeptServiceImplTest extends BaseDbUnitTest { @Test public void testValidateDeptList_notEnable() { // mock 数据 - DeptDO deptDO = randomPojo(DeptDO.class).setStatus(CommonStatusEnum.DISABLE.getStatus()); + DeptDO deptDO = randomPojo(DeptDO.class).setStatus(CommonStatusEnum.DISABLE.getStatus()).setDeptSource(null); deptMapper.insert(deptDO); // 准备参数 List ids = singletonList(deptDO.getId()); diff --git a/yudao-module-system/yudao-module-system-server/src/test/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImplTest.java b/yudao-module-system/yudao-module-system-server/src/test/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImplTest.java index d416fed1..22a40631 100644 --- a/yudao-module-system/yudao-module-system-server/src/test/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImplTest.java +++ b/yudao-module-system/yudao-module-system-server/src/test/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImplTest.java @@ -102,10 +102,10 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { o.setMobile(randomString()); o.setPostIds(asSet(1L, 2L)); o.setDeptIds(asSet(1L, 2L)); - }).setId(null); // 避免 id 被赋值 + }).setId(null).setUserSource(null); // 避免 id 被赋值 // 新建对应的部门 - deptMapper.insert(randomPojo(DeptDO.class, o -> {o.setId(1L);o.setStatus(CommonStatusEnum.ENABLE.getStatus());})); - deptMapper.insert(randomPojo(DeptDO.class, o -> {o.setId(2L);o.setStatus(CommonStatusEnum.ENABLE.getStatus());})); + deptMapper.insert(randomPojo(DeptDO.class, o -> {o.setId(1L);o.setStatus(CommonStatusEnum.ENABLE.getStatus());}).setDeptSource(null)); + deptMapper.insert(randomPojo(DeptDO.class, o -> {o.setId(2L);o.setStatus(CommonStatusEnum.ENABLE.getStatus());}).setDeptSource(null)); // mock 账户额度充足 TenantDO tenant = randomPojo(TenantDO.class, o -> o.setAccountCount(1)); @@ -127,7 +127,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { Long userId = userService.createUser(reqVO); // 断言 AdminUserDO user = userMapper.selectById(userId); - assertPojoEquals(reqVO, user, "password", "id","deptIds","status"); + assertPojoEquals(reqVO, user, "password", "id","deptIds","status","userSource"); assertEquals("yudaoyuanma", user.getPassword()); assertEquals(CommonStatusEnum.ENABLE.getStatus(), user.getStatus()); // 断言关联岗位 @@ -139,7 +139,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { @Test public void testCreatUser_max() { // 准备参数 - UserSaveReqVO reqVO = randomPojo(UserSaveReqVO.class); + UserSaveReqVO reqVO = randomPojo(UserSaveReqVO.class).setUserSource(null); // mock 账户额度不足 TenantDO tenant = randomPojo(TenantDO.class, o -> o.setAccountCount(-1)); doNothing().when(tenantService).handleTenantInfo(argThat(handler -> { @@ -159,8 +159,8 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { userPostMapper.insert(new UserPostDO().setUserId(dbUser.getId()).setPostId(1L)); userPostMapper.insert(new UserPostDO().setUserId(dbUser.getId()).setPostId(2L)); // 新增对应的部门 - deptMapper.insert(randomPojo(DeptDO.class, o -> {o.setId(1L);o.setStatus(CommonStatusEnum.ENABLE.getStatus());})); - deptMapper.insert(randomPojo(DeptDO.class, o -> {o.setId(2L);o.setStatus(CommonStatusEnum.ENABLE.getStatus());})); + deptMapper.insert(randomPojo(DeptDO.class, o -> {o.setId(1L);o.setStatus(CommonStatusEnum.ENABLE.getStatus());}).setDeptSource(null)); + deptMapper.insert(randomPojo(DeptDO.class, o -> {o.setId(2L);o.setStatus(CommonStatusEnum.ENABLE.getStatus());}).setDeptSource(null)); // 准备参数 UserSaveReqVO reqVO = randomPojo(UserSaveReqVO.class, o -> { o.setId(dbUser.getId()); @@ -168,7 +168,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { o.setMobile(randomString()); o.setPostIds(asSet(2L, 3L)); o.setDeptIds(asSet(1L, 2L)); - }); + }).setUserSource(null); // mock postService 的方法 List posts = CollectionUtils.convertList(reqVO.getPostIds(), postId -> randomPojo(PostDO.class, o -> { @@ -181,7 +181,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { userService.updateUser(reqVO); // 断言 AdminUserDO user = userMapper.selectById(reqVO.getId()); - assertPojoEquals(reqVO, user, "avatar","password","deptIds"); + assertPojoEquals(reqVO, user, "avatar","password","deptIds","userSource"); // 断言关联岗位 List userPosts = userPostMapper.selectListByUserId(user.getId()); assertEquals(2L, userPosts.get(0).getPostId()); @@ -222,7 +222,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { userService.updateUserProfile(userId, reqVO); // 断言 AdminUserDO user = userMapper.selectById(userId); - assertPojoEquals(reqVO, user); + assertPojoEquals(reqVO, user,"useSsource"); } @Test @@ -310,7 +310,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { // 调用 AdminUserDO user = userService.getUserByUsername(username); // 断言 - assertPojoEquals(dbUser, user,"deptIds", "companyIds", "companyDeptInfos"); + assertPojoEquals(dbUser, user,"deptIds", "companyIds", "companyDeptInfos","userSource"); } @Test @@ -324,7 +324,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { // 调用 AdminUserDO user = userService.getUserByMobile(mobile); // 断言 - assertPojoEquals(dbUser, user,"deptIds", "companyIds", "companyDeptInfos"); + assertPojoEquals(dbUser, user,"deptIds", "companyIds", "companyDeptInfos","userSource"); } @Test @@ -340,7 +340,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { // page查询暂时不支持带部门进行查询 // reqVO.setDeptId(1L); // 其中,1L 是 2L 的父部门 // mock 方法 - List deptList = newArrayList(randomPojo(DeptDO.class, o -> o.setId(2L))); + List deptList = newArrayList(randomPojo(DeptDO.class, o -> o.setId(2L)).setDeptSource(null)); deptService.getChildDeptList(reqVO.getDeptId()); // 新增 1L 和用户关联关系 userDeptMapper.insert(new UserDeptDO().setUserId(dbUser.getId()).setDeptId(1L)); @@ -349,7 +349,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { // 断言 assertEquals(1, pageResult.getTotal()); assertEquals(1, pageResult.getList().size()); - assertPojoEquals(dbUser, pageResult.getList().get(0), "deptIds", "companyIds", "companyDeptInfos"); + assertPojoEquals(dbUser, pageResult.getList().get(0), "deptIds", "companyIds", "companyDeptInfos","userSource"); } /** @@ -387,7 +387,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { // 调用 AdminUserDO user = userService.getUser(userId); // 断言 - assertPojoEquals(dbUser, user, "deptIds", "companyIds", "companyDeptInfos"); + assertPojoEquals(dbUser, user, "deptIds", "companyIds", "companyDeptInfos","userSource"); } @Test @@ -408,7 +408,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { List list = userService.getUserListByDeptIds(deptIds); // 断言 assertEquals(1, list.size()); - assertPojoEquals(dbUser, list.get(0), "deptIds", "companyIds", "companyDeptInfos"); + assertPojoEquals(dbUser, list.get(0), "deptIds", "companyIds", "companyDeptInfos","userSource"); } @Test @@ -531,7 +531,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { List result = userService.getUserListByPostIds(postIds); // 断言 assertEquals(1, result.size()); - assertPojoEquals(user1, result.get(0), "deptIds", "companyIds", "companyDeptInfos"); + assertPojoEquals(user1, result.get(0), "deptIds", "companyIds", "companyDeptInfos","userSource"); } @Test @@ -550,7 +550,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { List result = userService.getUserList(ids); // 断言 assertEquals(1, result.size()); - assertPojoEquals(user, result.get(0), "deptIds", "companyIds", "companyDeptInfos"); + assertPojoEquals(user, result.get(0), "deptIds", "companyIds", "companyDeptInfos","userSource"); } @Test @@ -569,7 +569,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { Map result = userService.getUserMap(ids); // 断言 assertEquals(1, result.size()); - assertPojoEquals(user, result.get(user.getId()), "deptIds", "companyIds", "companyDeptInfos"); + assertPojoEquals(user, result.get(user.getId()), "deptIds", "companyIds", "companyDeptInfos","userSource"); } @Test @@ -586,7 +586,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { List result = userService.getUserListByNickname(nickname); // 断言 assertEquals(1, result.size()); - assertPojoEquals(user, result.get(0),"deptIds", "companyIds", "companyDeptInfos"); + assertPojoEquals(user, result.get(0),"deptIds", "companyIds", "companyDeptInfos","userSource"); } @Test @@ -604,7 +604,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { // 断言 assertEquals(1, result.size()); AdminUserDO user1 = userService.getUser(result.get(0).getId()); - assertPojoEquals(user, user1, "deptIds","companyIds","companyDeptInfos"); + assertPojoEquals(user, user1, "deptIds","companyIds","companyDeptInfos","userSource"); } @Test @@ -650,6 +650,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { o.setSex(randomEle(SexEnum.values()).getSex()); o.setDeptIds(new HashSet<>(asSet(1L, 2L))); o.setCompanyDeptInfos(null);// 保证 deptIds 的范围 + o.setUserSource(null); }; return randomPojo(AdminUserDO.class, ArrayUtils.append(consumer, consumers)); } @@ -666,7 +667,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { UserSaveReqVO reqVO = randomPojo(UserSaveReqVO.class, o -> { o.setDeptIds(asSet(1L, 2L, 3L)); o.setSex(1); - }).setId(null); + }).setId(null).setUserSource(null); // 新建对应的部门 deptMapper.insert(new DeptDO().setId(1L).setName("部门1").setStatus(CommonStatusEnum.ENABLE.getStatus())); deptMapper.insert(new DeptDO().setId(2L).setName("部门2").setStatus(CommonStatusEnum.ENABLE.getStatus())); @@ -710,7 +711,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest { o.setId(dbUser.getId()); o.setSex(1); o.setDeptIds(asSet(1L, 2L)); - }); + }).setUserSource(null); // mock postService 的方法 List posts = CollectionUtils.convertList(reqVO.getPostIds(), postId -> randomPojo(PostDO.class, o -> { diff --git a/yudao-module-system/yudao-module-system-server/src/test/resources/sql/create_tables.sql b/yudao-module-system/yudao-module-system-server/src/test/resources/sql/create_tables.sql index 3bc5e6d6..d869fe3e 100644 --- a/yudao-module-system/yudao-module-system-server/src/test/resources/sql/create_tables.sql +++ b/yudao-module-system/yudao-module-system-server/src/test/resources/sql/create_tables.sql @@ -28,6 +28,7 @@ CREATE TABLE IF NOT EXISTS "system_dept" ( "is_tenant" bit NOT NULL DEFAULT FALSE, "is_company" bit NOT NULL DEFAULT FALSE, "is_group" bit NOT NULL DEFAULT FALSE, + "dept_source" tinyint default '1', PRIMARY KEY ("id") ) COMMENT '部门表'; @@ -257,6 +258,7 @@ CREATE TABLE IF NOT EXISTS "system_users" ( "update_time" timestamp not null default current_timestamp, "deleted" bit not null default false, "tenant_id" bigint not null default '0', + "user_source" tinyint default '1', primary key ("id") ) comment '用户信息表';