## 问题描述 用户 D25122700015 的卖单成交后,订单状态变为 FILLED,成交记录存在, 但 frozenShares 未释放,cashBalance 未增加,交易流水缺少 SELL 记录。 ## 根本原因 `tryMatch` 方法中的数据库操作没有使用事务: 1. trade.create - 单独提交 2. orderRepository.save - 单独提交 3. accountRepository.save(buyerAccount) - 单独提交 4. accountRepository.save(sellerAccount) - 可能因前面异常而跳过 如果步骤 1-3 成功但步骤 4 失败,会导致: - 成交记录存在 ✓ - 订单状态 FILLED ✓ - 买方账户正常 ✓ - 卖方账户未更新 ✗ ## 修复方案 使用 Prisma 事务包装所有关键操作,确保原子性: 1. 创建成交记录 2. 更新买单状态 3. 更新卖单状态(含销毁信息) 4. 更新买方账户(扣除冻结现金,增加积分股) 5. 更新卖方账户(扣除冻结积分股,增加现金) 6. 记录交易流水 任何一步失败,整个事务回滚。 ## 受影响用户 - D25122700015: 订单 OMKXYTXS6KKC3A6 - 成交记录: TMKXYTXXH8CYQZ7 - 需要手动修复现有数据 ## 回滚方法 git revert <此commit> Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| .claude | ||
| api-gateway | ||
| infrastructure | ||
| mpc-system | ||
| scripts | ||
| services | ||
| .env.windows | ||
| docker-compose.windows.yml | ||