增加取消订单重新可以发布
This commit is contained in:
@@ -49,6 +49,7 @@ import {
|
||||
sumPendingUnfreezeByOrderIds,
|
||||
resolveProblemWorkOrder,
|
||||
reviewWorkerFinanceRequest,
|
||||
reopenCancelledWorkOrder,
|
||||
updateWorkOrder,
|
||||
updateWorkOrderBasic,
|
||||
updateWorkerUser,
|
||||
@@ -1795,6 +1796,37 @@ export async function deleteAdminWorkOrder(workOrderId: number | string) {
|
||||
return { deleted: true }
|
||||
}
|
||||
|
||||
export async function reopenAdminCancelledWorkOrder(workOrderId: number | string, actorName = '') {
|
||||
const workOrder = await getRequiredWorkOrder(workOrderId)
|
||||
if (!mapWorkOrderAdmin(workOrder).capabilities.canReopen) {
|
||||
throw createHttpError('只有没有有效拼单份额的已取消订单可以重新启用', {
|
||||
statusCode: 409,
|
||||
errorCode: 'work_order_reopen_status_invalid',
|
||||
})
|
||||
}
|
||||
|
||||
const { order: updated, failureReason } = await reopenCancelledWorkOrder({
|
||||
workOrderId: Number(workOrder.id),
|
||||
now: nowIso(),
|
||||
actorName,
|
||||
})
|
||||
if (failureReason === 'work_order_has_active_shares') {
|
||||
throw createHttpError('该订单仍有有效拼单份额,不能重新启用', {
|
||||
statusCode: 409,
|
||||
errorCode: 'work_order_reopen_has_active_shares',
|
||||
})
|
||||
}
|
||||
if (!updated) {
|
||||
throw createHttpError('订单状态已变化,无法重新启用', {
|
||||
statusCode: 409,
|
||||
errorCode: 'work_order_reopen_conflict',
|
||||
})
|
||||
}
|
||||
|
||||
publishWorkOrderRealtimeChange({ workOrderId: Number(workOrder.id), hallChanged: true })
|
||||
return { order: mapWorkOrderAdmin(updated) }
|
||||
}
|
||||
|
||||
export async function publishAdminWorkOrder(workOrderId: number | string, actorName = '') {
|
||||
const workOrder = await getRequiredWorkOrder(workOrderId)
|
||||
if (workOrder.status !== WORK_ORDER_STATUS.UNASSIGNED) {
|
||||
|
||||
@@ -411,6 +411,7 @@ export function mapWorkOrderAdmin(workOrder: WorkOrderRow, shares?: WorkOrderSha
|
||||
WORK_ORDER_STATUS.UNASSIGNED,
|
||||
WORK_ORDER_STATUS.CANCELLED,
|
||||
].includes(workOrder.status as never),
|
||||
canReopen: workOrder.status === WORK_ORDER_STATUS.CANCELLED && !hasActiveShares,
|
||||
canPublish:
|
||||
workOrder.status === WORK_ORDER_STATUS.UNASSIGNED && Number(workOrder.reward_amount || 0) > 0,
|
||||
canCancel: status === WORK_ORDER_STATUS.IN_PROGRESS && Boolean(workOrder.assigned_worker_id),
|
||||
|
||||
@@ -734,6 +734,27 @@ test('后台拼单聚合状态同时收敛筛选语义和操作能力', () => {
|
||||
assert.equal(filled.capabilities.canUnpublish, false)
|
||||
})
|
||||
|
||||
test('已取消工单可重新启用,恢复未分配后可编辑和发布', () => {
|
||||
const cancelled = mapWorkOrderAdmin(buildWorkOrderRow({ status: 'cancelled' }))
|
||||
assert.equal(cancelled.capabilities.canReopen, true)
|
||||
assert.equal(cancelled.capabilities.canEdit, false)
|
||||
assert.equal(cancelled.capabilities.canPublish, false)
|
||||
|
||||
const restored = mapWorkOrderAdmin(buildWorkOrderRow({ status: 'unassigned' }))
|
||||
assert.equal(restored.capabilities.canReopen, false)
|
||||
assert.equal(restored.capabilities.canEdit, true)
|
||||
assert.equal(restored.capabilities.canPublish, true)
|
||||
|
||||
const cancelledSharing = mapWorkOrderAdmin(
|
||||
buildWorkOrderRow({
|
||||
status: 'cancelled',
|
||||
sharing_enabled: true,
|
||||
active_share_quantity: 1,
|
||||
}),
|
||||
)
|
||||
assert.equal(cancelledSharing.capabilities.canReopen, false)
|
||||
})
|
||||
|
||||
test('拼单打手汇总展示当前参与者并合并同一打手的份数', () => {
|
||||
const workers = mapWorkOrderSharingWorkers([
|
||||
buildWorkOrderShareRow({ worker_id: 1, quantity: 2, worker_username: 'alpha' }),
|
||||
|
||||
Reference in New Issue
Block a user