1. 提高 databus api 的网络失败重试次数,避免复用旧链接导致的 connection reset 错误

2. 兼容顶级组织同步时的组织编码生成逻辑
This commit is contained in:
chenbowen
2025-11-04 14:43:53 +08:00
parent b98f605dfd
commit 811270a4c5
6 changed files with 209 additions and 18 deletions

View File

@@ -71,9 +71,16 @@ public class DeptServiceImpl implements DeptService {
// 校验部门名的唯一性
validateDeptNameUnique(null, createReqVO.getParentId(), createReqVO.getName());
// 生成并校验部门编码
String generatedCode = generateDeptCode(createReqVO.getParentId());
createReqVO.setCode(generatedCode);
validateDeptCodeUnique(null, generatedCode);
Long effectiveParentId = normalizeParentId(createReqVO.getParentId());
boolean isTopLevel = Objects.equals(effectiveParentId, DeptDO.PARENT_ID_ROOT);
String resolvedCode;
if (isTopLevel) {
resolvedCode = resolveTopLevelCode(null, createReqVO.getCode());
} else {
resolvedCode = generateDeptCode(effectiveParentId);
validateDeptCodeUnique(null, resolvedCode);
}
createReqVO.setCode(resolvedCode);
// 插入部门
DeptDO dept = BeanUtils.toBean(createReqVO, DeptDO.class);
@@ -104,10 +111,25 @@ public class DeptServiceImpl implements DeptService {
Long oldParentId = normalizeParentId(originalDept.getParentId());
boolean parentChanged = !Objects.equals(newParentId, oldParentId);
if (parentChanged) {
String newCode = generateDeptCode(updateReqVO.getParentId());
String newCode;
if (Objects.equals(newParentId, DeptDO.PARENT_ID_ROOT)) {
newCode = resolveTopLevelCode(updateReqVO.getId(), updateReqVO.getCode());
} else {
newCode = generateDeptCode(updateReqVO.getParentId());
validateDeptCodeUnique(updateReqVO.getId(), newCode);
}
updateReqVO.setCode(newCode);
} else {
updateReqVO.setCode(originalDept.getCode());
if (Objects.equals(newParentId, DeptDO.PARENT_ID_ROOT)) {
String requestedCode = updateReqVO.getCode();
if (StrUtil.isNotBlank(requestedCode) && !StrUtil.equals(requestedCode.trim(), originalDept.getCode())) {
updateReqVO.setCode(resolveTopLevelCode(updateReqVO.getId(), requestedCode));
} else {
updateReqVO.setCode(originalDept.getCode());
}
} else {
updateReqVO.setCode(originalDept.getCode());
}
}
// 更新部门
@@ -189,7 +211,11 @@ public class DeptServiceImpl implements DeptService {
@VisibleForTesting
void validateDeptNameUnique(Long id, Long parentId, String name) {
DeptDO dept = deptMapper.selectByParentIdAndName(parentId, name);
Long effectiveParentId = normalizeParentId(parentId);
if (Objects.equals(effectiveParentId, DeptDO.PARENT_ID_ROOT)) {
return;
}
DeptDO dept = deptMapper.selectByParentIdAndName(effectiveParentId, name);
if (dept == null) {
return;
}
@@ -312,6 +338,18 @@ public class DeptServiceImpl implements DeptService {
deptMapper.updateById(update);
}
private String resolveTopLevelCode(Long currentDeptId, String requestedCode) {
String candidate = requestedCode;
if (candidate != null) {
candidate = candidate.trim();
}
if (StrUtil.isBlank(candidate)) {
candidate = generateDeptCode(DeptDO.PARENT_ID_ROOT);
}
validateDeptCodeUnique(currentDeptId, candidate);
return candidate;
}
@Override
public DeptDO getDept(Long id) {
return deptMapper.selectById(id);