Commit 6118f52a by 王志超

feat: 重构变更工单创建流程,使用新的流程

parent a15a46eb
Pipeline #85716 passed with stages
in 2 minutes 7 seconds
......@@ -267,41 +267,15 @@ public class ChangeFlowBiz {
// 保存工单数据
ChangeRecord changeRecord = buildChangeRecord(flowId, nodeId, changeFlowCreateReq, changeCommander, uid);
changeFlowService.saveRecord(changeRecord);
// 保存变更行动方案记录,新增流程绑定
List<ChangeExecRecord> changeExecRecords = new ArrayList<>();
for (ChangeExecConfigReq changeExecConfigReq : changeExecProject) {
// 构建子流程工单内容(包含主流程信息)
Map<String, Object> subFlowContent = buildFlowContent(uid);
subFlowContent.put("changeRecordId", changeRecord.getId());
subFlowContent.put("mainFlowId", flowId);
// 构建子流程工单名称:主流程名称 + 行动项内容(截取前50字符)
String subFlowName = flowName + "-" + changeExecConfigReq.getChangeExecProject();
if (subFlowName.length() > 100) {
subFlowName = subFlowName.substring(0, 100) + "...";
}
FlowCreateReqDTO subFlowCreateReqDTO = buildFlowCreateReqDTO(ChangeFlowEnum.CHANGE_SUB_FLOW.getTopoId(), uid,
JSON.toJSONString(subFlowContent), FlowxOperationEnum.CREATE.getName(), name, subFlowName);
String subFlowId = flowService.createFlow(subFlowCreateReqDTO);
// 查询工单详情
FlowDataDTO subFlowDataDTO = flowService.flowDetail(subFlowId);
// 获取流程节点ID
String subNodeId = subFlowDataDTO.getFlowMeta().getCurrNodeDataList().get(0).getNodeId();
log.info("[createSubFlowTopo] changeRecordId:{}, subFlowId:{}, nodeId:{}",
changeRecord.getId(), subFlowId, subNodeId);
// 构建执行记录
ChangeExecRecord execRecord = buildChangeExecRecord(changeRecord.getId(), changeExecConfigReq, subFlowId, subNodeId);
// 入库
changeFlowExecService.saveRecord(execRecord);
changeExecRecords.add(execRecord);
}
// 保存变更行动方案记录(不绑定子流程,待触发时再创建)
List<ChangeExecRecord> changeExecRecords = buildChangeExecRecord(changeRecord.getId(), changeExecProject);
changeExecRecords.forEach(exec -> changeFlowExecService.saveRecord(exec));
// 保存附件
saveChangeFiles(changeRecord.getId(), changeFlowCreateReq);
// 完成流程创建(提交节点、发送邮件)
finalizeFlowCreation(flowId, flowDataDTO, changeRecord, changeExecRecords, changeCommander, changeType, content, uid, changeFlowCreateReq);
// 完成流程创建(提交节点、发送邮件、创建子流程
finalizeFlowCreation(flowId, flowDataDTO, changeRecord, changeExecRecords, changeCommander, changeType, content, uid, name, flowName, changeFlowCreateReq);
return flowId;
}
......@@ -326,7 +300,7 @@ public class ChangeFlowBiz {
}
/**
* 完成流程创建(提交节点、发送邮件)
* 完成流程创建(提交节点、发送邮件、创建子流程
*
* @param flowId 工单ID
* @param flowDataDTO 工单详情
......@@ -336,23 +310,70 @@ public class ChangeFlowBiz {
* @param changeType 变更类型
* @param content 工单内容
* @param uid 创建人
* @param name 创建人姓名
* @param flowName 主流程名称
* @param changeFlowCreateReq 创建请求
*/
private void finalizeFlowCreation(String flowId, FlowDataDTO flowDataDTO, ChangeRecord changeRecord,
List<ChangeExecRecord> changeExecRecords, String changeCommander,
StringBuilder changeType, Map<String, Object> content, String uid,
ChangeFlowCreateReq changeFlowCreateReq) {
// 如果发起人=变更负责人,直接提交到执行节点并发送邮件
String name, String flowName, ChangeFlowCreateReq changeFlowCreateReq) {
// 如果发起人=变更负责人,直接提交到执行节点,创建子流程并发送邮件
if (changeCommander.equals(uid)) {
submitToExecutionNode(flowId, flowDataDTO, uid, content, changeRecord);
// 创建子流程并绑定
createAndBindSubFlows(changeRecord, uid, name, flowName);
buildAndSendEmail.buildAndSendEmailCreate(changeRecord, changeExecRecords, changeType, changeCommander, changeFlowCreateReq);
} else {
// 如果发起人≠变更负责人,只发送邮件(不提交节点)
// 如果发起人≠变更负责人,只发送邮件(不提交节点,不创建子流程
sendCreateFlowEmail(changeRecord, changeCommander, changeType, changeFlowCreateReq);
}
}
/**
* 创建子流程并绑定到执行记录
*
* @param changeRecord 主流程记录
* @param uid 创建人
* @param name 创建人姓名
* @param flowName 主流程名称
*/
private void createAndBindSubFlows(ChangeRecord changeRecord, String uid, String name, String flowName) {
// 从数据库查询执行记录列表
List<ChangeExecRecord> execRecords = changeFlowExecService.getChangeExecRecordList(changeRecord.getId());
if (CollectionUtils.isEmpty(execRecords)) {
log.warn("[createAndBindSubFlows] 未查询到执行记录, changeRecordId:{}", changeRecord.getId());
return;
}
for (ChangeExecRecord execRecord : execRecords) {
// 构建子流程工单内容
Map<String, Object> subFlowContent = buildFlowContent(uid);
// 构建子流程工单名称:主流程名称 + 行动项内容(截取前100字符)
String subFlowName = flowName + "-" + execRecord.getChangeExecProject();
if (subFlowName.length() > 100) {
subFlowName = subFlowName.substring(0, 100) + "...";
}
FlowCreateReqDTO subFlowCreateReqDTO = buildFlowCreateReqDTO(ChangeFlowEnum.CHANGE_SUB_FLOW.getTopoId(), uid,
JSON.toJSONString(subFlowContent), FlowxOperationEnum.CREATE.getName(), name, subFlowName);
String subFlowId = flowService.createFlow(subFlowCreateReqDTO);
// 查询工单详情
FlowDataDTO subFlowDataDTO = flowService.flowDetail(subFlowId);
// 获取流程节点ID
String subNodeId = subFlowDataDTO.getFlowMeta().getCurrNodeDataList().get(0).getNodeId();
log.info("[createAndBindSubFlows] changeRecordId:{}, subFlowId:{}, nodeId:{}",
changeRecord.getId(), subFlowId, subNodeId);
// 更新执行记录,绑定子流程
execRecord.setSubFlowId(Long.parseLong(subFlowId));
execRecord.setSubFlowNode(subNodeId);
changeFlowExecService.update(execRecord);
}
}
/**
* 提交到执行节点
*/
private void submitToExecutionNode(String flowId, FlowDataDTO flowDataDTO, String uid, Map<String, Object> content, ChangeRecord changeRecord) {
......@@ -470,58 +491,24 @@ public class ChangeFlowBiz {
}).collect(Collectors.toList());
}
/**
* 构建单个执行记录
*
* @param changeRecordId 主流程记录ID
* @param changeExecConfigReq 行动项配置
* @return 执行记录
*/
private ChangeExecRecord buildChangeExecRecord(Long changeRecordId, ChangeExecConfigReq changeExecConfigReq) {
ChangeExecRecord changeExecRecord = new ChangeExecRecord();
changeExecRecord.setChangeRecordId(changeRecordId);
changeExecRecord.setChangeExecDepartment(changeExecConfigReq.getChangeExecDepartment());
changeExecRecord.setChangeExecUserType(changeExecConfigReq.getChangeExecUserType());
changeExecRecord.setChangeExecUser(changeExecConfigReq.getChangeExecUser());
changeExecRecord.setChangeExecUserEmail(changeExecConfigReq.getChangeExecUserEmail());
changeExecRecord.setChangeRiskDesc(changeExecConfigReq.getChangeRiskDesc());
changeExecRecord.setChangeExecProject(changeExecConfigReq.getChangeExecProject());
changeExecRecord.setChangeChecking(changeExecConfigReq.getChangeChecking());
changeExecRecord.setChangeExecFinishTime(changeExecConfigReq.getChangeExecFinishTime());
changeExecRecord.setChangeExecFinishDesc(changeExecConfigReq.getChangeExecFinishDesc());
changeExecRecord.setCreateTime(DateUtils.getCurrentTime());
changeExecRecord.setUpdateTime(DateUtils.getCurrentTime());
return changeExecRecord;
}
/**
* 构建执行记录(包含子流程信息)
*
* @param changeRecordId 主流程记录ID
* @param changeExecConfigReq 执行配置请求
* @param subFlowId 子流程ID
* @param subNodeId 子流程节点ID
* @return 执行记录
*/
private ChangeExecRecord buildChangeExecRecord(Long changeRecordId, ChangeExecConfigReq changeExecConfigReq, String subFlowId, String subNodeId) {
ChangeExecRecord changeExecRecord = buildChangeExecRecord(changeRecordId, changeExecConfigReq);
changeExecRecord.setSubFlowId(Long.parseLong(subFlowId));
changeExecRecord.setSubFlowNode(subNodeId);
return changeExecRecord;
}
/**
* 批量构建执行记录
*
* @param changeRecordId 主流程记录ID
* @param changeExecProject 行动项配置列表
* @return 执行记录列表
*/
private List<ChangeExecRecord> buildChangeExecRecordList(Long changeRecordId,
List<ChangeExecConfigReq> changeExecProject) {
return changeExecProject.stream()
.map(c -> buildChangeExecRecord(changeRecordId, c))
.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());
}
/**
......@@ -672,7 +659,7 @@ public class ChangeFlowBiz {
Integer changeExecCount = changeFlowExecService.deleteByChangeRecordId(changeRecord.getId());
log.debug("[CHANGE_FLOW_SUBMIT] delete id:{}, changeExecCount:{}", changeRecord.getId(), changeExecCount);
// 保存变更行动方案记录
List<ChangeExecRecord> changeExecRecords = buildChangeExecRecordList(changeRecord.getId(),
List<ChangeExecRecord> changeExecRecords = buildChangeExecRecord(changeRecord.getId(),
changeFlowSubmitReq.getChangeExecProjectList());
changeExecRecords.forEach(exec -> changeFlowExecService.saveRecord(exec));
// 更新附件,覆盖操作,先删除,后插入
......
......@@ -9,7 +9,6 @@ package com.netease.mail.yanxuan.change.biz.service;
import java.util.List;
import com.netease.mail.yanxuan.change.dal.entity.ChangeExecRecord;
import com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeExecConfigReq;
import com.netease.mail.yanxuan.change.dal.meta.model.vo.ChangeFlowExecVO;
/**
......@@ -26,6 +25,13 @@ public interface ChangeFlowExecService {
List<ChangeFlowExecVO> getChangeFlowExecRecord(Long changeRecordId);
/**
* 查询行动项实体列表
* @param changeRecordId
* @return
*/
List<ChangeExecRecord> getChangeExecRecordList(Long changeRecordId);
/**
* 批量保存变更行动执行记录
* @param changeExecRecordList
*/
......
......@@ -46,6 +46,11 @@ public class ChangeFlowExecServiceImpl implements ChangeFlowExecService {
}
@Override
public List<ChangeExecRecord> getChangeExecRecordList(Long changeRecordId) {
return changeExecRecordMapper.selectByChangeRecordId(changeRecordId);
}
@Override
public void batchSaveRecord(List<ChangeExecRecord> changeExecRecordList) {
changeExecRecordMapper.insertList(changeExecRecordList);
}
......
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