This commit is contained in:
2025-09-06 11:58:18 +08:00
commit 8d34972119
1483 changed files with 141190 additions and 0 deletions

View File

@@ -0,0 +1,175 @@
# 支付回调代码修复说明
## 🔍 问题描述
在支付回调处理代码中发现了一行红色的错误代码:
```java
shopOrderGoodsService.addSaleCount(order.getOrderGoods());
```
## ❌ 问题原因
1. **方法不存在**`ShopOrderGoodsService`中没有`addSaleCount`方法
2. **参数类型错误**`order.getOrderGoods()`返回的可能是订单商品列表,不是单个商品
3. **重复处理**:销量累加逻辑已经在`ShopOrderServiceImpl.updateByOutTradeNo`中处理了
## ✅ 修复方案
### 删除多余代码
**修复前**
```java
shopOrderService.updateByOutTradeNo(order);
// 6. TODO 累加商品销售数量
shopOrderGoodsService.addSaleCount(order.getOrderGoods());
return "SUCCESS";
```
**修复后**
```java
// 更新订单状态并处理支付成功后的业务逻辑(包括累加商品销量)
shopOrderService.updateByOutTradeNo(order);
return "SUCCESS";
```
## 🔄 正确的销量累加流程
销量累加已经在`ShopOrderServiceImpl`中正确实现:
```
支付回调成功
shopOrderService.updateByOutTradeNo(order)
handlePaymentSuccess(order)
updateGoodsSales(order)
获取订单商品列表shopOrderGoodsService.list(orderId)
遍历每个商品updateSingleGoodsSales(orderGoods)
累加销量shopGoodsService.addSaleCount(goodsId, saleCount)
数据库更新:@InterceptorIgnore 忽略租户隔离
```
## 📋 核心实现代码
### 1. ShopOrderServiceImpl.updateByOutTradeNo
```java
@Override
public void updateByOutTradeNo(ShopOrder order) {
baseMapper.updateByOutTradeNo(order);
// 处理支付成功后的业务逻辑
handlePaymentSuccess(order);
if (order.getTenantId().equals(10550)) {
shopOrderUpdate10550Service.update(order);
}
}
```
### 2. handlePaymentSuccess
```java
private void handlePaymentSuccess(ShopOrder order) {
try {
// 1. 使用优惠券
if (order.getCouponId() != null && order.getCouponId() > 0) {
markCouponAsUsed(order);
}
// 2. 累计商品销量
updateGoodsSales(order);
log.info("支付成功后业务逻辑处理完成 - 订单号:{}", order.getOrderNo());
} catch (Exception e) {
log.error("处理支付成功后业务逻辑失败 - 订单号:{}", order.getOrderNo(), e);
}
}
```
### 3. updateGoodsSales
```java
private void updateGoodsSales(ShopOrder order) {
try {
// 获取订单商品列表
List<ShopOrderGoods> orderGoodsList = shopOrderGoodsService.list(
new LambdaQueryWrapper<ShopOrderGoods>()
.eq(ShopOrderGoods::getOrderId, order.getOrderId())
);
if (orderGoodsList == null || orderGoodsList.isEmpty()) {
log.warn("订单商品列表为空,无法累计销量 - 订单号:{}", order.getOrderNo());
return;
}
// 累计每个商品的销量
for (ShopOrderGoods orderGoods : orderGoodsList) {
updateSingleGoodsSales(orderGoods);
}
log.info("商品销量累计完成 - 订单号:{},商品数量:{}", order.getOrderNo(), orderGoodsList.size());
} catch (Exception e) {
log.error("累计商品销量失败 - 订单号:{}", order.getOrderNo(), e);
}
}
```
### 4. updateSingleGoodsSales
```java
private void updateSingleGoodsSales(ShopOrderGoods orderGoods) {
try {
if (orderGoods.getGoodsId() == null || orderGoods.getTotalNum() == null || orderGoods.getTotalNum() <= 0) {
log.warn("商品销量累计参数无效 - 商品ID{},购买数量:{}",
orderGoods.getGoodsId(), orderGoods.getTotalNum());
return;
}
// 使用新的addSaleCount方法忽略租户隔离
boolean updated = shopGoodsService.addSaleCount(orderGoods.getGoodsId(), orderGoods.getTotalNum());
if (updated) {
log.info("商品销量累计成功 - 商品ID{},商品名称:{},购买数量:{}",
orderGoods.getGoodsId(), orderGoods.getGoodsName(), orderGoods.getTotalNum());
} else {
log.warn("商品销量累计失败 - 商品ID{},商品名称:{},购买数量:{}",
orderGoods.getGoodsId(), orderGoods.getGoodsName(), orderGoods.getTotalNum());
}
} catch (Exception e) {
log.error("累计单个商品销量异常 - 商品ID{},商品名称:{},购买数量:{}",
orderGoods.getGoodsId(), orderGoods.getGoodsName(), orderGoods.getTotalNum(), e);
}
}
```
## ✅ 修复验证
### 1. 编译检查
- ✅ 删除了错误的代码行
- ✅ 不再有红色错误提示
- ✅ 代码可以正常编译
### 2. 功能验证
- ✅ 支付回调正常处理
- ✅ 订单状态正确更新
- ✅ 商品销量正确累加
- ✅ 忽略租户隔离,确保更新成功
### 3. 日志验证
支付成功后会看到以下日志:
```
支付成功后业务逻辑处理完成 - 订单号xxx
商品销量累计完成 - 订单号xxx商品数量2
商品销量累计成功 - 商品ID123商品名称测试商品购买数量1
商品销量累加成功 - 商品ID: 123, 累加数量: 1, 影响行数: 1
```
## 🎯 总结
-**删除了错误代码**`shopOrderGoodsService.addSaleCount(order.getOrderGoods())`
-**保留了正确实现**:通过`shopOrderService.updateByOutTradeNo(order)`自动处理
-**功能完整**:销量累加逻辑已经完整实现并集成到支付流程中
-**租户隔离**:使用`@InterceptorIgnore`确保跨租户更新成功
现在支付回调代码没有错误,销量累加功能正常工作!