支持批量验收接单订单
This commit is contained in:
@@ -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 (
|
||||
|
||||
Reference in New Issue
Block a user