工单订单号全局唯一校验覆盖Mock创建与自动同步跨订单查重
This commit is contained in:
@@ -3,7 +3,11 @@ import {
|
|||||||
normalizeWorkOrderAcceptanceMode,
|
normalizeWorkOrderAcceptanceMode,
|
||||||
normalizeWorkOrderGiftCooldownHours,
|
normalizeWorkOrderGiftCooldownHours,
|
||||||
} from '../../domain/work-order-acceptance-mode.js'
|
} 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 type { JsonObject } from '../../types/json.js'
|
||||||
import { createHttpError } from '../../utils/http.js'
|
import { createHttpError } from '../../utils/http.js'
|
||||||
import { randomId } from '../../utils/random.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 materialComplete = payload.materialComplete === true || payload.materialComplete === 'true'
|
||||||
const fields = normalizeRequirementFields(payload.fields)
|
const fields = normalizeRequirementFields(payload.fields)
|
||||||
const { platformOrderId, productName, shop } = input
|
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 = {
|
const material = {
|
||||||
...(materialComplete
|
...(materialComplete
|
||||||
? {
|
? {
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import {
|
|||||||
createWorkOrder,
|
createWorkOrder,
|
||||||
createWorkOrderEvent,
|
createWorkOrderEvent,
|
||||||
getWorkOrderByOrderItemId,
|
getWorkOrderByOrderItemId,
|
||||||
|
listWorkOrdersByPlatformOrderId,
|
||||||
listWorkProductRuleMappings,
|
listWorkProductRuleMappings,
|
||||||
listWorkProductRules,
|
listWorkProductRules,
|
||||||
type WorkOrderRow,
|
type WorkOrderRow,
|
||||||
@@ -88,6 +89,18 @@ export async function syncWorkerOrdersForSourceOrder(
|
|||||||
skipped.push({ orderItemId: Number(item.id), reason: 'already_exists' })
|
skipped.push({ orderItemId: Number(item.id), reason: 'already_exists' })
|
||||||
continue
|
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 fields = normalizeRequirementFields(safeParseJson(rule.requirement_json).fields)
|
||||||
const skuQuantity = resolveSkuNameQuantity(item.sku_name)
|
const skuQuantity = resolveSkuNameQuantity(item.sku_name)
|
||||||
|
|||||||
@@ -111,6 +111,7 @@ export function MockWorkOrderForm({ onCreated }: { onCreated: () => Promise<void
|
|||||||
label="订单号"
|
label="订单号"
|
||||||
name="platformOrderId"
|
name="platformOrderId"
|
||||||
rules={[{ required: true, whitespace: true, message: '请填写订单号' }]}
|
rules={[{ required: true, whitespace: true, message: '请填写订单号' }]}
|
||||||
|
extra="订单号全局唯一,与已有工单重复将无法创建"
|
||||||
>
|
>
|
||||||
<Input placeholder="请输入订单号" />
|
<Input placeholder="请输入订单号" />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
|||||||
Reference in New Issue
Block a user