feat(consignment): 确认加好友后卖家发布押金不退,并封住二次冻结的 500
需求:确认加好友之后押金不退回,卖家的押金也不退回。 - 新增 forfeitConsignmentPublishDepositBySubmissionWithClient / ...ByWorkOrderWithClient:release 的镜像——可用余额不动、只扣冻结额,写一条负数 deposit_deduction 流水并带上工单号与 giftDepositForfeited 标记。 台账 outstanding 会把 deposit_deduction 计入已核销,因此之后同一提报单的 release 与重新冻结都拿不到钱,天然幂等、退不回去。 - 挂载点:取消指派/撤单/退单/售后回退等 6 处「押金不退」判定点,以及「撤销寄售履约」的 作废与回库分支(后者原来会把押金留着或直接退还卖家)。 - 修掉一个会 500 的边角:押金已退还/已没收时 ensureConsignmentPublishDepositFrozenBySubmissionWithClient 会去插第二条 deposit_freeze 流水,撞上"每个提报单只允许一条冻结流水"的唯一索引 (没收后现货回库、再被匹配后撤销/退回复库即可触发)。现显式抛 consignment_deposit_already_settled,两个服务层都映射成 409 文案。 验证:真实库(回滚)验证没收全链路——冻结 2000 → 工单侧没收 2000 → 可用余额不变、 冻结额归零、流水为 deposit_deduction(-2000, 关联工单);没收后 release 恒为 0。 后端 420 例(417 通过,新增 5 例)全绿。
This commit is contained in:
@@ -20,6 +20,8 @@
|
||||
| `e828e677` | 权限打通(19 接口改 `requireAdminPermission`)、指派占库改条件更新、撤销守卫 | 新增 4 个回归测试 |
|
||||
| `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` |
|
||||
| 本批提交(批次 F2,同一提交内含本文档,故不写自身 hash) | 批次 F2:确认加好友后卖家发布押金不退(`deposit_deduction` 落地)+ 二次冻结护栏 | `consignment-deposit-repo.ts`、取消/退单仓库、撤销履约服务 |
|
||||
| 本批提交(批次 E,同一提交内含本文档,故不写自身 hash) | 前端四权限门控收口、`allocation_status` 约束与权限文案修正、面板错误态/防双提交/真实待审计数 | `admin-auth.ts`、两个寄卖面板、`AdminWorkerPlatformPage.tsx`、迁移 `080` |
|
||||
|
||||
**结论**:功能主干 3 天连成闭环(库存 → 提报审核 → 匹配 → 内部现货 / 打手押金两条履约 → 赠送冷静期 → 验收结算 → 撤销回库),但最近三次提交全是**上线后回填正确性**(权限被静默清除、并发占库、撤销资金挂账)。
|
||||
@@ -274,6 +276,30 @@
|
||||
前端在"部分匹配"候选上先 `modal.confirm` 危险确认,再带 `allowPartial: true` 重试,高配充低配的合法玩法保留但不可误触。
|
||||
3. ⏳ 匹配下推 SQL + 批量匹配接口 + 工单列表角标(P2-8)未做:当前仍是"取全量在库 → 内存比对"。
|
||||
|
||||
### 批次 F · 待加好友流程与押金不退(本轮)
|
||||
|
||||
1. ✅ **内部现货履约不再自动进冷却**:新增 `parkWorkOrderWaitingFriendAddWithClient`,占库落地时把工单停在
|
||||
`acceptance_mode=friend_gift` + `gift_phase=material_required` 的**待加好友**阶段(`friend_added_at` /
|
||||
`gift_available_at` / `deadline_at` 全部留空),客服线下通知加好友后手动点「确认加好友」
|
||||
(复用已有 `POST /worker-platform/orders/:id/confirm-friend`)才进入赠送冷却。
|
||||
冷却时长按商品规则落到工单,两者都为 0 时补默认 72 小时(否则确认后会得到 0 秒冷却)。
|
||||
同时删除已无调用方的 `forceFriendGift` 开关,避免再出现"自动确认加好友"的旁路。
|
||||
2. ✅ **前端文案**:内部现货单在该阶段显示「待加好友」(打手线仍是「待打手提交资料」),
|
||||
确认按钮统一为「确认加好友」;阶段文案抽到 `utils/gift-phase.ts` 便于单测。
|
||||
3. ✅ **后台备注快捷项**:「已通知加好友」一键追加「[已通知加好友] 操作人 时间」,仍可手动补充(复用 `admin_note`)。
|
||||
4. ✅ **确认加好友后押金不退(P2-2 `deposit_deduction` 死分支落地)**:
|
||||
- 打手履约押金:沿用既有的 `isWorkOrderGiftDepositForfeitable`(`friend_added_at` 有值即不退);
|
||||
- **寄卖卖家发布押金同口径新增**:`forfeitConsignmentPublishDepositBySubmissionWithClient` /
|
||||
`...ByWorkOrderWithClient`,写一条负数 `deposit_deduction` 流水(可用余额不动、只扣冻结额),
|
||||
挂在 6 处取消/退单/脱离判定点 + 「撤销寄售履约」的作废/回库分支上。
|
||||
因为台账 `outstanding` 会把 `deposit_deduction` 计入已核销,之后同一提报单的
|
||||
release / 重新冻结都拿不到钱——**天然幂等,退不回去**。
|
||||
- 顺带修掉一个会 500 的边角:押金已退还/已没收时 `ensureConsignmentPublishDepositFrozenBySubmissionWithClient`
|
||||
会撞"每提报单只允许一条冻结流水"的唯一索引,现改为显式抛
|
||||
`consignment_deposit_already_settled`(409),由运营决定重新提报或人工处理。
|
||||
5. ⏳ 待你拍板:客服一直不点「确认加好友」时订单会无限期停住(押金也一直冻着),
|
||||
目前**没有**超时提醒或自动策略;另外没收后同一现货再被匹配、卖家要不要重新补押金,需要业务规则。
|
||||
|
||||
### 批次 E · 权限门控与运营体验(P1/P2)—— 🔶 部分完成(本轮)
|
||||
|
||||
1. ✅ **前端四权限门控(P1-8 剩余部分)**:
|
||||
|
||||
Reference in New Issue
Block a user