fix(worker): 整单指派拼单订单无法验收

- 前端:拼单订单整单指派给本人时放行验收
- 后端:整单指派清掉 sharing_enabled;已有有效份额则拒绝
This commit is contained in:
2026-11-02 12:02:24 +08:00
parent a9e2de443e
commit db3f477ab3
5 changed files with 151 additions and 2 deletions
@@ -4,6 +4,7 @@ import {
countWorkerActiveOrders,
createWorkOrderEvent,
getWorkerUserById,
listWorkOrderShares,
} from '../../repositories/worker-platform/index.js'
import type { JsonObject } from '../../types/json.js'
import { createHttpError } from '../../utils/http.js'
@@ -64,6 +65,18 @@ export async function assignAdminWorkOrderToWorker(
})
}
// 已有拼单份额的订单不能再按整单指派;放在核销电子凭证之前,
// 避免“凭证已核销但指派失败”的副作用。
const activeShares = (await listWorkOrderShares(workOrder.id)).filter(
(share) => share.status !== 'cancelled',
)
if (activeShares.length > 0) {
throw createHttpError('该订单已有拼单份额,不能按整单指派;请使用拼单管理', {
statusCode: 409,
errorCode: 'work_order_has_shares',
})
}
const voucherConsume = await consumeIndustryVouchersBeforeWorkOrderAssign(workOrder)
if (!voucherConsume.ok) {
const failedAt = nowIso()
@@ -112,6 +125,15 @@ export async function assignAdminWorkOrderToWorker(
{ statusCode: 409, errorCode: 'worker_deposit_insufficient' },
)
}
if (failureReason === 'work_order_has_shares') {
throw createHttpError(
resolveAssignFailureMessage(
voucherConsume.voucherCount,
'该订单已有拼单份额,不能按整单指派;请使用拼单管理',
),
{ statusCode: 409, errorCode: 'work_order_has_shares' },
)
}
if (!updated) {
throw createHttpError(
resolveAssignFailureMessage(voucherConsume.voucherCount, '指派失败,订单状态可能已变化'),