import { request } from '@/utils/request' /** 工序计划实体(新增/修改/派工) */ export interface OrderProcessPlan { id?: number name?: string code?: string sort?: number orderItemId?: number beginTime?: string endTime?: string procurement?: number outsource?: number quantity?: number transferNum?: number transferOutNum?: number createTime?: string createBy?: string qualityInspection?: number storageEntry?: number } /** 派工明细 */ export interface AssignWorkItem { userId?: number | string quantity?: number | string assingStatus?: number [key: string]: unknown } /** 工序计划明细 VO(processList 项) */ export interface ProcessPlanItemVO { planId?: number processCode?: string operNumber?: number workCenterName?: string departmentName?: string processName?: string operDescription?: string activityUnit?: string optCtrlCodeName?: string activityQty?: number planStartTime?: string planFinishTime?: string actualStartTime?: string | null actualFinishTime?: string | null quantity?: number transferInQty?: number transferOutQty?: number completedQty?: number scrapQty?: number reworkQty?: number procurement?: number outsource?: number qualityInspection?: number storageEntry?: number assign?: number assignByName?: string | null assignTime?: string | null processStatus?: number prevPlanId?: number | null nextPlanId?: number | null assignWorkList?: AssignWorkItem[] } /** 按生产订单分组的工序计划 VO(分页/详情) */ export interface OrderProcessPlanVO { orderItemId?: number mainCode?: string materialCode?: string materialName?: string orderCode?: string quantity?: number routeCode?: string proWorkshop?: string beginTime?: string endTime?: string actualStartTime?: string | null actualEndTime?: string | null completedQty?: number orderStatus?: number currentProcessName?: string currentOperNumber?: number processList?: ProcessPlanItemVO[] } export const ORDER_STATUS_MAP: Record = { 0: { label: '未开始', type: 'default' }, 1: { label: '进行中', type: 'info' }, 2: { label: '已完成', type: 'success' }, } export const PROCESS_STATUS_MAP: Record = { 0: { label: '待派工', type: 'default' }, 1: { label: '待执行', type: 'info' }, 2: { label: '执行中', type: 'warning' }, 3: { label: '质检中', type: 'warning' }, 4: { label: '已完成', type: 'success' }, } export const ASSIGN_STATUS_MAP: Record = { 1: { label: '待执行', type: 'info' }, 2: { label: '执行中', type: 'warning' }, 3: { label: '质检中', type: 'warning' }, 4: { label: '已汇报', type: 'success' }, 5: { label: '已关闭', type: 'default' }, } /** 工序 VO 转实体(编辑/派工提交用) */ export function processItemToEntity( item: ProcessPlanItemVO, orderItemId?: number, ): OrderProcessPlan { return { id: item.planId, name: item.processName, code: item.processCode, sort: item.operNumber, orderItemId, beginTime: item.planStartTime, endTime: item.planFinishTime, procurement: item.procurement, outsource: item.outsource, quantity: item.quantity, transferNum: item.transferInQty, transferOutNum: item.transferOutQty, qualityInspection: item.qualityInspection, storageEntry: item.storageEntry, } } /** 提交前剔除展示字段,保留 OrderProcessPlan 实体 */ export function toOrderProcessPlanPayload(data: Record): OrderProcessPlan { const payload = { ...data } const displayKeys = [ 'mainCode', 'materialCode', 'materialName', 'orderCode', 'routeCode', 'proWorkshop', 'actualStartTime', 'actualEndTime', 'completedQty', 'orderStatus', 'currentProcessName', 'currentOperNumber', 'processList', 'planId', 'processName', 'processCode', 'operNumber', 'workCenterName', 'departmentName', 'operDescription', 'activityUnit', 'optCtrlCodeName', 'activityQty', 'planStartTime', 'planFinishTime', 'actualFinishTime', 'transferInQty', 'transferOutQty', 'scrapQty', 'reworkQty', 'assign', 'assignByName', 'assignTime', 'processStatus', 'prevPlanId', 'nextPlanId', 'assignWorkList', ] for (const key of displayKeys) { delete payload[key] } return payload as OrderProcessPlan } // 工序计划 API export const orderProcessPlanApi = { // 分页查询(按生产订单分组) page(params: { page: number pageSize: number id?: number | string name?: string code?: string orderItemId?: number | string }) { return request<{ list: OrderProcessPlanVO[]; total: number; page: number; pageSize: number }>({ url: '/biz/orderProcessPlan/page', method: 'get', params, }) }, // 获取详情(路径参数为生产订单 id) detail(orderItemId: number | string) { return request({ url: `/biz/orderProcessPlan/${orderItemId}`, method: 'get', }) }, // 新增 create(data: OrderProcessPlan) { return request({ url: '/biz/orderProcessPlan', method: 'post', data }) }, // 修改 update(data: OrderProcessPlan) { return request({ url: '/biz/orderProcessPlan', method: 'put', data }) }, // 删除(工序计划 id) delete(ids: (number | string)[]) { return request({ url: `/biz/orderProcessPlan/${ids.join(',')}`, method: 'delete' }) }, // 派工 assignWork(data: OrderProcessPlan & { list?: AssignWorkItem[] }) { return request({ url: '/biz/orderProcessPlan/assignWork', method: 'put', data }) }, // 导出 export(params?: { ids?: string[]; id?: number; name?: string; code?: string; orderItemId?: number }) { const p: Record = {} if (params?.ids?.length) p.ids = params.ids.join(',') if (params?.id !== undefined && params?.id !== null) p.id = params.id if (params?.name !== undefined && params?.name !== null) p.name = params.name if (params?.code !== undefined && params?.code !== null) p.code = params.code if (params?.orderItemId !== undefined && params?.orderItemId !== null) p.orderItemId = params.orderItemId return request({ url: '/biz/orderProcessPlan/export', method: 'get', params: p, responseType: 'blob' }) }, // 导入 importData(file: File) { const formData = new FormData() formData.append('file', file) return request<{ success: number; fail: number; errors: string[] }>({ url: '/biz/orderProcessPlan/import', method: 'post', data: formData, headers: { 'Content-Type': 'multipart/form-data' }, }) }, // 下载导入模板 downloadTemplate() { return request({ url: '/biz/orderProcessPlan/template', method: 'get', responseType: 'blob' }) }, }