Commit 48e34aca by 王志超

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

parent 3f588999
Pipeline #86155 passed with stages
in 1 minute 15 seconds
......@@ -1641,57 +1641,33 @@ public class ChangeFlowBiz {
return;
}
// 用于记录已选择的变更行动人
Set<String> usedExecUserKeys = new HashSet<>();
// 用于记录邮箱对应的部门:邮箱 -> 部门
Map<String, String> userEmailToDepartment = new HashMap<>();
for (ChangeExecConfigReq execConfig : changeExecProjectList) {
if (execConfig.getChangeExecUserType() == null || StringUtils.isBlank(execConfig.getChangeExecUser())) {
// 校验部门+人员,需要邮箱和部门都不为空
if (StringUtils.isBlank(execConfig.getChangeExecUserEmail())
|| StringUtils.isBlank(execConfig.getChangeExecDepartment())) {
continue;
}
Integer changeExecUserType = execConfig.getChangeExecUserType();
String changeExecUser = execConfig.getChangeExecUser();
String changeExecUserEmail = execConfig.getChangeExecUserEmail();
String changeExecDepartment = execConfig.getChangeExecDepartment();
// 构建唯一标识key
String key;
ChangeCommanderEnum commanderEnum = ChangeCommanderEnum.getChangeCommanderEnum(changeExecUserType);
if (commanderEnum == null) {
log.warn("[validateDuplicateChangeExecUser] 未知的变更行动人类型: {}", changeExecUserType);
continue;
}
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);
// 检查该邮箱是否已经在其他部门出现过
String existingDepartment = userEmailToDepartment.get(changeExecUserEmail);
if (existingDepartment != null && !existingDepartment.equals(changeExecDepartment)) {
String errorMsg = String.format("变更行动方案中,同一人员不能出现在多个部门:%s 已在部门 %s 中,不能同时出现在部门 %s",
changeExecUserEmail, existingDepartment, changeExecDepartment);
log.warn("[validateDuplicateChangeExecUser] 检测到同一人员出现在多个部门: email={}, existingDept={}, newDept={}",
changeExecUserEmail, existingDepartment, changeExecDepartment);
throw ExceptionFactory.createBiz(ResponseCode.BAD_REQUEST, errorMsg);
}
usedExecUserKeys.add(key);
log.debug("[validateDuplicateChangeExecUser] 添加变更行动人: type={}, user={}, key={}",
changeExecUserType, changeExecUser, key);
// 记录邮箱和部门的对应关系(如果已存在相同部门,覆盖不影响)
userEmailToDepartment.put(changeExecUserEmail, changeExecDepartment);
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