Commit 8f9c59ee0c43cde5cab9d30da5d09213e336a9e5

Authored by chenhang4442024
1 parent 672e7fe2

定时检测超时任务

src/main/java/com/order/erp/job/OrderOverTimeEventJob.java
1 package com.order.erp.job; 1 package com.order.erp.job;
  2 +
2 import cn.hutool.core.bean.BeanUtil; 3 import cn.hutool.core.bean.BeanUtil;
3 import com.alibaba.fastjson.*; 4 import com.alibaba.fastjson.*;
4 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 5 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -17,6 +18,7 @@ import freemarker.template.TemplateException; @@ -17,6 +18,7 @@ import freemarker.template.TemplateException;
17 import lombok.extern.slf4j.Slf4j; 18 import lombok.extern.slf4j.Slf4j;
18 import org.springframework.scheduling.annotation.Scheduled; 19 import org.springframework.scheduling.annotation.Scheduled;
19 import org.springframework.stereotype.Component; 20 import org.springframework.stereotype.Component;
  21 +
20 import javax.annotation.Resource; 22 import javax.annotation.Resource;
21 import javax.mail.MessagingException; 23 import javax.mail.MessagingException;
22 import java.io.IOException; 24 import java.io.IOException;
@@ -25,13 +27,13 @@ import java.time.LocalDateTime; @@ -25,13 +27,13 @@ import java.time.LocalDateTime;
25 import java.time.format.DateTimeFormatter; 27 import java.time.format.DateTimeFormatter;
26 import java.time.temporal.ChronoUnit; 28 import java.time.temporal.ChronoUnit;
27 import java.util.*; 29 import java.util.*;
  30 +import java.util.concurrent.TimeUnit;
28 import java.util.function.Function; 31 import java.util.function.Function;
29 import java.util.regex.Matcher; 32 import java.util.regex.Matcher;
30 import java.util.regex.Pattern; 33 import java.util.regex.Pattern;
31 import java.util.stream.Collectors; 34 import java.util.stream.Collectors;
32 35
33 36
34 -  
35 /** 37 /**
36 * @author: xms 38 * @author: xms
37 * @description: TODO 39 * @description: TODO
@@ -69,17 +71,14 @@ public class OrderOverTimeEventJob { @@ -69,17 +71,14 @@ public class OrderOverTimeEventJob {
69 @Resource 71 @Resource
70 private RedisUtils redisUtils; 72 private RedisUtils redisUtils;
71 73
72 - String dateFormatDay= com.order.erp.common.excel4j.utils.DateUtils.DATE_FORMAT_DAY;  
73 - String dateFormatSEC= com.order.erp.common.excel4j.utils.DateUtils.DATE_FORMAT_SEC;  
74 -  
75 /** 74 /**
76 * 凌晨1点执行,一天一次 75 * 凌晨1点执行,一天一次
77 */ 76 */
78 - @Scheduled(cron = "0 0 1 * * ?")  
79 - //存储的日期都必须为yyyy-MM-dd HH:mm:ss。 77 + @Scheduled(cron = "0 0 1 * * ?")
  78 + //存储的日期都必须为yyyy-MM-dd HH:mm:ss。
