Commit ca29250634c4ffc343ce4282ddc22f11f81ba10e

Authored by chenhang4442024
1 parent 5d08aa73

更新邮件模块,解决尾期验货日期发送邮件到对应生产科

src/main/java/com/order/erp/common/constant/Constant.java
... ... @@ -329,5 +329,9 @@ public class Constant {
329 329 * 缓存导入excel错误信息 redis key
330 330 */
331 331 public static final String EXCEL_IMPORT_ERROR_PREFIX = "excel:import:error:";
  332 + /**
  333 + * redis过期时间。
  334 + */
  335 + public static final long REDIS_EMAIL_TIME = 90;
332 336  
333 337 }
... ...
src/main/java/com/order/erp/common/utils/EmailSendUtils.java
1 1 package com.order.erp.common.utils;
2 2 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
  3 +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
  4 +import com.order.erp.common.constant.ServerResultCode;
  5 +import com.order.erp.common.exception.BusinessException;
3 6 import com.order.erp.domain.EmailTemplateEnum;
4 7 import com.order.erp.domain.email.OrderProductEmailVO;
5 8 import com.order.erp.domain.vo.order.OrderEventJobVO;
... ... @@ -28,7 +31,7 @@ import java.util.Map;
28 31 @Component
29 32 public class EmailSendUtils {
30 33 @Value("${spring.mail.username}")
31   - public String sendEmail;
  34 + public String sendEmail;
32 35 @Resource
33 36 private JavaMailSender javaMailSender;
34 37 @Resource
... ... @@ -43,28 +46,35 @@ public class EmailSendUtils {
43 46 * @throws IOException
44 47 */
45 48  
46   - public void sendEmail(EmailTemplateEnum emailTemplateEnum, List<String> receiveemailList, OrderEventJobVO orderEventJobVO) throws MessagingException, IOException, TemplateException {
47   - MimeMessage mimeMessage = javaMailSender.createMimeMessage();
48   - if(CollectionUtils.isNotEmpty(receiveemailList)){
49   - MimeMessageHelper helper=new MimeMessageHelper(mimeMessage,true);
50   - //设置邮件的主题
51   - helper.setSubject(emailTemplateEnum.getTitle());
52   - //设置发件人
53   - helper.setFrom(sendEmail);
54   - //设置收件人
55   - String[] receiveemailListArray = receiveemailList.toArray(new String[receiveemailList.size()]);
56   - helper.setTo(receiveemailListArray);
57   - helper.setSentDate(new Date());
  49 + public void sendEmail(EmailTemplateEnum emailTemplateEnum, List<String> receiveemailList, OrderEventJobVO orderEventJobVO) {
  50 + if(CollectionUtils.isEmpty(receiveemailList) && emailTemplateEnum ==null && ObjectUtils.isNull(orderEventJobVO)){
  51 + throw new BusinessException(ServerResultCode.PARAM_ERROR);
  52 + }
  53 + MimeMessage mimeMessage = javaMailSender.createMimeMessage();
  54 + MimeMessageHelper helper= null;
58 55 Map<String, Object> map = new HashMap<>();
59 56 map.put("context",emailTemplateEnum.getContent());
60 57 map.put("title",emailTemplateEnum.getTitle());
61 58 map.put("data",orderEventJobVO);
62   - Template template = freeMarkerConfigurer.getConfiguration().getTemplate("mail.ftl");
63   - StringWriter stringWriter = new StringWriter();
64   - template.process(map,stringWriter);
65   - helper.setText(stringWriter.toString(),true);
66   - javaMailSender.send(mimeMessage);
  59 + Template template = null;
  60 + //设置收件人
  61 + String[] receiveemailListArray = receiveemailList.toArray(new String[receiveemailList.size()]);
  62 + try {
  63 + helper = new MimeMessageHelper(mimeMessage,true);
  64 + //设置邮件的主题
  65 + helper.setSubject(emailTemplateEnum.getTitle());
  66 + //设置发件人
  67 + helper.setFrom(sendEmail);
  68 + helper.setTo(receiveemailListArray);
  69 + helper.setSentDate(new Date());
  70 + template = freeMarkerConfigurer.getConfiguration().getTemplate("mail.ftl");
  71 + StringWriter stringWriter = new StringWriter();
  72 + template.process(map,stringWriter);
  73 + helper.setText(stringWriter.toString(),true);
  74 + } catch (TemplateException | IOException | MessagingException e) {
  75 + throw new RuntimeException("邮件发送失败!");
67 76 }
  77 + javaMailSender.send(mimeMessage);
68 78 }
69 79 /**
70 80 * @Description: 发送生产指示书邮件
... ... @@ -75,19 +85,27 @@ public class EmailSendUtils {
75 85 * @throws IOException
76 86 */
77 87 //生产指示书以附件方式发送。
78   - public void sendEmail(EmailTemplateEnum emailTemplateEnum, List<String> receiveemailList, File pdfFile) throws MessagingException {
79   - MimeMessage mimeMessage = javaMailSender.createMimeMessage();
80   - MimeMessageHelper helper=new MimeMessageHelper(mimeMessage,true);
81   - //设置邮件的主题
82   - helper.setSubject(emailTemplateEnum.getTitle());
83   - //设置发件人
84   - helper.setFrom(sendEmail);
85   - //设置收件人
86   - String[] receiveemailListArray = receiveemailList.toArray(new String[receiveemailList.size()]);
87   - helper.setTo(receiveemailListArray);
88   - helper.setSentDate(new Date());
89   - helper.setText(emailTemplateEnum.getContent());
90   - helper.addAttachment(pdfFile.getName(),pdfFile);
91   - javaMailSender.send(mimeMessage);
92   - }
  88 + public void sendEmail(EmailTemplateEnum emailTemplateEnum, List<String> receiveemailList, File pdfFile) {
  89 + if (CollectionUtils.isEmpty(receiveemailList) && emailTemplateEnum == null && ObjectUtils.isNull(pdfFile)) {
  90 + throw new BusinessException(ServerResultCode.PARAM_ERROR);
  91 + }
  92 + MimeMessage mimeMessage = javaMailSender.createMimeMessage();
  93 + //设置收件人
  94 + String[] receiveemailListArray = receiveemailList.toArray(new String[receiveemailList.size()]);
  95 + MimeMessageHelper helper = null;
  96 + try {
  97 + helper = new MimeMessageHelper(mimeMessage, true);
  98 + //设置邮件的主题
  99 + helper.setSubject(emailTemplateEnum.getTitle());
  100 + //设置发件人
  101 + helper.setFrom(sendEmail);
  102 + helper.setTo(receiveemailListArray);
  103 + helper.setSentDate(new Date());
  104 + helper.setText(emailTemplateEnum.getContent());
  105 + helper.addAttachment(pdfFile.getName(), pdfFile);
  106 + } catch (MessagingException e) {
  107 + throw new RuntimeException("邮件发送失败!");
  108 + }
  109 + javaMailSender.send(mimeMessage);
  110 + }
93 111 }
94 112 \ No newline at end of file
... ...
src/main/java/com/order/erp/job/OrderOverTimeEventJob.java
... ... @@ -8,11 +8,14 @@ import com.order.erp.common.constant.Constant;
8 8 import com.order.erp.common.utils.*;
9 9 import com.order.erp.domain.EmailTemplateEnum;
10 10 import com.order.erp.domain.OrderEventEnum;
  11 +import com.order.erp.domain.dto.BaseDO;
  12 +import com.order.erp.domain.dto.admin.AdminUserDO;
11 13 import com.order.erp.domain.dto.order.OrderBaseInfoDO;
12 14 import com.order.erp.domain.dto.order.OrderInspectionStageDO;
13 15 import com.order.erp.domain.dto.order.OrderTrackStageDO;
14 16 import com.order.erp.domain.dto.order.ReceiveEmailMappingDO;
15 17 import com.order.erp.domain.vo.order.*;
  18 +import com.order.erp.service.admin.AdminUserService;
16 19 import com.order.erp.service.order.*;
17 20 import freemarker.template.TemplateException;
18 21 import lombok.extern.slf4j.Slf4j;
... ... @@ -71,6 +74,9 @@ public class OrderOverTimeEventJob {
71 74 @Resource
72 75 private RedisUtils redisUtils;
73 76  
  77 + @Resource
  78 + private AdminUserService adminUserService;
  79 +
74 80 /**
75 81 * 凌晨1点执行,一天一次
76 82 */
... ... @@ -98,48 +104,80 @@ public class OrderOverTimeEventJob {
98 104 * @param eventJobVOS
99 105 */
100 106 //发送邮件。
101   - private void sendEmail4OrderEvent(OrderEventEnum eventEnum, List<OrderEventJobVO> eventJobVOS) throws MessagingException, TemplateException, IOException {
  107 + private void sendEmail4OrderEvent(OrderEventEnum eventEnum, List<OrderEventJobVO> eventJobVOS) {
102 108  
103   - HashSet<String> strings = new HashSet<>();
  109 + HashSet<String> customerCodeList = new HashSet<>();
104 110 for (OrderEventJobVO orderEventJob : eventJobVOS) {
105 111 if (!redisUtils.hasKey(EmailTemplateEnum.byTemplate(
106 112 eventEnum.getTemplateId()) + Constant.CROSS_BAR_CHARACTER + orderEventJob.getBaseInfo().getId())) {
107   - strings.add(orderEventJob.getBaseInfo().getCustomerCode());
  113 + customerCodeList.add(orderEventJob.getBaseInfo().getCustomerCode());
108 114 }
109 115 }
110 116 LambdaQueryWrapper<ReceiveEmailMappingDO> queryWrapper = new LambdaQueryWrapper<>();
111 117 queryWrapper.eq(ReceiveEmailMappingDO::getEnableFlag, Constant.ENABLE_TEN);
112   - if (strings == null || strings.isEmpty()) {
  118 + if (CollectionUtils.isEmpty(customerCodeList)) {
113 119 queryWrapper.eq(ReceiveEmailMappingDO::getTypeValue, "");
114 120 } else {
115   - queryWrapper.in(ReceiveEmailMappingDO::getTypeValue, strings);
  121 + queryWrapper.in(ReceiveEmailMappingDO::getTypeValue, customerCodeList);
116 122 }
117   - queryWrapper.apply("JSON_CONTAINS(JSON_EXTRACT(config_infos,'$[*].event'),JSON_QUOTE({0}),'$')", eventEnum.getEvent());
118   - List<ReceiveEmailMappingDO> receiveEmailMappingDOList = receiveEmailMappingService.list(queryWrapper);
  123 +// queryWrapper.apply("JSON_CONTAINS(JSON_EXTRACT(config_infos,'$[*].event'),JSON_QUOTE({0}),'$')", eventEnum.getEvent());
119 124  
120   - Set<Map<String, List<String>>> set = receiveEmailMappingDOList.stream().map(x -> {
121   - Map<String, List<String>> map = new HashMap<>();
122   - String customerCode = x.getTypeValue();
123   -// ReceiveEmailConfigItemVO receiveEmailConfigItemVO = JSON.parseObject(x.getConfigInfos(), ReceiveEmailConfigItemVO.class);
124   - List<ReceiveEmailConfigItemVO> receiveEmailConfigItemVOList = JSON.parseObject(
125   - x.getConfigInfos(), new TypeReference<List<ReceiveEmailConfigItemVO>>() {
  125 + List<ReceiveEmailMappingDO> receiveEmailMappingDOList = receiveEmailMappingService.list(queryWrapper);
  126 + List<ReceiveEmailMappingDO> receiveEmailMappingDOS = receiveEmailMappingDOList.stream().map(x -> {
  127 + List<ReceiveEmailConfigItemVO> receiveEmailConfigItemVOList = JSON.parseObject(x.getConfigInfos(), new TypeReference<List<ReceiveEmailConfigItemVO>>() {
126 128 });
127   - List<String> strings1 = new ArrayList<>();
128   - for (ReceiveEmailConfigItemVO item : receiveEmailConfigItemVOList) {
129   - strings1 = item.getEmails();
  129 + for (ReceiveEmailConfigItemVO receiveEmailConfigItemVO : receiveEmailConfigItemVOList) {
  130 + if (eventEnum.getEvent().equals(receiveEmailConfigItemVO.getEvent())) {
  131 + return x;
  132 + }
  133 + }
  134 + return null;
  135 + }).filter(Objects::nonNull)
  136 + .collect(Collectors.toList());
  137 + //如果为尾期验货事件的话,需要从订单中的生产科角色中得到邮箱。而不是从邮件配置中得到邮箱。
  138 + if (OrderEventEnum.END_CHECK_DATE_EVENT.equals(eventEnum)) {
  139 + for (OrderEventJobVO orderEventJob : eventJobVOS) {
  140 + String productionDepartment = orderEventJob.getBaseInfo().getProductionDepartment();
  141 + //根据订单的生产科得到生产科用户信息。
  142 + AdminUserDO productionDepartmentUser = adminUserService.getOne(new LambdaQueryWrapper<AdminUserDO>()
  143 + .eq(BaseDO::getEnableFlag, Constant.ENABLE_TEN)
  144 + .eq(AdminUserDO::getUserName, productionDepartment));
  145 + List<String> productionEmail = Arrays.asList(productionDepartmentUser.getEmail().split("[,,]+"))
  146 + .stream().map(String::trim)
  147 + .collect(Collectors.toList());
  148 + emailSendUtils.sendEmail(EmailTemplateEnum.byTemplate(eventEnum.getTemplateId()),
  149 + productionEmail, orderEventJob);
  150 + redisUtils.set(EmailTemplateEnum.byTemplate(
  151 + eventEnum.getTemplateId()) + Constant.CROSS_BAR_CHARACTER + orderEventJob.getBaseInfo().getId(),
  152 + orderEventJob, 90, TimeUnit.DAYS);
130 153 }
131   - List<String> emails = strings1;
132   - map.put(customerCode, emails);
133   - return map;
134   - }).collect(Collectors.toSet());
135   - for (OrderEventJobVO orderEventJob : eventJobVOS) {
136   - for (Map<String, List<String>> map : set) {
137   - if (orderEventJob.getBaseInfo().getCustomerCode().equals(map.keySet().iterator().next())) {
138   - emailSendUtils.sendEmail(EmailTemplateEnum.byTemplate(eventEnum.getTemplateId()),
139   - map.get(map.keySet().iterator().next()), orderEventJob);
140   - redisUtils.set(EmailTemplateEnum.byTemplate(
141   - eventEnum.getTemplateId()) + Constant.CROSS_BAR_CHARACTER + orderEventJob.getBaseInfo().getId(),
142   - orderEventJob, 90, TimeUnit.DAYS);
  154 + } else {
  155 + Set<Map<String, List<String>>> set = receiveEmailMappingDOS.stream().map(x -> {
  156 + Map<String, List<String>> map = new HashMap<>();
  157 + String customerCode = x.getTypeValue();
  158 +// ReceiveEmailConfigItemVO receiveEmailConfigItemVO = JSON.parseObject(x.getConfigInfos(), ReceiveEmailConfigItemVO.class);
  159 + List<ReceiveEmailConfigItemVO> receiveEmailConfigItemVOList = JSON.parseObject(
  160 + x.getConfigInfos(), new TypeReference<List<ReceiveEmailConfigItemVO>>() {
  161 + });
  162 + List<String> emailList = new ArrayList<>();
  163 + for (ReceiveEmailConfigItemVO item : receiveEmailConfigItemVOList) {
  164 + if (eventEnum.getEvent().equals(item.getEvent())) {
  165 + emailList = item.getEmails();
  166 + }
  167 + }
  168 + List<String> emails = emailList;
  169 + map.put(customerCode, emails);
  170 + return map;
  171 + }).collect(Collectors.toSet());
  172 + for (OrderEventJobVO orderEventJob : eventJobVOS) {
  173 + for (Map<String, List<String>> map : set) {
  174 + if (orderEventJob.getBaseInfo().getCustomerCode().equals(map.keySet().iterator().next())) {
  175 + emailSendUtils.sendEmail(EmailTemplateEnum.byTemplate(eventEnum.getTemplateId()),
  176 + map.get(map.keySet().iterator().next()), orderEventJob);
  177 + redisUtils.set(EmailTemplateEnum.byTemplate(
  178 + eventEnum.getTemplateId()) + Constant.CROSS_BAR_CHARACTER + orderEventJob.getBaseInfo().getId(),
  179 + orderEventJob, Constant.REDIS_EMAIL_TIME, TimeUnit.DAYS);
  180 + }
143 181 }
144 182 }
145 183 }
... ...
src/main/resources/templates/mail.ftl
... ... @@ -34,7 +34,7 @@
34 34 <h3>${context}</h3>
35 35 <table border="1">
36 36 <tr id="title1">
37   - <#if title=="中期验货报告" || title=="尾期验货报告">
  37 + <#if title=="中期验货报告">
38 38 <td> 项目号</td>
39 39 <td> 生产科</td>
40 40 <td> 内部编号</td>
... ... @@ -42,12 +42,34 @@
42 42 <td> 客户SYSTEM</td>
43 43 <td> PO COLOR</td>
44 44 <td> 订单图片</td>
  45 + <td> 生产要求</td>
45 46 <td> 数量 </td>
46 47 <td> 生产科拖货时间</td>
47 48 <td> 包装类型</td>
48 49 <td> 中期验货申请时间</td>
49 50 <td> 中期验货(功能性-拉力/跌落等、外观性-颜色/规格等、耐力性-烤厅等)</td>
50 51 <td> 中期验货结果PASS/FALL</td>
  52 + <#elseif title=="尾期验货报告">
  53 + <td> 项目号</td>
  54 + <td> 生产科</td>
  55 + <td> 内部编号</td>
  56 + <td> 客户PO号</td>
  57 + <td> 客户SYSTEM</td>
  58 + <td> PO COLOR</td>
  59 + <td> 订单图片</td>
  60 + <td> 生产要求</td>
  61 + <td> 数量 </td>
  62 + <td> 生产科拖货时间</td>
  63 + <td> 包装类型</td>
  64 + <td> 尾期验货申请时间</td>
  65 + <td> 长度/规格 </td>
  66 + <td> 功能性不良</td>
  67 + <td> 电镀不良 </td>
  68 + <td> 不良1 </td>
  69 + <td> 不良2 </td>
  70 + <td> 不良3 </td>
  71 + <td> 包装:卡片、条码、箱贴、箱单 </td>
  72 + <td> 中期验货结果PASS/FALL </td>
51 73 <#elseif title=="尾期验货日期">
52 74 <td> 客户编码</td>
53 75 <td> 项目号</td>
... ... @@ -77,7 +99,7 @@
77 99 </#if>
78 100 </tr>
79 101 <tr id="title2">
80   - <#if title=="中期验货报告" || title=="尾期验货报告">
  102 + <#if title=="中期验货报告" >
81 103 <td>${data.baseInfo.projectNo! " "}</td>
82 104 <td>${data.baseInfo.productionDepartment! " "}</td>
83 105 <td>${data.baseInfo.internalNo! " "}</td>
... ... @@ -85,12 +107,34 @@
85 107 <td>${data.baseInfo.customerStyle! " "}</td>
86 108 <td>${data.baseInfo.poColor! " "}</td>
87 109 <td><img src="${data.baseInfo.smallPicUrl! " "}" alt="Image"></td>
  110 + <td>${data.baseInfo.productionComment! " "}</td>
88 111 <td>${data.baseInfo.orderCount! " "}</td>
89 112 <td>${data.baseInfo.productionDepartmentConsignTime! " "}</td>
90 113 <td>${data.baseInfo.packetType! " "}</td>
91 114 <td>${data.inspectionStageInfo.midCheckApplyTime! " "}</td>
92 115 <td>${data.inspectionStageInfo.midCheckComment! " "}</td>
93 116 <td>${data.inspectionStageInfo.midCheckResult! " "}</td>
  117 + <#elseif title=="尾期验货报告">
  118 + <td>${data.baseInfo.projectNo! " "}</td>
  119 + <td>${data.baseInfo.productionDepartment! " "}</td>
  120 + <td>${data.baseInfo.internalNo! " "}</td>
  121 + <td>${data.baseInfo.customerPo! " "}</td>
  122 + <td>${data.baseInfo.customerStyle! " "}</td>
  123 + <td>${data.baseInfo.poColor! " "}</td>
  124 + <td><img src="${data.baseInfo.smallPicUrl! " "}" alt="Image"></td>
  125 + <td>${data.baseInfo.productionComment! " "}</td>
  126 + <td>${data.baseInfo.orderCount! " "}</td>
  127 + <td>${data.baseInfo.productionDepartmentConsignTime! " "}</td>
  128 + <td>${data.baseInfo.packetType! " "}</td>
  129 + <td> ${data.inspectionStageInfo.endCheckApplyTime! " "}</td>
  130 + <td> ${data.inspectionStageInfo.specification! " "} </td>
  131 + <td> ${data.inspectionStageInfo.functionality! " "}</td>
  132 + <td> ${data.inspectionStageInfo.electroplate! " "} </td>
  133 + <td> ${data.inspectionStageInfo.value1! " "}</td>
  134 + <td> ${data.inspectionStageInfo.value2! " "}</td>
  135 + <td> ${data.inspectionStageInfo.value3! " "}</td>
  136 + <td> ${data.inspectionStageInfo.boxPacket! " "} </td>
  137 + <td> ${data.inspectionStageInfo.endCheckResult! " "} </td>
94 138 <#elseif title=="尾期验货日期">
95 139 <td>${data.baseInfo.customerCode! " "}</td>
96 140 <td>${data.baseInfo.projectNo! " "}</td>
... ...