Commit bc372a3e by 王志超

feat: 取消变更

parent 7b7ba380
Pipeline #86902 passed with stages
in 1 minute 37 seconds
...@@ -858,17 +858,24 @@ public class ChangeFlowBiz { ...@@ -858,17 +858,24 @@ public class ChangeFlowBiz {
} }
// 工单流转 // 工单流转
Map<String, Object> content = buildFlowContent(FlowOperationTypeEnum.REFUSE); Map<String, Object> content = buildFlowContent(FlowOperationTypeEnum.REFUSE);
Map<String, Object> cancelParamMap = new HashMap<>(); String nextNodeId = flowService.submitFlow(String.valueOf(flowId), flowDataDTO, uid,
cancelParamMap.put("type", FlowTransitionType.TYPE_REJECTED); ChangeFlowEnum.NEW_CHANGE_FLOW.getTopoId(), JSON.toJSONString(content), false,
String nextNodeId = flowService.submitFlowWithParamMap(String.valueOf(flowId), flowDataDTO, uid, FlowxOperationEnum.CANCEL.getName(), "取消变更", changeRecord.getCreateTime());
ChangeFlowEnum.NEW_CHANGE_FLOW.getTopoId(), JSON.toJSONString(content), cancelParamMap,
FlowxOperationEnum.APPROVE_FAIL.getName(), "取消工单", changeRecord.getCreateTime());
log.info("[cancel] flowId:{}, nextNodeId:{}", flowId, nextNodeId);
// 填充更新数据 // 填充更新数据
changeRecord.setFlowNode(nextNodeId); changeRecord.setFlowNode(nextNodeId);
changeRecord.setState(ChangeStatusEnum.CANCEL.getStatus()); changeRecord.setState(ChangeStatusEnum.CANCEL.getStatus());
changeRecord.setCancelReason(req.getCancelReason()); changeRecord.setCancelReason(req.getCancelReason());
changeRecord.setUpdateTime(DateUtils.getCurrentTime()); changeRecord.setUpdateTime(DateUtils.getCurrentTime());
// 取消所有行动工单,并获取所有子工单列表(用于后续获取行动人邮箱)
List<ChangeSubFlowRecord> allSubFlows = cancelAllSubFlows(changeRecord.getId(), req.getCancelReason(), uid);
// 立即更新主工单状态,确保状态正确,不被后续邮件服务阻塞
Boolean updateResult = changeFlowService.updateRecord(changeRecord);
log.info("[cancel] 主工单状态已更新,flowId:{}, state:{}, updateResult:{}", flowId,
ChangeStatusEnum.CANCEL.getStatus(), updateResult);
try {
Map<String, Object> cancelMap = new HashMap<>(); Map<String, Object> cancelMap = new HashMap<>();
cancelMap.put("changeId", changeRecord.getFlowId()); cancelMap.put("changeId", changeRecord.getFlowId());
cancelMap.put("changeSubject", ChangeSubjectEnum.getChangeSubjectEnum(changeRecord.getChangeSubject()).getDesc()); cancelMap.put("changeSubject", ChangeSubjectEnum.getChangeSubjectEnum(changeRecord.getChangeSubject()).getDesc());
...@@ -877,9 +884,6 @@ public class ChangeFlowBiz { ...@@ -877,9 +884,6 @@ public class ChangeFlowBiz {
cancelMap.put("changeCommander", user == null ? changeRecord.getChangeCommander() : user.getName()); cancelMap.put("changeCommander", user == null ? changeRecord.getChangeCommander() : user.getName());
cancelMap.put("cancelReason", changeRecord.getCancelReason()); cancelMap.put("cancelReason", changeRecord.getCancelReason());
// 取消所有行动工单,并获取所有子工单列表(用于后续获取行动人邮箱)
List<ChangeSubFlowRecord> allSubFlows = cancelAllSubFlows(changeRecord.getId(), req.getCancelReason(), uid);
// 从行动工单获取行动人邮箱(去重) // 从行动工单获取行动人邮箱(去重)
List<String> userEmailList = extractExecUserEmailsFromSubFlows(allSubFlows); List<String> userEmailList = extractExecUserEmailsFromSubFlows(allSubFlows);
...@@ -907,7 +911,12 @@ public class ChangeFlowBiz { ...@@ -907,7 +911,12 @@ public class ChangeFlowBiz {
sendSupplierEmail.sendSupplierEmail(changeRecord.getChangeSupplier(), cancelSubjectParam, sendSupplierEmail.sendSupplierEmail(changeRecord.getChangeSupplier(), cancelSubjectParam,
EmailTemplateEnum.YX_QC_CHANGE_SUBMIT_CANCEL, cancelMap); EmailTemplateEnum.YX_QC_CHANGE_SUBMIT_CANCEL, cancelMap);
} }
return changeFlowService.updateRecord(changeRecord); } catch (Exception e) {
// 邮件发送失败不影响主流程,只记录日志
log.error("[cancel] 发送取消邮件失败,flowId:{}, error:{}", flowId, e.getMessage(), e);
}
return updateResult;
} }
/** /**
...@@ -944,13 +953,10 @@ public class ChangeFlowBiz { ...@@ -944,13 +953,10 @@ public class ChangeFlowBiz {
// 构建提交内容 // 构建提交内容
Map<String, Object> subFlowContent = buildFlowContent(FlowOperationTypeEnum.REFUSE); Map<String, Object> subFlowContent = buildFlowContent(FlowOperationTypeEnum.REFUSE);
Map<String, Object> subFlowCancelParamMap = new HashMap<>();
subFlowCancelParamMap.put("type", FlowTransitionType.TYPE_REJECTED);
// 流转子工单到结束节点 // 流转子工单到结束节点
String subFlowCancelNodeId = flowService.submitFlow(subFlowRecord.getSubFlowId(), subFlowDataDTO, uid, String subFlowCancelNodeId = flowService.submitFlow(subFlowRecord.getSubFlowId(), subFlowDataDTO, uid,
ChangeFlowEnum.CHANGE_SUB_FLOW.getTopoId(), JSON.toJSONString(subFlowContent), false, ChangeFlowEnum.CHANGE_SUB_FLOW.getTopoId(), JSON.toJSONString(subFlowContent), false,
FlowxOperationEnum.APPROVE_FAIL.getName(), "主工单取消,取消行动工单", subFlowRecord.getCreateTime()); FlowxOperationEnum.CANCEL.getName(), "主工单取消,取消行动工单", subFlowRecord.getCreateTime());
// 更新子工单状态为已取消 // 更新子工单状态为已取消
subFlowRecord.setSubFlowNode(subFlowCancelNodeId); subFlowRecord.setSubFlowNode(subFlowCancelNodeId);
......
...@@ -31,7 +31,11 @@ public enum FlowxOperationEnum { ...@@ -31,7 +31,11 @@ public enum FlowxOperationEnum {
/** /**
* 系统自动提交 * 系统自动提交
*/ */
SYSTEM(7, "系统自动提交工单"); SYSTEM(7, "系统自动提交工单"),
/**
* 取消变更
*/
CANCEL(8, "取消变更");
/** /**
* 类型 * 类型
......
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