Files
hfb_sys/backend/migrations/000071_distribution_release_at_backfill_closed.sql
T
yml2213 36ebe7a5f1 fix(distribution): 结算幂等与退款口径加固,补关单释放与回归测试
- 结算明细加唯一键 (order_id, party_id):自动释放与手工批次并发时以唯一键冲突为准跳过该参与方,不再重复入账
- 自动释放先无锁筛出本站未入账参与方,收敛加锁范围;手工批次建批次后先锁周期内财务快照,与自动释放串行化
- 累计退款额改为「本次回调金额与已退款成功流水合计取较大值」,多笔退款与退款结果重复回调不再把口径写小
- 关单三路径(AdminClose / AdminRejectRefund 的 close 分支 / AdminSeal)补写 release_at,接线原死代码 EnsureCompletedReleaseAtTx
- 仲裁分销重算改用实际退款额(扣除押金暂扣),避免站点被多扣
- 订单列表与详情的提价分成取 min(收入, 货架加价),退款压缩加价后不再显示负数
- 新增迁移 000070(结算明细唯一键)、000071(补回填 closed 订单释放时间)
- 新增 5 个测试文件:结算幂等与展示钳制、结算 job 幂等、累计退款、关单补写释放时间、仲裁押金暂扣口径
2026-09-10 19:13:39 +08:00

18 lines
793 B
SQL

-- +goose Up
-- 000069 回填历史释放时间时只覆盖了 completed,遗漏了同样是可释放终态的 closed 订单,
-- 导致不退款关单(AdminRejectRefund close、AdminSeal 等)的订单 release_at 永久为 NULL。
-- 这里补齐 closed,使这些订单重新纳入自动释放扫描。
UPDATE distribution_order_financials f
JOIN rental_orders ro ON ro.id = f.order_id
JOIN distribution_sites s ON s.id = f.site_id
SET f.release_at = DATE_ADD(COALESCE(ro.settled_at, f.created_at), INTERVAL s.settlement_hold_days DAY)
WHERE f.settlement_status = 'pending'
AND f.release_at IS NULL
AND ro.status IN ('completed', 'closed');
-- +goose Down
-- 回填不可逆:无法区分补写的 release_at 与原有值,Down 用占位语句保持 goose 格式。
SELECT 1;