add:新增同一个工单同一人可以多次拼单:拼单后台撤单,不影响母单状态

This commit is contained in:
2026-10-23 15:20:14 +08:00
parent 1d5615f1ae
commit 2befb57ef8
4 changed files with 43 additions and 34 deletions
@@ -709,7 +709,13 @@ export async function acceptWorkOrderShareAndSettle(input: {
})
}
/** 后台撤销单个拼单份额,释放该打手押金并把份数重新放回大厅。 */
/**
* 后台撤销单个拼单份额:退还该打手押金、释放这一份的占用。
*
* **不改母工单状态**:后台撤单常用于剔除错误参与者/纠错,撤掉一份不应把
* 待验收(或进行中)的母单踢回大厅;需要改母单状态时走「拼单撤单」的
* 退回大厅/取消整单显式操作。
*/
export async function cancelWorkOrderShare(input: {
workOrderId: number
shareId: number
@@ -819,19 +825,16 @@ export async function cancelWorkOrderShare(input: {
WHERE id = $2`,
[input.now, input.shareId],
)
// 母单状态由剩余份额集合推导:撤掉这一份后,其余已提交份额仍可正常待验收
const recomputedOrder = await recomputeWorkOrderSharingStatusWithClient(
client,
input.workOrderId,
input.now,
)
// 母单状态保持不变:这里只取消这一份份额,不再按剩余份额重推母单状态。
// (旧实现会 recompute:待验收的母单撤掉一份后 allocated < total → 变回 open,
// 等于整单被踢回抢单大厅,与「后台撤单只影响该份额」的预期不符。)
await createWorkOrderEventWithClient(client, {
workOrderId: input.workOrderId,
actorType: 'admin',
actorId: input.actorName || '',
eventType: 'sharing_share_cancelled_by_admin',
fromStatus: workOrder.status,
toStatus: recomputedOrder?.status || workOrder.status,
toStatus: workOrder.status,
payloadJson: JSON.stringify({
shareId: input.shareId,
workerId,