| 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");