From 640ef6ab5ebc43ea4607e67b489d062fd23378b7 Mon Sep 17 00:00:00 2001 From: quyixiao <2621048238@qq.com> Date: Wed, 11 Feb 2026 13:43:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 3 + .../delay/handler/WeiXinPayCloseHandler.java | 76 ++++++++++++++++--- 2 files changed, 68 insertions(+), 11 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..7b016a8 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "java.compile.nullAnalysis.mode": "automatic" +} \ No newline at end of file diff --git a/api-web/api-interface/src/main/java/com/heyu/api/listener/delay/handler/WeiXinPayCloseHandler.java b/api-web/api-interface/src/main/java/com/heyu/api/listener/delay/handler/WeiXinPayCloseHandler.java index c79ee65..c36aba7 100644 --- a/api-web/api-interface/src/main/java/com/heyu/api/listener/delay/handler/WeiXinPayCloseHandler.java +++ b/api-web/api-interface/src/main/java/com/heyu/api/listener/delay/handler/WeiXinPayCloseHandler.java @@ -15,6 +15,10 @@ import java.util.Date; import java.util.List; +/** + * 微信支付订单关闭处理器 + * 用于处理超时未支付的订单,将订单状态更新为关闭状态 + */ @Slf4j @Component("weiXinPayCloseHandler") public class WeiXinPayCloseHandler extends BaseDelayedHandler { @@ -23,22 +27,72 @@ public class WeiXinPayCloseHandler extends BaseDelayedHandler { private VvTradeOrderLineDao vvTradeOrderLineDao; + /** + * 处理微信支付延迟关闭消息 + * + * @param message 延迟消息内容,包含交易订单ID等信息 + * @return 处理结果 + */ @Override public R handler(String message) { - log.info("weiXinPayCloseHandler receive message:{}", message); - WeiXinPayDelayDTO weiXinPayDelayDTO = JSONObject.parseObject(message, WeiXinPayDelayDTO.class); + log.info("[微信支付订单关闭] 接收到延迟关单消息, message={}", message); - List vvTradeOrderLineEntities = vvTradeOrderLineDao.selectVvTradeOrderLineByTradeOrderId(weiXinPayDelayDTO.getTradeOrderId()); + try { + // 解析延迟消息 + WeiXinPayDelayDTO weiXinPayDelayDTO = JSONObject.parseObject(message, WeiXinPayDelayDTO.class); + Long tradeOrderId = weiXinPayDelayDTO.getTradeOrderId(); - for (VvTradeOrderLineEntity vvTradeOrderLineEntity : vvTradeOrderLineEntities) { - if(OrderStatusEnums.wait_pay.getStatus().equals(vvTradeOrderLineEntity.getStatus())){ - vvTradeOrderLineEntity.setStatus(OrderStatusEnums.close.getStatus()); - vvTradeOrderLineEntity.setGmtClose(new Date()); - vvTradeOrderLineDao.updateVvTradeOrderLineById(vvTradeOrderLineEntity); - }else{ - log.info("weiXinPayCloseHandler not to close tradeOrderLineId:{} status:{}", vvTradeOrderLineEntity.getId(),vvTradeOrderLineEntity.getStatus()); + log.info("[微信支付订单关闭] 开始处理订单关闭逻辑, tradeOrderId={}", tradeOrderId); + + // 根据交易订单ID查询所有订单明细 + List vvTradeOrderLineEntities = vvTradeOrderLineDao.selectVvTradeOrderLineByTradeOrderId(tradeOrderId); + + if (vvTradeOrderLineEntities == null || vvTradeOrderLineEntities.isEmpty()) { + log.warn("[微信支付订单关闭] 未查询到订单明细数据, tradeOrderId={}", tradeOrderId); + return R.ok(); } + + log.info("[微信支付订单关闭] 查询到订单明细数量={}, tradeOrderId={}", vvTradeOrderLineEntities.size(), tradeOrderId); + + int closedCount = 0; + int skippedCount = 0; + + // 遍历订单明细,关闭待支付状态的订单 + for (VvTradeOrderLineEntity vvTradeOrderLineEntity : vvTradeOrderLineEntities) { + Long orderLineId = vvTradeOrderLineEntity.getId(); + String currentStatus = vvTradeOrderLineEntity.getStatus(); + + // 只处理待支付状态的订单 + if(OrderStatusEnums.wait_pay.getStatus().equals(currentStatus)){ + log.info("[微信支付订单关闭] 关闭待支付订单, tradeOrderId={}, orderLineId={}, status={} -> {}", + tradeOrderId, orderLineId, currentStatus, OrderStatusEnums.close.getStatus()); + + // 更新订单状态为关闭 + vvTradeOrderLineEntity.setStatus(OrderStatusEnums.close.getStatus()); + // 设置关闭时间 + vvTradeOrderLineEntity.setGmtClose(new Date()); + // 更新数据库 + vvTradeOrderLineDao.updateVvTradeOrderLineById(vvTradeOrderLineEntity); + + closedCount++; + log.info("[微信支付订单关闭] 订单关闭成功, tradeOrderId={}, orderLineId={}", tradeOrderId, orderLineId); + } else { + // 非待支付状态的订单不处理,仅记录日志 + log.info("[微信支付订单关闭] 订单状态非待支付,跳过处理, tradeOrderId={}, orderLineId={}, currentStatus={}", + tradeOrderId, orderLineId, currentStatus); + skippedCount++; + } + } + + log.info("[微信支付订单关闭] 处理完成, tradeOrderId={}, 关闭订单数={}, 跳过订单数={}", + tradeOrderId, closedCount, skippedCount); + + return R.ok(); + + } catch (Exception e) { + log.error("[微信支付订单关闭] 处理异常, message={}", message, e); + return R.error("订单关闭处理失败: " + e.getMessage()); } - return R.ok(); } } +