import.post.ts 1.54 KB
import { z } from 'zod'
import type { WorkOrder } from '../../../app/types/work-order'
import { importMockSnItems } from '../../utils/mock-sns'
import { getMockWorkOrders } from '../../utils/mock-work-orders'

const payloadSchema = z.object({
  workOrderNo: z.string().trim().min(1),
  currentStep: z.string().trim().min(1),
  snList: z.array(z.string()).min(1),
  operator: z.string().trim().min(1)
})

export default eventHandler(async (event) => {
  const body = await readBody(event)
  const parsed = payloadSchema.safeParse(body)

  if (!parsed.success) {
    return {
      success: false,
      errorCode: 'VALIDATION_ERROR',
      message: 'SN 导入参数不正确。',
      importedCount: 0,
      skippedCount: 0,
      duplicateSnList: []
    }
  }

  const normalizedOrderNo = parsed.data.workOrderNo.trim()
  const workOrder = getMockWorkOrders({ orderNo: normalizedOrderNo })
    .find(item => item.orderNo.toLowerCase() === normalizedOrderNo.toLowerCase())

  if (!workOrder) {
    return buildRejectedResponse('WORK_ORDER_NOT_FOUND', '工单不存在,无法导入 SN。')
  }

  if (isBeforeDispatch(workOrder)) {
    return buildRejectedResponse('WORK_ORDER_NOT_DISPATCHED', '工单未下发,不允许导入 SN。')
  }

  return importMockSnItems(parsed.data)
})

function isBeforeDispatch(workOrder: WorkOrder) {
  return workOrder.status === 'draft'
}

function buildRejectedResponse(errorCode: string, message: string) {
  return {
    success: false,
    errorCode,
    message,
    importedCount: 0,
    skippedCount: 0,
    duplicateSnList: []
  }
}