问题原因: settleToBalance 方法先执行 wallet.save() 更新账户余额,再执行 ledgerRepo.save() 写入流水记录。两个操作不在同一个事务中。 当流水写入失败时(如 memo 字段超过 VarChar(500) 限制),账户余额 已经被修改,但流水记录未写入,导致数据不一致。 具体案例: 用户 D25122700023 点击结算时,memo 内容超长(66笔奖励详情), wallet-service 先把 settleable_usdt 转入 usdt_available,然后 写流水失败。账户余额被改但没有对应流水。 修复内容: 1. settleToBalance: 使用 prisma.$transaction 确保原子性 - 账户余额更新和流水记录在同一事务中 - 任一操作失败整个事务回滚 2. schema: memo 字段从 VarChar(500) 改为 Text 类型,无长度限制 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| migrations | ||
| schema.prisma | ||