Commit d0439b78 by “zcwang”

modify: 执行节点邮件接收优化

parent 60f83a09
Pipeline #45030 passed with stages
in 1 minute 45 seconds
...@@ -37,6 +37,7 @@ import com.github.pagehelper.PageHelper; ...@@ -37,6 +37,7 @@ import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.netease.mail.yanxuan.change.biz.config.AppConfig; 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.BuildAndSendEmail;
import com.netease.mail.yanxuan.change.biz.service.ChangeFileService; import com.netease.mail.yanxuan.change.biz.service.ChangeFileService;
import com.netease.mail.yanxuan.change.biz.service.ChangeFlowExecService; import com.netease.mail.yanxuan.change.biz.service.ChangeFlowExecService;
import com.netease.mail.yanxuan.change.biz.service.ChangeFlowService; import com.netease.mail.yanxuan.change.biz.service.ChangeFlowService;
...@@ -171,6 +172,9 @@ public class ChangeFlowBiz { ...@@ -171,6 +172,9 @@ public class ChangeFlowBiz {
@Autowired @Autowired
private QCService qcService; private QCService qcService;
@Autowired
private BuildAndSendEmail buildAndSendEmail;
public String createAndSubmit(ChangeFlowCreateReq changeFlowCreateReq) { public String createAndSubmit(ChangeFlowCreateReq changeFlowCreateReq) {
String uid = RequestLocalBean.getUid(); String uid = RequestLocalBean.getUid();
String name = RequestLocalBean.getName(); String name = RequestLocalBean.getName();
...@@ -298,67 +302,7 @@ public class ChangeFlowBiz { ...@@ -298,67 +302,7 @@ public class ChangeFlowBiz {
changeRecord.setState(ChangeStatusEnum.IN.getStatus()); 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<>(); buildAndSendEmail.buildAndSendEmail(changeRecord, changeExecRecords, changeType, changeCommander, changeFlowCreateReq);
param.put("changeId", changeRecord.getFlowId());
param.put("changeSubject", ChangeSubjectEnum.getChangeSubjectEnum(changeRecord.getChangeSubject()).getDesc());
param.put("changeContent", changeRecord.getChangeContent());
param.put("changeReason", changeRecord.getChangeReason());
IusUserInfoRsp user = iusService.queryUserInfo(changeRecord.getChangeCommander());
param.put("changeCommander", user == null ? changeRecord.getChangeCommander() : user.getName());
param.put("changeCommanderEmail", changeRecord.getChangeCommander());
param.put("flowUrl", changeRecord.getFlowId());
List<ChangeExecuteEmailDTO> dataList = new ArrayList<>();
changeExecRecords.forEach(i -> {
ChangeExecuteEmailDTO changeExecuteEmailDTO = new ChangeExecuteEmailDTO();
changeExecuteEmailDTO.setChangeExecDepartment(i.getChangeExecDepartment());
changeExecuteEmailDTO.setChangeExecUser(i.getChangeExecUserEmail());
changeExecuteEmailDTO.setChangeRiskDesc(i.getChangeRiskDesc());
changeExecuteEmailDTO.setChangeExecProject(i.getChangeExecProject());
changeExecuteEmailDTO.setChangeChecking(i.getChangeChecking());
dataList.add(changeExecuteEmailDTO);
});
// 邮件附件执行人改为名字+邮箱格式,没有的话兜底邮箱
List<String> changeExecUserList = dataList.stream().map(ChangeExecuteEmailDTO::getChangeExecUser).collect(Collectors.toList());
List<IusUserInfoRsp> iusUserInfoRsps = iusService.queryUserListInfo(UserQueryDTO.builder().uids(changeExecUserList).build());
dataList.forEach(d -> {
Optional<IusUserInfoRsp> anyExeUser = iusUserInfoRsps.stream().filter(ius -> ius.getUid().equals(d.getChangeExecUser())).findAny();
String execUserName;
if (anyExeUser.isPresent()) {
execUserName = anyExeUser.get().getName();
} else {
// 批量查询没查到的人名,通过全量查询单独再查一次
IusUserInfoRsp iusUserInfo = iusService.queryUserInfo(d.getChangeExecUser());
execUserName = iusUserInfo == null || StringUtils.isBlank(user.getName()) ? "" : user.getName();
}
d.setChangeExecUser(execUserName + d.getChangeExecUser());
});
param.put("dataList", dataList);
String subjectParam = ChangeSubjectEnum.getChangeSubjectEnum(changeRecord.getChangeSubject()).getDesc() + changeType
+ changeRecord.getFlowId().toString();
List<ChangeFlowExecVO> changeFlowExecRecord = changeFlowExecService
.getChangeFlowExecRecord(changeRecord.getId());
List<String> execUserEmailList = changeFlowExecRecord.stream().map(ChangeFlowExecVO::getChangeExecUserEmail)
.collect(Collectors.toList());
// 获取指定人的上级部门主管邮箱
List<String> ccList = getDepartmentInfo(execUserEmailList);
// 变更执行,抄送:所有变更行动人上一级LEADER,变更负责人、变更转交人(如有)
ccList.add(changeCommander);
// 变更执行,收件人:所有变更行动人+变更管理QM(cuiyixian@corp.netease.com)
execUserEmailList.add(appConfig.getChangeManageQM());
qcSendEmail(execUserEmailList, ccList, subjectParam, EmailTemplateEnum.YX_QC_CHANGE_EXECUTE, param);
// 如果是供应商,再次发送供应商邮件
if (changeFlowCreateReq.getCreateSource().equals(CreateSourceEnum.TONG_ZHOU.getType())) {
sendSupplierEmail.sendSupplierEmail(changeRecord.getCreateSupplier(), subjectParam,
EmailTemplateEnum.YX_QC_CHANGE_EXECUTE, param);
}
// 如果是其他端发起但是是供应商变更,再次发送供应商邮件
if (!changeFlowCreateReq.getCreateSource().equals(CreateSourceEnum.TONG_ZHOU.getType())
&& ChangeSubjectEnum.SUPPLIER.getType().equals(changeRecord.getChangeSubject())) {
sendSupplierEmail.sendSupplierEmail(changeRecord.getChangeSupplier(), subjectParam,
EmailTemplateEnum.YX_QC_CHANGE_EXECUTE, param);
}
return flowId; return flowId;
} }
// 如果发起人≠变更负责人,停留在变更申请提交节点,发送邮件 // 如果发起人≠变更负责人,停留在变更申请提交节点,发送邮件
......
/**
* @(#)buildAndSendEmail.java, 2023/2/7.
* <p/>
* Copyright 2023 Netease, Inc. All rights reserved.
* NETEASE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
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.entity.ChangeRecord;
import com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeFlowCreateReq;
/**
* @Author zcwang
* @Date 2023/2/7
*/
public interface BuildAndSendEmail {
void buildAndSendEmail(ChangeRecord changeRecord, List<ChangeExecRecord> changeExecRecords, StringBuilder changeType, String changeCommander, ChangeFlowCreateReq changeFlowCreateReq);
}
\ No newline at end of file
/**
* @(#)BuildAndSendEmailImpl.java, 2023/2/7.
* <p/>
* Copyright 2023 Netease, Inc. All rights reserved.
* NETEASE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package com.netease.mail.yanxuan.change.biz.service.impl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
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.service.BuildAndSendEmail;
import com.netease.mail.yanxuan.change.biz.service.ChangeFlowExecService;
import com.netease.mail.yanxuan.change.biz.service.rpc.IusService;
import com.netease.mail.yanxuan.change.biz.service.rpc.SupplierSendService;
import com.netease.mail.yanxuan.change.common.enums.ChangeSubjectEnum;
import com.netease.mail.yanxuan.change.common.enums.CreateSourceEnum;
import com.netease.mail.yanxuan.change.dal.entity.ChangeExecRecord;
import com.netease.mail.yanxuan.change.dal.entity.ChangeRecord;
import com.netease.mail.yanxuan.change.dal.meta.model.req.ChangeFlowCreateReq;
import com.netease.mail.yanxuan.change.dal.meta.model.vo.ChangeFlowExecVO;
import com.netease.mail.yanxuan.change.integration.email.enums.EmailTemplateEnum;
import com.netease.mail.yanxuan.change.integration.flow.UserQueryDTO;
import com.netease.mail.yanxuan.change.integration.flow.ius.rsp.IusUserInfoRsp;
import com.netease.mail.yanxuan.change.integration.todo.ChangeExecuteEmailDTO;
/**
* @Author zcwang
* @Date 2023/2/7
*/
public class BuildAndSendEmailImpl implements BuildAndSendEmail {
@Autowired
private IusService iusService;
@Autowired
private ChangeFlowExecService changeFlowExecService;
@Autowired
private ChangeFlowBiz changeFlowBiz;
@Autowired
private AppConfig appConfig;
@Autowired
private SupplierSendService sendSupplierEmail;
@Override
@Async("buildAndSendEmail")
public void buildAndSendEmail(ChangeRecord changeRecord, List<ChangeExecRecord> changeExecRecords, StringBuilder changeType, String changeCommander, ChangeFlowCreateReq changeFlowCreateReq) {
HashMap<String, Object> param = new HashMap<>();
param.put("changeId", changeRecord.getFlowId());
param.put("changeSubject", ChangeSubjectEnum.getChangeSubjectEnum(changeRecord.getChangeSubject()).getDesc());
param.put("changeContent", changeRecord.getChangeContent());
param.put("changeReason", changeRecord.getChangeReason());
IusUserInfoRsp user = iusService.queryUserInfo(changeRecord.getChangeCommander());
param.put("changeCommander", user == null ? changeRecord.getChangeCommander() : user.getName());
param.put("changeCommanderEmail", changeRecord.getChangeCommander());
param.put("flowUrl", changeRecord.getFlowId());
List<ChangeExecuteEmailDTO> dataList = new ArrayList<>();
changeExecRecords.forEach(i -> {
ChangeExecuteEmailDTO changeExecuteEmailDTO = new ChangeExecuteEmailDTO();
changeExecuteEmailDTO.setChangeExecDepartment(i.getChangeExecDepartment());
changeExecuteEmailDTO.setChangeExecUser(i.getChangeExecUserEmail());
changeExecuteEmailDTO.setChangeRiskDesc(i.getChangeRiskDesc());
changeExecuteEmailDTO.setChangeExecProject(i.getChangeExecProject());
changeExecuteEmailDTO.setChangeChecking(i.getChangeChecking());
dataList.add(changeExecuteEmailDTO);
});
// 邮件附件执行人改为名字+邮箱格式,没有的话兜底邮箱
List<String> changeExecUserList = dataList.stream().map(ChangeExecuteEmailDTO::getChangeExecUser).collect(Collectors.toList());
List<IusUserInfoRsp> iusUserInfoRsps = iusService.queryUserListInfo(UserQueryDTO.builder().uids(changeExecUserList).build());
dataList.forEach(d -> {
Optional<IusUserInfoRsp> anyExeUser = iusUserInfoRsps.stream().filter(ius -> ius.getUid().equals(d.getChangeExecUser())).findAny();
String execUserName;
if (anyExeUser.isPresent()) {
execUserName = anyExeUser.get().getName();
} else {
// 批量查询没查到的人名,通过全量查询单独再查一次
IusUserInfoRsp iusUserInfo = iusService.queryUserInfo(d.getChangeExecUser());
execUserName = iusUserInfo == null || StringUtils.isBlank(user.getName()) ? "" : user.getName();
}
d.setChangeExecUser(execUserName + d.getChangeExecUser());
});
param.put("dataList", dataList);
String subjectParam = ChangeSubjectEnum.getChangeSubjectEnum(changeRecord.getChangeSubject()).getDesc() + changeType
+ changeRecord.getFlowId().toString();
List<ChangeFlowExecVO> changeFlowExecRecord = changeFlowExecService
.getChangeFlowExecRecord(changeRecord.getId());
List<String> execUserEmailList = changeFlowExecRecord.stream().map(ChangeFlowExecVO::getChangeExecUserEmail)
.collect(Collectors.toList());
// 获取指定人的上级部门主管邮箱
List<String> ccList = changeFlowBiz.getDepartmentInfo(execUserEmailList);
// 变更执行,抄送:所有变更行动人上一级LEADER,变更负责人、变更转交人(如有)
ccList.add(changeCommander);
// 变更执行,收件人:所有变更行动人+变更管理QM(cuiyixian@corp.netease.com)
execUserEmailList.add(appConfig.getChangeManageQM());
changeFlowBiz.qcSendEmail(execUserEmailList, ccList, subjectParam, EmailTemplateEnum.YX_QC_CHANGE_EXECUTE, param);
// 如果是供应商,再次发送供应商邮件
if (changeFlowCreateReq.getCreateSource().equals(CreateSourceEnum.TONG_ZHOU.getType())) {
sendSupplierEmail.sendSupplierEmail(changeRecord.getCreateSupplier(), subjectParam,
EmailTemplateEnum.YX_QC_CHANGE_EXECUTE, param);
}
// 如果是其他端发起但是是供应商变更,再次发送供应商邮件
if (!changeFlowCreateReq.getCreateSource().equals(CreateSourceEnum.TONG_ZHOU.getType())
&& ChangeSubjectEnum.SUPPLIER.getType().equals(changeRecord.getChangeSubject())) {
sendSupplierEmail.sendSupplierEmail(changeRecord.getChangeSupplier(), subjectParam,
EmailTemplateEnum.YX_QC_CHANGE_EXECUTE, param);
}
}
}
\ 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