Merge remote-tracking branch 'base-version/main' into dev
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -84,20 +84,13 @@ public class DeptServiceImpl implements DeptService {
|
|||||||
validateParentDept(null, createReqVO.getParentId());
|
validateParentDept(null, createReqVO.getParentId());
|
||||||
// 校验部门名的唯一性
|
// 校验部门名的唯一性
|
||||||
validateDeptNameUnique(null, createReqVO.getParentId(), createReqVO.getName());
|
validateDeptNameUnique(null, createReqVO.getParentId(), createReqVO.getName());
|
||||||
// 生成并校验部门编码
|
// 生成并校验部门编码(所有来源统一走生成逻辑,iWork 不再豁免)
|
||||||
boolean isIWorkSource = Objects.equals(createReqVO.getDeptSource(), DeptSourceEnum.IWORK.getSource());
|
if (Boolean.TRUE.equals(createReqVO.getDelayCodeGeneration())) {
|
||||||
if (isIWorkSource) {
|
createReqVO.setCode(null);
|
||||||
// iWork 来源直接使用提供的编码,不再生成
|
|
||||||
String providedCode = StrUtil.blankToDefault(createReqVO.getCode(), null);
|
|
||||||
createReqVO.setCode(providedCode);
|
|
||||||
} else {
|
} else {
|
||||||
if (Boolean.TRUE.equals(createReqVO.getDelayCodeGeneration())) {
|
String resolvedCode = generateDeptCode(createReqVO.getParentId(), createReqVO.getDeptSource());
|
||||||
createReqVO.setCode(null);
|
validateDeptCodeUnique(null, resolvedCode);
|
||||||
} else {
|
createReqVO.setCode(resolvedCode);
|
||||||
String resolvedCode = generateDeptCode(createReqVO.getParentId(), createReqVO.getDeptSource());
|
|
||||||
validateDeptCodeUnique(null, resolvedCode);
|
|
||||||
createReqVO.setCode(resolvedCode);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 插入部门
|
// 插入部门
|
||||||
@@ -127,28 +120,21 @@ public class DeptServiceImpl implements DeptService {
|
|||||||
validateParentDept(updateReqVO.getId(), updateReqVO.getParentId());
|
validateParentDept(updateReqVO.getId(), updateReqVO.getParentId());
|
||||||
// 校验部门名的唯一性
|
// 校验部门名的唯一性
|
||||||
validateDeptNameUnique(updateReqVO.getId(), updateReqVO.getParentId(), updateReqVO.getName());
|
validateDeptNameUnique(updateReqVO.getId(), updateReqVO.getParentId(), updateReqVO.getName());
|
||||||
boolean isIWorkSource = Objects.equals(originalDept.getDeptSource(), DeptSourceEnum.IWORK.getSource());
|
Integer source = ObjectUtil.defaultIfNull(updateReqVO.getDeptSource(), originalDept.getDeptSource());
|
||||||
if (isIWorkSource) {
|
if (source == null) {
|
||||||
// iWork 来源直接使用提供的编码,不再生成
|
source = DeptSourceEnum.EXTERNAL.getSource();
|
||||||
String providedCode = StrUtil.blankToDefault(updateReqVO.getCode(), originalDept.getCode());
|
}
|
||||||
updateReqVO.setCode(providedCode);
|
String existingCode = originalDept.getCode();
|
||||||
} else {
|
if (StrUtil.isBlank(existingCode)) {
|
||||||
Integer source = ObjectUtil.defaultIfNull(updateReqVO.getDeptSource(), originalDept.getDeptSource());
|
if (Boolean.TRUE.equals(updateReqVO.getDelayCodeGeneration())) {
|
||||||
if (source == null) {
|
updateReqVO.setCode(null);
|
||||||
source = DeptSourceEnum.EXTERNAL.getSource();
|
|
||||||
}
|
|
||||||
String existingCode = originalDept.getCode();
|
|
||||||
if (StrUtil.isBlank(existingCode)) {
|
|
||||||
if (Boolean.TRUE.equals(updateReqVO.getDelayCodeGeneration())) {
|
|
||||||
updateReqVO.setCode(null);
|
|
||||||
} else {
|
|
||||||
String newCode = generateDeptCode(updateReqVO.getParentId(), source);
|
|
||||||
validateDeptCodeUnique(updateReqVO.getId(), newCode);
|
|
||||||
updateReqVO.setCode(newCode);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
updateReqVO.setCode(existingCode);
|
String newCode = generateDeptCode(updateReqVO.getParentId(), source);
|
||||||
|
validateDeptCodeUnique(updateReqVO.getId(), newCode);
|
||||||
|
updateReqVO.setCode(newCode);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
updateReqVO.setCode(existingCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 更新部门
|
// 更新部门
|
||||||
|
|||||||
@@ -105,7 +105,7 @@ public class DeptServiceImplTest extends BaseDbUnitTest {
|
|||||||
childReq.setName("事业部");
|
childReq.setName("事业部");
|
||||||
childReq.setSort(1);
|
childReq.setSort(1);
|
||||||
childReq.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
childReq.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
||||||
childReq.setDeptSource(1);
|
childReq.setDeptSource(DeptSourceEnum.SYNC.getSource());
|
||||||
Long childId = deptService.createDept(childReq);
|
Long childId = deptService.createDept(childReq);
|
||||||
|
|
||||||
DeptDO childDept = deptMapper.selectById(childId);
|
DeptDO childDept = deptMapper.selectById(childId);
|
||||||
@@ -240,6 +240,74 @@ public class DeptServiceImplTest extends BaseDbUnitTest {
|
|||||||
assertEquals("ZT001001", syncChildDept.getCode());
|
assertEquals("ZT001001", syncChildDept.getCode());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCreateDept_iWorkFollowsGenerationAndIgnoresCustomCode() {
|
||||||
|
// iWork 顶级也应走 ZT 序列,忽略自定义 code
|
||||||
|
DeptSaveReqVO iworkTop = new DeptSaveReqVO();
|
||||||
|
iworkTop.setParentId(DeptDO.PARENT_ID_ROOT);
|
||||||
|
iworkTop.setName("iWork 顶级");
|
||||||
|
iworkTop.setSort(1);
|
||||||
|
iworkTop.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
||||||
|
iworkTop.setDeptSource(DeptSourceEnum.IWORK.getSource());
|
||||||
|
iworkTop.setCode("CUSTOM-ZT999");
|
||||||
|
Long topId = deptService.createDept(iworkTop);
|
||||||
|
DeptDO top = deptMapper.selectById(topId);
|
||||||
|
assertEquals("ZT001", top.getCode());
|
||||||
|
|
||||||
|
// 子级继承序列递增
|
||||||
|
DeptSaveReqVO childReq = new DeptSaveReqVO();
|
||||||
|
childReq.setParentId(topId);
|
||||||
|
childReq.setName("iWork 子");
|
||||||
|
childReq.setSort(1);
|
||||||
|
childReq.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
||||||
|
childReq.setDeptSource(DeptSourceEnum.IWORK.getSource());
|
||||||
|
Long childId = deptService.createDept(childReq);
|
||||||
|
DeptDO child = deptMapper.selectById(childId);
|
||||||
|
assertEquals("ZT001001", child.getCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUpdateDept_iWorkGeneratesOnceWhenMissingCode() {
|
||||||
|
// 先创建一个 iWork 顶级但延迟生成编码
|
||||||
|
DeptSaveReqVO createReq = new DeptSaveReqVO();
|
||||||
|
createReq.setParentId(DeptDO.PARENT_ID_ROOT);
|
||||||
|
createReq.setName("iWork 延迟");
|
||||||
|
createReq.setSort(1);
|
||||||
|
createReq.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
||||||
|
createReq.setDeptSource(DeptSourceEnum.IWORK.getSource());
|
||||||
|
createReq.setDelayCodeGeneration(true);
|
||||||
|
Long deptId = deptService.createDept(createReq);
|
||||||
|
DeptDO created = deptMapper.selectById(deptId);
|
||||||
|
assertNull(created.getCode());
|
||||||
|
|
||||||
|
// 更新时生成一次编码
|
||||||
|
DeptSaveReqVO updateReq = new DeptSaveReqVO();
|
||||||
|
updateReq.setId(deptId);
|
||||||
|
updateReq.setParentId(DeptDO.PARENT_ID_ROOT);
|
||||||
|
updateReq.setName("iWork 延迟");
|
||||||
|
updateReq.setSort(1);
|
||||||
|
updateReq.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
||||||
|
updateReq.setDeptSource(DeptSourceEnum.IWORK.getSource());
|
||||||
|
updateReq.setDelayCodeGeneration(false);
|
||||||
|
deptService.updateDept(updateReq);
|
||||||
|
|
||||||
|
DeptDO updated = deptMapper.selectById(deptId);
|
||||||
|
assertEquals("ZT001", updated.getCode());
|
||||||
|
|
||||||
|
// 再次更新(父级不变)保持编码不变
|
||||||
|
DeptSaveReqVO updateReq2 = new DeptSaveReqVO();
|
||||||
|
updateReq2.setId(deptId);
|
||||||
|
updateReq2.setParentId(DeptDO.PARENT_ID_ROOT);
|
||||||
|
updateReq2.setName("iWork 延迟2");
|
||||||
|
updateReq2.setSort(2);
|
||||||
|
updateReq2.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
||||||
|
updateReq2.setDeptSource(DeptSourceEnum.IWORK.getSource());
|
||||||
|
deptService.updateDept(updateReq2);
|
||||||
|
|
||||||
|
DeptDO updated2 = deptMapper.selectById(deptId);
|
||||||
|
assertEquals("ZT001", updated2.getCode());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCreateDept_topLevelAutoCode_ignoreCustomInput() {
|
public void testCreateDept_topLevelAutoCode_ignoreCustomInput() {
|
||||||
String customCode = "ROOT-001";
|
String customCode = "ROOT-001";
|
||||||
@@ -579,7 +647,7 @@ public class DeptServiceImplTest extends BaseDbUnitTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testGetDept() {
|
public void testGetDept() {
|
||||||
// mock 数据
|
// mock 数据
|
||||||
DeptDO deptDO = randomPojo(DeptDO.class).setDeptSource(1);
|
DeptDO deptDO = randomPojo(DeptDO.class).setDeptSource(DeptSourceEnum.SYNC.getSource());
|
||||||
deptMapper.insert(deptDO);
|
deptMapper.insert(deptDO);
|
||||||
// 准备参数
|
// 准备参数
|
||||||
Long id = deptDO.getId();
|
Long id = deptDO.getId();
|
||||||
@@ -593,9 +661,9 @@ public class DeptServiceImplTest extends BaseDbUnitTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testGetDeptList_ids() {
|
public void testGetDeptList_ids() {
|
||||||
// mock 数据
|
// mock 数据
|
||||||
DeptDO deptDO01 = randomPojo(DeptDO.class).setDeptSource(1);
|
DeptDO deptDO01 = randomPojo(DeptDO.class).setDeptSource(DeptSourceEnum.SYNC.getSource());
|
||||||
deptMapper.insert(deptDO01);
|
deptMapper.insert(deptDO01);
|
||||||
DeptDO deptDO02 = randomPojo(DeptDO.class).setDeptSource(1);
|
DeptDO deptDO02 = randomPojo(DeptDO.class).setDeptSource(DeptSourceEnum.SYNC.getSource());
|
||||||
deptMapper.insert(deptDO02);
|
deptMapper.insert(deptDO02);
|
||||||
// 准备参数
|
// 准备参数
|
||||||
List<Long> ids = Arrays.asList(deptDO01.getId(), deptDO02.getId());
|
List<Long> ids = Arrays.asList(deptDO01.getId(), deptDO02.getId());
|
||||||
@@ -616,7 +684,7 @@ public class DeptServiceImplTest extends BaseDbUnitTest {
|
|||||||
o.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
o.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
||||||
o.setParentId(DeptDO.PARENT_ID_ROOT);
|
o.setParentId(DeptDO.PARENT_ID_ROOT);
|
||||||
o.setSort(1);
|
o.setSort(1);
|
||||||
}).setDeptSource(1);
|
}).setDeptSource(DeptSourceEnum.SYNC.getSource());
|
||||||
deptMapper.insert(dept);
|
deptMapper.insert(dept);
|
||||||
// 测试 name 不匹配
|
// 测试 name 不匹配
|
||||||
deptMapper.insert(ObjectUtils.cloneIgnoreId(dept, o -> {
|
deptMapper.insert(ObjectUtils.cloneIgnoreId(dept, o -> {
|
||||||
@@ -647,14 +715,14 @@ public class DeptServiceImplTest extends BaseDbUnitTest {
|
|||||||
o.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
o.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
||||||
o.setParentId(DeptDO.PARENT_ID_ROOT);
|
o.setParentId(DeptDO.PARENT_ID_ROOT);
|
||||||
o.setSort(1);
|
o.setSort(1);
|
||||||
}).setDeptSource(1);
|
}).setDeptSource(DeptSourceEnum.SYNC.getSource());
|
||||||
deptMapper.insert(dept1);
|
deptMapper.insert(dept1);
|
||||||
DeptDO dept2 = randomPojo(DeptDO.class, o -> {
|
DeptDO dept2 = randomPojo(DeptDO.class, o -> {
|
||||||
o.setName("集团二部");
|
o.setName("集团二部");
|
||||||
o.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
o.setStatus(CommonStatusEnum.ENABLE.getStatus());
|
||||||
o.setParentId(DeptDO.PARENT_ID_ROOT);
|
o.setParentId(DeptDO.PARENT_ID_ROOT);
|
||||||
o.setSort(2);
|
o.setSort(2);
|
||||||
}).setDeptSource(1);
|
}).setDeptSource(DeptSourceEnum.SYNC.getSource());
|
||||||
deptMapper.insert(dept2);
|
deptMapper.insert(dept2);
|
||||||
DeptDO otherDept = randomPojo(DeptDO.class, o -> {
|
DeptDO otherDept = randomPojo(DeptDO.class, o -> {
|
||||||
o.setName("其他部门");
|
o.setName("其他部门");
|
||||||
@@ -678,14 +746,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")).setDeptSource(1);
|
DeptDO dept1 = randomPojo(DeptDO.class, o -> o.setName("1")).setDeptSource(DeptSourceEnum.SYNC.getSource());
|
||||||
deptMapper.insert(dept1);
|
deptMapper.insert(dept1);
|
||||||
DeptDO dept2 = randomPojo(DeptDO.class, o -> o.setName("2")).setDeptSource(1);
|
DeptDO dept2 = randomPojo(DeptDO.class, o -> o.setName("2")).setDeptSource(DeptSourceEnum.SYNC.getSource());
|
||||||
deptMapper.insert(dept2);
|
deptMapper.insert(dept2);
|
||||||
// mock 数据(2 级子节点)
|
// mock 数据(2 级子节点)
|
||||||
DeptDO dept1a = randomPojo(DeptDO.class, o -> o.setName("1-a").setParentId(dept1.getId())).setDeptSource(1);
|
DeptDO dept1a = randomPojo(DeptDO.class, o -> o.setName("1-a").setParentId(dept1.getId())).setDeptSource(DeptSourceEnum.SYNC.getSource());
|
||||||
deptMapper.insert(dept1a);
|
deptMapper.insert(dept1a);
|
||||||
DeptDO dept2a = randomPojo(DeptDO.class, o -> o.setName("2-a").setParentId(dept2.getId())).setDeptSource(1);
|
DeptDO dept2a = randomPojo(DeptDO.class, o -> o.setName("2-a").setParentId(dept2.getId())).setDeptSource(DeptSourceEnum.SYNC.getSource());
|
||||||
deptMapper.insert(dept2a);
|
deptMapper.insert(dept2a);
|
||||||
// 准备参数
|
// 准备参数
|
||||||
Long id = dept1.getParentId();
|
Long id = dept1.getParentId();
|
||||||
@@ -701,14 +769,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")).setDeptSource(1);
|
DeptDO dept1 = randomPojo(DeptDO.class, o -> o.setName("1")).setDeptSource(DeptSourceEnum.SYNC.getSource());
|
||||||
deptMapper.insert(dept1);
|
deptMapper.insert(dept1);
|
||||||
DeptDO dept2 = randomPojo(DeptDO.class, o -> o.setName("2")).setDeptSource(1);
|
DeptDO dept2 = randomPojo(DeptDO.class, o -> o.setName("2")).setDeptSource(DeptSourceEnum.SYNC.getSource());
|
||||||
deptMapper.insert(dept2);
|
deptMapper.insert(dept2);
|
||||||
// mock 数据(2 级子节点)
|
// mock 数据(2 级子节点)
|
||||||
DeptDO dept1a = randomPojo(DeptDO.class, o -> o.setName("1-a").setParentId(dept1.getId())).setDeptSource(1);
|
DeptDO dept1a = randomPojo(DeptDO.class, o -> o.setName("1-a").setParentId(dept1.getId())).setDeptSource(DeptSourceEnum.SYNC.getSource());
|
||||||
deptMapper.insert(dept1a);
|
deptMapper.insert(dept1a);
|
||||||
DeptDO dept2a = randomPojo(DeptDO.class, o -> o.setName("2-a").setParentId(dept2.getId())).setDeptSource(1);
|
DeptDO dept2a = randomPojo(DeptDO.class, o -> o.setName("2-a").setParentId(dept2.getId())).setDeptSource(DeptSourceEnum.SYNC.getSource());
|
||||||
deptMapper.insert(dept2a);
|
deptMapper.insert(dept2a);
|
||||||
// 准备参数
|
// 准备参数
|
||||||
Long id = dept1.getParentId();
|
Long id = dept1.getParentId();
|
||||||
|
|||||||
Reference in New Issue
Block a user