Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
69 changes: 69 additions & 0 deletions docs/fix_log_20260427.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# Siam-Cloud 修复日志

## 修复时间

2026-04-27

---

## 修复一:退款回调逻辑错误(P0)

### 问题描述

`WxPayController.refundSuccessNotify()` 存在两个 Bug:

1. **状态检查错误**:使用 `!= INT_1`(待支付)判断交易状态。退款回调发生时交易记录已被 `wxNotify` 更新为 `INT_2`(已支付),导致判断恒为 true,退款回调永远被跳过。
2. **业务逻辑错误**:try 块中调用了 `orderService.paymentNotify()`(支付成功通知、打印小票、语音提醒),而非退款处理逻辑。

深层问题:系统在 admin 审批退款时通过 `refundBase()` 同步执行全部退款流程,未等待微信退款 API 的异步回调确认。若微信端退款失败,本地已产生不可逆的资金操作。

### 修复内容

**文件**:`siam-order/order-provider/src/main/java/com/siam/package_order/controller/member/internal/WxPayController.java`

| 改动点 | 修复前 | 修复后 |
|--------|--------|--------|
| 状态检查 | `dbMemberTradeRecord.getStatus() != Quantity.INT_1` | `dbMemberTradeRecord.getStatus() != Quantity.INT_2` |
| 业务处理 | `orderService.paymentNotify(outTradeNo)` | `orderService.refundMerchantBalance(outTradeNo)` |
| 无用代码 | 再次将交易记录设为 INT_2(原已是 INT_2) | 已移除 |
| 状态异常响应 | 仅打印日志后静默 return,微信会持续重试 | 返回 SUCCESS XML,终止微信重试 |

---

## 修复二:Seata 分布式事务激活(P1)

### 问题描述

1. `Seata_OrderServiceImpl` 是一个空壳类,所有方法返回 null/0/false,`@GlobalTransactional` 被注释
2. `OrderServiceImpl.insert()`(实际使用的实现)无 `@GlobalTransactional`
3. Seata 依赖未在任何 pom.xml 中声明,8 个 provider 的 Seata 配置为孤立配置
4. 跨服务下单(订单创建 + 删购物车 + 核销优惠券 + 更新会员)无分布式事务保障

### 修复内容

| 改动 | 文件 |
|------|------|
| 新增 `spring-cloud-starter-alibaba-seata` 依赖 | `siam-common/pom.xml` |
| 添加 `@GlobalTransactional(timeoutMills = 300000, name = "order-create")` | `OrderServiceImpl.insert()` |
| 添加 import `io.seata.spring.annotation.GlobalTransactional` | `OrderServiceImpl.java` |
| 删除空壳类 | `Seata_OrderServiceImpl.java` |

**注意**:激活后需启动 Seata Server 才能正常下单。

---

## 附加发现(未修复)

| 问题 | 位置 | 说明 |
|------|------|------|
| RocketMQ 延时关单被注释 | `OrderServiceImpl.java:279` | 超时未支付订单不会自动关闭 |
| `RocketMQ_OrderServiceImpl` | `distributed_transaction/` | 同为待确认状态的实现类 |
| `LocalMsg_OrderServiceImpl` | `distributed_transaction/` | 同上 |

---

## 修复后待验证

- [ ] 编译通过(`mvn compile`)
- [ ] 退款流程端到端验证
- [ ] Seata Server 启动后下单链路验证
231 changes: 231 additions & 0 deletions docs/interview_final.md

Large diffs are not rendered by default.

Loading