80 public void checkOverTimeExecuteV2() throws MessagingException, TemplateException, IOException { 79 public void checkOverTimeExecuteV2() throws MessagingException, TemplateException, IOException {
81 List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.getEventList(); 80 List<OrderBaseInfoDO> orderBaseInfoDOList = orderBaseInfoService.getEventList();
82 - if(CollectionUtils.isNotEmpty(orderBaseInfoDOList)){ 81 + if (CollectionUtils.isNotEmpty(orderBaseInfoDOList)) {
83 Set<Long> orderIds = orderBaseInfoDOList.stream().map(OrderBaseInfoDO::getId).collect(Collectors.toSet()); 82 Set<Long> orderIds = orderBaseInfoDOList.stream().map(OrderBaseInfoDO::getId).collect(Collectors.toSet());
84 List<OrderInspectionStageDO> orderInspectionStageDOList = inspectionStageService.list(new LambdaQueryWrapper<OrderInspectionStageDO>() 83 List<OrderInspectionStageDO> orderInspectionStageDOList = inspectionStageService.list(new LambdaQueryWrapper<OrderInspectionStageDO>()
85 .in(OrderInspectionStageDO::getOrderId, orderIds)); 84 .in(OrderInspectionStageDO::getOrderId, orderIds));
@@ -100,28 +99,23 @@ public class OrderOverTimeEventJob { @@ -100,28 +99,23 @@ public class OrderOverTimeEventJob {
100 */ 99 */
101 //发送邮件。 100 //发送邮件。
102 private void sendEmail4OrderEvent(OrderEventEnum eventEnum, List<OrderEventJobVO> eventJobVOS) throws MessagingException, TemplateException, IOException { 101 private void sendEmail4OrderEvent(OrderEventEnum eventEnum, List<OrderEventJobVO> eventJobVOS) throws MessagingException, TemplateException, IOException {
103 - List<ReceiveEmailMappingDO> allMappings = receiveEmailMappingService.list();  
104 - //存储 customerCode  
105 - Set<String> customerCodes = new HashSet<>();  
106 - // 遍历 eventJobVOS,添加不在 Redis 中的 customerCode 102 +
  103 + HashSet<String> strings = new HashSet<>();
107 for (OrderEventJobVO orderEventJob : eventJobVOS) { 104 for (OrderEventJobVO orderEventJob : eventJobVOS) {
108 - String cacheKey = EmailTemplateEnum.byTemplate(eventEnum.getTemplateId())  
109 - + Constant.CROSS_BAR_CHARACTER  
110 - + orderEventJob.getBaseInfo().getId();  
111 - if (!redisUtils.hasKey(cacheKey)) {  
112 - customerCodes.add(orderEventJob.getBaseInfo().getCustomerCode()); 105 + if (!redisUtils.hasKey(EmailTemplateEnum.byTemplate(
  106 + eventEnum.getTemplateId()) + Constant.CROSS_BAR_CHARACTER + orderEventJob.getBaseInfo().getId())) {
  107 + strings.add(orderEventJob.getBaseInfo().getCustomerCode());
113 } 108 }
114 } 109 }
115 -  
116 - // 过滤 ReceiveEmailMappingDO  
117 - List<ReceiveEmailMappingDO> receiveEmailMappingDOList = allMappings.stream()  
118 - .filter(mapping -> customerCodes.isEmpty() || customerCodes.contains(mapping.getTypeValue()))  
119 - .filter(mapping -> {  
120 - // 检查 config_infos 是否包含 eventEnum.getEvent()  
121 - String configInfos = mapping.getConfigInfos();  
122 - return configInfos != null && configInfos.contains(eventEnum.getEvent());  
123 - })  
124 - .collect(Collectors.toList()); 110 + LambdaQueryWrapper<ReceiveEmailMappingDO> queryWrapper = new LambdaQueryWrapper<>();
  111 + queryWrapper.eq(ReceiveEmailMappingDO::getEnableFlag, Constant.ENABLE_TEN);
  112 + if (strings == null || strings.isEmpty()) {
  113 + queryWrapper.eq(ReceiveEmailMappingDO::getTypeValue, "");
  114 + } else {
  115 + queryWrapper.in(ReceiveEmailMappingDO::getTypeValue, strings);
  116 + }
  117 + queryWrapper.apply("JSON_CONTAINS(JSON_EXTRACT(config_infos,'$[*].event'),JSON_QUOTE({0}),'$')", eventEnum.getEvent());
  118 + List<ReceiveEmailMappingDO> receiveEmailMappingDOList = receiveEmailMappingService.list(queryWrapper);
125 119
126 Set<Map<String, List<String>>> set = receiveEmailMappingDOList.stream().map(x -> { 120 Set<Map<String, List<String>>> set = receiveEmailMappingDOList.stream().map(x -> {
127 Map<String, List<String>> map = new HashMap<>(); 121 Map<String, List<String>> map = new HashMap<>();
@@ -145,7 +139,7 @@ public class OrderOverTimeEventJob { @@ -145,7 +139,7 @@ public class OrderOverTimeEventJob {
145 map.get(map.keySet().iterator().next()), orderEventJob); 139 map.get(map.keySet().iterator().next()), orderEventJob);
146 redisUtils.set(EmailTemplateEnum.byTemplate( 140 redisUtils.set(EmailTemplateEnum.byTemplate(
147 eventEnum.getTemplateId()) + Constant.CROSS_BAR_CHARACTER + orderEventJob.getBaseInfo().getId(), 141 eventEnum.getTemplateId()) + Constant.CROSS_BAR_CHARACTER + orderEventJob.getBaseInfo().getId(),
148 - orderEventJob); 142 + orderEventJob, 90, TimeUnit.DAYS);
149 } 143 }
150 } 144 }
151 } 145 }
@@ -176,7 +170,7 @@ public class OrderOverTimeEventJob { @@ -176,7 +170,7 @@ public class OrderOverTimeEventJob {
176 orderEventJobVO.setBaseInfo(orderBaseInfoVO); 170 orderEventJobVO.setBaseInfo(orderBaseInfoVO);
177 orderEventJobVO.setTrackStageInfo(orderTrackStageVO); 171 orderEventJobVO.setTrackStageInfo(orderTrackStageVO);
178 return orderEventJobVO; 172 return orderEventJobVO;
179 - }else{ 173 + } else {
180 return null; 174 return null;
181 } 175 }
182 }).filter(Objects::nonNull) 176 }).filter(Objects::nonNull)
@@ -237,7 +231,6 @@ public class OrderOverTimeEventJob { @@ -237,7 +231,6 @@ public class OrderOverTimeEventJob {
237 if (filterEndCheckDateEvent(eventJobVO)) { 231 if (filterEndCheckDateEvent(eventJobVO)) {
238 map.put(OrderEventEnum.END_CHECK_DATE_EVENT.getEvent(), eventJobVO); 232 map.put(OrderEventEnum.END_CHECK_DATE_EVENT.getEvent(), eventJobVO);
239 } 233 }
240 - // todo 其他订单超期事件判断 中期验货报告和尾期验货报告。  
241 return map; 234 return map;
242 } 235 }
243 236
@@ -246,24 +239,13 @@ public class OrderOverTimeEventJob { @@ -246,24 +239,13 @@ public class OrderOverTimeEventJob {
246 * @return 239 * @return
247 */ 240 */
248 private Boolean filterConfirmSampleOrderEvent(OrderEventJobVO eventJobVO) { 241 private Boolean filterConfirmSampleOrderEvent(OrderEventJobVO eventJobVO) {
249 -  
250 - // todo 判断是否未能在规定的期限内完成以下货号的确认样确认  
251 String orderHodTime = eventJobVO.getBaseInfo().getOrderHodTime(); 242 String orderHodTime = eventJobVO.getBaseInfo().getOrderHodTime();
  243 + String ppConfirmTime = eventJobVO.getTrackStageInfo().getPpConfirmTime();
252 String ppConfirmResult = eventJobVO.getTrackStageInfo().getPpConfirmResult(); 244 String ppConfirmResult = eventJobVO.getTrackStageInfo().getPpConfirmResult();
253 - if (StringUtils.isNotBlank(orderHodTime) && StringUtils.isNotBlank(ppConfirmResult)) {  
254 - if (!ppConfirmResult.contains("ok") && org.apache.commons.lang3.StringUtils.countMatches(ppConfirmResult, "fail") == 3) { 245 + if (StringUtils.isNotBlank(orderHodTime) && StringUtils.isNotBlank(ppConfirmResult) && StringUtils.isNotBlank(ppConfirmTime)) {
  246 + int daysBetween = getDaysBetween(ppConfirmResult, ppConfirmTime, orderHodTime);
  247 + if (daysBetween == Constant.TWENTY_FIRST || daysBetween == Constant.NEGATIVE_ONE) {
255 return true; 248 return true;
256 - } else if (ppConfirmResult.contains("ok") || org.apache.commons.lang3.StringUtils.countMatches(ppConfirmResult, "fail") < 3) {  
257 - LocalDate parse1 = findLatestDateBeforeOk(ppConfirmResult);  
258 - //把订单中的Hod时间yyyy-mm-dd HH:mm:ss改成yyyy-mm-dd。  
259 - String[] hodTime = orderHodTime.split(" ");  
260 - String orderhodTime = hodTime[0];  
261 - LocalDate parse2 = DateUtils.parseDate(orderhodTime, dateFormatDay);  
262 - long daysBetween = ChronoUnit.DAYS.between(parse1, parse2);  
263 - if (daysBetween == 21) {  
264 - return true;  
265 -  
266 - }  
267 } 249 }
268 } 250 }
269 return false; 251 return false;
@@ -273,16 +255,12 @@ public class OrderOverTimeEventJob { @@ -273,16 +255,12 @@ public class OrderOverTimeEventJob {
273 String orderHodTime = eventJobVO.getBaseInfo().getOrderHodTime(); 255 String orderHodTime = eventJobVO.getBaseInfo().getOrderHodTime();
274 String esoSampleSendTime = eventJobVO.getTrackStageInfo().getEsoSampleSendTime(); 256 String esoSampleSendTime = eventJobVO.getTrackStageInfo().getEsoSampleSendTime();
275 if (StringUtils.isNotBlank(orderHodTime) && StringUtils.isNotBlank(esoSampleSendTime)) { 257 if (StringUtils.isNotBlank(orderHodTime) && StringUtils.isNotBlank(esoSampleSendTime)) {
276 - //把订单中的Hod时间yyyy-mm-dd HH:mm:ss改成yyyy-mm-dd。  
277 - String[] hodTime = orderHodTime.split(" ");  
278 - String orderhodTime = hodTime[0];  
279 - LocalDate parse2 = DateUtils.parseDate(orderhodTime, dateFormatDay);  
280 - LocalDateTime dateTime=LocalDateTime.parse(esoSampleSendTime, DateTimeFormatter.ofPattern(dateFormatSEC));  
281 - String parse=dateTime.format(DateTimeFormatter.ofPattern(dateFormatDay));  
282 - LocalDate parse1=DateUtils.parseDate(parse,dateFormatDay);  
283 - if (ChronoUnit.DAYS.between(parse1, parse2) == 7) { 258 + LocalDate orderHodTimelocalDate = DateUtils.parseDate(orderHodTime);
  259 + LocalDate esoSampleSendTimelocalDate = DateUtils.parseDate(esoSampleSendTime);
  260 + if (ChronoUnit.DAYS.between(esoSampleSendTimelocalDate, orderHodTimelocalDate) == Constant.SEVEN) {
284 return true; 261 return true;
285 } 262 }
  263 +
286 } 264 }
287 return false; 265 return false;
288 } 266 }
@@ -290,19 +268,11 @@ public class OrderOverTimeEventJob { @@ -290,19 +268,11 @@ public class OrderOverTimeEventJob {
290 private Boolean filterBigSampleEvent(OrderEventJobVO eventJobVO) { 268 private Boolean filterBigSampleEvent(OrderEventJobVO eventJobVO) {
291 String orderHodTime = eventJobVO.getBaseInfo().getOrderHodTime(); 269 String orderHodTime = eventJobVO.getBaseInfo().getOrderHodTime();
292 String shippmentSampleConfirmResult = eventJobVO.getTrackStageInfo().getShippmentSampleConfirmResult(); 270 String shippmentSampleConfirmResult = eventJobVO.getTrackStageInfo().getShippmentSampleConfirmResult();
293 - if (StringUtils.isNotBlank(orderHodTime) && StringUtils.isNotBlank(shippmentSampleConfirmResult)) {  
294 - if (!shippmentSampleConfirmResult.contains("ok") && org.apache.commons.lang3.StringUtils.countMatches(shippmentSampleConfirmResult, "fail") == 3) { 271 + String shippmentSampleConfirmTime = eventJobVO.getTrackStageInfo().getShippmentSampleSendTime();
  272 + if (StringUtils.isNotBlank(orderHodTime) && StringUtils.isNotBlank(shippmentSampleConfirmResult) && StringUtils.isNotBlank(shippmentSampleConfirmTime)) {
  273 + int daysBetween = getDaysBetween(shippmentSampleConfirmResult, shippmentSampleConfirmTime, orderHodTime);
  274 + if (daysBetween == Constant.SEVEN || daysBetween == Constant.NEGATIVE_ONE) {
295 return true; 275 return true;
296 - } else if (shippmentSampleConfirmResult.contains("ok") || org.apache.commons.lang3.StringUtils.countMatches(shippmentSampleConfirmResult, "fail") < 3) {  
297 - //把订单中的Hod时间yyyy-mm-dd HH:mm:ss改成yyyy-mm-dd。  
298 - String[] hodTime = orderHodTime.split(" ");  
299 - String orderhodTime = hodTime[0];  
300 - LocalDate parse2 = DateUtils.parseDate(orderhodTime, dateFormatDay);  
301 - LocalDate parse1 = findLatestDateBeforeOk(shippmentSampleConfirmResult);  
302 - long daysBetween = ChronoUnit.DAYS.between(parse1, parse2);  
303 - if (daysBetween == 7) {  
304 - return true;  
305 - }  
306 } 276 }
307 } 277 }
308 return false; 278 return false;
@@ -311,28 +281,20 @@ public class OrderOverTimeEventJob { @@ -311,28 +281,20 @@ public class OrderOverTimeEventJob {
311 281
312 private Boolean filterAITEXSGSTestEvent(OrderEventJobVO eventJobVO) { 282 private Boolean filterAITEXSGSTestEvent(OrderEventJobVO eventJobVO) {
313 String orderHodTime = eventJobVO.getBaseInfo().getOrderHodTime(); 283 String orderHodTime = eventJobVO.getBaseInfo().getOrderHodTime();
314 - String shippmentSampleConfirmResult = eventJobVO.getTrackStageInfo().getAitexTestFinishResult(); 284 + String aitexTestFinishResult = eventJobVO.getTrackStageInfo().getAitexTestFinishResult();
315 String sgsTestFinishResult = eventJobVO.getTrackStageInfo().getSgsTestFinishResult(); 285 String sgsTestFinishResult = eventJobVO.getTrackStageInfo().getSgsTestFinishResult();
316 - if (StringUtils.isNotBlank(orderHodTime) && StringUtils.isNotBlank(shippmentSampleConfirmResult) ||  
317 - StringUtils.isNotBlank(orderHodTime) && StringUtils.isNotBlank(sgsTestFinishResult)) {  
318 - if (!shippmentSampleConfirmResult.contains("ok") && org.apache.commons.lang3.StringUtils.countMatches(shippmentSampleConfirmResult, "fail") == 3 ||  
319 - !shippmentSampleConfirmResult.contains("ok") && org.apache.commons.lang3.StringUtils.countMatches(sgsTestFinishResult, "fail") == 3) { 286 + String sgsTestFinishTime = eventJobVO.getTrackStageInfo().getSgsTestFinishTime();
  287 + String aitexTestFinishTime = eventJobVO.getTrackStageInfo().getAitexTestFinishTime();
  288 + if (StringUtils.isNotBlank(orderHodTime) && StringUtils.isNotBlank(aitexTestFinishResult) && StringUtils.isNotBlank(aitexTestFinishTime) ||
  289 + StringUtils.isNotBlank(orderHodTime) && StringUtils.isNotBlank(sgsTestFinishResult) && StringUtils.isNotBlank(sgsTestFinishTime)) {
  290 + int aitextestDaysBetween = getDaysBetween(aitexTestFinishResult, aitexTestFinishTime, orderHodTime);
  291 + int sgstestDaysBetween = getDaysBetween(sgsTestFinishResult, sgsTestFinishTime, orderHodTime);
  292 + if (aitextestDaysBetween == Constant.THREE || sgstestDaysBetween == Constant.LOCK_ERROR_TIMES || aitextestDaysBetween == Constant.NEGATIVE_ONE || sgstestDaysBetween == Constant.NEGATIVE_ONE) {
320 return true; 293 return true;
321 - } else if ((shippmentSampleConfirmResult.contains("ok") || org.apache.commons.lang3.StringUtils.countMatches(shippmentSampleConfirmResult, "fail") < 3) ||  
322 - (sgsTestFinishResult.contains("ok") || org.apache.commons.lang3.StringUtils.countMatches(sgsTestFinishResult, "fail") < 3)) {  
323 - String[] hodTime = orderHodTime.split(" ");  
324 - String orderhodTime=hodTime[0];  
325 - LocalDate parse1 = findLatestDateBeforeOk(shippmentSampleConfirmResult);  
326 - LocalDate parse2 = DateUtils.parseDate(orderhodTime, dateFormatDay);  
327 - LocalDate parse3 = findLatestDateBeforeOk(sgsTestFinishResult);  
328 - long daysBetween = ChronoUnit.DAYS.between(parse1, parse2);  
329 - long daysBetween1 = ChronoUnit.DAYS.between(parse3, parse2);  
330 - if (daysBetween == 3 || daysBetween1 == 3) {  
331 - return true;  
332 - }  
333 } 294 }
334 } 295 }
335 return false; 296 return false;
  297 +
336 } 298 }
337 299
338 300
@@ -340,13 +302,9 @@ public class OrderOverTimeEventJob { @@ -340,13 +302,9 @@ public class OrderOverTimeEventJob {
340 String orderHodTime = eventJobVO.getBaseInfo().getOrderHodTime(); 302 String orderHodTime = eventJobVO.getBaseInfo().getOrderHodTime();
341 String lastArrivalTime = eventJobVO.getTrackStageInfo().getLatestArrivalTime(); 303 String lastArrivalTime = eventJobVO.getTrackStageInfo().getLatestArrivalTime();
342 if (StringUtils.isNotBlank(orderHodTime) && StringUtils.isNotBlank(lastArrivalTime)) { 304 if (StringUtils.isNotBlank(orderHodTime) && StringUtils.isNotBlank(lastArrivalTime)) {
343 - String[] hodTime = orderHodTime.split(" ");  
344 - String orderhodTime=hodTime[0];  
345 - LocalDate parse2 = DateUtils.parseDate(orderhodTime, dateFormatDay);  
346 - LocalDateTime dateTime=LocalDateTime.parse(lastArrivalTime, DateTimeFormatter.ofPattern(dateFormatSEC));  
347 - String parse=dateTime.format(DateTimeFormatter.ofPattern(dateFormatDay));  
348 - LocalDate parse1=DateUtils.parseDate(parse,dateFormatDay);  
349 - if (ChronoUnit.DAYS.between(parse1, parse2) == 7) { 305 + LocalDate orderHodTimelocalDate = DateUtils.parseDate(orderHodTime);
  306 + LocalDate lastArrivalTimelocalDate = DateUtils.parseDate(lastArrivalTime);
  307 + if (ChronoUnit.DAYS.between(lastArrivalTimelocalDate, orderHodTimelocalDate) == Constant.SEVEN) {
350 return true; 308 return true;
351 } 309 }
352 } 310 }
@@ -357,56 +315,38 @@ public class OrderOverTimeEventJob { @@ -357,56 +315,38 @@ public class OrderOverTimeEventJob {
357 String orderHodTime = eventJobVO.getBaseInfo().getOrderHodTime(); 315 String orderHodTime = eventJobVO.getBaseInfo().getOrderHodTime();
358 String latestBkTime = eventJobVO.getTrackStageInfo().getLatestBkTime(); 316 String latestBkTime = eventJobVO.getTrackStageInfo().getLatestBkTime();
359 if (StringUtils.isNotBlank(orderHodTime) && StringUtils.isNotBlank(latestBkTime)) { 317 if (StringUtils.isNotBlank(orderHodTime) && StringUtils.isNotBlank(latestBkTime)) {
360 - String[] hodTime = orderHodTime.split(" ");  
361 - String orderhodTime=hodTime[0];  
362 - LocalDate parse2 = DateUtils.parseDate(orderhodTime, dateFormatDay);  
363 - LocalDateTime dateTime=LocalDateTime.parse(latestBkTime, DateTimeFormatter.ofPattern(dateFormatSEC));  
364 - String parse=dateTime.format(DateTimeFormatter.ofPattern(dateFormatDay));  
365 - LocalDate parse1=DateUtils.parseDate(parse,dateFormatDay);  
366 - if (ChronoUnit.DAYS.between(parse1, parse2) == 10) { 318 + LocalDate latestBkTimelocalDate = DateUtils.parseDate(latestBkTime);
  319 + LocalDate orderHodTimelocalDate = DateUtils.parseDate(orderHodTime);
  320 + if (ChronoUnit.DAYS.between(latestBkTimelocalDate, orderHodTimelocalDate) == Constant.ENABLE_TEN) {
367 return true; 321 return true;
368 } 322 }
369 } 323 }
370 return false; 324 return false;
  325 +
371 } 326 }
372 327
373 private Boolean filterEndCheckDateEvent(OrderEventJobVO eventJobVO) { 328 private Boolean filterEndCheckDateEvent(OrderEventJobVO eventJobVO) {
374 String orderHodTime = eventJobVO.getBaseInfo().getOrderHodTime(); 329 String orderHodTime = eventJobVO.getBaseInfo().getOrderHodTime();
375 String endCheckApplyTime = eventJobVO.getInspectionStageInfo().getEndCheckApplyTime(); 330 String endCheckApplyTime = eventJobVO.getInspectionStageInfo().getEndCheckApplyTime();
376 if (StringUtils.isNotBlank(orderHodTime) && StringUtils.isNotBlank(endCheckApplyTime)) { 331 if (StringUtils.isNotBlank(orderHodTime) && StringUtils.isNotBlank(endCheckApplyTime)) {
377 - String[] hodTime = orderHodTime.split(" ");  
378 - String orderhodTime=hodTime[0];  
379 - LocalDate parse2 = DateUtils.parseDate(orderhodTime, dateFormatDay);  
380 - LocalDateTime dateTime=LocalDateTime.parse(endCheckApplyTime, DateTimeFormatter.ofPattern(dateFormatSEC));  
381 - String parse=dateTime.format(DateTimeFormatter.ofPattern(dateFormatDay));  
382 - LocalDate parse1=DateUtils.parseDate(parse,dateFormatDay);  
383 - if (ChronoUnit.DAYS.between(parse1, parse2) == 2) { 332 + LocalDate endCheckApplyTimelocalDate = DateUtils.parseDate(endCheckApplyTime);
  333 + LocalDate orderHodTimelocalDate = DateUtils.parseDate(orderHodTime);
  334 + if (ChronoUnit.DAYS.between(endCheckApplyTimelocalDate, orderHodTimelocalDate) == Constant.TWO) {
384 return true; 335 return true;
385 } 336 }
386 } 337 }
387 return false; 338 return false;
388 } 339 }
389 340
390 - public LocalDate findLatestDateBeforeOk(String data){  
391 - DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dateFormatSEC);  
392 - LocalDateTime latestDateBeforeOk = null;  
393 - // 正则表达式提取日期和状态  
394 - Pattern pattern = Pattern.compile("(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2})\\s+(.*?)(?=\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}|$)");  
395 - Matcher matcher = pattern.matcher(data);  
396 - while (matcher.find()) {  
397 - LocalDateTime eventDate = LocalDateTime.parse(matcher.group(1), formatter);  
398 - String status = matcher.group(2);  
399 - // 查找 "ok" 的位置  
400 - int okIndex = data.indexOf("ok");  
401 - if (okIndex != -1 && matcher.start() < okIndex) {  
402 - // 更新 latestDateBeforeOk 为当前事件的日期,如果当前日期晚于已知的日期  
403 - if (latestDateBeforeOk == null || eventDate.isAfter(latestDateBeforeOk)) {  
404 - latestDateBeforeOk = eventDate;  
405 - }  
406 - } 341 +
  342 + public int getDaysBetween(String resultStatus, String startDateStr, String orderHodTime) {
  343 + if (!resultStatus.contains("ok") && resultStatus.startsWith("3")) {
  344 + return Constant.NEGATIVE_ONE;
  345 + } else if (!resultStatus.contains("ok") && (resultStatus.startsWith("2") || resultStatus.startsWith("1"))) {
  346 + LocalDate ppConfirmTimeDate = DateUtils.parseDate(startDateStr);
  347 + LocalDate orderHodTimeDate = DateUtils.parseDate(orderHodTime);
  348 + return (int) ChronoUnit.DAYS.between(ppConfirmTimeDate, orderHodTimeDate);
407 } 349 }
408 - // 转换为 LocalDate,去掉时分秒  
409 - return (latestDateBeforeOk != null) ? latestDateBeforeOk.toLocalDate() : null; 350 + return Constant.ZERO;
410 } 351 }
411 -  
412 } 352 }