Commit 48e34aca by 王志超

feat: 变更新增行动项,部门+人员唯一

parent 3f588999
Pipeline #86155 passed with stages
in 1 minute 15 seconds
...@@ -1641,57 +1641,33 @@ public class ChangeFlowBiz { ...@@ -1641,57 +1641,33 @@ public class ChangeFlowBiz {
return; return;
} }
// 用于记录已选择的变更行动人 // 用于记录邮箱对应的部门:邮箱 -> 部门
Set<String> usedExecUserKeys = new HashSet<>(); Map<String, String> userEmailToDepartment = new HashMap<>();
for (ChangeExecConfigReq execConfig : changeExecProjectList) { for (ChangeExecConfigReq execConfig : changeExecProjectList) {
if (execConfig.getChangeExecUserType() == null || StringUtils.isBlank(execConfig.getChangeExecUser())) { // 校验部门+人员,需要邮箱和部门都不为空
if (StringUtils.isBlank(execConfig.getChangeExecUserEmail())
|| StringUtils.isBlank(execConfig.getChangeExecDepartment())) {
continue; continue;
} }
Integer changeExecUserType = execConfig.getChangeExecUserType(); String changeExecUserEmail = execConfig.getChangeExecUserEmail();
String changeExecUser = execConfig.getChangeExecUser(); String changeExecDepartment = execConfig.getChangeExecDepartment();
// 构建唯一标识key // 检查该邮箱是否已经在其他部门出现过
String key; String existingDepartment = userEmailToDepartment.get(changeExecUserEmail);
ChangeCommanderEnum commanderEnum = ChangeCommanderEnum.getChangeCommanderEnum(changeExecUserType); if (existingDepartment != null && !existingDepartment.equals(changeExecDepartment)) {
String errorMsg = String.format("变更行动方案中,同一人员不能出现在多个部门:%s 已在部门 %s 中,不能同时出现在部门 %s",
if (commanderEnum == null) { changeExecUserEmail, existingDepartment, changeExecDepartment);
log.warn("[validateDuplicateChangeExecUser] 未知的变更行动人类型: {}", changeExecUserType); log.warn("[validateDuplicateChangeExecUser] 检测到同一人员出现在多个部门: email={}, existingDept={}, newDept={}",
continue; changeExecUserEmail, existingDepartment, changeExecDepartment);
}
switch (commanderEnum) {
case COMMANDER_ORIGINATOR:
// 发起人:只判断类型
key = changeExecUserType.toString();
break;
case FIXED_PERSON:
// 固定人:类型 + 邮箱(changeExecUser存储的是邮箱)
key = changeExecUserType + "_" + changeExecUser;
break;
case GOODS_ASSOCIATED:
case SUPPLIERS_ASSOCIATED:
// 商品关联角色/供应商关联角色:类型 + 角色名称(如"采购"、"计划"、"SQE"、"合规")
key = changeExecUserType + "_" + changeExecUser;
break;
default:
log.warn("[validateDuplicateChangeExecUser] 未处理的变更行动人类型: {}", commanderEnum);
continue;
}
// 检查是否重复
if (usedExecUserKeys.contains(key)) {
String errorMsg = String.format("变更行动方案中不能重复选择相同的变更行动人:%s-%s",
commanderEnum.getName(), changeExecUser);
log.warn("[validateDuplicateChangeExecUser] 检测到重复的变更行动人: type={}, user={}, key={}",
changeExecUserType, changeExecUser, key);
throw ExceptionFactory.createBiz(ResponseCode.BAD_REQUEST, errorMsg); throw ExceptionFactory.createBiz(ResponseCode.BAD_REQUEST, errorMsg);
} }
usedExecUserKeys.add(key); // 记录邮箱和部门的对应关系(如果已存在相同部门,覆盖不影响)
log.debug("[validateDuplicateChangeExecUser] 添加变更行动人: type={}, user={}, key={}", userEmailToDepartment.put(changeExecUserEmail, changeExecDepartment);
changeExecUserType, changeExecUser, key); log.debug("[validateDuplicateChangeExecUser] 添加变更行动人: email={}, department={}",
changeExecUserEmail, changeExecDepartment);
} }
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment