Commit bc372a3e by 王志超

feat: 取消变更

parent 7b7ba380
Pipeline #86902 passed with stages
in 1 minute 37 seconds
......@@ -858,56 +858,65 @@ public class ChangeFlowBiz {
}
// 工单流转
Map<String, Object> content = buildFlowContent(FlowOperationTypeEnum.REFUSE);
Map<String, Object> cancelParamMap = new HashMap<>();
cancelParamMap.put("type", FlowTransitionType.TYPE_REJECTED);
String nextNodeId = flowService.submitFlowWithParamMap(String.valueOf(flowId), flowDataDTO, uid,
ChangeFlowEnum.NEW_CHANGE_FLOW.getTopoId(), JSON.toJSONString(content), cancelParamMap,
FlowxOperationEnum.APPROVE_FAIL.getName(), "取消工单", changeRecord.getCreateTime());
log.info("[cancel] flowId:{}, nextNodeId:{}", flowId, nextNodeId);
String nextNodeId = flowService.submitFlow(String.valueOf(flowId), flowDataDTO, uid,
ChangeFlowEnum.NEW_CHANGE_FLOW.getTopoId(), JSON.toJSONString(content), false,
FlowxOperationEnum.CANCEL.getName(), "取消变更", changeRecord.getCreateTime());
// 填充更新数据
changeRecord.setFlowNode(nextNodeId);
changeRecord.setState(ChangeStatusEnum.CANCEL.getStatus());
changeRecord.setCancelReason(req.getCancelReason());
changeRecord.setUpdateTime(DateUtils.getCurrentTime());
Map<String, Object> cancelMap = new HashMap<>();
cancelMap.put("changeId", changeRecord.getFlowId());
cancelMap.put("changeSubject", ChangeSubjectEnum.getChangeSubjectEnum(changeRecord.getChangeSubject()).getDesc());
cancelMap.put("changeContent", changeRecord.getChangeContent());
IusUserInfoRsp user = iusService.queryUserInfo(changeRecord.getChangeCommander());
cancelMap.put("changeCommander", user == null ? changeRecord.getChangeCommander() : user.getName());
cancelMap.put("cancelReason", changeRecord.getCancelReason());
// 取消所有行动工单,并获取所有子工单列表(用于后续获取行动人邮箱)
List<ChangeSubFlowRecord> allSubFlows = cancelAllSubFlows(changeRecord.getId(), req.getCancelReason(), uid);
// 从行动工单获取行动人邮箱(去重)
List<String> userEmailList = extractExecUserEmailsFromSubFlows(allSubFlows);
// 立即更新主工单状态,确保状态正确,不被后续邮件服务阻塞
Boolean updateResult = changeFlowService.updateRecord(changeRecord);
log.info("[cancel] 主工单状态已更新,flowId:{}, state:{}, updateResult:{}", flowId,
ChangeStatusEnum.CANCEL.getStatus(), updateResult);
String cancelSubjectParam = changeRecord.getFlowId().toString();
List<String> receiver = new ArrayList<>(Collections.singletonList(changeCommander));
receiver.addAll(userEmailList);
// 取消变更,抄送人:变更负责人+变更行动人上一级主管、变更管理QM(cuiyixian@corp.netease.com)
userEmailList.addAll(receiver);
List<String> ccList = departmentLeaderBiz.getDepartmentLeaders(userEmailList);
ccList.add(appConfig.getChangeManageQM());
// 取消变更,收件人:变更发起人(供应商邮箱号或严选发起人)、变更负责人、变更行动人
String creator = changeRecord.getCreator();
if (!creator.equals(changeCommander)) {
receiver.add(creator);
}
qcSendEmail(receiver, ccList, cancelSubjectParam, EmailTemplateEnum.YX_QC_CHANGE_SUBMIT_CANCEL, cancelMap);
// 如果是供应商,再次发送供应商邮件
if (changeRecord.getCreateSource().equals(CreateSourceEnum.TONG_ZHOU.getType())) {
sendSupplierEmail.sendSupplierEmail(changeRecord.getCreateSupplier(), cancelSubjectParam,
EmailTemplateEnum.YX_QC_CHANGE_SUBMIT_CANCEL, cancelMap);
}
// 如果是其他端发起但是是供应商变更,再次发送供应商邮件
if (!changeRecord.getCreateSource().equals(CreateSourceEnum.TONG_ZHOU.getType())
&& ChangeSubjectEnum.SUPPLIER.getType().equals(changeRecord.getChangeSubject())) {
sendSupplierEmail.sendSupplierEmail(changeRecord.getChangeSupplier(), cancelSubjectParam,
EmailTemplateEnum.YX_QC_CHANGE_SUBMIT_CANCEL, cancelMap);
try {
Map<String, Object> cancelMap = new HashMap<>();
cancelMap.put("changeId", changeRecord.getFlowId());
cancelMap.put("changeSubject", ChangeSubjectEnum.getChangeSubjectEnum(changeRecord.getChangeSubject()).getDesc());
cancelMap.put("changeContent", changeRecord.getChangeContent());
IusUserInfoRsp user = iusService.queryUserInfo(changeRecord.getChangeCommander());
cancelMap.put("changeCommander", user == null ? changeRecord.getChangeCommander() : user.getName());
cancelMap.put("cancelReason", changeRecord.getCancelReason());
// 从行动工单获取行动人邮箱(去重)
List<String> userEmailList = extractExecUserEmailsFromSubFlows(allSubFlows);
String cancelSubjectParam = changeRecord.getFlowId().toString();
List<String> receiver = new ArrayList<>(Collections.singletonList(changeCommander));
receiver.addAll(userEmailList);
// 取消变更,抄送人:变更负责人+变更行动人上一级主管、变更管理QM(cuiyixian@corp.netease.com)
userEmailList.addAll(receiver);
List<String> ccList = departmentLeaderBiz.getDepartmentLeaders(userEmailList);
ccList.add(appConfig.getChangeManageQM());
// 取消变更,收件人:变更发起人(供应商邮箱号或严选发起人)、变更负责人、变更行动人
String creator = changeRecord.getCreator();
if (!creator.equals(changeCommander)) {
receiver.add(creator);
}
qcSendEmail(receiver, ccList, cancelSubjectParam, EmailTemplateEnum.YX_QC_CHANGE_SUBMIT_CANCEL, cancelMap);
// 如果是供应商,再次发送供应商邮件
if (changeRecord.getCreateSource().equals(CreateSourceEnum.TONG_ZHOU.getType())) {
sendSupplierEmail.sendSupplierEmail(changeRecord.getCreateSupplier(), cancelSubjectParam,
EmailTemplateEnum.YX_QC_CHANGE_SUBMIT_CANCEL, cancelMap);
}
// 如果是其他端发起但是是供应商变更,再次发送供应商邮件
if (!changeRecord.getCreateSource().equals(CreateSourceEnum.TONG_ZHOU.getType())
&& ChangeSubjectEnum.SUPPLIER.getType().equals(changeRecord.getChangeSubject())) {
sendSupplierEmail.sendSupplierEmail(changeRecord.getChangeSupplier(), cancelSubjectParam,
EmailTemplateEnum.YX_QC_CHANGE_SUBMIT_CANCEL, cancelMap);
}
} catch (Exception e) {
// 邮件发送失败不影响主流程,只记录日志
log.error("[cancel] 发送取消邮件失败,flowId:{}, error:{}", flowId, e.getMessage(), e);
}
return changeFlowService.updateRecord(changeRecord);
return updateResult;
}
/**
......@@ -944,13 +953,10 @@ public class ChangeFlowBiz {
// 构建提交内容
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,
ChangeFlowEnum.CHANGE_SUB_FLOW.getTopoId(), JSON.toJSONString(subFlowContent), false,
FlowxOperationEnum.APPROVE_FAIL.getName(), "主工单取消,取消行动工单", subFlowRecord.getCreateTime());
FlowxOperationEnum.CANCEL.getName(), "主工单取消,取消行动工单", subFlowRecord.getCreateTime());
// 更新子工单状态为已取消
subFlowRecord.setSubFlowNode(subFlowCancelNodeId);
......
......@@ -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