Commit ca29250634c4ffc343ce4282ddc22f11f81ba10e
1 parent
5d08aa73
更新邮件模块,解决尾期验货日期发送邮件到对应生产科
Showing
4 changed files
with
167 additions
and
63 deletions
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> | ... | ... |