|
@@ -59,9 +59,13 @@ public class OrderSettlementServiceImpl implements OrderSettlementService {
|
|
|
public void settleOrder(WashOrder washOrder, OrderInfo orderInfo) {
|
|
public void settleOrder(WashOrder washOrder, OrderInfo orderInfo) {
|
|
|
log.info("执行订单结算,订单:{},结算信息:{}", orderInfo.getOrder_id(), orderInfo);
|
|
log.info("执行订单结算,订单:{},结算信息:{}", orderInfo.getOrder_id(), orderInfo);
|
|
|
|
|
|
|
|
- // 幂等保护:重新加载订单并检查是否已结算
|
|
|
|
|
- var freshOrder = washOrderService.lambdaQuery().eq(WashOrder::getId, washOrder.getId()).one();
|
|
|
|
|
- if (freshOrder != null && Integer.valueOf(WashOrder.PAY_STATUS_已支付).equals(freshOrder.getPayStatus())) {
|
|
|
|
|
|
|
+ // 幂等门闩:条件更新占位(未支付 → 已支付),并发结算时第二个事务更新 0 行直接跳过
|
|
|
|
|
+ boolean claimed = washOrderService.lambdaUpdate()
|
|
|
|
|
+ .eq(WashOrder::getId, washOrder.getId())
|
|
|
|
|
+ .eq(WashOrder::getPayStatus, WashOrder.PAY_STATUS_未支付)
|
|
|
|
|
+ .set(WashOrder::getPayStatus, WashOrder.PAY_STATUS_已支付)
|
|
|
|
|
+ .update();
|
|
|
|
|
+ if (!claimed) {
|
|
|
log.warn("订单:{},已结算,跳过重复结算", orderInfo.getOrder_id());
|
|
log.warn("订单:{},已结算,跳过重复结算", orderInfo.getOrder_id());
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|