Commit 67fb007d by 穆龙飞

Merge branch 'feature-changeFlow-221110' of…

Merge branch 'feature-changeFlow-221110' of https://yxwbgit.mail.netease.com/yx-qc-change-flow/yanxuan-qc-change-system into feature-changeFlow-221110
parents ed67dd54 10d62aa1
Pipeline #43616 passed with stages
in 1 minute 41 seconds
...@@ -239,12 +239,14 @@ public class ChangeFlowBiz { ...@@ -239,12 +239,14 @@ public class ChangeFlowBiz {
if (changeCommander.equals(uid)) { if (changeCommander.equals(uid)) {
log.debug("[createAndSubmit] changeCommander:{}, uid:{}", changeCommander, uid); log.debug("[createAndSubmit] changeCommander:{}, uid:{}", changeCommander, uid);
String nextNodeId = flowService.submitFlow(flowId, flowDataDTO, uid, String nextNodeId = flowService.submitFlow(flowId, flowDataDTO, uid,
ChangeFlowEnum.CHANGE_FLOW_SUBMIT.getTopoId(), JSON.toJSONString(content), true); ChangeFlowEnum.CHANGE_FLOW_SUBMIT.getTopoId(), JSON.toJSONString(content), true,
FlowxOperationEnum.SUBMIT.getName(), "提交工单");
if (null == nextNodeId) { if (null == nextNodeId) {
throw ExceptionFactory.createBiz(ResponseCode.SUBMIT_FLOW_ERROR, "首次提交节点失败"); throw ExceptionFactory.createBiz(ResponseCode.SUBMIT_FLOW_ERROR, "首次提交节点失败");
} }
// 更新节点id // 更新节点id
changeRecord.setFlowNode(ChangeFlowEnum.CHANGE_FLOW_EXE.getNodeId()); changeRecord.setFlowNode(ChangeFlowEnum.CHANGE_FLOW_EXE.getNodeId());
changeRecord.setState(ChangeStatusEnum.IN.getStatus());
changeRecord.setUpdateTime(DateUtils.getCurrentTime()); changeRecord.setUpdateTime(DateUtils.getCurrentTime());
changeFlowService.updateRecord(changeRecord); changeFlowService.updateRecord(changeRecord);
HashMap<String, Object> param = new HashMap<>(); HashMap<String, Object> param = new HashMap<>();
...@@ -256,10 +258,25 @@ public class ChangeFlowBiz { ...@@ -256,10 +258,25 @@ public class ChangeFlowBiz {
param.put("changeCommanderEmail", changeRecord.getChangeCommander()); param.put("changeCommanderEmail", changeRecord.getChangeCommander());
param.put("flowUrl", changeRecord.getFlowId()); param.put("flowUrl", changeRecord.getFlowId());
param.put("dataList", changeExecRecords); param.put("dataList", changeExecRecords);
qcSendEmail(changeCommander, changeRecord.getId().toString(), EmailTemplateEnum.YX_QC_CHANGE_EXECUTE, param); ChangeConfigPo changeConfigPo = changeConfigService.queryInfoPo(parentChangeClassId, sonChangeClassId);
StringBuilder changeType = new StringBuilder("");
try {
changeType.append(changeConfigPo.getChangeTypes().get(0).getTypeName());
} catch (Exception e) {
log.error("queryInfoPo error:{}", JSON.toJSONString(changeConfigPo));
}
try {
changeType.append(changeConfigPo.getChangeTypes().get(1).getTypeName());
} catch (Exception e) {
log.error("queryInfoPo error:{}", JSON.toJSONString(changeConfigPo));
}
String subjectParam = changeRecord.getChangeSubject() + changeType.toString()
+ changeRecord.getId().toString();
qcSendEmail(changeCommander, subjectParam, EmailTemplateEnum.YX_QC_CHANGE_EXECUTE, param);
// 如果是供应商,再次发送供应商邮件 // 如果是供应商,再次发送供应商邮件
if (changeFlowCreateReq.getCreateSource().equals(CreateSourceEnum.QC.getType())) { if (changeFlowCreateReq.getCreateSource().equals(CreateSourceEnum.QC.getType())) {
sendSupplierEmail.sendSupplierEmail(changeRecord, EmailTemplateEnum.YX_QC_CHANGE_EXECUTE, param); sendSupplierEmail.sendSupplierEmail(changeRecord.getChangeSupplier(), subjectParam,
EmailTemplateEnum.YX_QC_CHANGE_EXECUTE, param);
} }
return flowId; return flowId;
} }
...@@ -281,10 +298,12 @@ public class ChangeFlowBiz { ...@@ -281,10 +298,12 @@ public class ChangeFlowBiz {
} }
param.put("changeType", changeType.toString()); param.put("changeType", changeType.toString());
param.put("flowUrl", changeRecord.getFlowId()); param.put("flowUrl", changeRecord.getFlowId());
qcSendEmail(changeCommander, changeRecord.getId().toString(), EmailTemplateEnum.YX_QC_CHANGE_RELEASE_FLOW, param); String subjectParam = changeRecord.getId().toString();
qcSendEmail(changeCommander, subjectParam, EmailTemplateEnum.YX_QC_CHANGE_RELEASE_FLOW, param);
// 如果是供应商,再次发送供应商邮件 // 如果是供应商,再次发送供应商邮件
if (changeFlowCreateReq.getCreateSource().equals(CreateSourceEnum.QC.getType())) { if (changeFlowCreateReq.getCreateSource().equals(CreateSourceEnum.QC.getType())) {
sendSupplierEmail.sendSupplierEmail(changeRecord, EmailTemplateEnum.YX_QC_CHANGE_RELEASE_FLOW, param); sendSupplierEmail.sendSupplierEmail(changeRecord.getChangeSupplier(), subjectParam,
EmailTemplateEnum.YX_QC_CHANGE_RELEASE_FLOW, param);
} }
return flowId; return flowId;
} }
...@@ -298,21 +317,26 @@ public class ChangeFlowBiz { ...@@ -298,21 +317,26 @@ public class ChangeFlowBiz {
*/ */
public void qcSendEmail(String changeCommander, String subjectParam, EmailTemplateEnum emailTemplateEnum, public void qcSendEmail(String changeCommander, String subjectParam, EmailTemplateEnum emailTemplateEnum,
Map<String, Object> param) { Map<String, Object> param) {
IusDepartmentReq iusDepartmentReq = new IusDepartmentReq(); try {
iusDepartmentReq.setHasOrgPos(true); IusDepartmentReq iusDepartmentReq = new IusDepartmentReq();
iusDepartmentReq.setIcac(true); iusDepartmentReq.setHasOrgPos(true);
iusDepartmentReq.setUids(Collections.singletonList(changeCommander)); iusDepartmentReq.setIcac(true);
HashMap<String, List<SecondaryDepartments>> map = iusService.queryDepartment(iusDepartmentReq); iusDepartmentReq.setUids(Collections.singletonList(changeCommander));
log.info("[qcSendEmail] subjectParam:{}, map:{}", subjectParam, map); HashMap<String, List<SecondaryDepartments>> map = iusService.queryDepartment(iusDepartmentReq);
List<SecondaryDepartments> secondaryDepartments = map.get(changeCommander); log.info("[qcSendEmail] subjectParam:{}, map:{}", subjectParam, map);
List<String> ccList = new ArrayList<>(); List<SecondaryDepartments> secondaryDepartments = map.get(changeCommander);
if (CollectionUtils.isNotEmpty(secondaryDepartments)) { List<String> ccList = new ArrayList<>();
ccList = secondaryDepartments.stream().map(SecondaryDepartments::getUid).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(secondaryDepartments)) {
} ccList = secondaryDepartments.stream().map(SecondaryDepartments::getUid).collect(Collectors.toList());
// 变更管理QM,所有邮件都要发 }
ccList.add(appConfig.getChangeManageQM()); // 变更管理QM,所有邮件都要发
iEmailService.sendEmail(Collections.singletonList(changeCommander), ccList, param, emailTemplateEnum, ccList.add(appConfig.getChangeManageQM());
subjectParam); iEmailService.sendEmail(Collections.singletonList(changeCommander), ccList, param, emailTemplateEnum,
subjectParam);
} catch (Exception e) {
log.error("[op:qcSendEmail] error,changeCommander:{}, subjectParam:{}, e:{}", changeCommander, subjectParam,
e);
}
} }
private List<ChangeFile> buildChangeFileRecord(Long changeRecordId, List<ChangeFlowFile> files, Integer type) { private List<ChangeFile> buildChangeFileRecord(Long changeRecordId, List<ChangeFlowFile> files, Integer type) {
...@@ -404,7 +428,7 @@ public class ChangeFlowBiz { ...@@ -404,7 +428,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.IN.getStatus()); changeRecord.setState(ChangeStatusEnum.WAIT.getStatus());
// 变更结论 // 变更结论
changeRecord.setCreateSource(changeFlowCreateReq.getCreateSource()); changeRecord.setCreateSource(changeFlowCreateReq.getCreateSource());
changeRecord.setCreateSupplier(changeFlowCreateReq.getChangeSupplier()); changeRecord.setCreateSupplier(changeFlowCreateReq.getChangeSupplier());
...@@ -476,9 +500,11 @@ public class ChangeFlowBiz { ...@@ -476,9 +500,11 @@ public class ChangeFlowBiz {
changeRecord.setUpdateTime(DateUtils.getCurrentTime()); changeRecord.setUpdateTime(DateUtils.getCurrentTime());
// 提交工单 // 提交工单
String submitNode = flowService.submitFlow(flowId.toString(), flowDataDTO, uid, String submitNode = flowService.submitFlow(flowId.toString(), flowDataDTO, uid,
ChangeFlowEnum.CHANGE_FLOW_SUBMIT.getTopoId(), JSON.toJSONString(content), true); ChangeFlowEnum.CHANGE_FLOW_SUBMIT.getTopoId(), JSON.toJSONString(content), true,
FlowxOperationEnum.SUBMIT.getName(), "提交工单");
// 更新工单数据 // 更新工单数据
changeRecord.setFlowNode(submitNode); changeRecord.setFlowNode(submitNode);
changeRecord.setState(ChangeStatusEnum.IN.getStatus());
changeRecord.setUpdateTime(DateUtils.getCurrentTime()); changeRecord.setUpdateTime(DateUtils.getCurrentTime());
changeFlowService.updateRecord(changeRecord); changeFlowService.updateRecord(changeRecord);
// 更新行动执行方案,覆盖操作,先删除,后插入 // 更新行动执行方案,覆盖操作,先删除,后插入
...@@ -504,10 +530,13 @@ public class ChangeFlowBiz { ...@@ -504,10 +530,13 @@ public class ChangeFlowBiz {
param.put("changeCommanderEmail", changeRecord.getChangeCommander()); param.put("changeCommanderEmail", changeRecord.getChangeCommander());
param.put("flowUrl", changeRecord.getFlowId()); param.put("flowUrl", changeRecord.getFlowId());
param.put("dataList", changeExecRecords); param.put("dataList", changeExecRecords);
qcSendEmail(changeRecord.getChangeCommander(), changeRecord.getId().toString(), EmailTemplateEnum.YX_QC_CHANGE_EXECUTE, param); String subjectParam = changeRecord.getId().toString();
qcSendEmail(changeRecord.getChangeCommander(), subjectParam,
EmailTemplateEnum.YX_QC_CHANGE_EXECUTE, param);
// 如果是供应商,再次发送供应商邮件 // 如果是供应商,再次发送供应商邮件
if (changeRecord.getCreateSource().equals(CreateSourceEnum.QC.getType())) { if (changeRecord.getCreateSource().equals(CreateSourceEnum.QC.getType())) {
sendSupplierEmail.sendSupplierEmail(changeRecord, EmailTemplateEnum.YX_QC_CHANGE_EXECUTE, param); sendSupplierEmail.sendSupplierEmail(changeRecord.getChangeSupplier(), subjectParam,
EmailTemplateEnum.YX_QC_CHANGE_EXECUTE, param);
} }
return submitNode; return submitNode;
case CHANGE_FLOW_CONFIRM: case CHANGE_FLOW_CONFIRM:
...@@ -533,7 +562,8 @@ public class ChangeFlowBiz { ...@@ -533,7 +562,8 @@ public class ChangeFlowBiz {
}).collect(Collectors.toList()); }).collect(Collectors.toList());
// 完成直接完结 // 完成直接完结
String confirmNode = flowService.submitFlow(flowId.toString(), flowDataDTO, uid, String confirmNode = flowService.submitFlow(flowId.toString(), flowDataDTO, uid,
ChangeFlowEnum.CHANGE_FLOW_CONFIRM.getTopoId(), JSON.toJSONString(content), true); ChangeFlowEnum.CHANGE_FLOW_CONFIRM.getTopoId(), JSON.toJSONString(content), true,
FlowxOperationEnum.SUBMIT.getName(), "提交工单");
changeRecord.setState(ChangeStatusEnum.END.getStatus()); changeRecord.setState(ChangeStatusEnum.END.getStatus());
changeRecord.setFlowNode(confirmNode); changeRecord.setFlowNode(confirmNode);
changeRecord.setUpdateTime(DateUtils.getCurrentTime()); changeRecord.setUpdateTime(DateUtils.getCurrentTime());
...@@ -545,11 +575,28 @@ public class ChangeFlowBiz { ...@@ -545,11 +575,28 @@ public class ChangeFlowBiz {
finishPartMap.put("changeId", changeRecord.getId()); finishPartMap.put("changeId", changeRecord.getId());
finishPartMap.put("changeSubject", changeRecord.getChangeSubject()); finishPartMap.put("changeSubject", changeRecord.getChangeSubject());
finishPartMap.put("flowUrl", changeRecord.getFlowId()); finishPartMap.put("flowUrl", changeRecord.getFlowId());
qcSendEmail(changeRecord.getChangeCommander(), changeRecord.getId().toString(), ChangeConfigPo changeConfigPo = changeConfigService
.queryInfoPo(changeRecord.getParentChangeClassId(), changeRecord.getSonChangeClassId());
StringBuilder changeType = new StringBuilder("");
try {
changeType.append(changeConfigPo.getChangeTypes().get(0).getTypeName());
} catch (Exception e) {
log.error("queryInfoPo error:{}", JSON.toJSONString(changeConfigPo));
}
try {
changeType.append(changeConfigPo.getChangeTypes().get(1).getTypeName());
} catch (Exception e) {
log.error("queryInfoPo error:{}", JSON.toJSONString(changeConfigPo));
}
//【已完结】变更主体+变更内容+工单ID 变更风险行动项已完结,请开始执行变更。
String finishSubjectParam = changeRecord.getChangeSubject() + changeRecord.getChangeContent()
+ changeRecord.getId();
qcSendEmail(changeRecord.getChangeCommander(), finishSubjectParam,
EmailTemplateEnum.YX_QC_CHANGE_FINISH, finishPartMap); EmailTemplateEnum.YX_QC_CHANGE_FINISH, finishPartMap);
// 如果是供应商,再次发送供应商邮件 // 如果是供应商,再次发送供应商邮件
if (changeRecord.getCreateSource().equals(CreateSourceEnum.QC.getType())) { if (changeRecord.getCreateSource().equals(CreateSourceEnum.QC.getType())) {
sendSupplierEmail.sendSupplierEmail(changeRecord, EmailTemplateEnum.YX_QC_CHANGE_FINISH, finishPartMap); sendSupplierEmail.sendSupplierEmail(changeRecord.getChangeSupplier(), finishSubjectParam,
EmailTemplateEnum.YX_QC_CHANGE_FINISH, finishPartMap);
} }
return confirmNode; return confirmNode;
case CANCEL: case CANCEL:
...@@ -558,21 +605,27 @@ public class ChangeFlowBiz { ...@@ -558,21 +605,27 @@ public class ChangeFlowBiz {
Assert.isTrue(StringUtils.isNotBlank(cancelReason), "变更取消原因不可为空"); Assert.isTrue(StringUtils.isNotBlank(cancelReason), "变更取消原因不可为空");
changeRecord.setCancelReason(cancelReason); changeRecord.setCancelReason(cancelReason);
String cancelNode = flowService.submitFlow(flowId.toString(), flowDataDTO, uid, String cancelNode = flowService.submitFlow(flowId.toString(), flowDataDTO, uid,
ChangeFlowEnum.CHANGE_FLOW_CONFIRM.getTopoId(), JSON.toJSONString(content), true); ChangeFlowEnum.CHANGE_FLOW_CONFIRM.getTopoId(), JSON.toJSONString(content), true,
FlowxOperationEnum.SUBMIT.getName(), "提交工单");
changeRecord.setState(ChangeStatusEnum.CANCEL.getStatus()); changeRecord.setState(ChangeStatusEnum.CANCEL.getStatus());
changeRecord.setFlowNode(cancelNode); changeRecord.setFlowNode(cancelNode);
changeRecord.setUpdateTime(DateUtils.getCurrentTime()); changeRecord.setUpdateTime(DateUtils.getCurrentTime());
changeFlowService.updateRecord(changeRecord); changeFlowService.updateRecord(changeRecord);
todoService.progressTodoTask(changeRecord, OperateTypeEnum.FINISH.getType()); todoService.progressTodoTask(changeRecord, OperateTypeEnum.FINISH.getType());
// 发送邮件 // 发送邮件
HashMap<String, Object> cancelMap = new HashMap<>(); Map<String, Object> cancelMap = new HashMap<>();
cancelMap.put("changeId", changeRecord.getId()); cancelMap.put("changeId", changeRecord.getId());
cancelMap.put("changeSubject", changeRecord.getChangeSubject()); cancelMap.put("changeSubject", changeRecord.getChangeSubject());
cancelMap.put("flowUrl", changeRecord.getFlowId()); cancelMap.put("changeContent", changeRecord.getChangeContent());
qcSendEmail(changeRecord.getChangeCommander(), changeRecord.getId().toString(), EmailTemplateEnum.YX_QC_CHANGE_FINISH, cancelMap); cancelMap.put("changeCommander", changeRecord.getChangeCommander());
cancelMap.put("cancelReason", changeRecord.getCancelReason());
String cancelSubjectParam = changeRecord.getId().toString();
qcSendEmail(changeRecord.getChangeCommander(), cancelSubjectParam,
EmailTemplateEnum.YX_QC_CHANGE_SUBMIT_CANCEL, cancelMap);
// 如果是供应商,再次发送供应商邮件 // 如果是供应商,再次发送供应商邮件
if (changeRecord.getCreateSource().equals(CreateSourceEnum.QC.getType())) { if (changeRecord.getCreateSource().equals(CreateSourceEnum.QC.getType())) {
sendSupplierEmail.sendSupplierEmail(changeRecord, EmailTemplateEnum.YX_QC_CHANGE_FINISH, cancelMap); sendSupplierEmail.sendSupplierEmail(changeRecord.getChangeSupplier(), cancelSubjectParam,
EmailTemplateEnum.YX_QC_CHANGE_SUBMIT_CANCEL, cancelMap);
} }
return cancelNode; return cancelNode;
case DELAY: case DELAY:
...@@ -648,7 +701,8 @@ public class ChangeFlowBiz { ...@@ -648,7 +701,8 @@ public class ChangeFlowBiz {
content.put("updateTime", System.currentTimeMillis()); content.put("updateTime", System.currentTimeMillis());
content.put(CommonConstants.FLOW_OPERATION_KEY, FlowOperationTypeEnum.REFUSE.getValue()); content.put(CommonConstants.FLOW_OPERATION_KEY, FlowOperationTypeEnum.REFUSE.getValue());
String nextNodeId = flowService.submitFlow(String.valueOf(flowId), flowDataDTO, uid, String nextNodeId = flowService.submitFlow(String.valueOf(flowId), flowDataDTO, uid,
ChangeFlowEnum.CHANGE_FLOW_SUBMIT.getTopoId(), JSON.toJSONString(content), false); ChangeFlowEnum.CHANGE_FLOW_SUBMIT.getTopoId(), JSON.toJSONString(content), false,
FlowxOperationEnum.APPROVE_FAIL.getName(), "取消工单");
log.info("[cancel] flowId:{}, nextNodeId:{}", flowId, nextNodeId); log.info("[cancel] flowId:{}, nextNodeId:{}", flowId, nextNodeId);
// 填充更新数据 // 填充更新数据
changeRecord.setFlowNode(nextNodeId); changeRecord.setFlowNode(nextNodeId);
...@@ -656,11 +710,19 @@ public class ChangeFlowBiz { ...@@ -656,11 +710,19 @@ public class ChangeFlowBiz {
changeRecord.setCancelReason(req.getCancelReason()); changeRecord.setCancelReason(req.getCancelReason());
changeRecord.setUpdateTime(DateUtils.getCurrentTime()); changeRecord.setUpdateTime(DateUtils.getCurrentTime());
todoService.progressTodoTask(changeRecord, OperateTypeEnum.FINISH.getType()); todoService.progressTodoTask(changeRecord, OperateTypeEnum.FINISH.getType());
/*qcSendEmail(changeCommander, changeRecord.getId().toString(), EmailTemplateEnum.YX_QC_CHANGE_RELEASE_FLOW, param); Map<String, Object> cancelMap = new HashMap<>();
cancelMap.put("changeId", changeRecord.getId());
cancelMap.put("changeSubject", changeRecord.getChangeSubject());
cancelMap.put("changeContent", changeRecord.getChangeContent());
cancelMap.put("changeCommander", changeRecord.getChangeCommander());
cancelMap.put("cancelReason", changeRecord.getCancelReason());
String cancelSubjectParam = changeRecord.getId().toString();
qcSendEmail(changeCommander, cancelSubjectParam, EmailTemplateEnum.YX_QC_CHANGE_SUBMIT_CANCEL, cancelMap);
// 如果是供应商,再次发送供应商邮件 // 如果是供应商,再次发送供应商邮件
if (changeRecord.getCreateSource().equals(CreateSourceEnum.QC.getType())) { if (changeRecord.getCreateSource().equals(CreateSourceEnum.QC.getType())) {
sendSupplierEmail.sendSupplierEmail(changeRecord, EmailTemplateEnum.YX_QC_CHANGE_RELEASE_FLOW, param); sendSupplierEmail.sendSupplierEmail(changeRecord.getChangeSupplier(), cancelSubjectParam,
}*/ EmailTemplateEnum.YX_QC_CHANGE_SUBMIT_CANCEL, cancelMap);
}
return changeFlowService.updateRecord(changeRecord); return changeFlowService.updateRecord(changeRecord);
} }
...@@ -958,6 +1020,24 @@ public class ChangeFlowBiz { ...@@ -958,6 +1020,24 @@ public class ChangeFlowBiz {
changeRecord.setChangeCommander(deliverUser); changeRecord.setChangeCommander(deliverUser);
changeRecord.setRemark(remark); changeRecord.setRemark(remark);
changeRecord.setUpdateTime(DateUtils.getCurrentTime()); changeRecord.setUpdateTime(DateUtils.getCurrentTime());
Map<String, Object> cancelMap = new HashMap<>();
cancelMap.put("changeId", changeRecord.getId());
cancelMap.put("changeSubject", changeRecord.getChangeSubject());
cancelMap.put("changeContent", changeRecord.getChangeContent());
// todo:负责人名称
cancelMap.put("changeCommander", null);
cancelMap.put("changeCommanderEmail", changeRecord.getChangeCommander());
// todo:负责人名称
cancelMap.put("restsChangeCommander", null);
cancelMap.put("restsChangeCommanderEmail", changeRecord.getChangeCommander());
String cancelSubjectParam = changeRecord.getId().toString();
qcSendEmail(changeCommander, cancelSubjectParam, EmailTemplateEnum.YX_QC_CHANGE_SUBMIT_FORWARD, cancelMap);
// 如果是供应商,再次发送供应商邮件
if (changeRecord.getCreateSource().equals(CreateSourceEnum.QC.getType())) {
sendSupplierEmail.sendSupplierEmail(changeRecord.getChangeSupplier(), cancelSubjectParam,
EmailTemplateEnum.YX_QC_CHANGE_SUBMIT_FORWARD, cancelMap);
}
changeFlowService.updateRecord(changeRecord); changeFlowService.updateRecord(changeRecord);
} }
} }
...@@ -33,6 +33,9 @@ public class AppConfig { ...@@ -33,6 +33,9 @@ public class AppConfig {
@Value("${testEmail:A@163.com}") @Value("${testEmail:A@163.com}")
private String testEmail; private String testEmail;
@Value("${sendEmail:wb.wangzhichao01@mesg.corp.netease.com}")
private String sendEmail;
@Value("${change.goods.principal.name:aaa}") @Value("${change.goods.principal.name:aaa}")
private String defaultName; private String defaultName;
......
...@@ -57,8 +57,8 @@ public interface ChangeFlowService { ...@@ -57,8 +57,8 @@ public interface ChangeFlowService {
* @param entityId * @param entityId
* @param nodeId1 * @param nodeId1
* @param nodeId2 * @param nodeId2
* @param currentTime * @param tomorrowSpecificTime
* @return * @return
*/ */
List<ChangeRecord> getByStatusAndTime(Long entityId, String nodeId1, String nodeId2, long currentTime); List<ChangeRecord> getByStatusAndTime(Long entityId, String nodeId1, String nodeId2, long tomorrowSpecificTime);
} }
\ No newline at end of file
...@@ -56,7 +56,7 @@ public class ChangeFlowServiceImpl implements ChangeFlowService { ...@@ -56,7 +56,7 @@ public class ChangeFlowServiceImpl implements ChangeFlowService {
} }
@Override @Override
public List<ChangeRecord> getByStatusAndTime(Long entityId, String nodeId1, String nodeId2, long currentTime) { public List<ChangeRecord> getByStatusAndTime(Long entityId, String nodeId1, String nodeId2, long tomorrowSpecificTime) {
return changeRecordMapper.getByStatusAndTime(entityId, nodeId1, nodeId2, currentTime); return changeRecordMapper.getByStatusAndTime(entityId, nodeId1, nodeId2, tomorrowSpecificTime);
} }
} }
\ No newline at end of file
...@@ -73,7 +73,8 @@ public class FlowService { ...@@ -73,7 +73,8 @@ public class FlowService {
* @param approved * @param approved
* @return * @return
*/ */
public String submitFlow(String flowId, FlowDataDTO flowDataDTO, String uid, String topoId, String content, boolean approved) { public String submitFlow(String flowId, FlowDataDTO flowDataDTO, String uid, String topoId, String content,
boolean approved, String operateResult, String remark) {
NodeSubmitReqDTO nodeSubmitReqDTO = new NodeSubmitReqDTO(); NodeSubmitReqDTO nodeSubmitReqDTO = new NodeSubmitReqDTO();
nodeSubmitReqDTO.setFlowId(flowId); nodeSubmitReqDTO.setFlowId(flowId);
nodeSubmitReqDTO.setNodeId(flowDataDTO.getFlowMeta().getCurrNodeDataList().get(0).getNodeId()); nodeSubmitReqDTO.setNodeId(flowDataDTO.getFlowMeta().getCurrNodeDataList().get(0).getNodeId());
...@@ -81,7 +82,8 @@ public class FlowService { ...@@ -81,7 +82,8 @@ public class FlowService {
nodeSubmitReqDTO.setUserName(uid); nodeSubmitReqDTO.setUserName(uid);
nodeSubmitReqDTO.setTopoId(topoId); nodeSubmitReqDTO.setTopoId(topoId);
nodeSubmitReqDTO.setContent(content); nodeSubmitReqDTO.setContent(content);
nodeSubmitReqDTO.setOperateResult(FlowxOperationEnum.SUBMIT.getName()); nodeSubmitReqDTO.setOperateResult(operateResult);
nodeSubmitReqDTO.setRemark(remark);
nodeSubmitReqDTO.setCreateTime(System.currentTimeMillis()); nodeSubmitReqDTO.setCreateTime(System.currentTimeMillis());
nodeSubmitReqDTO.setApproved(approved); nodeSubmitReqDTO.setApproved(approved);
nodeSubmitReqDTO.setOccLock(flowDataDTO.getOccLock() + 1); nodeSubmitReqDTO.setOccLock(flowDataDTO.getOccLock() + 1);
...@@ -89,13 +91,13 @@ public class FlowService { ...@@ -89,13 +91,13 @@ public class FlowService {
List<String> nextNodeIdList; List<String> nextNodeIdList;
// 提交工单 // 提交工单
AjaxResponse<List<String>> submitResponse = flowRpcService.submit(CommonConstants.FLOWX_PRODUCT, AjaxResponse<List<String>> submitResponse = flowRpcService.submit(CommonConstants.FLOWX_PRODUCT,
nodeSubmitReqDTO); nodeSubmitReqDTO);
if (ResponseCodeEnum.SUCCESS.getCode() == submitResponse.getCode()) { if (ResponseCodeEnum.SUCCESS.getCode() == submitResponse.getCode()) {
nextNodeIdList = submitResponse.getData(); nextNodeIdList = submitResponse.getData();
log.info("[submitFlow] nextNodeIdList={}", JSON.toJSONString(nextNodeIdList)); log.info("[submitFlow] nextNodeIdList={}", JSON.toJSONString(nextNodeIdList));
} else { } else {
log.error("[submitFlow] submit flow failed, query={}, errMsg={}", JSON.toJSONString(nodeSubmitReqDTO), log.error("[submitFlow] submit flow failed, query={}, errMsg={}", JSON.toJSONString(nodeSubmitReqDTO),
JSON.toJSONString(submitResponse)); JSON.toJSONString(submitResponse));
throw ExceptionFactory.createBiz(ResponseCode.SUBMIT_FLOW_ERROR, "提交工单错误"); throw ExceptionFactory.createBiz(ResponseCode.SUBMIT_FLOW_ERROR, "提交工单错误");
} }
if (CollectionUtils.isEmpty(nextNodeIdList)) { if (CollectionUtils.isEmpty(nextNodeIdList)) {
......
...@@ -36,22 +36,21 @@ public class SupplierSendService { ...@@ -36,22 +36,21 @@ public class SupplierSendService {
@Autowired @Autowired
private EmailTemplateServiceImpl emailTemplateService; private EmailTemplateServiceImpl emailTemplateService;
/**
* 发送供应商邮件 public void sendSupplierEmail(String supplier, String subjectParam, EmailTemplateEnum emailTemplateEnum,
* @param changeRecord
* @param emailTemplateEnum
* @param param
*/
public void sendSupplierEmail(ChangeRecord changeRecord, EmailTemplateEnum emailTemplateEnum,
Map<String, Object> param) { Map<String, Object> param) {
SupplierSendEmailReq req = new SupplierSendEmailReq(); try {
req.setSupplierId(changeRecord.getChangeSupplier()); SupplierSendEmailReq req = new SupplierSendEmailReq();
req.setMailSubject(String.format(emailTemplateEnum.getSubject(), changeRecord.getId())); req.setSupplierId(supplier);
EmailFactor factor = EmailFactor.builder().data(param).emailTemplateEnum(emailTemplateEnum) req.setMailSubject(subjectParam);
.subject(req.getMailSubject()).type(EmailTypeEnum.HTML.getType()).build(); EmailFactor factor = EmailFactor.builder().data(param).emailTemplateEnum(emailTemplateEnum)
req.setMailContent(this.content(factor)); .subject(req.getMailSubject()).type(EmailTypeEnum.HTML.getType()).build();
log.debug("[sendSupplierEmail] 发送供应商邮件内容 flowId:{}, req:{}", changeRecord.getFlowId(), JSON.toJSONString(req)); req.setMailContent(this.content(factor));
flowRpcSupplierSendService.sendEmail(req); log.debug("[sendSupplierEmail] 发送供应商邮件内容 subjectParam:{}, req:{}", subjectParam, JSON.toJSONString(req));
flowRpcSupplierSendService.sendEmail(req);
} catch (Exception e) {
log.error("[op:sendSupplierEmail] error,supplier:{},subjectParam:{}, e:{}", supplier, subjectParam, e);
}
} }
/** /**
......
...@@ -19,14 +19,17 @@ import org.springframework.stereotype.Component; ...@@ -19,14 +19,17 @@ import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.netease.mail.yanxuan.change.biz.biz.ChangeFlowBiz; import com.netease.mail.yanxuan.change.biz.biz.ChangeFlowBiz;
import com.netease.mail.yanxuan.change.biz.service.ChangeFlowService; import com.netease.mail.yanxuan.change.biz.service.ChangeFlowService;
import com.netease.mail.yanxuan.change.biz.service.change.ChangeConfigService;
import com.netease.mail.yanxuan.change.biz.service.rpc.FlowService; import com.netease.mail.yanxuan.change.biz.service.rpc.FlowService;
import com.netease.mail.yanxuan.change.biz.service.rpc.SupplierSendService; import com.netease.mail.yanxuan.change.biz.service.rpc.SupplierSendService;
import com.netease.mail.yanxuan.change.common.bean.CommonConstants; import com.netease.mail.yanxuan.change.common.bean.CommonConstants;
import com.netease.mail.yanxuan.change.common.enums.ChangeFlowEnum; import com.netease.mail.yanxuan.change.common.enums.ChangeFlowEnum;
import com.netease.mail.yanxuan.change.common.enums.CreateSourceEnum; import com.netease.mail.yanxuan.change.common.enums.CreateSourceEnum;
import com.netease.mail.yanxuan.change.common.enums.FlowOperationTypeEnum; import com.netease.mail.yanxuan.change.common.enums.FlowOperationTypeEnum;
import com.netease.mail.yanxuan.change.common.enums.FlowxOperationEnum;
import com.netease.mail.yanxuan.change.common.util.DateUtils; import com.netease.mail.yanxuan.change.common.util.DateUtils;
import com.netease.mail.yanxuan.change.dal.entity.ChangeRecord; import com.netease.mail.yanxuan.change.dal.entity.ChangeRecord;
import com.netease.mail.yanxuan.change.dal.meta.model.po.ChangeConfigPo;
import com.netease.mail.yanxuan.change.integration.email.enums.EmailTemplateEnum; import com.netease.mail.yanxuan.change.integration.email.enums.EmailTemplateEnum;
import com.netease.mail.yanxuan.dschedule.core.biz.model.ReturnT; import com.netease.mail.yanxuan.dschedule.core.biz.model.ReturnT;
import com.netease.mail.yanxuan.dschedule.core.handler.IJobHandler; import com.netease.mail.yanxuan.dschedule.core.handler.IJobHandler;
...@@ -56,17 +59,22 @@ public class AutoSubmit extends IJobHandler { ...@@ -56,17 +59,22 @@ public class AutoSubmit extends IJobHandler {
@Autowired @Autowired
private SupplierSendService sendSupplierEmail; private SupplierSendService sendSupplierEmail;
@Autowired
private ChangeConfigService changeConfigService;
@Override @Override
public ReturnT<String> execute(String... strings) throws Exception { public ReturnT<String> execute(String... strings) throws Exception {
log.info("AutoSubmit start"); log.info("AutoSubmit start");
long startTime = DateUtils.getCurrentTime(); long startTime = DateUtils.getCurrentTime();
// 处理变更确认时间是今天24点之前的
Long tomorrowSpecificTime = DateUtils.getTomorrowSpecificTime("00:00:00");
List<Long> count = new ArrayList<>(); List<Long> count = new ArrayList<>();
Long entityId = 0L; Long entityId = 0L;
// 查询今天时间之前的数据 // 查询今天时间之前的数据
try { try {
while (true) { while (true) {
List<ChangeRecord> records = changeFlowService.getByStatusAndTime(entityId, ChangeFlowEnum.CHANGE_FLOW_EXE.getNodeId(), List<ChangeRecord> records = changeFlowService.getByStatusAndTime(entityId, ChangeFlowEnum.CHANGE_FLOW_EXE.getNodeId(),
ChangeFlowEnum.CHANGE_FLOW_CONFIRM.getNodeId(), startTime); ChangeFlowEnum.CHANGE_FLOW_CONFIRM.getNodeId(), tomorrowSpecificTime);
if (CollectionUtils.isEmpty(records)) { if (CollectionUtils.isEmpty(records)) {
break; break;
} }
...@@ -100,7 +108,8 @@ public class AutoSubmit extends IJobHandler { ...@@ -100,7 +108,8 @@ public class AutoSubmit extends IJobHandler {
content.put(CommonConstants.FLOW_OPERATION_KEY, FlowOperationTypeEnum.PASS.getValue()); content.put(CommonConstants.FLOW_OPERATION_KEY, FlowOperationTypeEnum.PASS.getValue());
try { try {
String execNode = flowService.submitFlow(flowId.toString(), flowDataDTO, uid, String execNode = flowService.submitFlow(flowId.toString(), flowDataDTO, uid,
ChangeFlowEnum.CHANGE_FLOW_EXE.getTopoId(), JSON.toJSONString(content), true); ChangeFlowEnum.CHANGE_FLOW_EXE.getTopoId(), JSON.toJSONString(content), true,
FlowxOperationEnum.SUBMIT.getName(), "提交工单");
// 更新工单数据 // 更新工单数据
changeRecord.setFlowNode(execNode); changeRecord.setFlowNode(execNode);
changeRecord.setUpdateTime(DateUtils.getCurrentTime()); changeRecord.setUpdateTime(DateUtils.getCurrentTime());
...@@ -114,11 +123,27 @@ public class AutoSubmit extends IJobHandler { ...@@ -114,11 +123,27 @@ public class AutoSubmit extends IJobHandler {
map.put("changeId", changeRecord.getId()); map.put("changeId", changeRecord.getId());
map.put("changeSubject", changeRecord.getChangeSubject()); map.put("changeSubject", changeRecord.getChangeSubject());
map.put("flowUrl", changeRecord.getFlowId()); map.put("flowUrl", changeRecord.getFlowId());
changeFlowBiz.qcSendEmail(changeRecord.getChangeCommander(), changeRecord.getId().toString(), ChangeConfigPo changeConfigPo = changeConfigService.queryInfoPo(changeRecord.getParentChangeClassId(),
changeRecord.getSonChangeClassId());
StringBuilder changeType = new StringBuilder("");
try {
changeType.append(changeConfigPo.getChangeTypes().get(0).getTypeName());
} catch (Exception e) {
log.error("queryInfoPo error:{}", JSON.toJSONString(changeConfigPo));
}
try {
changeType.append(changeConfigPo.getChangeTypes().get(1).getTypeName());
} catch (Exception e) {
log.error("queryInfoPo error:{}", JSON.toJSONString(changeConfigPo));
}
String subjectParam = changeRecord.getChangeSubject() + changeType.toString()
+ changeRecord.getId().toString();
changeFlowBiz.qcSendEmail(changeRecord.getChangeCommander(), subjectParam,
EmailTemplateEnum.YX_QC_CHANGE_AFFIRM, map); EmailTemplateEnum.YX_QC_CHANGE_AFFIRM, map);
// 如果是供应商,再次发送供应商邮件 // 如果是供应商,再次发送供应商邮件
if (changeRecord.getCreateSource().equals(CreateSourceEnum.QC.getType())) { if (changeRecord.getCreateSource().equals(CreateSourceEnum.QC.getType())) {
sendSupplierEmail.sendSupplierEmail(changeRecord, EmailTemplateEnum.YX_QC_CHANGE_AFFIRM, map); sendSupplierEmail.sendSupplierEmail(changeRecord.getChangeSupplier(), subjectParam,
EmailTemplateEnum.YX_QC_CHANGE_AFFIRM, map);
} }
} }
} }
\ No newline at end of file
...@@ -11,11 +11,11 @@ package com.netease.mail.yanxuan.change.common.enums; ...@@ -11,11 +11,11 @@ package com.netease.mail.yanxuan.change.common.enums;
* @Date 2022/11/14 * @Date 2022/11/14
*/ */
public enum ChangeStatusEnum { public enum ChangeStatusEnum {
IN(1, "进行中"), IN(1, "进行中"),
CANCEL(2, "取消完结"), CANCEL(2, "取消完结"),
DELAY(3, "延期"), DELAY(3, "延期"),
END(4, "完结"); END(4, "完结"),
WAIT(5, "待发起"),;
private Integer status; private Integer status;
......
...@@ -33,6 +33,5 @@ public class ChangeFlowDeliverReq { ...@@ -33,6 +33,5 @@ public class ChangeFlowDeliverReq {
/** /**
* 转交备注 * 转交备注
*/ */
@NotBlank(message = "转交备注不可为空")
private String remark; private String remark;
} }
\ No newline at end of file
/**
* @(#)SendMailReq.java, 2022/12/9.
* <p/>
* Copyright 2022 Netease, Inc. All rights reserved.
* NETEASE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package com.netease.mail.yanxuan.change.dal.meta.model.req;
import lombok.Data;
/**
* @Author zcwang
* @Date 2022/12/9
*/
@Data
public class SendMailReq {
private Long id;
private String code;
private String mapToJson;
private Integer createSource;
private String changeSupplier;
}
\ No newline at end of file
...@@ -79,6 +79,6 @@ ...@@ -79,6 +79,6 @@
and create_time <![CDATA[ < ]]> #{endTime} and create_time <![CDATA[ < ]]> #{endTime}
</if> </if>
</where> </where>
order by create_time desc order by create_time desc
</select> </select>
</mapper> </mapper>
\ No newline at end of file
...@@ -11,7 +11,7 @@ public enum EmailTemplateEnum { ...@@ -11,7 +11,7 @@ public enum EmailTemplateEnum {
YX_QC_CHANGE_RELEASE_FLOW("yxqc_change_release_flow","发起变更","【待处理】%s 变更申请提交 "), YX_QC_CHANGE_RELEASE_FLOW("yxqc_change_release_flow","发起变更","【待处理】%s 变更申请提交 "),
YX_QC_CHANGE_SUBMIT_CANCEL("yx_qc_change_submit_cancel","变更取消","【待处理】%s 变更取消通知"), YX_QC_CHANGE_SUBMIT_CANCEL("yx_qc_change_submit_cancel","变更取消","%s 变更取消通知"),
YX_QC_CHANGE_SUBMIT_FORWARD("yx_qc_change_submit_forward","变更转交","%s 变更工单转交通知"), YX_QC_CHANGE_SUBMIT_FORWARD("yx_qc_change_submit_forward","变更转交","%s 变更工单转交通知"),
...@@ -51,4 +51,13 @@ public enum EmailTemplateEnum { ...@@ -51,4 +51,13 @@ public enum EmailTemplateEnum {
return subject; return subject;
} }
public static EmailTemplateEnum getEmailTemplateEnum(String code){
for (EmailTemplateEnum template : EmailTemplateEnum.values()) {
if (template.getCode().equals(code)) {
return template;
}
}
return null;
}
} }
...@@ -6,30 +6,39 @@ ...@@ -6,30 +6,39 @@
*/ */
package com.netease.mail.yanxuan.change.web.controller; package com.netease.mail.yanxuan.change.web.controller;
import com.netease.mail.yanxuan.change.biz.service.change.ChangeConfigService; import java.util.List;
import com.netease.mail.yanxuan.change.dal.meta.model.po.ChangeConfigPo; import java.util.Map;
import com.netease.mail.yanxuan.change.integration.flow.supplier.FlowRpcSupplierInfoService;
import com.netease.mail.yanxuan.change.integration.flow.supplier.req.SupplierRelatedUserReq;
import com.netease.mail.yanxuan.change.integration.flow.supplier.rsp.SupplierUserRsp;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.netease.mail.yanxuan.change.biz.biz.ChangeFlowBiz;
import com.netease.mail.yanxuan.change.biz.config.AppConfig;
import com.netease.mail.yanxuan.change.biz.meta.exception.ExceptionFactory; import com.netease.mail.yanxuan.change.biz.meta.exception.ExceptionFactory;
import com.netease.mail.yanxuan.change.biz.service.ChangeFlowService; import com.netease.mail.yanxuan.change.biz.service.ChangeFlowService;
import com.netease.mail.yanxuan.change.biz.service.rpc.SupplierSendService;
import com.netease.mail.yanxuan.change.biz.service.rpc.TodoService; import com.netease.mail.yanxuan.change.biz.service.rpc.TodoService;
import com.netease.mail.yanxuan.change.biz.task.AutoSubmit; import com.netease.mail.yanxuan.change.biz.task.AutoSubmit;
import com.netease.mail.yanxuan.change.common.bean.AjaxResult; import com.netease.mail.yanxuan.change.common.bean.AjaxResult;
import com.netease.mail.yanxuan.change.common.bean.RequestLocalBean; 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.bean.ResponseCode;
import com.netease.mail.yanxuan.change.common.enums.ChangeFlowEnum; import com.netease.mail.yanxuan.change.common.enums.ChangeFlowEnum;
import com.netease.mail.yanxuan.change.common.enums.CreateSourceEnum;
import com.netease.mail.yanxuan.change.dal.entity.ChangeRecord; import com.netease.mail.yanxuan.change.dal.entity.ChangeRecord;
import com.netease.mail.yanxuan.change.dal.meta.model.req.SendMailReq;
import com.netease.mail.yanxuan.change.integration.email.enums.EmailTemplateEnum;
import com.netease.mail.yanxuan.change.integration.flow.supplier.FlowRpcSupplierInfoService;
import com.netease.mail.yanxuan.change.integration.flow.supplier.req.SupplierRelatedUserReq;
import com.netease.mail.yanxuan.change.integration.flow.supplier.rsp.SupplierUserRsp;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.util.List;
/** /**
* @Author zcwang * @Author zcwang
* @Date 2022/11/28 * @Date 2022/11/28
...@@ -48,7 +57,17 @@ public class TestController { ...@@ -48,7 +57,17 @@ public class TestController {
@Autowired @Autowired
private AutoSubmit autoSubmit; private AutoSubmit autoSubmit;
@Autowired
private ChangeFlowBiz changeFlowBiz;
@Autowired
private AppConfig appConfig;
@Autowired
private SupplierSendService sendSupplierEmail;
@PostMapping("/createToDo") @PostMapping("/createToDo")
public AjaxResult<Void> createTodoTask(ChangeRecord entity) { public AjaxResult<Void> createTodoTask(ChangeRecord entity) {
log.info("[createToDoTask] entity:{}", JSON.toJSONString(entity)); log.info("[createToDoTask] entity:{}", JSON.toJSONString(entity));
todoService.createTodoTask(entity); todoService.createTodoTask(entity);
...@@ -86,4 +105,21 @@ public class TestController { ...@@ -86,4 +105,21 @@ public class TestController {
public List<SupplierUserRsp> test(@RequestBody SupplierRelatedUserReq req) { public List<SupplierUserRsp> test(@RequestBody SupplierRelatedUserReq req) {
return supplierInfoService.querySupplierRelatedUser(req); return supplierInfoService.querySupplierRelatedUser(req);
} }
@PostMapping("/send")
public void sendEmail(@RequestBody SendMailReq req) {
String subjectParam = req.getId().toString();
EmailTemplateEnum emailTemplateEnum = EmailTemplateEnum.getEmailTemplateEnum(req.getCode());
String mapToJson = req.getMapToJson();
log.debug("[testSendEmail] subjectParam:{}, emailTemplateEnum:{}, mapToJson:{}", subjectParam,
emailTemplateEnum, mapToJson);
changeFlowBiz.qcSendEmail(appConfig.getSendEmail(), subjectParam,
emailTemplateEnum, JSON.parseObject(mapToJson, Map.class));
// 如果是供应商,再次发送供应商邮件
if (req.getCreateSource().equals(CreateSourceEnum.QC.getType())) {
Assert.notNull(req.getChangeSupplier(), "同舟端负责人不可为空");
sendSupplierEmail.sendSupplierEmail(req.getChangeSupplier(), subjectParam,
emailTemplateEnum, JSON.parseObject(mapToJson, Map.class));
}
}
} }
\ No newline at end of file
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