|
|
@@ -289,7 +289,7 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
|
|
|
|
|
|
// 10. 处理余额支付逻辑
|
|
|
if (ObjectUtil.equals(PaymentMethodEnum.BALANCE.getCode(), dto.getPaymentMethod())) {
|
|
|
- handleBalancePayment(userId, finalAmount, order.getOrderNo());
|
|
|
+ handleBalancePayment(userId, finalAmount, order);
|
|
|
map.put("orderId", order.getId());
|
|
|
return map;
|
|
|
} else {
|
|
|
@@ -380,6 +380,12 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
|
|
|
.set(TOrder::getStatus, OrderStatusEnum.PENDING_DISPATCH.getCode())
|
|
|
.eq(TOrder::getId, order.getId())
|
|
|
.update();
|
|
|
+
|
|
|
+ // 插入订单流转记录
|
|
|
+ OrderUpdateStatusDTO dto = new OrderUpdateStatusDTO();
|
|
|
+ dto.setOrderId(order.getId());
|
|
|
+ dto.setStatus(OrderStatusEnum.PENDING_DISPATCH.getCode());
|
|
|
+ this.updateOrderStatus(dto);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -517,7 +523,7 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
|
|
|
/**
|
|
|
* 处理余额支付 (核心优化:数据库原子操作防并发)
|
|
|
*/
|
|
|
- private void handleBalancePayment(Long userId, BigDecimal finalAmount, String orderNo) {
|
|
|
+ private void handleBalancePayment(Long userId, BigDecimal finalAmount, TOrder order) {
|
|
|
// 1. 数据库层面原子扣减余额,并校验余额是否充足
|
|
|
boolean deductSuccess = this.wxUserService.lambdaUpdate()
|
|
|
.setSql("d_balance = d_balance - " + finalAmount)
|
|
|
@@ -537,10 +543,16 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
|
|
|
ShoppingFundsDetailAddDto detailDto = new ShoppingFundsDetailAddDto();
|
|
|
detailDto.setUserId(userId.toString());
|
|
|
detailDto.setAmount(finalAmount);
|
|
|
- detailDto.setOrderNo(orderNo);
|
|
|
+ detailDto.setOrderNo(order.getOrderNo());
|
|
|
detailDto.setExpenseType(ShoppingFundsExpenseTypeEnum.CONSUMPTION.getCode());
|
|
|
detailDto.setBalance(user.getdBalance());
|
|
|
this.shoppingFundsDetailService.addShoppingFundsDetail(detailDto);
|
|
|
+
|
|
|
+ // 4. 记录状态流转流水
|
|
|
+ OrderUpdateStatusDTO dto = new OrderUpdateStatusDTO();
|
|
|
+ dto.setOrderId(order.getId());
|
|
|
+ dto.setStatus(order.getStatus());
|
|
|
+ this.updateOrderStatus(dto);
|
|
|
}
|
|
|
|
|
|
/**
|