工单订单号全局唯一校验覆盖Mock创建与自动同步跨订单查重
This commit is contained in:
@@ -3,7 +3,11 @@ import {
|
||||
normalizeWorkOrderAcceptanceMode,
|
||||
normalizeWorkOrderGiftCooldownHours,
|
||||
} from '../../domain/work-order-acceptance-mode.js'
|
||||
import { createWorkOrder, createWorkOrderEvent } from '../../repositories/worker-platform/index.js'
|
||||
import {
|
||||
createWorkOrder,
|
||||
createWorkOrderEvent,
|
||||
listWorkOrdersByPlatformOrderId,
|
||||
} from '../../repositories/worker-platform/index.js'
|
||||
import type { JsonObject } from '../../types/json.js'
|
||||
import { createHttpError } from '../../utils/http.js'
|
||||
import { randomId } from '../../utils/random.js'
|
||||
@@ -46,6 +50,18 @@ export async function createAdminMockWorkOrder(payload: JsonObject = {}) {
|
||||
const materialComplete = payload.materialComplete === true || payload.materialComplete === 'true'
|
||||
const fields = normalizeRequirementFields(payload.fields)
|
||||
const { platformOrderId, productName, shop } = input
|
||||
// 订单号全局唯一:与自动同步的真实工单也不能撞号,否则打手按单号回填资料会命中多条。
|
||||
const existingOrders = await listWorkOrdersByPlatformOrderId(platformOrderId)
|
||||
if (existingOrders.length > 0) {
|
||||
const existingNo = String(existingOrders[0]?.work_order_no || '').trim()
|
||||
throw createHttpError(
|
||||
`该订单号已存在工单${existingNo ? `(${existingNo})` : ''},请更换订单号`,
|
||||
{
|
||||
statusCode: 409,
|
||||
errorCode: 'mock_work_order_platform_order_exists',
|
||||
},
|
||||
)
|
||||
}
|
||||
const material = {
|
||||
...(materialComplete
|
||||
? {
|
||||
|
||||
@@ -9,6 +9,7 @@ import {
|
||||
createWorkOrder,
|
||||
createWorkOrderEvent,
|
||||
getWorkOrderByOrderItemId,
|
||||
listWorkOrdersByPlatformOrderId,
|
||||
listWorkProductRuleMappings,
|
||||
listWorkProductRules,
|
||||
type WorkOrderRow,
|
||||
@@ -88,6 +89,18 @@ export async function syncWorkerOrdersForSourceOrder(
|
||||
skipped.push({ orderItemId: Number(item.id), reason: 'already_exists' })
|
||||
continue
|
||||
}
|
||||
// 订单号跨订单唯一:同一订单的多个 SKU 件允许共享订单号(按件建单是既有设计),
|
||||
// 但订单号已挂在其他订单下时跳过,避免自动同步产生撞号工单。
|
||||
const samePlatformOrders = await listWorkOrdersByPlatformOrderId(order.platform_order_id)
|
||||
if (
|
||||
samePlatformOrders.some((existing) => {
|
||||
const existingOrderId = Number(existing.order_id || 0)
|
||||
return existingOrderId > 0 && existingOrderId !== Number(order.id)
|
||||
})
|
||||
) {
|
||||
skipped.push({ orderItemId: Number(item.id), reason: 'platform_order_exists' })
|
||||
continue
|
||||
}
|
||||
|
||||
const fields = normalizeRequirementFields(safeParseJson(rule.requirement_json).fields)
|
||||
const skuQuantity = resolveSkuNameQuantity(item.sku_name)
|
||||
|
||||
@@ -111,6 +111,7 @@ export function MockWorkOrderForm({ onCreated }: { onCreated: () => Promise<void
|
||||
label="订单号"
|
||||
name="platformOrderId"
|
||||
rules={[{ required: true, whitespace: true, message: '请填写订单号' }]}
|
||||
extra="订单号全局唯一,与已有工单重复将无法创建"
|
||||
>
|
||||
<Input placeholder="请输入订单号" />
|
||||
</Form.Item>
|
||||
|
||||
Reference in New Issue
Block a user