From 0975f12e394f81ea5d360e617a51de3dd8f703e9 Mon Sep 17 00:00:00 2001 From: YiFei Kuang Date: Mon, 20 Jan 2025 14:12:01 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=AE=A1=E7=AE=97=E8=B6=85=E6=97=B6?= =?UTF-8?q?=E6=97=B6,=E4=B8=8D=E8=83=BD=E4=B8=80=E5=91=B3=E7=9A=84?= =?UTF-8?q?=E6=8C=89=E7=85=A7+13h=E6=9D=A5=E7=AE=97=EF=BC=8C=E8=80=8C?= =?UTF-8?q?=E6=98=AF=E5=BA=94=E8=AF=A5=E6=8C=89=E7=85=A7=E4=BB=8E=E6=97=A9?= =?UTF-8?q?=E4=B8=8A8=E7=82=B9=E5=BC=80=E5=A7=8B=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../quartz/service/impl/OrderServiceImpl.java | 44 ++++++++++++++----- 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/ghy-quartz/src/main/java/com/ghy/quartz/service/impl/OrderServiceImpl.java b/ghy-quartz/src/main/java/com/ghy/quartz/service/impl/OrderServiceImpl.java index 308a2fc4..a32a3205 100644 --- a/ghy-quartz/src/main/java/com/ghy/quartz/service/impl/OrderServiceImpl.java +++ b/ghy-quartz/src/main/java/com/ghy/quartz/service/impl/OrderServiceImpl.java @@ -72,22 +72,35 @@ public class OrderServiceImpl implements OrderService { List orderMasters = orderMasterService.selectByStatus(orderMasterTimeoutStatus); log.info("扫描到{}条未完成的主订单", orderMasters.size()); for (OrderMaster orderMaster : orderMasters) { - executor.execute(() -> checkTimeout(orderMaster)); + try { + checkTimeout(orderMaster); + }catch (Exception e){ + log.error("主单超时定时任务执行:单号:{},错误原因:{}", orderMaster.getCode(), e.getMessage()); + e.printStackTrace(); + } + } // 查询符合超时的子单 List orders = orderDetailService.selectByStatus(timeoutOrderStatus); log.info("扫描到{}条未完成的子订单", orders.size()); for (OrderDetail order : orders) { - executor.execute(() -> checkTimeout(order)); + try { + checkTimeout(order); + }catch (Exception e){ + log.error("子单超时定时任务执行:单号:{},错误原因:{}", order.getCode(), e.getMessage()); + e.printStackTrace(); + } } } - @Transactional(rollbackFor = Exception.class) +// @Transactional(rollbackFor = Exception.class) public void checkTimeout(OrderMaster order) { + log.info("主单超时开始:单号:{}, 内容:{}", order.getCode(), order); Date now = new Date(); // 待接单状态的超时逻辑 if (ZERO.equals(order.getOrderStatus())) { + log.info("单号:{},状态:{},创建时间:{},更新时间:{}", order.getCode(), order.getOrderStatus(), order.getCreateTime(), order.getUpdateTime()); Date createTime = order.getCreateTime(); Date overTime30min = getOverTime(createTime, 30 * 60 * 1000); Date overTime1h = getOverTime(createTime, 30 * 60 * 1000); @@ -96,6 +109,7 @@ public class OrderServiceImpl implements OrderService { flag = getOverTime(order.getUpdateTime(), 45 * 60 * 1000).before(now); }else { flag = getOverTime(createTime, 45 * 60 * 1000).before(now); + log.info("判断时间:{},当前时间:{},结果:{}", getOverTime(createTime, 45 * 60 * 1000), now, flag); } // 是否已经超时 boolean timeout = ONE.equals(order.getTimeout()); @@ -118,6 +132,7 @@ public class OrderServiceImpl implements OrderService { // 未派单状态的超时逻辑 if (ONE.equals(order.getOrderStatus())) { + log.info("单号:{},状态:{},创建时间:{},更新时间:{}", order.getCode(), order.getOrderStatus(), order.getCreateTime(), order.getUpdateTime()); Date updateTime = order.getUpdateTime(); Date overTime30min = getOverTime(updateTime, 30 * 60 * 1000); Date overTime4h = getOverTime(updateTime, 4 * 60 * 60 * 1000); @@ -164,14 +179,16 @@ public class OrderServiceImpl implements OrderService { * * @param order 订单信息 */ - @Transactional(rollbackFor = Exception.class) +// @Transactional(rollbackFor = Exception.class) public void checkTimeout(OrderDetail order) { + log.info("子单超时开始:单号:{}, 内容:{}", order.getCode(), order); Date now = new Date(); // 是否超时 boolean timeout = ONE.equals(order.getTimeout()); // 超时扣款次数 Integer times = order.getTimeoutFineTimes(); if (!timeout) { + log.info("单号:{},状态:{},创建时间:{},更新时间:{}", order.getCode(), order.getOrderStatus(), order.getCreateTime(), order.getUpdateTime()); // 待上门超时 if(order.getOrderStatus().equals(OrderStatus.GOING.code())){ // 服务中状态要按预计上门时间计算4h超时 @@ -291,16 +308,21 @@ public class OrderServiceImpl implements OrderService { * @return 超时时间 */ private Date getOverTime(Date orderTime, int time) { - Date date = DateUtils.addMilliseconds(orderTime, time); Calendar calendar = Calendar.getInstance(); - calendar.setTime(date); + calendar.setTime(orderTime); int hour = calendar.get(Calendar.HOUR_OF_DAY); - if (hour < 8 || hour > 18) { - // 超过19点的单,需要加上13个小时 - return DateUtils.addHours(date, 13); - } else { - return date; + if(hour < 8 || hour > 18){ + // 设置时间为今天的 8 点 + Calendar newCalendar = Calendar.getInstance(); + newCalendar.set(Calendar.HOUR_OF_DAY, 8); + newCalendar.set(Calendar.MINUTE, 0); + newCalendar.set(Calendar.SECOND, 0); + newCalendar.set(Calendar.MILLISECOND, 0); + + // 获取早上 8 点的 Date 对象 + orderTime = newCalendar.getTime(); } + return DateUtils.addMilliseconds(orderTime, time); } /**