feat(consignment): 确认加好友后现货作废不回池,撤销履约押金可选并结算打手押金
现货口径(严):已确认加好友 = 买家好友已加上、货随时可能送出去,回池会被下一个工单 再次占用(等于二次出货)。收口在 releaseConsignmentInventoryBindingForWorkOrderWithClient: 解绑前读工单 acceptance_mode/friend_added_at,命中则 archived + allow_matching=FALSE + 留痕, 否则仍回池。所有解绑路径自动继承,发单系统接口未动。 撤销寄售履约(寄卖专属入口)支持两笔押金各自可选,默认按规则自动: - 打手履约押金:auto / refund / forfeit - 卖家发布押金:auto / keep_frozen / forfeit 策略抽成 domain/consignment-deposit-policy.ts 纯函数;覆盖时原因照旧必填,选项与金额写进 工单事件便于对账。 顺带修掉两个 bug: 1. 撤销寄售履约从不结算打手履约押金——只清 assigned_worker_id、只处理卖家押金, worker_deposit 单撤销后打手押金永久冻结。现按选项结算(退还/没收)。 2. detachConsignmentMaterialFromWorkOrderWithClient 里 $1 既作 $1::text(detachedAt) 又赋值给 updated_at,Postgres 整体推断成 text → 42804。凡解绑现货摘寄售标记的路径 (取消指派/撤单/退单/售后/撤销履约/人工回库)在真实库上必然 500,假 client 单测抓不到。 已显式 ::timestamptz,并补类级静态护栏扫同类写法。 验证:真实库(全回滚)——已确认加好友解绑 → archived/allow_matching=false; 未确认 → 仍 in_stock;打手押金冻结 3000 → 退还 3000(重复结算 0)→ 再冻 2500 → 没收 2500 (可用余额不变、冻结归零、流水 deposit_deduction)。后端 432 例(新增 5 例)全绿。
This commit is contained in:
@@ -20,6 +20,10 @@ import {
|
||||
revokeWorkOrderConsignmentFulfillment,
|
||||
} from '../../../services/worker-platform/consignment-fulfillment-service.js'
|
||||
import { createJsonHandler, requireAdminPermission } from '../session.js'
|
||||
import {
|
||||
normalizeConsignmentDepositHandling,
|
||||
normalizeWorkerDepositHandling,
|
||||
} from '../../../domain/consignment-deposit-policy.js'
|
||||
|
||||
const router = Router()
|
||||
|
||||
@@ -251,6 +255,9 @@ router.post(
|
||||
? 'archive_inventory'
|
||||
: 'reopen',
|
||||
reason: String(req.body?.reason || ''),
|
||||
// 押金处置由运营显式选择,非法值一律归一成"按规则自动"
|
||||
workerDeposit: normalizeWorkerDepositHandling(req.body?.workerDeposit),
|
||||
consignmentDeposit: normalizeConsignmentDepositHandling(req.body?.consignmentDeposit),
|
||||
actorName: req.adminSession?.username || 'admin',
|
||||
}),
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user