1. 系统新增用户标记为外部用户;e 办同步用户标记为系统用户

2. 业务表新增基础业务字段,创建人与更新人名称

(cherry picked from commit 9ee1100b29)
This commit is contained in:
chenbowen
2025-09-16 16:09:10 +08:00
committed by chenbowen
parent 988b4bd74f
commit 4004d4f691
19 changed files with 195 additions and 53 deletions

View File

@@ -45,4 +45,15 @@ public class ServiceErrorCodeRange {
// 模块 ai 错误码区间 [1-022-000-000 ~ 1-023-000-000) // 模块 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)
} }

View File

@@ -34,6 +34,12 @@ public class BusinessBaseDO extends BaseDO {
* 多租户编号 * 多租户编号
*/ */
private Long tenantId; 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) @TableField(exist = false)
private List<String> inputStrs; private List<String> inputStrs;
@@ -49,6 +55,8 @@ public class BusinessBaseDO extends BaseDO {
this.deptId = null; this.deptId = null;
this.deptName = null; this.deptName = null;
this.postId = null; this.postId = null;
this.creatorName = null;
this.updaterName = null;
} }
} }

View File

@@ -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.BaseDO;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BusinessBaseDO; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BusinessBaseDO;
import cn.iocoder.yudao.framework.security.core.LoginUser; 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 cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
@@ -51,6 +52,7 @@ public class DefaultDBFieldHandler implements MetaObjectHandler {
} }
Long userId = WebFrameworkUtils.getLoginUserId(); Long userId = WebFrameworkUtils.getLoginUserId();
String userNickname = SecurityFrameworkUtils.getLoginUserNickname();
// 当前登录用户不为空,创建人为空,则当前登录用户为创建人 // 当前登录用户不为空,创建人为空,则当前登录用户为创建人
if (Objects.nonNull(userId) && Objects.isNull(baseDO.getCreator())) { if (Objects.nonNull(userId) && Objects.isNull(baseDO.getCreator())) {
baseDO.setCreator(userId.toString()); baseDO.setCreator(userId.toString());
@@ -65,6 +67,9 @@ public class DefaultDBFieldHandler implements MetaObjectHandler {
// 需要在业务层手动设置 // 需要在业务层手动设置
autoFillDeptInfo(businessBaseDO); autoFillDeptInfo(businessBaseDO);
// 自动填充用户名称字段
autoFillUserNames(businessBaseDO);
// 自动填充带 @BusinessCode 注解的字段序列 // 自动填充带 @BusinessCode 注解的字段序列
autoFillBusinessCode(businessBaseDO); autoFillBusinessCode(businessBaseDO);
} }
@@ -81,9 +86,32 @@ public class DefaultDBFieldHandler implements MetaObjectHandler {
// 当前登录用户不为空,更新人为空,则当前登录用户为更新人 // 当前登录用户不为空,更新人为空,则当前登录用户为更新人
Object modifier = getFieldValByName("updater", metaObject); Object modifier = getFieldValByName("updater", metaObject);
Long userId = WebFrameworkUtils.getLoginUserId(); Long userId = WebFrameworkUtils.getLoginUserId();
String userNickname = SecurityFrameworkUtils.getLoginUserNickname();
if (Objects.nonNull(userId) && Objects.isNull(modifier)) { if (Objects.nonNull(userId) && Objects.isNull(modifier)) {
setFieldValByName("updater", userId.toString(), metaObject); 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) { private void autoFillBusinessCode(BusinessBaseDO businessBaseDO) {

View File

@@ -50,8 +50,8 @@ spring:
# Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
data: data:
redis: redis:
host: 172.16.46.63:30379 # 地址 host: 172.16.46.63 # 地址
port: 6379 # 端口 port: 30379 # 端口
database: 1 # 数据库索引 database: 1 # 数据库索引
# password: 123456 # 密码,建议生产环境开启 # password: 123456 # 密码,建议生产环境开启

View File

@@ -50,8 +50,8 @@ spring:
# Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
data: data:
redis: redis:
host: 172.16.46.63:30379 # 地址 host: 172.16.46.63 # 地址
port: 6379 # 端口 port: 30379 # 端口
database: 1 # 数据库索引 database: 1 # 数据库索引
# password: 123456 # 密码,建议生产环境开启 # password: 123456 # 密码,建议生产环境开启

View File

@@ -50,8 +50,8 @@ spring:
# Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优
data: data:
redis: redis:
host: 172.16.46.63:30379 # 地址 host: 172.16.46.63 # 地址
port: 6379 # 端口 port: 30379 # 端口
database: 1 # 数据库索引 database: 1 # 数据库索引
# password: 123456 # 密码,建议生产环境开启 # password: 123456 # 密码,建议生产环境开启

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -56,4 +56,7 @@ public class DeptSaveReqVO {
@Schema(description = "是否集团", example = "false") @Schema(description = "是否集团", example = "false")
private Boolean isGroup; private Boolean isGroup;
@Schema(description = "部门来源类型", example = "1")
private Integer deptSource;
} }

View File

@@ -70,6 +70,9 @@ public class UserSaveReqVO {
@DiffLogField(name = "用户头像") @DiffLogField(name = "用户头像")
private String avatar; private String avatar;
@Schema(description = "用户来源类型", example = "1")
private Integer userSource;
// ========== 仅【创建】时,需要传递的字段 ========== // ========== 仅【创建】时,需要传递的字段 ==========
@Schema(description = "密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456") @Schema(description = "密码", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456")

View File

@@ -75,4 +75,11 @@ public class DeptDO extends TenantBaseDO {
*/ */
private Boolean isGroup; private Boolean isGroup;
/**
* 部门来源类型
*
* 枚举 {@link cn.iocoder.yudao.module.system.enums.dept.DeptSourceEnum}
*/
private Integer deptSource;
} }

View File

@@ -110,4 +110,11 @@ public class AdminUserDO extends TenantBaseDO {
*/ */
private LocalDateTime loginDate; private LocalDateTime loginDate;
/**
* 用户来源类型
*
* 枚举 {@link cn.iocoder.yudao.module.system.enums.user.UserSourceEnum}
*/
private Integer userSource;
} }

View File

@@ -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.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
import cn.iocoder.yudao.module.system.enums.dept.DeptSourceEnum;
/** /**
* 部门 Service 实现类 * 部门 Service 实现类
* *
@@ -61,6 +63,10 @@ public class DeptServiceImpl implements DeptService {
// 插入部门 // 插入部门
DeptDO dept = BeanUtils.toBean(createReqVO, DeptDO.class); DeptDO dept = BeanUtils.toBean(createReqVO, DeptDO.class);
// 设置部门来源:如果未指定,默认为外部部门
if (dept.getDeptSource() == null) {
dept.setDeptSource(DeptSourceEnum.EXTERNAL.getSource());
}
deptMapper.insert(dept); deptMapper.insert(dept);
return dept.getId(); return dept.getId();
} }

View File

@@ -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.controller.admin.sync.vo.org.*;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; 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.DeptTypeEnum;
import cn.iocoder.yudao.module.system.enums.dept.DeptSourceEnum;
import cn.iocoder.yudao.module.system.service.dept.DeptService; import cn.iocoder.yudao.module.system.service.dept.DeptService;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -32,6 +33,8 @@ public class OrgSyncServiceImpl implements OrgSyncService {
if (requestVO.getDeptType() != null) { if (requestVO.getDeptType() != null) {
bean.setIsCompany(DeptTypeEnum.isCompany(requestVO.getDeptType())); bean.setIsCompany(DeptTypeEnum.isCompany(requestVO.getDeptType()));
} }
// 设置为同步部门
bean.setDeptSource(DeptSourceEnum.SYNC.getSource());
LoginUser loginUser = getLoginUser(); LoginUser loginUser = getLoginUser();
bean.setTenantId(Optional.ofNullable(loginUser).orElse(new LoginUser()).getTenantId()); bean.setTenantId(Optional.ofNullable(loginUser).orElse(new LoginUser()).getTenantId());
Long deptId = deptService.createDept(bean); Long deptId = deptService.createDept(bean);

View File

@@ -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.user.AdminUserService;
import cn.iocoder.yudao.module.system.service.userdept.UserDeptService; import cn.iocoder.yudao.module.system.service.userdept.UserDeptService;
import cn.iocoder.yudao.module.system.util.sync.SyncVerifyUtil; import cn.iocoder.yudao.module.system.util.sync.SyncVerifyUtil;
import cn.iocoder.yudao.module.system.enums.user.UserSourceEnum;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -46,6 +47,8 @@ public class UserSyncServiceImpl implements UserSyncService {
TenantContextHolder.setTenantId(tenantId); TenantContextHolder.setTenantId(tenantId);
// 中铝 e 办不会设置密码,设置默认密码 // 中铝 e 办不会设置密码,设置默认密码
saveReqVO.setPassword("ZLEB"); saveReqVO.setPassword("ZLEB");
// 设置为同步用户
saveReqVO.setUserSource(UserSourceEnum.SYNC.getSource());
Long userId = adminUserService.createUser(saveReqVO); Long userId = adminUserService.createUser(saveReqVO);
UserCreateResponseVO resp = new UserCreateResponseVO(); UserCreateResponseVO resp = new UserCreateResponseVO();
resp.setUid(String.valueOf(userId)); resp.setUid(String.valueOf(userId));

View File

@@ -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.permission.PermissionService;
import cn.iocoder.yudao.module.system.service.tenant.TenantService; import cn.iocoder.yudao.module.system.service.tenant.TenantService;
import cn.iocoder.yudao.module.system.service.userdept.UserDeptService; 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.google.common.annotations.VisibleForTesting;
import com.mzt.logapi.context.LogRecordContext; import com.mzt.logapi.context.LogRecordContext;
import com.mzt.logapi.service.impl.DiffParseFunction; import com.mzt.logapi.service.impl.DiffParseFunction;
@@ -108,6 +109,10 @@ public class AdminUserServiceImpl implements AdminUserService {
LoginUser loginUser = getLoginUser(); LoginUser loginUser = getLoginUser();
user.setTenantId(Optional.ofNullable(loginUser).orElse(new LoginUser()).getTenantId()); user.setTenantId(Optional.ofNullable(loginUser).orElse(new LoginUser()).getTenantId());
} }
// 设置用户来源:如果未指定,默认为外部用户
if (user.getUserSource() == null) {
user.setUserSource(UserSourceEnum.EXTERNAL.getSource());
}
user.setPassword(encodePassword(createReqVO.getPassword())); user.setPassword(encodePassword(createReqVO.getPassword()));
userMapper.insert(user); userMapper.insert(user);
// 2.2 插入关联部门 // 2.2 插入关联部门
@@ -145,6 +150,7 @@ public class AdminUserServiceImpl implements AdminUserService {
// 2. 插入用户 // 2. 插入用户
AdminUserDO user = BeanUtils.toBean(registerReqVO, AdminUserDO.class); AdminUserDO user = BeanUtils.toBean(registerReqVO, AdminUserDO.class);
user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启 user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启
user.setUserSource(UserSourceEnum.EXTERNAL.getSource()); // 注册用户设为外部用户
user.setPassword(encodePassword(registerReqVO.getPassword())); // 加密密码 user.setPassword(encodePassword(registerReqVO.getPassword())); // 加密密码
userMapper.insert(user); userMapper.insert(user);
return user.getId(); return user.getId();

View File

@@ -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.controller.admin.dept.vo.dept.DeptSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
import cn.iocoder.yudao.module.system.dal.mysql.dept.DeptMapper; import cn.iocoder.yudao.module.system.dal.mysql.dept.DeptMapper;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
import jakarta.annotation.Resource;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
@@ -42,7 +42,7 @@ public class DeptServiceImplTest extends BaseDbUnitTest {
o.setId(null); // 防止 id 被设置 o.setId(null); // 防止 id 被设置
o.setParentId(DeptDO.PARENT_ID_ROOT); o.setParentId(DeptDO.PARENT_ID_ROOT);
o.setStatus(randomCommonStatus()); o.setStatus(randomCommonStatus());
}); }).setDeptSource(1);
// 调用 // 调用
Long deptId = deptService.createDept(reqVO); Long deptId = deptService.createDept(reqVO);
@@ -56,7 +56,7 @@ public class DeptServiceImplTest extends BaseDbUnitTest {
@Test @Test
public void testUpdateDept() { public void testUpdateDept() {
// mock 数据 // 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: 先插入出一条存在的数据 deptMapper.insert(dbDeptDO);// @Sql: 先插入出一条存在的数据
// 准备参数 // 准备参数
DeptSaveReqVO reqVO = randomPojo(DeptSaveReqVO.class, o -> { DeptSaveReqVO reqVO = randomPojo(DeptSaveReqVO.class, o -> {
@@ -64,7 +64,7 @@ public class DeptServiceImplTest extends BaseDbUnitTest {
o.setParentId(DeptDO.PARENT_ID_ROOT); o.setParentId(DeptDO.PARENT_ID_ROOT);
o.setId(dbDeptDO.getId()); o.setId(dbDeptDO.getId());
o.setStatus(randomCommonStatus()); o.setStatus(randomCommonStatus());
}); }).setDeptSource(1);
// 调用 // 调用
deptService.updateDept(reqVO); deptService.updateDept(reqVO);
@@ -76,7 +76,7 @@ public class DeptServiceImplTest extends BaseDbUnitTest {
@Test @Test
public void testDeleteDept_success() { public void testDeleteDept_success() {
// mock 数据 // mock 数据
DeptDO dbDeptDO = randomPojo(DeptDO.class); DeptDO dbDeptDO = randomPojo(DeptDO.class).setDeptSource(null);
deptMapper.insert(dbDeptDO);// @Sql: 先插入出一条存在的数据 deptMapper.insert(dbDeptDO);// @Sql: 先插入出一条存在的数据
// 准备参数 // 准备参数
Long id = dbDeptDO.getId(); Long id = dbDeptDO.getId();
@@ -90,13 +90,13 @@ public class DeptServiceImplTest extends BaseDbUnitTest {
@Test @Test
public void testDeleteDept_exitsChildren() { public void testDeleteDept_exitsChildren() {
// mock 数据 // mock 数据
DeptDO parentDept = randomPojo(DeptDO.class); DeptDO parentDept = randomPojo(DeptDO.class).setDeptSource(null);
deptMapper.insert(parentDept);// @Sql: 先插入出一条存在的数据 deptMapper.insert(parentDept);// @Sql: 先插入出一条存在的数据
// 准备参数 // 准备参数
DeptDO childrenDeptDO = randomPojo(DeptDO.class, o -> { DeptDO childrenDeptDO = randomPojo(DeptDO.class, o -> {
o.setParentId(parentDept.getId()); o.setParentId(parentDept.getId());
o.setStatus(randomCommonStatus()); o.setStatus(randomCommonStatus());
}); }).setDeptSource(null);
// 插入子部门 // 插入子部门
deptMapper.insert(childrenDeptDO); deptMapper.insert(childrenDeptDO);
@@ -126,12 +126,12 @@ public class DeptServiceImplTest extends BaseDbUnitTest {
@Test @Test
public void testValidateParentDept_parentIsChild() { public void testValidateParentDept_parentIsChild() {
// mock 数据(父节点) // mock 数据(父节点)
DeptDO parentDept = randomPojo(DeptDO.class); DeptDO parentDept = randomPojo(DeptDO.class).setDeptSource(null);
deptMapper.insert(parentDept); deptMapper.insert(parentDept);
// mock 数据(子节点) // mock 数据(子节点)
DeptDO childDept = randomPojo(DeptDO.class, o -> { DeptDO childDept = randomPojo(DeptDO.class, o -> {
o.setParentId(parentDept.getId()); o.setParentId(parentDept.getId());
}); }).setDeptSource(null);
deptMapper.insert(childDept); deptMapper.insert(childDept);
// 准备参数 // 准备参数
@@ -145,7 +145,7 @@ public class DeptServiceImplTest extends BaseDbUnitTest {
@Test @Test
public void testValidateNameUnique_duplicate() { public void testValidateNameUnique_duplicate() {
// mock 数据 // mock 数据
DeptDO deptDO = randomPojo(DeptDO.class); DeptDO deptDO = randomPojo(DeptDO.class).setDeptSource(null);
deptMapper.insert(deptDO); deptMapper.insert(deptDO);
// 准备参数 // 准备参数
@@ -161,7 +161,7 @@ public class DeptServiceImplTest extends BaseDbUnitTest {
@Test @Test
public void testGetDept() { public void testGetDept() {
// mock 数据 // mock 数据
DeptDO deptDO = randomPojo(DeptDO.class); DeptDO deptDO = randomPojo(DeptDO.class).setDeptSource(1);
deptMapper.insert(deptDO); deptMapper.insert(deptDO);
// 准备参数 // 准备参数
Long id = deptDO.getId(); Long id = deptDO.getId();
@@ -175,9 +175,9 @@ public class DeptServiceImplTest extends BaseDbUnitTest {
@Test @Test
public void testGetDeptList_ids() { public void testGetDeptList_ids() {
// mock 数据 // mock 数据
DeptDO deptDO01 = randomPojo(DeptDO.class); DeptDO deptDO01 = randomPojo(DeptDO.class).setDeptSource(1);
deptMapper.insert(deptDO01); deptMapper.insert(deptDO01);
DeptDO deptDO02 = randomPojo(DeptDO.class); DeptDO deptDO02 = randomPojo(DeptDO.class).setDeptSource(1);
deptMapper.insert(deptDO02); deptMapper.insert(deptDO02);
// 准备参数 // 准备参数
List<Long> ids = Arrays.asList(deptDO01.getId(), deptDO02.getId()); List<Long> ids = Arrays.asList(deptDO01.getId(), deptDO02.getId());
@@ -196,7 +196,7 @@ public class DeptServiceImplTest extends BaseDbUnitTest {
DeptDO dept = randomPojo(DeptDO.class, o -> { // 等会查询到 DeptDO dept = randomPojo(DeptDO.class, o -> { // 等会查询到
o.setName("开发部"); o.setName("开发部");
o.setStatus(CommonStatusEnum.ENABLE.getStatus()); o.setStatus(CommonStatusEnum.ENABLE.getStatus());
}); }).setDeptSource(1);
deptMapper.insert(dept); deptMapper.insert(dept);
// 测试 name 不匹配 // 测试 name 不匹配
deptMapper.insert(ObjectUtils.cloneIgnoreId(dept, o -> o.setName(""))); deptMapper.insert(ObjectUtils.cloneIgnoreId(dept, o -> o.setName("")));
@@ -217,14 +217,14 @@ public class DeptServiceImplTest extends BaseDbUnitTest {
@Test @Test
public void testGetChildDeptList() { public void testGetChildDeptList() {
// mock 数据1 级别子节点) // 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); 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); deptMapper.insert(dept2);
// mock 数据2 级子节点) // 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); 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); deptMapper.insert(dept2a);
// 准备参数 // 准备参数
Long id = dept1.getParentId(); Long id = dept1.getParentId();
@@ -240,14 +240,14 @@ public class DeptServiceImplTest extends BaseDbUnitTest {
@Test @Test
public void testGetChildDeptListFromCache() { public void testGetChildDeptListFromCache() {
// mock 数据1 级别子节点) // 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); 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); deptMapper.insert(dept2);
// mock 数据2 级子节点) // 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); 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); deptMapper.insert(dept2a);
// 准备参数 // 准备参数
Long id = dept1.getParentId(); Long id = dept1.getParentId();
@@ -263,7 +263,7 @@ public class DeptServiceImplTest extends BaseDbUnitTest {
@Test @Test
public void testValidateDeptList_success() { public void testValidateDeptList_success() {
// mock 数据 // mock 数据
DeptDO deptDO = randomPojo(DeptDO.class).setStatus(CommonStatusEnum.ENABLE.getStatus()); DeptDO deptDO = randomPojo(DeptDO.class).setStatus(CommonStatusEnum.ENABLE.getStatus()).setDeptSource(null);
deptMapper.insert(deptDO); deptMapper.insert(deptDO);
// 准备参数 // 准备参数
List<Long> ids = singletonList(deptDO.getId()); List<Long> ids = singletonList(deptDO.getId());
@@ -284,7 +284,7 @@ public class DeptServiceImplTest extends BaseDbUnitTest {
@Test @Test
public void testValidateDeptList_notEnable() { public void testValidateDeptList_notEnable() {
// mock 数据 // mock 数据
DeptDO deptDO = randomPojo(DeptDO.class).setStatus(CommonStatusEnum.DISABLE.getStatus()); DeptDO deptDO = randomPojo(DeptDO.class).setStatus(CommonStatusEnum.DISABLE.getStatus()).setDeptSource(null);
deptMapper.insert(deptDO); deptMapper.insert(deptDO);
// 准备参数 // 准备参数
List<Long> ids = singletonList(deptDO.getId()); List<Long> ids = singletonList(deptDO.getId());

View File

@@ -102,10 +102,10 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
o.setMobile(randomString()); o.setMobile(randomString());
o.setPostIds(asSet(1L, 2L)); o.setPostIds(asSet(1L, 2L));
o.setDeptIds(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(1L);o.setStatus(CommonStatusEnum.ENABLE.getStatus());}).setDeptSource(null));
deptMapper.insert(randomPojo(DeptDO.class, o -> {o.setId(2L);o.setStatus(CommonStatusEnum.ENABLE.getStatus());})); deptMapper.insert(randomPojo(DeptDO.class, o -> {o.setId(2L);o.setStatus(CommonStatusEnum.ENABLE.getStatus());}).setDeptSource(null));
// mock 账户额度充足 // mock 账户额度充足
TenantDO tenant = randomPojo(TenantDO.class, o -> o.setAccountCount(1)); TenantDO tenant = randomPojo(TenantDO.class, o -> o.setAccountCount(1));
@@ -127,7 +127,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
Long userId = userService.createUser(reqVO); Long userId = userService.createUser(reqVO);
// 断言 // 断言
AdminUserDO user = userMapper.selectById(userId); 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("yudaoyuanma", user.getPassword());
assertEquals(CommonStatusEnum.ENABLE.getStatus(), user.getStatus()); assertEquals(CommonStatusEnum.ENABLE.getStatus(), user.getStatus());
// 断言关联岗位 // 断言关联岗位
@@ -139,7 +139,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
@Test @Test
public void testCreatUser_max() { public void testCreatUser_max() {
// 准备参数 // 准备参数
UserSaveReqVO reqVO = randomPojo(UserSaveReqVO.class); UserSaveReqVO reqVO = randomPojo(UserSaveReqVO.class).setUserSource(null);
// mock 账户额度不足 // mock 账户额度不足
TenantDO tenant = randomPojo(TenantDO.class, o -> o.setAccountCount(-1)); TenantDO tenant = randomPojo(TenantDO.class, o -> o.setAccountCount(-1));
doNothing().when(tenantService).handleTenantInfo(argThat(handler -> { 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(1L));
userPostMapper.insert(new UserPostDO().setUserId(dbUser.getId()).setPostId(2L)); 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(1L);o.setStatus(CommonStatusEnum.ENABLE.getStatus());}).setDeptSource(null));
deptMapper.insert(randomPojo(DeptDO.class, o -> {o.setId(2L);o.setStatus(CommonStatusEnum.ENABLE.getStatus());})); deptMapper.insert(randomPojo(DeptDO.class, o -> {o.setId(2L);o.setStatus(CommonStatusEnum.ENABLE.getStatus());}).setDeptSource(null));
// 准备参数 // 准备参数
UserSaveReqVO reqVO = randomPojo(UserSaveReqVO.class, o -> { UserSaveReqVO reqVO = randomPojo(UserSaveReqVO.class, o -> {
o.setId(dbUser.getId()); o.setId(dbUser.getId());
@@ -168,7 +168,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
o.setMobile(randomString()); o.setMobile(randomString());
o.setPostIds(asSet(2L, 3L)); o.setPostIds(asSet(2L, 3L));
o.setDeptIds(asSet(1L, 2L)); o.setDeptIds(asSet(1L, 2L));
}); }).setUserSource(null);
// mock postService 的方法 // mock postService 的方法
List<PostDO> posts = CollectionUtils.convertList(reqVO.getPostIds(), postId -> List<PostDO> posts = CollectionUtils.convertList(reqVO.getPostIds(), postId ->
randomPojo(PostDO.class, o -> { randomPojo(PostDO.class, o -> {
@@ -181,7 +181,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
userService.updateUser(reqVO); userService.updateUser(reqVO);
// 断言 // 断言
AdminUserDO user = userMapper.selectById(reqVO.getId()); AdminUserDO user = userMapper.selectById(reqVO.getId());
assertPojoEquals(reqVO, user, "avatar","password","deptIds"); assertPojoEquals(reqVO, user, "avatar","password","deptIds","userSource");
// 断言关联岗位 // 断言关联岗位
List<UserPostDO> userPosts = userPostMapper.selectListByUserId(user.getId()); List<UserPostDO> userPosts = userPostMapper.selectListByUserId(user.getId());
assertEquals(2L, userPosts.get(0).getPostId()); assertEquals(2L, userPosts.get(0).getPostId());
@@ -222,7 +222,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
userService.updateUserProfile(userId, reqVO); userService.updateUserProfile(userId, reqVO);
// 断言 // 断言
AdminUserDO user = userMapper.selectById(userId); AdminUserDO user = userMapper.selectById(userId);
assertPojoEquals(reqVO, user); assertPojoEquals(reqVO, user,"useSsource");
} }
@Test @Test
@@ -310,7 +310,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
// 调用 // 调用
AdminUserDO user = userService.getUserByUsername(username); AdminUserDO user = userService.getUserByUsername(username);
// 断言 // 断言
assertPojoEquals(dbUser, user,"deptIds", "companyIds", "companyDeptInfos"); assertPojoEquals(dbUser, user,"deptIds", "companyIds", "companyDeptInfos","userSource");
} }
@Test @Test
@@ -324,7 +324,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
// 调用 // 调用
AdminUserDO user = userService.getUserByMobile(mobile); AdminUserDO user = userService.getUserByMobile(mobile);
// 断言 // 断言
assertPojoEquals(dbUser, user,"deptIds", "companyIds", "companyDeptInfos"); assertPojoEquals(dbUser, user,"deptIds", "companyIds", "companyDeptInfos","userSource");
} }
@Test @Test
@@ -340,7 +340,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
// page查询暂时不支持带部门进行查询 // page查询暂时不支持带部门进行查询
// reqVO.setDeptId(1L); // 其中1L 是 2L 的父部门 // reqVO.setDeptId(1L); // 其中1L 是 2L 的父部门
// mock 方法 // mock 方法
List<DeptDO> deptList = newArrayList(randomPojo(DeptDO.class, o -> o.setId(2L))); List<DeptDO> deptList = newArrayList(randomPojo(DeptDO.class, o -> o.setId(2L)).setDeptSource(null));
deptService.getChildDeptList(reqVO.getDeptId()); deptService.getChildDeptList(reqVO.getDeptId());
// 新增 1L 和用户关联关系 // 新增 1L 和用户关联关系
userDeptMapper.insert(new UserDeptDO().setUserId(dbUser.getId()).setDeptId(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.getTotal());
assertEquals(1, pageResult.getList().size()); 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); AdminUserDO user = userService.getUser(userId);
// 断言 // 断言
assertPojoEquals(dbUser, user, "deptIds", "companyIds", "companyDeptInfos"); assertPojoEquals(dbUser, user, "deptIds", "companyIds", "companyDeptInfos","userSource");
} }
@Test @Test
@@ -408,7 +408,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
List<AdminUserDO> list = userService.getUserListByDeptIds(deptIds); List<AdminUserDO> list = userService.getUserListByDeptIds(deptIds);
// 断言 // 断言
assertEquals(1, list.size()); assertEquals(1, list.size());
assertPojoEquals(dbUser, list.get(0), "deptIds", "companyIds", "companyDeptInfos"); assertPojoEquals(dbUser, list.get(0), "deptIds", "companyIds", "companyDeptInfos","userSource");
} }
@Test @Test
@@ -531,7 +531,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
List<AdminUserDO> result = userService.getUserListByPostIds(postIds); List<AdminUserDO> result = userService.getUserListByPostIds(postIds);
// 断言 // 断言
assertEquals(1, result.size()); assertEquals(1, result.size());
assertPojoEquals(user1, result.get(0), "deptIds", "companyIds", "companyDeptInfos"); assertPojoEquals(user1, result.get(0), "deptIds", "companyIds", "companyDeptInfos","userSource");
} }
@Test @Test
@@ -550,7 +550,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
List<AdminUserDO> result = userService.getUserList(ids); List<AdminUserDO> result = userService.getUserList(ids);
// 断言 // 断言
assertEquals(1, result.size()); assertEquals(1, result.size());
assertPojoEquals(user, result.get(0), "deptIds", "companyIds", "companyDeptInfos"); assertPojoEquals(user, result.get(0), "deptIds", "companyIds", "companyDeptInfos","userSource");
} }
@Test @Test
@@ -569,7 +569,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
Map<Long, AdminUserDO> result = userService.getUserMap(ids); Map<Long, AdminUserDO> result = userService.getUserMap(ids);
// 断言 // 断言
assertEquals(1, result.size()); assertEquals(1, result.size());
assertPojoEquals(user, result.get(user.getId()), "deptIds", "companyIds", "companyDeptInfos"); assertPojoEquals(user, result.get(user.getId()), "deptIds", "companyIds", "companyDeptInfos","userSource");
} }
@Test @Test
@@ -586,7 +586,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
List<AdminUserDO> result = userService.getUserListByNickname(nickname); List<AdminUserDO> result = userService.getUserListByNickname(nickname);
// 断言 // 断言
assertEquals(1, result.size()); assertEquals(1, result.size());
assertPojoEquals(user, result.get(0),"deptIds", "companyIds", "companyDeptInfos"); assertPojoEquals(user, result.get(0),"deptIds", "companyIds", "companyDeptInfos","userSource");
} }
@Test @Test
@@ -604,7 +604,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
// 断言 // 断言
assertEquals(1, result.size()); assertEquals(1, result.size());
AdminUserDO user1 = userService.getUser(result.get(0).getId()); AdminUserDO user1 = userService.getUser(result.get(0).getId());
assertPojoEquals(user, user1, "deptIds","companyIds","companyDeptInfos"); assertPojoEquals(user, user1, "deptIds","companyIds","companyDeptInfos","userSource");
} }
@Test @Test
@@ -650,6 +650,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
o.setSex(randomEle(SexEnum.values()).getSex()); o.setSex(randomEle(SexEnum.values()).getSex());
o.setDeptIds(new HashSet<>(asSet(1L, 2L))); o.setDeptIds(new HashSet<>(asSet(1L, 2L)));
o.setCompanyDeptInfos(null);// 保证 deptIds 的范围 o.setCompanyDeptInfos(null);// 保证 deptIds 的范围
o.setUserSource(null);
}; };
return randomPojo(AdminUserDO.class, ArrayUtils.append(consumer, consumers)); return randomPojo(AdminUserDO.class, ArrayUtils.append(consumer, consumers));
} }
@@ -666,7 +667,7 @@ public class AdminUserServiceImplTest extends BaseDbUnitTest {
UserSaveReqVO reqVO = randomPojo(UserSaveReqVO.class, o -> { UserSaveReqVO reqVO = randomPojo(UserSaveReqVO.class, o -> {
o.setDeptIds(asSet(1L, 2L, 3L)); o.setDeptIds(asSet(1L, 2L, 3L));
o.setSex(1); 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(1L).setName("部门1").setStatus(CommonStatusEnum.ENABLE.getStatus()));
deptMapper.insert(new DeptDO().setId(2L).setName("部门2").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.setId(dbUser.getId());
o.setSex(1); o.setSex(1);
o.setDeptIds(asSet(1L, 2L)); o.setDeptIds(asSet(1L, 2L));
}); }).setUserSource(null);
// mock postService 的方法 // mock postService 的方法
List<PostDO> posts = CollectionUtils.convertList(reqVO.getPostIds(), postId -> List<PostDO> posts = CollectionUtils.convertList(reqVO.getPostIds(), postId ->
randomPojo(PostDO.class, o -> { randomPojo(PostDO.class, o -> {

View File

@@ -28,6 +28,7 @@ CREATE TABLE IF NOT EXISTS "system_dept" (
"is_tenant" bit NOT NULL DEFAULT FALSE, "is_tenant" bit NOT NULL DEFAULT FALSE,
"is_company" bit NOT NULL DEFAULT FALSE, "is_company" bit NOT NULL DEFAULT FALSE,
"is_group" bit NOT NULL DEFAULT FALSE, "is_group" bit NOT NULL DEFAULT FALSE,
"dept_source" tinyint default '1',
PRIMARY KEY ("id") PRIMARY KEY ("id")
) COMMENT '部门表'; ) COMMENT '部门表';
@@ -257,6 +258,7 @@ CREATE TABLE IF NOT EXISTS "system_users" (
"update_time" timestamp not null default current_timestamp, "update_time" timestamp not null default current_timestamp,
"deleted" bit not null default false, "deleted" bit not null default false,
"tenant_id" bigint not null default '0', "tenant_id" bigint not null default '0',
"user_source" tinyint default '1',
primary key ("id") primary key ("id")
) comment '用户信息表'; ) comment '用户信息表';