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
f80e925b
Commit
f80e925b
authored
Dec 01, 2025
by
王志超
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: 子工单流转
parent
b2848267
Pipeline
#86364
passed with stages
in 1 minute 26 seconds
Changes
4
Pipelines
1
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
139 additions
and
45 deletions
+139
-45
ChangeExecRecordBiz.java
...ease/mail/yanxuan/change/biz/biz/ChangeExecRecordBiz.java
+59
-0
ChangeFlowBiz.java
...om/netease/mail/yanxuan/change/biz/biz/ChangeFlowBiz.java
+15
-27
ChangeSubFlowBiz.java
...netease/mail/yanxuan/change/biz/biz/ChangeSubFlowBiz.java
+59
-18
ChangeSubFlowSubmitReq.java
...uan/change/dal/meta/model/req/ChangeSubFlowSubmitReq.java
+6
-0
No files found.
yanxuan-qc-change-system-biz/src/main/java/com/netease/mail/yanxuan/change/biz/biz/ChangeExecRecordBiz.java
0 → 100644
View file @
f80e925b
package
com
.
netease
.
mail
.
yanxuan
.
change
.
biz
.
biz
;
import
com.netease.mail.yanxuan.change.common.util.DateUtils
;
import
com.netease.mail.yanxuan.change.dal.entity.ChangeExecRecord
;
import
com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeExecConfigReq
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.springframework.stereotype.Component
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.stream.Collectors
;
/**
* 变更行动项业务逻辑
* @author system
*/
@Component
@Slf4j
public
class
ChangeExecRecordBiz
{
/**
* 根据 ChangeExecConfigReq 列表构建 ChangeExecRecord 列表
*
* @param changeRecordId 变更记录ID
* @param changeExecProjectList 变更行动方案列表
* @param subFlowId 子流程工单ID(可选,主单场景传 null)
* @param subFlowRecordId 变更行动工单记录ID(可选,主单场景传 null)
* @return 变更行动项列表
*/
public
List
<
ChangeExecRecord
>
buildChangeExecRecord
(
Long
changeRecordId
,
List
<
ChangeExecConfigReq
>
changeExecProjectList
,
String
subFlowId
,
Long
subFlowRecordId
)
{
if
(
CollectionUtils
.
isEmpty
(
changeExecProjectList
))
{
return
new
ArrayList
<>();
}
return
changeExecProjectList
.
stream
().
map
(
c
->
{
ChangeExecRecord
changeExecRecord
=
new
ChangeExecRecord
();
changeExecRecord
.
setChangeRecordId
(
changeRecordId
);
changeExecRecord
.
setChangeExecDepartment
(
c
.
getChangeExecDepartment
());
changeExecRecord
.
setChangeExecUserType
(
c
.
getChangeExecUserType
());
changeExecRecord
.
setChangeExecUser
(
c
.
getChangeExecUser
());
changeExecRecord
.
setChangeExecUserEmail
(
c
.
getChangeExecUserEmail
());
changeExecRecord
.
setChangeRiskDesc
(
c
.
getChangeRiskDesc
());
changeExecRecord
.
setChangeExecProject
(
c
.
getChangeExecProject
());
changeExecRecord
.
setChangeChecking
(
c
.
getChangeChecking
());
changeExecRecord
.
setChangeExecFinishTime
(
c
.
getChangeExecFinishTime
());
changeExecRecord
.
setChangeExecFinishDesc
(
c
.
getChangeExecFinishDesc
());
changeExecRecord
.
setSubFlowId
(
subFlowId
);
changeExecRecord
.
setSubFlowRecordId
(
subFlowRecordId
);
changeExecRecord
.
setCreateTime
(
DateUtils
.
getCurrentTime
());
changeExecRecord
.
setUpdateTime
(
DateUtils
.
getCurrentTime
());
return
changeExecRecord
;
}).
collect
(
Collectors
.
toList
());
}
}
yanxuan-qc-change-system-biz/src/main/java/com/netease/mail/yanxuan/change/biz/biz/ChangeFlowBiz.java
View file @
f80e925b
...
@@ -157,6 +157,9 @@ public class ChangeFlowBiz {
...
@@ -157,6 +157,9 @@ public class ChangeFlowBiz {
@Autowired
@Autowired
private
BuildAndSendEmail
buildAndSendEmail
;
private
BuildAndSendEmail
buildAndSendEmail
;
@Autowired
private
ChangeExecRecordBiz
changeExecRecordBiz
;
@Transactional
@Transactional
public
String
createAndSubmit
(
ChangeFlowCreateReq
changeFlowCreateReq
)
{
public
String
createAndSubmit
(
ChangeFlowCreateReq
changeFlowCreateReq
)
{
String
uid
=
RequestLocalBean
.
getUid
();
String
uid
=
RequestLocalBean
.
getUid
();
...
@@ -272,7 +275,7 @@ public class ChangeFlowBiz {
...
@@ -272,7 +275,7 @@ public class ChangeFlowBiz {
ChangeRecord
changeRecord
=
buildChangeRecord
(
flowId
,
nodeId
,
changeFlowCreateReq
,
changeCommander
,
uid
);
ChangeRecord
changeRecord
=
buildChangeRecord
(
flowId
,
nodeId
,
changeFlowCreateReq
,
changeCommander
,
uid
);
changeFlowService
.
saveRecord
(
changeRecord
);
changeFlowService
.
saveRecord
(
changeRecord
);
// 保存变更行动方案记录(不绑定子流程,待触发时再创建)
// 保存变更行动方案记录(不绑定子流程,待触发时再创建)
List
<
ChangeExecRecord
>
changeExecRecords
=
buildChangeExecRecord
(
changeRecord
.
getId
(),
changeExecProject
);
List
<
ChangeExecRecord
>
changeExecRecords
=
changeExecRecordBiz
.
buildChangeExecRecord
(
changeRecord
.
getId
(),
changeExecProject
,
null
,
null
);
changeExecRecords
.
forEach
(
exec
->
changeFlowExecService
.
saveRecord
(
exec
));
changeExecRecords
.
forEach
(
exec
->
changeFlowExecService
.
saveRecord
(
exec
));
// 保存附件
// 保存附件
...
@@ -420,7 +423,7 @@ public class ChangeFlowBiz {
...
@@ -420,7 +423,7 @@ public class ChangeFlowBiz {
}
}
// 更新节点id,使用返回的节点ID
// 更新节点id,使用返回的节点ID
changeRecord
.
setFlowNode
(
nextNodeId
);
changeRecord
.
setFlowNode
(
nextNodeId
);
changeRecord
.
setState
(
ChangeStatusEnum
.
IN
.
getStatus
());
changeRecord
.
setState
(
ChangeStatusEnum
.
WAIT_SUBMIT_CHANGE_APPLY
.
getStatus
());
changeRecord
.
setUpdateTime
(
DateUtils
.
getCurrentTime
());
changeRecord
.
setUpdateTime
(
DateUtils
.
getCurrentTime
());
changeFlowService
.
updateRecord
(
changeRecord
);
changeFlowService
.
updateRecord
(
changeRecord
);
}
}
...
@@ -473,6 +476,7 @@ public class ChangeFlowBiz {
...
@@ -473,6 +476,7 @@ public class ChangeFlowBiz {
iusDepartmentReq
.
setIcac
(
true
);
iusDepartmentReq
.
setIcac
(
true
);
iusDepartmentReq
.
setUids
(
receiver
);
iusDepartmentReq
.
setUids
(
receiver
);
HashMap
<
String
,
List
<
SecondaryDepartments
>>
map
=
iusService
.
queryDepartment
(
iusDepartmentReq
);
HashMap
<
String
,
List
<
SecondaryDepartments
>>
map
=
iusService
.
queryDepartment
(
iusDepartmentReq
);
log
.
info
(
"[getDepartmentInfo] receiver: {}, map:{}"
,
receiver
,
JSON
.
toJSONString
(
map
));
ArrayList
<
List
<
SecondaryDepartments
>>
secondaryDepartments
=
new
ArrayList
<>(
map
.
values
());
ArrayList
<
List
<
SecondaryDepartments
>>
secondaryDepartments
=
new
ArrayList
<>(
map
.
values
());
List
<
String
>
ccList
=
new
ArrayList
<>();
List
<
String
>
ccList
=
new
ArrayList
<>();
if
(
CollectionUtils
.
isNotEmpty
(
secondaryDepartments
))
{
if
(
CollectionUtils
.
isNotEmpty
(
secondaryDepartments
))
{
...
@@ -525,26 +529,6 @@ public class ChangeFlowBiz {
...
@@ -525,26 +529,6 @@ public class ChangeFlowBiz {
}).
collect
(
Collectors
.
toList
());
}).
collect
(
Collectors
.
toList
());
}
}
private
List
<
ChangeExecRecord
>
buildChangeExecRecord
(
Long
changeRecordId
,
List
<
ChangeExecConfigReq
>
changeExecProject
)
{
return
changeExecProject
.
stream
().
map
(
c
->
{
ChangeExecRecord
changeExecRecord
=
new
ChangeExecRecord
();
changeExecRecord
.
setChangeRecordId
(
changeRecordId
);
changeExecRecord
.
setChangeExecDepartment
(
c
.
getChangeExecDepartment
());
changeExecRecord
.
setChangeExecUserType
(
c
.
getChangeExecUserType
());
changeExecRecord
.
setChangeExecUser
(
c
.
getChangeExecUser
());
changeExecRecord
.
setChangeExecUserEmail
(
c
.
getChangeExecUserEmail
());
changeExecRecord
.
setChangeRiskDesc
(
c
.
getChangeRiskDesc
());
changeExecRecord
.
setChangeExecProject
(
c
.
getChangeExecProject
());
changeExecRecord
.
setChangeChecking
(
c
.
getChangeChecking
());
changeExecRecord
.
setChangeExecFinishTime
(
c
.
getChangeExecFinishTime
());
changeExecRecord
.
setChangeExecFinishDesc
(
c
.
getChangeExecFinishDesc
());
changeExecRecord
.
setCreateTime
(
DateUtils
.
getCurrentTime
());
changeExecRecord
.
setUpdateTime
(
DateUtils
.
getCurrentTime
());
return
changeExecRecord
;
}).
collect
(
Collectors
.
toList
());
}
/**
/**
* 构建工单内容
* 构建工单内容
*
*
...
@@ -606,7 +590,7 @@ public class ChangeFlowBiz {
...
@@ -606,7 +590,7 @@ public class ChangeFlowBiz {
changeRecord
.
setChangeProfit
(
changeFlowCreateReq
.
getChangeProfit
());
changeRecord
.
setChangeProfit
(
changeFlowCreateReq
.
getChangeProfit
());
changeRecord
.
setChangeProfitDesc
(
changeFlowCreateReq
.
getChangeProfitDesc
());
changeRecord
.
setChangeProfitDesc
(
changeFlowCreateReq
.
getChangeProfitDesc
());
changeRecord
.
setChangeConfirmResultTime
(
changeFlowCreateReq
.
getChangeConfirmResultTime
());
changeRecord
.
setChangeConfirmResultTime
(
changeFlowCreateReq
.
getChangeConfirmResultTime
());
changeRecord
.
setState
(
ChangeStatusEnum
.
WAIT
.
getStatus
());
changeRecord
.
setState
(
ChangeStatusEnum
.
WAIT
_SUBMIT_CHANGE_APPLY
.
getStatus
());
// 变更结论
// 变更结论
changeRecord
.
setCreateSource
(
changeFlowCreateReq
.
getCreateSource
());
changeRecord
.
setCreateSource
(
changeFlowCreateReq
.
getCreateSource
());
changeRecord
.
setCreateSupplier
(
changeFlowCreateReq
.
getSupplier
());
changeRecord
.
setCreateSupplier
(
changeFlowCreateReq
.
getSupplier
());
...
@@ -667,8 +651,12 @@ public class ChangeFlowBiz {
...
@@ -667,8 +651,12 @@ public class ChangeFlowBiz {
}
}
// 变更行动项不可为空,最多20项
// 变更行动项不可为空,最多20项
List
<
ChangeExecConfigReq
>
changeExecProjectList
=
changeFlowSubmitReq
.
getChangeExecProjectList
();
List
<
ChangeExecConfigReq
>
changeExecProjectList
=
changeFlowSubmitReq
.
getChangeExecProjectList
();
Assert
.
isTrue
(
changeExecProjectList
.
size
()
<=
appConfig
.
getChangeExecLimit
(),
if
(
CollectionUtils
.
isEmpty
(
changeExecProjectList
))
{
"变更行动方案配置数超限"
);
throw
ExceptionFactory
.
createBiz
(
ResponseCode
.
BAD_REQUEST
,
"变更行动方案不能为空"
);
}
if
(
changeExecProjectList
.
size
()
>
appConfig
.
getChangeExecLimit
())
{
throw
ExceptionFactory
.
createBiz
(
ResponseCode
.
BAD_REQUEST
,
"变更行动方案配置数超限"
);
}
// 校验变更行动方案中是否有重复的变更行动人
// 校验变更行动方案中是否有重复的变更行动人
validateDuplicateChangeExecUser
(
changeExecProjectList
);
validateDuplicateChangeExecUser
(
changeExecProjectList
);
changeRecord
.
setParentChangeClassId
(
changeFlowSubmitReq
.
getParentChangeClassId
());
changeRecord
.
setParentChangeClassId
(
changeFlowSubmitReq
.
getParentChangeClassId
());
...
@@ -695,8 +683,8 @@ public class ChangeFlowBiz {
...
@@ -695,8 +683,8 @@ public class ChangeFlowBiz {
Integer
changeExecCount
=
changeFlowExecService
.
deleteByChangeRecordId
(
changeRecord
.
getId
());
Integer
changeExecCount
=
changeFlowExecService
.
deleteByChangeRecordId
(
changeRecord
.
getId
());
log
.
debug
(
"[NEW_CHANGE_FLOW_START] delete id:{}, changeExecCount:{}"
,
changeRecord
.
getId
(),
changeExecCount
);
log
.
debug
(
"[NEW_CHANGE_FLOW_START] delete id:{}, changeExecCount:{}"
,
changeRecord
.
getId
(),
changeExecCount
);
// 保存变更行动方案记录
// 保存变更行动方案记录
List
<
ChangeExecRecord
>
changeExecRecords
=
buildChangeExecRecord
(
changeRecord
.
getId
(),
List
<
ChangeExecRecord
>
changeExecRecords
=
changeExecRecordBiz
.
buildChangeExecRecord
(
changeRecord
.
getId
(),
changeFlowSubmitReq
.
getChangeExecProjectList
());
changeFlowSubmitReq
.
getChangeExecProjectList
()
,
null
,
null
);
changeExecRecords
.
forEach
(
exec
->
changeFlowExecService
.
saveRecord
(
exec
));
changeExecRecords
.
forEach
(
exec
->
changeFlowExecService
.
saveRecord
(
exec
));
// 更新附件,覆盖操作,先删除,后插入
// 更新附件,覆盖操作,先删除,后插入
Integer
fileCount
=
changeFileService
.
deleteByChangeRecordId
(
changeRecord
.
getId
());
Integer
fileCount
=
changeFileService
.
deleteByChangeRecordId
(
changeRecord
.
getId
());
...
...
yanxuan-qc-change-system-biz/src/main/java/com/netease/mail/yanxuan/change/biz/biz/ChangeSubFlowBiz.java
View file @
f80e925b
...
@@ -25,6 +25,7 @@ import com.netease.mail.yanxuan.change.dal.entity.ChangeRecord;
...
@@ -25,6 +25,7 @@ import com.netease.mail.yanxuan.change.dal.entity.ChangeRecord;
import
com.netease.mail.yanxuan.change.dal.entity.ChangeSubFlowRecord
;
import
com.netease.mail.yanxuan.change.dal.entity.ChangeSubFlowRecord
;
import
com.netease.mail.yanxuan.change.dal.mapper.ChangeRecordMapper
;
import
com.netease.mail.yanxuan.change.dal.mapper.ChangeRecordMapper
;
import
com.netease.mail.yanxuan.change.dal.mapper.ChangeSubFlowRecordMapper
;
import
com.netease.mail.yanxuan.change.dal.mapper.ChangeSubFlowRecordMapper
;
import
com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeExecConfigReq
;
import
com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeFlowListQueryReq
;
import
com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeFlowListQueryReq
;
import
com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeSubFlowCreateReq
;
import
com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeSubFlowCreateReq
;
import
com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeSubFlowListQueryReq
;
import
com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeSubFlowListQueryReq
;
...
@@ -79,6 +80,9 @@ public class ChangeSubFlowBiz {
...
@@ -79,6 +80,9 @@ public class ChangeSubFlowBiz {
private
ChangeFlowBiz
changeFlowBiz
;
private
ChangeFlowBiz
changeFlowBiz
;
@Autowired
@Autowired
private
ChangeExecRecordBiz
changeExecRecordBiz
;
@Autowired
private
IusRpcService
iusRpcService
;
private
IusRpcService
iusRpcService
;
@Autowired
@Autowired
...
@@ -140,16 +144,12 @@ public class ChangeSubFlowBiz {
...
@@ -140,16 +144,12 @@ public class ChangeSubFlowBiz {
String
currentNode
=
subFlowRecord
.
getSubFlowNode
();
String
currentNode
=
subFlowRecord
.
getSubFlowNode
();
this
.
checkNode
(
currentNode
,
Collections
.
singletonList
(
changeSubFlowSubmitReq
.
getCurrentNodeId
()));
this
.
checkNode
(
currentNode
,
Collections
.
singletonList
(
changeSubFlowSubmitReq
.
getCurrentNodeId
()));
// 通过行动工单记录ID查询行动项记录(取第一个)
List
<
ChangeExecRecord
>
execRecords
=
changeFlowExecService
.
getBySubFlowRecordId
(
subFlowRecord
.
getId
());
Assert
.
notEmpty
(
execRecords
,
"行动项记录不存在"
);
ChangeExecRecord
execRecord
=
execRecords
.
get
(
0
);
String
uid
=
RequestLocalBean
.
getUid
();
String
uid
=
RequestLocalBean
.
getUid
();
// 验证执行人权限
// 验证执行人权限:检查当前用户是否在行动工单的审批人列表中(JSON格式:["user1@example.com", "user2@example.com"])
if
(!
uid
.
equals
(
execRecord
.
getChangeExecUserEmail
()))
{
//if (StringUtils.isBlank(subFlowRecord.getApprover())
throw
ExceptionFactory
.
createBiz
(
ResponseCode
.
NO_AUTH
,
ResponseCode
.
NO_AUTH
.
getMsg
());
// || !subFlowRecord.getApprover().contains("\"" + uid + "\"")) {
}
// throw ExceptionFactory.createBiz(ResponseCode.NO_AUTH, ResponseCode.NO_AUTH.getMsg());
//}
// 获取工单详情
// 获取工单详情
FlowDataDTO
flowDataDTO
=
flowService
.
flowDetail
(
subFlowId
);
FlowDataDTO
flowDataDTO
=
flowService
.
flowDetail
(
subFlowId
);
...
@@ -157,15 +157,14 @@ public class ChangeSubFlowBiz {
...
@@ -157,15 +157,14 @@ public class ChangeSubFlowBiz {
throw
ExceptionFactory
.
createBiz
(
ResponseCode
.
DETAIL_FLOW_ERROR
,
"子流程工单查询错误,不存在"
);
throw
ExceptionFactory
.
createBiz
(
ResponseCode
.
DETAIL_FLOW_ERROR
,
"子流程工单查询错误,不存在"
);
}
}
return
checkUpdateAndSubmit
(
subFlowId
,
flowDataDTO
,
uid
,
execRecord
,
subFlowRecord
,
currentNode
,
changeSubFlowSubmitReq
);
return
checkUpdateAndSubmit
(
subFlowId
,
flowDataDTO
,
uid
,
subFlowRecord
,
currentNode
,
changeSubFlowSubmitReq
);
}
}
/**
/**
* 检查并提交子流程节点
* 检查并提交子流程节点
*/
*/
private
String
checkUpdateAndSubmit
(
String
subFlowId
,
FlowDataDTO
flowDataDTO
,
String
uid
,
private
String
checkUpdateAndSubmit
(
String
subFlowId
,
FlowDataDTO
flowDataDTO
,
String
uid
,
ChangeExecRecord
execRecord
,
ChangeSubFlowRecord
subFlowRecord
,
ChangeSubFlowRecord
subFlowRecord
,
String
currentNode
,
ChangeSubFlowSubmitReq
changeSubFlowSubmitReq
)
{
String
currentNode
,
ChangeSubFlowSubmitReq
changeSubFlowSubmitReq
)
{
ChangeFlowEnum
node
=
ChangeFlowEnum
.
getByNodeId
(
currentNode
);
ChangeFlowEnum
node
=
ChangeFlowEnum
.
getByNodeId
(
currentNode
);
Assert
.
notNull
(
node
,
"节点配置不存在"
);
Assert
.
notNull
(
node
,
"节点配置不存在"
);
log
.
debug
(
"[checkUpdateAndSubmit] subFlowId:{}, nodeEnum:{}, changeSubFlowSubmitReq:{}"
,
log
.
debug
(
"[checkUpdateAndSubmit] subFlowId:{}, nodeEnum:{}, changeSubFlowSubmitReq:{}"
,
...
@@ -178,14 +177,56 @@ public class ChangeSubFlowBiz {
...
@@ -178,14 +177,56 @@ public class ChangeSubFlowBiz {
switch
(
node
)
{
switch
(
node
)
{
case
CHANGE_SUB_FLOW_START:
case
CHANGE_SUB_FLOW_START:
// 确认行动方案节点,直接提交到下一节点
// 确认行动方案节点:删除旧的行动项,重新创建
List
<
ChangeExecConfigReq
>
changeExecProjectList
=
changeSubFlowSubmitReq
.
getChangeExecProjectList
();
// 校验行动项列表不能为空
if
(
CollectionUtils
.
isEmpty
(
changeExecProjectList
))
{
throw
ExceptionFactory
.
createBiz
(
ResponseCode
.
BAD_REQUEST
,
"行动项列表不能为空"
);
}
// 校验行动项列表:所有行动项必须是同一个部门+人的组合,且与子单记录一致
String
expectedDepartment
=
subFlowRecord
.
getChangeExecDepartment
();
String
expectedUserEmail
=
subFlowRecord
.
getChangeExecUserEmail
();
// 校验所有行动项的部门+邮箱必须与子单记录一致
changeExecProjectList
.
forEach
(
execConfig
->
{
String
dept
=
execConfig
.
getChangeExecDepartment
();
String
userEmail
=
execConfig
.
getChangeExecUserEmail
();
if
(
StringUtils
.
isBlank
(
dept
)
||
StringUtils
.
isBlank
(
userEmail
))
{
throw
ExceptionFactory
.
createBiz
(
ResponseCode
.
BAD_REQUEST
,
"行动项中部门或行动人邮箱不能为空"
);
}
if
(!
expectedDepartment
.
equals
(
dept
)
||
!
expectedUserEmail
.
equals
(
userEmail
))
{
throw
ExceptionFactory
.
createBiz
(
ResponseCode
.
BAD_REQUEST
,
String
.
format
(
"行动项的部门+人组合必须与子单记录一致。子单记录:部门[%s],行动人[%s];当前行动项:部门[%s],行动人[%s]"
,
expectedDepartment
,
expectedUserEmail
,
dept
,
userEmail
));
}
});
// 删除子单下所有行动项
changeFlowExecService
.
deleteBySubFlowRecordId
(
subFlowRecord
.
getId
());
// 根据前端传递的行动项列表重新创建
List
<
ChangeExecRecord
>
newExecRecords
=
changeExecRecordBiz
.
buildChangeExecRecord
(
subFlowRecord
.
getChangeRecordId
(),
changeExecProjectList
,
subFlowId
,
subFlowRecord
.
getId
());
newExecRecords
.
forEach
(
exec
->
changeFlowExecService
.
saveRecord
(
exec
));
// 提交到下一节点
String
nextNodeId
=
flowService
.
submitFlow
(
subFlowId
,
flowDataDTO
,
uid
,
String
nextNodeId
=
flowService
.
submitFlow
(
subFlowId
,
flowDataDTO
,
uid
,
ChangeFlowEnum
.
CHANGE_SUB_FLOW
.
getTopoId
(),
JSON
.
toJSONString
(
content
),
true
,
ChangeFlowEnum
.
CHANGE_SUB_FLOW
.
getTopoId
(),
JSON
.
toJSONString
(
content
),
true
,
FlowxOperationEnum
.
SUBMIT
.
getName
(),
"提交工单"
,
exec
Record
.
getCreateTime
());
FlowxOperationEnum
.
SUBMIT
.
getName
(),
"提交工单"
,
subFlow
Record
.
getCreateTime
());
// 更新行动工单节点ID
// 更新行动工单节点ID
subFlowRecord
.
setSubFlowNode
(
nextNodeId
);
subFlowRecord
.
setSubFlowNode
(
nextNodeId
);
// TODO: 根据业务逻辑设置状态 subFlowRecord.setStatus(...)
subFlowRecord
.
setStatus
(
ChangeSubFlowStatusEnum
.
WAIT_APPROVE_ACTION_PLAN
.
getStatus
());
subFlowRecord
.
setUpdateTime
(
DateUtils
.
getCurrentTime
());
subFlowRecord
.
setUpdateTime
(
DateUtils
.
getCurrentTime
());
// todo: 获取上级领导
subFlowRecord
.
setApprover
(
""
);
changeSubFlowRecordService
.
update
(
subFlowRecord
);
changeSubFlowRecordService
.
update
(
subFlowRecord
);
return
nextNodeId
;
return
nextNodeId
;
...
@@ -193,7 +234,7 @@ public class ChangeSubFlowBiz {
...
@@ -193,7 +234,7 @@ public class ChangeSubFlowBiz {
// 审批行动方案节点,直接提交到执行节点
// 审批行动方案节点,直接提交到执行节点
String
execNodeId
=
flowService
.
submitFlow
(
subFlowId
,
flowDataDTO
,
uid
,
String
execNodeId
=
flowService
.
submitFlow
(
subFlowId
,
flowDataDTO
,
uid
,
ChangeFlowEnum
.
CHANGE_SUB_FLOW
.
getTopoId
(),
JSON
.
toJSONString
(
content
),
true
,
ChangeFlowEnum
.
CHANGE_SUB_FLOW
.
getTopoId
(),
JSON
.
toJSONString
(
content
),
true
,
FlowxOperationEnum
.
SUBMIT
.
getName
(),
"提交工单"
,
exec
Record
.
getCreateTime
());
FlowxOperationEnum
.
SUBMIT
.
getName
(),
"提交工单"
,
subFlow
Record
.
getCreateTime
());
// 更新行动工单节点ID
// 更新行动工单节点ID
subFlowRecord
.
setSubFlowNode
(
execNodeId
);
subFlowRecord
.
setSubFlowNode
(
execNodeId
);
// TODO: 根据业务逻辑设置状态 subFlowRecord.setStatus(...)
// TODO: 根据业务逻辑设置状态 subFlowRecord.setStatus(...)
...
@@ -205,7 +246,7 @@ public class ChangeSubFlowBiz {
...
@@ -205,7 +246,7 @@ public class ChangeSubFlowBiz {
// 执行行动方案节点,直接提交到提交执行结果节点
// 执行行动方案节点,直接提交到提交执行结果节点
String
confirmNodeId
=
flowService
.
submitFlow
(
subFlowId
,
flowDataDTO
,
uid
,
String
confirmNodeId
=
flowService
.
submitFlow
(
subFlowId
,
flowDataDTO
,
uid
,
ChangeFlowEnum
.
CHANGE_SUB_FLOW
.
getTopoId
(),
JSON
.
toJSONString
(
content
),
true
,
ChangeFlowEnum
.
CHANGE_SUB_FLOW
.
getTopoId
(),
JSON
.
toJSONString
(
content
),
true
,
FlowxOperationEnum
.
SUBMIT
.
getName
(),
"提交工单"
,
exec
Record
.
getCreateTime
());
FlowxOperationEnum
.
SUBMIT
.
getName
(),
"提交工单"
,
subFlow
Record
.
getCreateTime
());
// 更新行动工单节点ID
// 更新行动工单节点ID
subFlowRecord
.
setSubFlowNode
(
confirmNodeId
);
subFlowRecord
.
setSubFlowNode
(
confirmNodeId
);
// TODO: 根据业务逻辑设置状态 subFlowRecord.setStatus(...)
// TODO: 根据业务逻辑设置状态 subFlowRecord.setStatus(...)
...
@@ -232,7 +273,7 @@ public class ChangeSubFlowBiz {
...
@@ -232,7 +273,7 @@ public class ChangeSubFlowBiz {
// 提交到结束节点
// 提交到结束节点
String
endNodeId
=
flowService
.
submitFlow
(
subFlowId
,
flowDataDTO
,
uid
,
String
endNodeId
=
flowService
.
submitFlow
(
subFlowId
,
flowDataDTO
,
uid
,
ChangeFlowEnum
.
CHANGE_SUB_FLOW
.
getTopoId
(),
JSON
.
toJSONString
(
content
),
true
,
ChangeFlowEnum
.
CHANGE_SUB_FLOW
.
getTopoId
(),
JSON
.
toJSONString
(
content
),
true
,
FlowxOperationEnum
.
SUBMIT
.
getName
(),
"提交工单"
,
exec
Record
.
getCreateTime
());
FlowxOperationEnum
.
SUBMIT
.
getName
(),
"提交工单"
,
subFlow
Record
.
getCreateTime
());
// 更新行动工单节点ID
// 更新行动工单节点ID
subFlowRecord
.
setSubFlowNode
(
endNodeId
);
subFlowRecord
.
setSubFlowNode
(
endNodeId
);
// TODO: 根据业务逻辑设置状态 subFlowRecord.setStatus(...)
// TODO: 根据业务逻辑设置状态 subFlowRecord.setStatus(...)
...
...
yanxuan-qc-change-system-dal/src/main/java/com/netease/mail/yanxuan/change/dal/meta/model/req/ChangeSubFlowSubmitReq.java
View file @
f80e925b
...
@@ -7,6 +7,7 @@
...
@@ -7,6 +7,7 @@
package
com
.
netease
.
mail
.
yanxuan
.
change
.
dal
.
meta
.
model
.
req
;
package
com
.
netease
.
mail
.
yanxuan
.
change
.
dal
.
meta
.
model
.
req
;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.NotBlank
;
import
java.util.List
;
import
lombok.Data
;
import
lombok.Data
;
...
@@ -39,5 +40,10 @@ public class ChangeSubFlowSubmitReq {
...
@@ -39,5 +40,10 @@ public class ChangeSubFlowSubmitReq {
* 行动完成情况(提交执行结果时必填)
* 行动完成情况(提交执行结果时必填)
*/
*/
private
String
changeExecFinishDesc
;
private
String
changeExecFinishDesc
;
/**
* 行动项列表(确认行动方案时使用)
*/
private
List
<
ChangeExecConfigReq
>
changeExecProjectList
;
}
}
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