支持批量验收接单订单

This commit is contained in:
yml2213
2026-08-15 15:07:31 +08:00
parent 87d8360e64
commit 4eb9aa2cd8
4 changed files with 112 additions and 0 deletions
@@ -2,6 +2,7 @@ import { Router } from 'express'
import {
acceptAdminWorkOrder,
acceptAdminWorkOrders,
assignAdminWorkOrderToWorker,
unassignAdminWorkOrder,
creditAdminWorkerWallet,
@@ -512,6 +513,24 @@ router.post(
}),
)
router.post(
'/worker-platform/orders/accept-batch',
requireAdminRoles(['admin', 'operator']),
createJsonHandler((req) => acceptAdminWorkOrders(req.body || {}), {
successMessage: '选中订单已验收通过',
errorMessage: '批量验收接单订单失败',
scope: '[admin/worker-platform/orders/accept-batch]',
audit: (req, data) => ({
action: 'work_orders_batch_accepted',
targetType: 'work_order',
targetId: Array.isArray(req.body?.workOrderIds)
? req.body.workOrderIds.map((item: unknown) => String(item)).join(',')
: '',
data: data && typeof data === 'object' ? (data as Record<string, unknown>) : {},
}),
}),
)
router.post(
'/worker-platform/orders/:workOrderId/deduct-pending-deposit',
requireAdminRoles(['admin', 'operator']),
@@ -1163,6 +1163,46 @@ export async function acceptAdminWorkOrder(workOrderId: number | string) {
return { order: mapWorkOrderAdmin(updated || workOrder) }
}
export async function acceptAdminWorkOrders(payload: JsonObject = {}) {
const workOrderIds = [
...new Set(
(Array.isArray(payload.workOrderIds) ? payload.workOrderIds : [])
.map((item) => normalizeOptionalId(item))
.filter((item): item is number => item !== null),
),
]
if (workOrderIds.length === 0) {
throw createHttpError('请至少选择一个待验收订单', {
statusCode: 400,
errorCode: 'work_order_batch_accept_required',
})
}
const workOrders = await Promise.all(workOrderIds.map((workOrderId) => getRequiredWorkOrder(workOrderId)))
if (workOrders.some((workOrder) => workOrder.status !== WORK_ORDER_STATUS.PENDING_ACCEPTANCE)) {
throw createHttpError('选中的订单包含非待验收状态,请刷新后重试', {
statusCode: 409,
errorCode: 'work_order_batch_accept_status_invalid',
})
}
const pendingSharingCounts = await Promise.all(
workOrders.map((workOrder) => countWorkOrderPendingSharingSubmissions(workOrder.id)),
)
if (pendingSharingCounts.some((count) => count > 0)) {
throw createHttpError('选中的订单存在拼单打手未提交验收资料,暂不能统一验收', {
statusCode: 409,
errorCode: 'work_order_batch_accept_sharing_pending_submissions',
})
}
const results = []
for (const workOrder of workOrders) {
results.push(await acceptAdminWorkOrder(workOrder.id))
}
return { orders: results.map((result) => result.order) }
}
export async function unassignAdminWorkOrder(workOrderId: number | string) {
const workOrder = await getRequiredWorkOrder(workOrderId)
if (