From c471f79d34a1105651890c1a60d5515c8543e051 Mon Sep 17 00:00:00 2001 From: cb <275647614@qq.com> Date: Sat, 19 Apr 2025 09:33:09 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B6=85=E6=97=B64=E5=B0=8F=E6=97=B6=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../quartz/service/impl/OrderServiceImpl.java | 32 ++++++++++++++++--- 1 file changed, 27 insertions(+), 5 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 64d7fc0c..e12336c7 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 @@ -51,10 +51,7 @@ import org.springframework.web.bind.annotation.RequestBody; import javax.annotation.Resource; import java.math.BigDecimal; import java.text.SimpleDateFormat; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.time.ZoneId; +import java.time.*; import java.util.*; import java.util.stream.Collectors; @@ -422,7 +419,8 @@ public class OrderServiceImpl implements OrderService { // 未超时的单 else if (order.getOrderStatus().equals(OrderStatus.SERVER.code())) { // 服务中状态要按预计上门时间计算4h超时 - Date overTime = DateUtils.addMilliseconds(order.getUpdateTime(), 4 * 60 * 60 * 1000); + // Date overTime = DateUtils.addMilliseconds(order.getUpdateTime(), 4 * 60 * 60 * 1000); + Date overTime=calculateOverTime(order.getUpdateTime()); if (overTime.before(now)) { log.info("订单[{}]服务中状态超时4小时 扣款", order.getId()); OrderTimeoutRecord record = new OrderTimeoutRecord(order.getId(), order.getWorkerId(), order.getDeptId(), order.getOrderStatus()); @@ -1286,4 +1284,28 @@ public class OrderServiceImpl implements OrderService { } return true; } + /*判断超时4小时的时间 如果超过晚上八点则剩余的时间从第二天早上开始计时*/ + public static Date calculateOverTime(Date updateTime) { + // 1. 增加4小时 + LocalDateTime overTime = updateTime.toInstant() + .atZone(java.time.ZoneId.systemDefault()) + .toLocalDateTime() + .plusHours(4); + + // 2. 判断是否超过20:00 + LocalTime cutoff = LocalTime.of(20, 0); + LocalTime timePart = overTime.toLocalTime(); + + if (timePart.isAfter(cutoff)) { + // 3. 计算超时部分时长 + Duration excess = Duration.between(cutoff, timePart); + + // 4. 重置到次日8:00并加上超时时长 + LocalDateTime nextDay = overTime.toLocalDate().plusDays(1).atStartOfDay(); + LocalDateTime adjustedTime = LocalDateTime.of(LocalDate.from(nextDay), LocalTime.of(8, 0)).plus(excess); + + return Date.from(adjustedTime.atZone(java.time.ZoneId.systemDefault()).toInstant()); + } + return Date.from(overTime.atZone(java.time.ZoneId.systemDefault()).toInstant()); + } }