From a863427c4f9ec86c04bac5a8c8518ac74b27822e Mon Sep 17 00:00:00 2001 From: kjs Date: Tue, 21 Apr 2026 13:54:14 +0900 Subject: [PATCH] feat: Update equipment handling in process management - Enhanced the `getProcessEquipments` function to support matching both legacy equipment codes and new IDs, improving data retrieval accuracy. - Updated the `availableEquipments` logic in the `ProcessMasterTab` component to handle both equipment codes and IDs, ensuring a seamless user experience when adding equipment. - Improved error handling for equipment selection, providing user feedback when a selected equipment cannot be found. - Refactored the display of equipment names to ensure accurate representation, even when equipment codes are not available. --- .../controllers/analyticsReportController.ts | 4 +- .../src/controllers/processInfoController.ts | 5 +- .../process-info/ProcessMasterTab.tsx | 29 +- .../COMPANY_10/quality/inspection/page.tsx | 753 +++++++++++++++++- .../process-info/ProcessMasterTab.tsx | 256 +++++- .../COMPANY_16/quality/inspection/page.tsx | 753 +++++++++++++++++- .../process-info/ProcessMasterTab.tsx | 29 +- .../COMPANY_29/quality/inspection/page.tsx | 753 +++++++++++++++++- .../process-info/ProcessMasterTab.tsx | 29 +- .../COMPANY_30/quality/inspection/page.tsx | 753 +++++++++++++++++- .../process-info/ProcessMasterTab.tsx | 29 +- .../COMPANY_7/quality/inspection/page.tsx | 753 +++++++++++++++++- .../process-info/ProcessMasterTab.tsx | 29 +- .../COMPANY_8/quality/inspection/page.tsx | 753 +++++++++++++++++- .../process-info/ProcessMasterTab.tsx | 29 +- .../COMPANY_9/quality/inspection/page.tsx | 753 +++++++++++++++++- .../app/(main)/admin/report/sales/page.tsx | 155 ++-- .../SmartExcelUploadModal.tsx | 15 + 18 files changed, 5695 insertions(+), 185 deletions(-) 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 + || "설비명 없음"} +

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