1. 提高 databus api 的网络失败重试次数,避免复用旧链接导致的 connection reset 错误
2. 兼容顶级组织同步时的组织编码生成逻辑
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user