Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yanxuan-qc-change-system
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
yx-qc-change-flow
yanxuan-qc-change-system
Commits
2ee5b1c1
Commit
2ee5b1c1
authored
Nov 24, 2025
by
王志超
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: 提交自定义方案时增加变更行动人重复校验
parent
7c922cf0
Pipeline
#86008
passed with stages
in 1 minute 20 seconds
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
74 additions
and
0 deletions
+74
-0
ChangeFlowBiz.java
...om/netease/mail/yanxuan/change/biz/biz/ChangeFlowBiz.java
+74
-0
No files found.
yanxuan-qc-change-system-biz/src/main/java/com/netease/mail/yanxuan/change/biz/biz/ChangeFlowBiz.java
View file @
2ee5b1c1
...
...
@@ -47,6 +47,7 @@ import com.netease.mail.yanxuan.change.common.bean.CommonConstants;
import
com.netease.mail.yanxuan.change.common.bean.RequestLocalBean
;
import
com.netease.mail.yanxuan.change.common.bean.ResponseCode
;
import
com.netease.mail.yanxuan.change.common.enums.ChangeFlowEnum
;
import
com.netease.mail.yanxuan.change.common.enums.ChangeCommanderEnum
;
import
com.netease.mail.yanxuan.change.common.enums.ChangeResultEnum
;
import
com.netease.mail.yanxuan.change.common.enums.ChangeStatusEnum
;
import
com.netease.mail.yanxuan.change.common.enums.ChangeSubjectEnum
;
...
...
@@ -248,6 +249,8 @@ public class ChangeFlowBiz {
List
<
ChangeExecConfigReq
>
changeExecProject
=
changeFlowCreateReq
.
getChangeExecProject
();
Assert
.
isTrue
(
changeExecProject
.
size
()
<=
appConfig
.
getChangeExecLimit
(),
"变更行动方案配置数超限"
);
// 校验变更行动方案中是否有重复的变更行动人
validateDuplicateChangeExecUser
(
changeExecProject
);
// 结束时间不可晚于第二天定时任务执行时间
Long
tomorrowSpecificTime
=
DateUtils
.
getTomorrowSpecificTime
(
"00:00:00"
);
if
(
changeFlowCreateReq
.
getCreateSource
()
!=
2
)
{
...
...
@@ -633,6 +636,8 @@ public class ChangeFlowBiz {
List
<
ChangeExecConfigReq
>
changeExecProjectList
=
changeFlowSubmitReq
.
getChangeExecProjectList
();
Assert
.
isTrue
(
changeExecProjectList
.
size
()
<=
appConfig
.
getChangeExecLimit
(),
"变更行动方案配置数超限"
);
// 校验变更行动方案中是否有重复的变更行动人
validateDuplicateChangeExecUser
(
changeExecProjectList
);
changeRecord
.
setParentChangeClassId
(
changeFlowSubmitReq
.
getParentChangeClassId
());
changeRecord
.
setSonChangeClassId
(
changeFlowSubmitReq
.
getSonChangeClassId
());
List
<
String
>
execDepartmentList
=
changeExecProjectList
.
stream
().
map
(
ChangeExecConfigReq:
:
getChangeExecDepartment
)
...
...
@@ -1572,4 +1577,73 @@ public class ChangeFlowBiz {
public
FlowDataDTO
getFlowNodeInfo
(
Long
flowId
)
{
return
flowService
.
flowDetail
(
flowId
.
toString
());
}
/**
* 校验变更行动方案中是否有重复的变更行动人
*
* 规则:
* 1. 供应商关联角色/商品关联角色:如果 changeExecUserType 和 changeExecUser 都相同,则重复
* 2. 固定人:如果 changeExecUserType 相同且 changeExecUser(邮箱)相同,则重复
* 3. 发起人:如果 changeExecUserType 相同,则重复
*
* @param changeExecProjectList 变更行动方案列表
*/
private
void
validateDuplicateChangeExecUser
(
List
<
ChangeExecConfigReq
>
changeExecProjectList
)
{
if
(
CollectionUtils
.
isEmpty
(
changeExecProjectList
))
{
return
;
}
// 用于记录已选择的变更行动人
Set
<
String
>
usedExecUserKeys
=
new
HashSet
<>();
for
(
ChangeExecConfigReq
execConfig
:
changeExecProjectList
)
{
if
(
execConfig
.
getChangeExecUserType
()
==
null
||
StringUtils
.
isBlank
(
execConfig
.
getChangeExecUser
()))
{
continue
;
}
Integer
changeExecUserType
=
execConfig
.
getChangeExecUserType
();
String
changeExecUser
=
execConfig
.
getChangeExecUser
();
// 构建唯一标识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
);
throw
ExceptionFactory
.
createBiz
(
ResponseCode
.
BAD_REQUEST
,
errorMsg
);
}
usedExecUserKeys
.
add
(
key
);
log
.
debug
(
"[validateDuplicateChangeExecUser] 添加变更行动人: type={}, user={}, key={}"
,
changeExecUserType
,
changeExecUser
,
key
);
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment