From 6dffe82f354d6a4d893bea8d53ef3fefee3a5cde Mon Sep 17 00:00:00 2001 From: wangfukang <15630117759@163.com> Date: Sun, 20 Sep 2026 18:10:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E6=8E=A5=E6=8B=BC=E5=9B=A2=E6=95=B0?= =?UTF-8?q?=E6=8D=AE1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hiver-admin/test-output/test-report.html | 16 ++++---- .../cc/hiver/mall/mq/OrderAsyncProducer.java | 37 ++++++++++--------- .../mybatis/MallDeliveryOrderServiceImpl.java | 2 +- .../mybatis/MallOrderServiceImpl.java | 36 ++++++++++-------- .../mybatis/MallRefundRecordServiceImpl.java | 7 ++++ .../mall/utils/DaQuReceiptRenderUtil.java | 24 +++++++++--- 6 files changed, 76 insertions(+), 46 deletions(-) diff --git a/hiver-admin/test-output/test-report.html b/hiver-admin/test-output/test-report.html index 174185cb..cd4018e9 100644 --- a/hiver-admin/test-output/test-report.html +++ b/hiver-admin/test-output/test-report.html @@ -35,7 +35,7 @@ Hiver
  • -九月 19, 2026 15:49:28 +九月 20, 2026 17:27:21
  • @@ -84,7 +84,7 @@

    passTest

    -

    15:49:29 下午 / 0.022 secs

    +

    17:27:22 下午 / 0.025 secs

    @@ -92,9 +92,9 @@
    #test-id=1
    passTest
    -09.19.2026 15:49:29 -09.19.2026 15:49:29 -0.022 secs +09.20.2026 17:27:22 +09.20.2026 17:27:22 +0.025 secs
    @@ -104,7 +104,7 @@ Pass - 15:49:29 + 17:27:22 Test passed @@ -128,13 +128,13 @@

    Started

    -

    九月 19, 2026 15:49:28

    +

    九月 20, 2026 17:27:21

    Ended

    -

    九月 19, 2026 15:49:29

    +

    九月 20, 2026 17:27:22

    diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/mq/OrderAsyncProducer.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/mq/OrderAsyncProducer.java index b6fce075..84925e53 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/mq/OrderAsyncProducer.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/mq/OrderAsyncProducer.java @@ -18,6 +18,7 @@ import java.util.Set; @Slf4j @Component public class OrderAsyncProducer { + private static final long CLOUD_PRINT_INITIAL_DELAY_MILLIS = 5 * 1000L; @Autowired private RabbitTemplate rabbitTemplate; @@ -54,34 +55,36 @@ public class OrderAsyncProducer { } public void sendCloudPrint(String orderId, String printReason) { - sendCloudPrint(orderId, printReason, 0); + sendCloudPrintDelay(orderId, printReason, 0, CLOUD_PRINT_INITIAL_DELAY_MILLIS, "浜戞墦鍗板垵濮嬪欢杩熶换鍔"); } public void sendCloudPrint(String orderId, String printReason, int retryCount) { + sendCloudPrintDelay(orderId, printReason, retryCount, 0, "浜戞墦鍗颁换鍔"); + } + + private void sendCloudPrintDelay(String orderId, String printReason, int retryCount, long delayMillis, String logPrefix) { Map msg = new HashMap<>(); msg.put("orderId", orderId); msg.put("printReason", printReason); msg.put("retryCount", retryCount); msg.put("timestamp", System.currentTimeMillis()); - rabbitTemplate.convertAndSend(OrderQueueConfig.ORDER_DIRECT_EXCHANGE, OrderQueueConfig.ASYNC_PRINT_ROUTING, JSON.toJSONString(msg)); - log.info("銆愪簯鎵撳嵃MQ銆戝凡鍙戝嚭浜戞墦鍗颁换鍔, orderId={}, reason={}, retryCount={}", orderId, printReason, retryCount); + if (delayMillis > 0) { + rabbitTemplate.convertAndSend(OrderQueueConfig.ORDER_DIRECT_EXCHANGE, + OrderQueueConfig.ASYNC_PRINT_RETRY_DELAY_ROUTING, + JSON.toJSONString(msg), + message -> { + message.getMessageProperties().setExpiration(String.valueOf(delayMillis)); + return message; + }); + } else { + rabbitTemplate.convertAndSend(OrderQueueConfig.ORDER_DIRECT_EXCHANGE, OrderQueueConfig.ASYNC_PRINT_ROUTING, JSON.toJSONString(msg)); + } + log.info("銆愪簯鎵撳嵃MQ銆戝凡鍙戝嚭{}, orderId={}, reason={}, retryCount={}, delayMillis={}", + logPrefix, orderId, printReason, retryCount, delayMillis); } public void sendCloudPrintDelayRetry(String orderId, String printReason, int retryCount, long delayMillis) { - Map msg = new HashMap<>(); - msg.put("orderId", orderId); - msg.put("printReason", printReason); - msg.put("retryCount", retryCount); - msg.put("timestamp", System.currentTimeMillis()); - rabbitTemplate.convertAndSend(OrderQueueConfig.ORDER_DIRECT_EXCHANGE, - OrderQueueConfig.ASYNC_PRINT_RETRY_DELAY_ROUTING, - JSON.toJSONString(msg), - message -> { - message.getMessageProperties().setExpiration(String.valueOf(delayMillis)); - return message; - }); - log.info("銆愪簯鎵撳嵃MQ銆戝凡鍙戝嚭浜戞墦鍗板欢杩熼噸璇曚换鍔, orderId={}, reason={}, retryCount={}, delayMillis={}", - orderId, printReason, retryCount, delayMillis); + sendCloudPrintDelay(orderId, printReason, retryCount, delayMillis, "浜戞墦鍗板欢杩熼噸璇曚换鍔"); } /** diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallDeliveryOrderServiceImpl.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallDeliveryOrderServiceImpl.java index da617d9c..3c979bea 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallDeliveryOrderServiceImpl.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallDeliveryOrderServiceImpl.java @@ -557,7 +557,7 @@ public class MallDeliveryOrderServiceImpl extends ServiceImpl { // 閰嶉佷俊鎭 - if(order.getOrderType() == ORDER_TYPE_FACETOFACE){ - order.setDeliveryInfo(mallDeliveryOrderMapper.selectByGroupId(order.getId())); - }else{ - LambdaQueryWrapper dq = new LambdaQueryWrapper<>(); - dq.eq(MallDeliveryOrder::getOrderId, order.getId()).last("LIMIT 1"); - order.setDeliveryInfo(mallDeliveryOrderMapper.selectOne(dq)); - } + order.setDeliveryInfo(findDetailDelivery(order)); }); } return orders; @@ -1930,13 +1924,7 @@ public class MallOrderServiceImpl extends ServiceImpl dq = new LambdaQueryWrapper<>(); - dq.eq(MallDeliveryOrder::getOrderId, orderId).last("LIMIT 1"); - vo.setDeliveryInfo(mallDeliveryOrderMapper.selectOne(dq)); - } + vo.setDeliveryInfo(findDetailDelivery(order)); // 鎷煎洟淇℃伅锛堟嫾鍥㈣鍗曟墠鏌ワ級 if (ORDER_TYPE_GROUP == order.getOrderType() || GROUP_STATUS_FACE2FACE == order.getOrderType()) { // 閫氳繃 headOrderId 鎴 groupUserIds 涓寘鍚 userId 鏌ユ壘鎷煎洟 @@ -1998,6 +1986,24 @@ public class MallOrderServiceImpl extends ServiceImpl dq = new LambdaQueryWrapper<>(); + dq.eq(MallDeliveryOrder::getOrderId, order.getId()).last("LIMIT 1"); + delivery = mallDeliveryOrderMapper.selectOne(dq); + } + if (delivery == null && Integer.valueOf(DELIVERY_TYPE_EXPRESS).equals(order.getDeliveryType())) { + delivery = mallDeliveryOrderMapper.selectByGroupId(order.getId()); + } + return delivery; + } + // ================================================================ // 绉佹湁宸ュ叿鏂规硶 // ================================================================ @@ -2328,7 +2334,7 @@ public class MallOrderServiceImpl extends ServiceImpl duw = new LambdaUpdateWrapper<>(); duw.eq(MallDeliveryOrder::getOrderId, delivery.getOrderId()) .set(MallDeliveryOrder::getStatus, deliveryTargetStatus); + if (deliveryFinishTime != null) { + duw.set(MallDeliveryOrder::getFinishTime, deliveryFinishTime); + } mallDeliveryOrderMapper.update(null, duw); //鏇存柊缂撳瓨 workerOrderCacheUtil.remove(delivery.getWorkerId(),delivery.getId()); @@ -949,6 +953,9 @@ public class MallRefundRecordServiceImpl extends ServiceImpl duw = new LambdaUpdateWrapper<>(); duw.eq(MallDeliveryOrder::getOrderId, mallRefundRecord.getOrderId()) .set(MallDeliveryOrder::getStatus, deliveryTargetStatus); + if (deliveryFinishTime != null) { + duw.set(MallDeliveryOrder::getFinishTime, deliveryFinishTime); + } mallDeliveryOrderMapper.update(null, duw); //鏇存柊缂撳瓨 LambdaQueryWrapper qw = new LambdaQueryWrapper<>(); diff --git a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/utils/DaQuReceiptRenderUtil.java b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/utils/DaQuReceiptRenderUtil.java index a7636fcd..40957ad7 100644 --- a/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/utils/DaQuReceiptRenderUtil.java +++ b/hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/utils/DaQuReceiptRenderUtil.java @@ -27,7 +27,10 @@ public final class DaQuReceiptRenderUtil { centerLarge(sb, orderNo(order)); centerLarge(sb, orderTypeText(order, delivery, refundPrint, forcedOrderPrint)); if (delivery != null && Integer.valueOf(1).equals(delivery.getAppointmentDelivery())) { - left(sb, "瑕佹眰閫佽揪鏃堕棿:" + formatTime(delivery.getMustFinishTime())); + largeLeft(sb, "瑕佹眰閫佽揪鏃堕棿:" + formatTime(delivery.getMustFinishTime())); + } + if (isFaceToFaceDelivery(order)) { + largeLeft(sb, "鏈崟缂栧彿:" + defaultString(order.getNumberCode())); } left(sb, defaultString(order.getShopName())); left(sb, "涓嬪崟鏃堕棿:" + formatTime(order.getCreateTime())); @@ -78,7 +81,7 @@ public final class DaQuReceiptRenderUtil { left(sb, "閿﹂菠鍏嶅崟锛-" + amount(order.getFreeAmount())); } left(sb, "鍚堣閲戦锛" + amount(safe(order.getGoodsAmount()).add(safe(order.getDeliveryFee())).add(safe(order.getPackageFee())))); - left(sb, (hasRefund ? "搴旈閲戦锛" : "瀹炰粯閲戦锛") + amount(order.getTotalAmount())); + left(sb, amountLabel(order, hasRefund) + amount(order.getTotalAmount())); largeLeft(sb, "澶囨敞锛" + defaultString(order.getRemark())); br(sb); @@ -132,8 +135,7 @@ public final class DaQuReceiptRenderUtil { private static String orderNo(MallOrderVO order) { MallDeliveryOrder delivery = order.getDeliveryInfo(); - if (Integer.valueOf(1).equals(order.getDeliveryType()) - && Integer.valueOf(3).equals(order.getOrderType()) + if (isFaceToFaceDelivery(order) && delivery != null && StringUtils.isNotBlank(delivery.getNumberCode())) { return delivery.getNumberCode(); @@ -144,7 +146,7 @@ public final class DaQuReceiptRenderUtil { private static String orderTypeText(MallOrderVO order, MallDeliveryOrder delivery, boolean refundPrint, boolean forcedOrderPrint) { Integer status = order.getStatus(); if (delivery != null && Integer.valueOf(1).equals(delivery.getAppointmentDelivery()) - && Integer.valueOf(11).equals(status)) { + && !refundPrint) { return "棰勭害鍗"; } if (delivery != null && Integer.valueOf(1).equals(delivery.getTransferDelivery()) @@ -194,6 +196,18 @@ public final class DaQuReceiptRenderUtil { return StringUtils.containsIgnoreCase(printReason, "REFUND"); } + private static boolean isFaceToFaceDelivery(MallOrderVO order) { + return Integer.valueOf(1).equals(order.getDeliveryType()) + && Integer.valueOf(3).equals(order.getOrderType()); + } + + private static String amountLabel(MallOrderVO order, boolean hasRefund) { + if (hasRefund && !Integer.valueOf(2).equals(order.getDeliveryType())) { + return "瀹炰粯閲戦锛"; + } + return "瀹炰粯閲戦锛"; + } + private static boolean isOrderEventPrint(String printReason) { return StringUtils.containsIgnoreCase(printReason, "ACCEPT_ORDER") || StringUtils.containsIgnoreCase(printReason, "SHOP_INSTANT_MAKE");