Files
java-10584/.workbuddy/memory/2026-04-16.md
赵忠林 fa5260d583 fix(order): 修改配送员提成直接入账逻辑
- 配送员提成由先入冻结金额 freeze_money 改为直接加入可提现余额 money
- 更新两个 LambdaUpdateWrapper SQL 语句,修改相关字段及注释
- total_money 字段保持累计不变
- 修复 Transaction 类路径和字段结构导致的回调字段映射失败问题
- 优化回调通知配置缓存,避免重复初始化带来的网络请求失败风险
2026-04-16 01:17:23 +08:00

56 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 2026-04-16 工作记录
## 支付回调状态不更新问题诊断与修复
**问题接口**: `POST /api/shop/shop-order/notify/{tenantId}`
### 发现的 Bug
1. **根因 Bug**`ShopOrderServiceImpl.updateByOutTradeNo()` 第837行有 `order.setExpirationTime(null)`,强制覆盖了 Controller 中设置的 `expirationTime``LocalDateTime.now().plusYears(10)`),导致 XML 中 expirationTime 条件不生效。**已修复**:删除了该行。
2. **XML 缺少 `update_time`**`ShopOrderMapper.xml``updateByOutTradeNo` SQL 的 `<set>` 块中没有 `update_time = NOW()``expiration_time` 字段。**已修复**:新增了这两个字段更新。
3. **回调地址路由问题**Controller 路由为 `/notify/{tenantId}`,但测试访问的 `/notify`(无 tenantId不存在返回 fail。正确回调地址格式为 `https://glt-api.websoft.top/api/shop/shop-order/notify/{tenantId}`需带租户ID。**待检查**:数据库 Payment 表的 `notify_url` 字段是否正确配置了带 tenantId 的完整路径。
### 修复文件
- `src/main/java/com/gxwebsoft/shop/service/impl/ShopOrderServiceImpl.java`
- `src/main/java/com/gxwebsoft/shop/mapper/xml/ShopOrderMapper.xml`
---
## 支付回调签名验证失败Transaction 类错误00:29修复
**错误日志关键信息**
```
signature verification failed, signType[WECHATPAY2-SHA256-RSA2048]
serial[test] message[test\ntest\n{"test":"test"}] sign[test]
```
### 根本原因(最致命)
`ShopOrderController.java` 导入了 **服务商模式** 的 Transaction 类:
```java
// 错误(服务商模式)
import com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction;
```
`ShopOrderServiceImpl.java` 下单时用的是**直连商户模式**
```java
// 正确(直连商户模式)
import com.wechat.pay.java.service.payments.model.Transaction;
```
两个 Transaction 包路径不同,字段结构有差异(服务商 Transaction 有 spAppid/spMchid 等字段),用错误的类解析回调会导致字段映射失败,交易状态无法正确读取。**已修复**:改为正确的直连商户模式 Transaction。
---
## 配送员提成直接入账01:15修改
**文件**`src/main/java/com/gxwebsoft/glt/service/impl/GltTicketOrderServiceImpl.java`
**变更**配送员提成ticketOrderId 关联送水订单)从进入 `freeze_money` 改为直接进入 `money`(可提现余额)。修改了 2 处 `LambdaUpdateWrapper` SQL`freeze_money``money`),注释同步更新。`total_money` 不变(仍累计)。
---
### 次要原因
`RSAAutoCertificateConfig` 每次回调都重新 `build()`SDK 内部会发一次 `serial=test` 的探测验签,网络问题或并发场景下可能导致首次回调失败。**已优化**:添加 `notifyConfigCache`ConcurrentHashMap按 mchId 缓存 config避免重复初始化。