提交修改

This commit is contained in:
quyixiao 2026-02-11 13:43:14 +08:00
parent 101cd372da
commit 640ef6ab5e
2 changed files with 68 additions and 11 deletions

3
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,3 @@
{
"java.compile.nullAnalysis.mode": "automatic"
}

View File

@ -15,6 +15,10 @@ import java.util.Date;
import java.util.List; import java.util.List;
/**
* 微信支付订单关闭处理器
* 用于处理超时未支付的订单,将订单状态更新为关闭状态
*/
@Slf4j @Slf4j
@Component("weiXinPayCloseHandler") @Component("weiXinPayCloseHandler")
public class WeiXinPayCloseHandler extends BaseDelayedHandler { public class WeiXinPayCloseHandler extends BaseDelayedHandler {
@ -23,22 +27,72 @@ public class WeiXinPayCloseHandler extends BaseDelayedHandler {
private VvTradeOrderLineDao vvTradeOrderLineDao; private VvTradeOrderLineDao vvTradeOrderLineDao;
/**
* 处理微信支付延迟关闭消息
*
* @param message 延迟消息内容,包含交易订单ID等信息
* @return 处理结果
*/
@Override @Override
public R handler(String message) { public R handler(String message) {
log.info("weiXinPayCloseHandler receive message:{}", message); log.info("[微信支付订单关闭] 接收到延迟关单消息, message={}", message);
try {
// 解析延迟消息
WeiXinPayDelayDTO weiXinPayDelayDTO = JSONObject.parseObject(message, WeiXinPayDelayDTO.class); WeiXinPayDelayDTO weiXinPayDelayDTO = JSONObject.parseObject(message, WeiXinPayDelayDTO.class);
Long tradeOrderId = weiXinPayDelayDTO.getTradeOrderId();
List<VvTradeOrderLineEntity> vvTradeOrderLineEntities = vvTradeOrderLineDao.selectVvTradeOrderLineByTradeOrderId(weiXinPayDelayDTO.getTradeOrderId()); log.info("[微信支付订单关闭] 开始处理订单关闭逻辑, tradeOrderId={}", tradeOrderId);
for (VvTradeOrderLineEntity vvTradeOrderLineEntity : vvTradeOrderLineEntities) { // 根据交易订单ID查询所有订单明细
if(OrderStatusEnums.wait_pay.getStatus().equals(vvTradeOrderLineEntity.getStatus())){ List<VvTradeOrderLineEntity> vvTradeOrderLineEntities = vvTradeOrderLineDao.selectVvTradeOrderLineByTradeOrderId(tradeOrderId);
vvTradeOrderLineEntity.setStatus(OrderStatusEnums.close.getStatus());
vvTradeOrderLineEntity.setGmtClose(new Date()); if (vvTradeOrderLineEntities == null || vvTradeOrderLineEntities.isEmpty()) {
vvTradeOrderLineDao.updateVvTradeOrderLineById(vvTradeOrderLineEntity); log.warn("[微信支付订单关闭] 未查询到订单明细数据, tradeOrderId={}", tradeOrderId);
}else{
log.info("weiXinPayCloseHandler not to close tradeOrderLineId:{} status:{}", vvTradeOrderLineEntity.getId(),vvTradeOrderLineEntity.getStatus());
}
}
return R.ok(); 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());
}
}
}