From 190d2a2beda4300670397a739d80412ee3b3ae61 Mon Sep 17 00:00:00 2001 From: cb <275647614@qq.com> Date: Thu, 4 Sep 2025 16:25:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=A1=AE=E8=AE=A4=E4=B8=AD?= =?UTF-8?q?=E5=80=92=E8=AE=A1=E6=97=B6=E7=9A=84=E6=9A=82=E5=81=9C=E4=BB=A5?= =?UTF-8?q?=E5=8F=8A=E5=BC=80=E5=A7=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/OrderMasterController.java | 2 +- .../com/ghy/order/domain/OrderDetail.java | 5 ++ .../order/quartz/AfterServiceTimeoutTask.java | 3 + .../service/IAfterServiceRecordService.java | 6 ++ .../impl/AfterServiceRecordServiceImpl.java | 82 ++++++++++++++++++- .../mapper/order/OrderDetailMapper.xml | 1 + .../quartz/service/impl/OrderServiceImpl.java | 8 +- 7 files changed, 103 insertions(+), 4 deletions(-) diff --git a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderMasterController.java b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderMasterController.java index 1940348c..3264ff40 100644 --- a/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderMasterController.java +++ b/ghy-admin/src/main/java/com/ghy/web/controller/order/OrderMasterController.java @@ -1099,7 +1099,7 @@ public class OrderMasterController extends BaseController { BigDecimal totalChangeMoney = new BigDecimal(0); BigDecimal paymentMoney = BigDecimal.ZERO; if (financialMaster.getPayStatus() == 1) { - paymentMoney = paymentMoney.add(financialMaster.getTotalMoney()); + paymentMoney = paymentMoney.add(financialMaster.getPayMoney()); } List financialChangeRecords = financialChangeRecordService.selectByMasterId(master.getId()); BigDecimal changePaymentMoney = financialChangeRecords.stream() diff --git a/ghy-order/src/main/java/com/ghy/order/domain/OrderDetail.java b/ghy-order/src/main/java/com/ghy/order/domain/OrderDetail.java index d8b0d078..b960d168 100644 --- a/ghy-order/src/main/java/com/ghy/order/domain/OrderDetail.java +++ b/ghy-order/src/main/java/com/ghy/order/domain/OrderDetail.java @@ -82,6 +82,11 @@ public class OrderDetail extends BaseEntity { @Excel(name = "进入确认中时间", cellType = Excel.ColumnType.STRING) private Date confirmStartTime; + /** + * 确认中倒计时剩余时间(毫秒)- 售后暂停时记录 + */ + private Long confirmTimeoutRemainingTime; + // 商品归属师傅 private Worker goodsWorker; // 接单师傅 diff --git a/ghy-order/src/main/java/com/ghy/order/quartz/AfterServiceTimeoutTask.java b/ghy-order/src/main/java/com/ghy/order/quartz/AfterServiceTimeoutTask.java index 7deb62f9..c74de9d0 100644 --- a/ghy-order/src/main/java/com/ghy/order/quartz/AfterServiceTimeoutTask.java +++ b/ghy-order/src/main/java/com/ghy/order/quartz/AfterServiceTimeoutTask.java @@ -125,6 +125,9 @@ public class AfterServiceTimeoutTask { // 更新记录 afterServiceRecordService.updateAfterServiceRecord(record); + // 恢复确认中倒计时 + afterServiceRecordService.resumeConfirmTimeout(record.getOrderDetailId()); + log.info("客户确认超时自动处理完成,售后记录ID:{}", record.getId()); } catch (Exception e) { log.error("处理客户确认超时异常,售后记录ID:{}", record.getId(), e); diff --git a/ghy-order/src/main/java/com/ghy/order/service/IAfterServiceRecordService.java b/ghy-order/src/main/java/com/ghy/order/service/IAfterServiceRecordService.java index f8a76ecf..dd58e507 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/IAfterServiceRecordService.java +++ b/ghy-order/src/main/java/com/ghy/order/service/IAfterServiceRecordService.java @@ -87,6 +87,12 @@ public interface IAfterServiceRecordService { */ void executeRefundLogic(AfterServiceRecord afterServiceRecord); + /** + * 恢复确认中倒计时 + * @param orderDetailId 子单ID + */ + void resumeConfirmTimeout(Long orderDetailId); + /** * 师傅重发/补发操作 * 师傅端点击重发补发按钮,保存重发/补发方案 diff --git a/ghy-order/src/main/java/com/ghy/order/service/impl/AfterServiceRecordServiceImpl.java b/ghy-order/src/main/java/com/ghy/order/service/impl/AfterServiceRecordServiceImpl.java index c61e69ef..2c58b4c8 100644 --- a/ghy-order/src/main/java/com/ghy/order/service/impl/AfterServiceRecordServiceImpl.java +++ b/ghy-order/src/main/java/com/ghy/order/service/impl/AfterServiceRecordServiceImpl.java @@ -121,6 +121,9 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService throw new BaseException("存在未完成的售后记录,请勿重复申请!"); } int result = afterServiceRecordMapper.insertAfterServiceRecord(afterServiceRecord); + + // 暂停确认中倒计时 + pauseConfirmTimeout(afterServiceRecord.getOrderDetailId()); // 发一起一次售后发起通知 // 通知师傅新订单 try { @@ -241,6 +244,10 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService // } afterServiceRecordMapper.updateAfterServiceRecord(afterServiceRecord); + + // 恢复确认中倒计时 + resumeConfirmTimeout(afterServiceRecord.getOrderDetailId()); + return AjaxResult.success("订单完成结束"); } else { // 客户不同意重做结果,按之前的逻辑走(可能需要退款) @@ -393,7 +400,7 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService afterServiceRecord.setOriginalRefund(refundMoney); financialMaster.setPayMoney(financialMaster.getPayMoney().subtract(refundMoney)); financialMaster.setServerMoney(financialMaster.getServerMoney().subtract(refundMoney)); - financialMaster.setDiscountMoney(refundMoney); +// financialMaster.setDiscountMoney(financialMaster.getDiscountMoney().add(refundMoney)); financialMasterService.updateFinancialMaster(financialMaster); String reverseAmt = AdapayUtils.bigDecimalToString(refundMoney); // 发起支付撤销 @@ -684,4 +691,77 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService } } + /** + * 暂停确认中倒计时 + * @param orderDetailId 子单ID + */ + private void pauseConfirmTimeout(Long orderDetailId) { + try { + OrderDetail orderDetail = orderDetailService.selectById(orderDetailId); + if (orderDetail != null && orderDetail.getOrderStatus() == OrderStatus.FINISH_CHECK.code()) { + // 计算剩余倒计时时间 + long remainingTime = calculateConfirmTimeoutRemainingTime(orderDetail); + + // 记录剩余时间 + OrderDetail updateDetail = new OrderDetail(); + updateDetail.setId(orderDetailId); + updateDetail.setConfirmTimeoutRemainingTime(remainingTime); + orderDetailService.updateOrderDetail(updateDetail); + + log.info("暂停确认中倒计时,子单ID:{},剩余时间:{}毫秒", orderDetailId, remainingTime); + } + } catch (Exception e) { + log.error("暂停确认中倒计时失败,子单ID:{}", orderDetailId, e); + } + } + + /** + * 恢复确认中倒计时 + * @param orderDetailId 子单ID + */ + @Override + public void resumeConfirmTimeout(Long orderDetailId) { + try { + OrderDetail orderDetail = orderDetailService.selectById(orderDetailId); + if (orderDetail != null && orderDetail.getOrderStatus() == OrderStatus.FINISH_CHECK.code()) { + Long remainingTime = orderDetail.getConfirmTimeoutRemainingTime(); + if (remainingTime != null && remainingTime > 0) { + // 设置新的确认中开始时间 = 当前时间 - 剩余时间 + Date newConfirmStartTime = new Date(System.currentTimeMillis() + remainingTime); + + OrderDetail updateDetail = new OrderDetail(); + updateDetail.setId(orderDetailId); + updateDetail.setConfirmStartTime(newConfirmStartTime); + updateDetail.setConfirmTimeoutRemainingTime(null); // 清空剩余时间 + orderDetailService.updateOrderDetail(updateDetail); + + log.info("恢复确认中倒计时,子单ID:{},新确认开始时间:{},剩余时间:{}毫秒", + orderDetailId, newConfirmStartTime, remainingTime); + } + } + } catch (Exception e) { + log.error("恢复确认中倒计时失败,子单ID:{}", orderDetailId, e); + } + } + + /** + * 计算确认中倒计时的剩余时间 + * @param orderDetail 子单信息 + * @return 剩余时间(毫秒) + */ + private long calculateConfirmTimeoutRemainingTime(OrderDetail orderDetail) { + if (orderDetail.getConfirmStartTime() == null) { + return 0; + } + + long confirmStartTime = orderDetail.getConfirmStartTime().getTime(); + long currentTime = System.currentTimeMillis(); + // long timeoutDuration = 60 * 60 * 1000L; // 10分钟(测试环境),生产环境应该是60分钟 + + long elapsedTime = confirmStartTime-currentTime + // long remainingTime = timeoutDuration - elapsedTime; + + return Math.max(0, elapsedTime); // 确保不为负数 + } + } diff --git a/ghy-order/src/main/resources/mapper/order/OrderDetailMapper.xml b/ghy-order/src/main/resources/mapper/order/OrderDetailMapper.xml index e6d891a6..4a74f64a 100644 --- a/ghy-order/src/main/resources/mapper/order/OrderDetailMapper.xml +++ b/ghy-order/src/main/resources/mapper/order/OrderDetailMapper.xml @@ -34,6 +34,7 @@ + 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 3e7d6342..250aebb5 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 @@ -1412,11 +1412,15 @@ public class OrderServiceImpl implements OrderService { for (OrderDetail orderDetail : orderDetails) { try { OrderMaster orderMaster = orderMasterService.selectById(orderDetail.getOrderMasterId()); - + if (orderMaster == null) { continue; } - + AfterServiceRecord unfinished = afterServiceRecordService.unfinished(orderDetail.getId()); + if (unfinished != null) { + log.debug("子订单[id={}, code={}]存在售后记录,跳过自动完成", orderDetail.getId(), orderDetail.getCode()); + continue; + } Date targetTime; String logType = "已设置";