From 617794f2cf5a5e9d72c94aec281b5325fced1e4b Mon Sep 17 00:00:00 2001 From: yml2213 Date: Thu, 17 Sep 2026 13:35:41 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E5=AF=84=E5=8D=96=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=96=B9=E6=A1=88=E8=AE=B0=E5=BD=95=E6=89=B9?= =?UTF-8?q?=E6=AC=A1=20Y=EF=BC=88079=20=E8=BF=81=E7=A7=BB=E5=8E=BB?= =?UTF-8?q?=E9=87=8D=E4=BF=AE=E5=A4=8D=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/寄卖系统优化方案.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/docs/寄卖系统优化方案.md b/docs/寄卖系统优化方案.md index 2084ab58..b0697468 100644 --- a/docs/寄卖系统优化方案.md +++ b/docs/寄卖系统优化方案.md @@ -21,6 +21,7 @@ | `632dddc4` | 上一轮:H5 渠道整体下线 + 凭据字段修复 + 状态机封闭(撤销守卫 / 库存绑定唯一性 / 生命周期解绑)+ 押金归属取台账 | 迁移 `079`、`consignment-*` 五个文件、`work-order-*` 三个仓库、两个前端面板 | | `5d11bf20` | 批次 C+D:指派部分成功补偿、凭证核销如实反馈、空规格不放行 + 履约/指派服务端规格复检 | `consignment-fulfillment-service.ts`、`consignment-matching-service.ts`、`consignment-repo.ts`、履约路由、`WorkOrdersPanel.tsx` | | `d6f6219f` | 批次 F1:内部现货履约停在「待加好友」,客服确认后才进赠送冷却 + 备注快捷项 | `work-order-gift-repo.ts`、履约服务、`WorkOrdersPanel.tsx`、`utils/gift-phase.ts` | +| 本批提交(批次 Y,同一提交内含本文档,故不写自身 hash) | 批次 Y:修生产 079 迁移 23505——建冻结幂等索引前先去重历史重复冻结并退还多冻押金(服务器未应用过 079,经确认直接改原迁移) | `079_drop_consignment_collect_links.sql`、`consignment-payout.test.ts` | | 本批提交(批次 X,同一提交内含本文档,故不写自身 hash) | 批次 X:发布寄卖自动带建议价——规格选齐后按 系统+系列+钻级 从「接单模板」(work_product_rules)匹配价格自动填入(安卓暗潮1钻 → ¥120),多条命中取最高,手改过不覆盖 | `consignment-matching-service.ts`、`product-match-repo.ts`、`consignment-worker-service.ts`、`routes/worker/consignment.ts`、`WorkerConsignmentPage.tsx` | | 本批提交(批次 W,同一提交内含本文档,故不写自身 hash) | 批次 W:规格口径定案——后台全量(系统 苹果/安卓/通用,区服 微信/QQ/互通),打手端按物品展示(苏尔南:系统二选一、区服唯一「互通」默认选中);「互通」为区服通配值,匹配引擎通配符对称化 | `utils/consignment-spec.ts`、`WorkerConsignmentPage.tsx`、两个面板、`consignment-matching-service.ts`、`consignment-worker-service.ts` | | 本批提交(批次 V,同一提交内含本文档,故不写自身 hash) | 批次 V:复核遗留——拼单份额验收收官补寄卖钩子(押金释放+供货货款)、手动匹配弹窗 409 刷新/关键字透传/无打手禁指派、核销反馈抽共享出口 | `work-order-settlement-repo.ts`、`ConsignmentManualMatchModal.tsx`、`utils/voucher-consume.ts` | @@ -293,6 +294,22 @@ 前端在"部分匹配"候选上先 `modal.confirm` 危险确认,再带 `allowPartial: true` 重试,高配充低配的合法玩法保留但不可误触。 3. ⏳ 匹配下推 SQL + 批量匹配接口 + 工单列表角标(P2-8)未做:当前仍是"取全量在库 → 内存比对"。 +### 批次 Y · 生产 079 迁移失败修复:先去重重复冻结再建幂等索引(本轮) + +**现象**:生产部署在 079 的 `uniq_worker_wallet_ledgers_consignment_publish_freeze` 唯一索引上 +23505(提报单 5 有两条 `consignment_publish` 冻结流水),迁移整体回滚、数据库无损。 +重复冻结正是该索引要防缺陷的历史脏数据(批次 F2 之前发布链路允许二次冻结)。 + +**修法**(服务器从未成功应用 079,经确认直接改原迁移,与 079 自己"重复绑定工单先清后约束"同套路): +每组(打手+提报单)保留最早一条冻结流水;多余行仅改 payload 标记 `consignment_publish_superseded` +(移出 outstanding 口径与索引范围,原行留审计);多冻的钱退回钱包 +(退额 = LEAST(多冻总额, 冻结池实有),绝不无中生有)并写 `consignment_publish_dedup_refund` +修正流水;同一打手多条多余流水先按钱包聚合再退;然后才建索引。静态测试钉住"去重退还必须先于建索引"。 + +**验证**:一次性 Postgres 完整复现生产路径——停在 078 + 注入提报单 5 双冻结脏数据 → +新 079/080 迁移成功;钱包可用 +2000(多冻退回)、冻结池回落单份 2000;修正流水留痕; +第三次冻结被索引拒绝。全新空库 001→080 亦验证通过。后端 484 测试全绿。 + ### 批次 X · 发布寄卖自动带「接单模板」建议价(本轮) **需求**:接单平台已按规格配好模板价(生产库几十条,如 安卓暗潮1钻 ¥120 / 6钻 ¥500),