diff --git a/backend-node/src/controllers/analyticsReportController.ts b/backend-node/src/controllers/analyticsReportController.ts index c893226c..1f8cfd7c 100644 --- a/backend-node/src/controllers/analyticsReportController.ts +++ b/backend-node/src/controllers/analyticsReportController.ts @@ -67,7 +67,7 @@ export async function getProductionReportData(req: any, res: Response): Promise< const dataQuery = ` SELECT COALESCE(wi.start_date, wi.created_date::date::text) as date, - COALESCE(wi.routing, '미지정') as process, + COALESCE(NULLIF(rv.version_name, ''), '미지정') as process, COALESCE(ei.equipment_name, wi.equipment_id, '미지정') as equipment, COALESCE(ii.item_name, wi.item_id, '미지정') as item, COALESCE(wi.worker, '미지정') as worker, @@ -79,6 +79,8 @@ export async function getProductionReportData(req: any, res: Response): Promise< wi.status, wi.company_code FROM work_instruction wi + LEFT JOIN item_routing_version rv + ON wi.routing = rv.id AND wi.company_code = rv.company_code LEFT JOIN ( SELECT wo_id, company_code, SUM(CAST(COALESCE(NULLIF(production_qty, ''), '0') AS numeric)) as production_qty, diff --git a/backend-node/src/controllers/processInfoController.ts b/backend-node/src/controllers/processInfoController.ts index 2793353d..bb83fd2c 100644 --- a/backend-node/src/controllers/processInfoController.ts +++ b/backend-node/src/controllers/processInfoController.ts @@ -154,10 +154,13 @@ export async function getProcessEquipments(req: AuthenticatedRequest, res: Respo const companyCode = req.user!.companyCode; const { processCode } = req.params; + // equipment_code 컬럼에 코드(legacy) 또는 id(신규)가 들어올 수 있어 두 경우 모두 매칭 const result = await pool.query( `SELECT pe.*, em.equipment_name FROM process_equipment pe - LEFT JOIN equipment_mng em ON pe.equipment_code = em.equipment_code AND pe.company_code = em.company_code + LEFT JOIN equipment_mng em + ON pe.company_code = em.company_code + AND (pe.equipment_code = em.equipment_code OR pe.equipment_code = em.id) WHERE pe.process_code = $1 AND pe.company_code = $2 ORDER BY pe.equipment_code`, [processCode, companyCode] diff --git a/frontend/app/(main)/COMPANY_10/production/process-info/ProcessMasterTab.tsx b/frontend/app/(main)/COMPANY_10/production/process-info/ProcessMasterTab.tsx index deb8a99c..f0f51cb6 100644 --- a/frontend/app/(main)/COMPANY_10/production/process-info/ProcessMasterTab.tsx +++ b/frontend/app/(main)/COMPANY_10/production/process-info/ProcessMasterTab.tsx @@ -324,8 +324,15 @@ export function ProcessMasterTab() { }; const availableEquipments = useMemo(() => { - const used = new Set(processEquipments.map((e) => e.equipment_code)); - return equipmentMaster.filter((e) => !used.has(e.equipment_code)); + const used = new Set(); + for (const pe of processEquipments) { + if (pe.equipment_code) used.add(pe.equipment_code); + } + return equipmentMaster.filter((e) => { + if (e.equipment_code && used.has(e.equipment_code)) return false; + if (e.id && used.has(e.id)) return false; + return true; + }); }, [equipmentMaster, processEquipments]); const handleAddEquipment = async () => { @@ -334,11 +341,16 @@ export function ProcessMasterTab() { toast.message("추가할 설비를 선택해주세요"); return; } + const picked = availableEquipments.find((e) => e.id === equipmentPick); + if (!picked) { + toast.error("선택한 설비를 찾을 수 없어요"); + return; + } setAddingEquipment(true); try { const res = await addProcessEquipment({ process_code: selectedProcess.process_code, - equipment_code: equipmentPick, + equipment_code: picked.equipment_code || picked.id, }); if (!res.success) { toast.error(res.message || "설비 추가에 실패했어요"); @@ -515,8 +527,8 @@ export function ProcessMasterTab() { ({ - code: eq.equipment_code, - label: `${eq.equipment_code} · ${eq.equipment_name}`, + code: eq.id, + label: eq.equipment_name, }))} value={equipmentPick || ""} onValueChange={setEquipmentPick} @@ -553,8 +565,11 @@ export function ProcessMasterTab() { {processEquipments.map((pe) => (
  • -

    {pe.equipment_code}

    -

    {pe.equipment_name || "설비명 없음"}

    +

    + {pe.equipment_name + || equipmentMaster.find((e) => e.id === pe.equipment_code || e.equipment_code === pe.equipment_code)?.equipment_name + || "설비명 없음"} +

    + + + + + + + + + + + + + + + + + + + + +