feat: 支持取消指派打手,可重新指派他人

- 后台可取消进行中订单的指派:订单回未分配,冻结押金全额退还,记录事件与审计
- 工单列表新增「取消指派」按钮(带确认弹窗),客服/管理员/运营可用
- 取消后可重新指派给其他打手
This commit is contained in:
yml2213
2026-08-15 13:48:32 +08:00
parent d44c6039ea
commit 21211bd760
5 changed files with 182 additions and 0 deletions
@@ -6,6 +6,7 @@ import {
acceptWorkOrderAndSettle,
addWorkerWalletCredit,
assignWorkOrderToWorker,
unassignWorkOrder,
countWorkerAcceptedOrders,
countWorkerActiveOrders,
countWorkCategoryUsages,
@@ -1146,6 +1147,43 @@ export async function acceptAdminWorkOrder(workOrderId: number | string) {
return { order: mapWorkOrderAdmin(updated || workOrder) }
}
export async function unassignAdminWorkOrder(workOrderId: number | string) {
const workOrder = await getRequiredWorkOrder(workOrderId)
if (
workOrder.status !== WORK_ORDER_STATUS.IN_PROGRESS ||
!workOrder.assigned_worker_id
) {
throw createHttpError('只有进行中且已指派打手的订单可以取消指派', {
statusCode: 409,
errorCode: 'work_order_unassign_status_invalid',
})
}
const now = nowIso()
const { order: updated, failureReason } = await unassignWorkOrder({
workOrderId: workOrder.id,
now,
})
if (failureReason === 'work_order_not_in_progress') {
throw createHttpError('订单状态已变化,无法取消指派', {
statusCode: 409,
errorCode: 'work_order_unassign_status_invalid',
})
}
if (failureReason === 'work_order_no_worker') {
throw createHttpError('该订单未指派打手', {
statusCode: 409,
errorCode: 'work_order_unassign_no_worker',
})
}
if (!updated) {
throw createHttpError('取消指派失败,订单状态可能已变化', {
statusCode: 409,
errorCode: 'work_order_unassign_conflict',
})
}
return { order: mapWorkOrderAdmin(updated) }
}
export async function getAdminWorkerPlatformSummary() {
const [pendingWorkers, pendingMaterial, openOrders, inProgressOrders] = await Promise.all([
listWorkerUsers({ page: 1, pageSize: 1, status: 'pending_review' }),