From 6e7bdbf2848f7364dae5f901e6cb0c064a38609e Mon Sep 17 00:00:00 2001 From: Johngreen Date: Thu, 30 Oct 2025 17:40:22 +0900 Subject: [PATCH] =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../partMng/openBomReportExcelImportPopUp.jsp | 13 ++- src/com/pms/service/PartMngService.java | 106 +++++++++++------- 2 files changed, 75 insertions(+), 44 deletions(-) diff --git a/WebContent/WEB-INF/view/partMng/openBomReportExcelImportPopUp.jsp b/WebContent/WEB-INF/view/partMng/openBomReportExcelImportPopUp.jsp index 635e0c9..e0b6cb9 100644 --- a/WebContent/WEB-INF/view/partMng/openBomReportExcelImportPopUp.jsp +++ b/WebContent/WEB-INF/view/partMng/openBomReportExcelImportPopUp.jsp @@ -434,8 +434,17 @@ var gridFn = { ,datatype : "json" ,postData:{"targetObjId":"${objid}","docType":"PART_EXCEL_IMPORT","OBJID":"${CONTRACT_OBJID}"} ,loadComplete : function(data) { - // CSV 파일: 모품번을 그대로 표시 (수정 불필요) - // PARENT_PART_NO 컬럼에 이미 모품번이 들어있음 + // CSV 파일에서만 LEVEL 값을 PARENT_PART_NO 컬럼에 표시 + if(data && data.rows) { + for(var i = 0; i < data.rows.length; i++) { + var row = data.rows[i]; + // CSV 파일이고 LEVEL 값이 있는 경우 + if(row.IS_CSV === 'Y' && row.LEVEL && row.LEVEL !== '') { + // LEVEL 값을 PARENT_PART_NO 컬럼에 표시 (화면용) + grid.jqGrid('setCell', row.id, 'PARENT_PART_NO', row.LEVEL); + } + } + } gridFn.footerSummary(); } ,gridComplete : function() { diff --git a/src/com/pms/service/PartMngService.java b/src/com/pms/service/PartMngService.java index 86fbf9b..d495923 100644 --- a/src/com/pms/service/PartMngService.java +++ b/src/com/pms/service/PartMngService.java @@ -3232,25 +3232,48 @@ public class PartMngService extends BaseService { AtomicInteger emptyColCnt = new AtomicInteger(0); String noteMsg = ""; - int colIndex = 0; - - // 각 컬럼 파싱 (CSV: 상태, 모품번, 품번, 품명, 수량, 항목수량, ...) - String level = getCsvValue(values, colIndex++, emptyColCnt); // 0: 상태(수준) - String parentPartNo = getCsvValue(values, colIndex++, emptyColCnt); // 1: 모품번 - String partNo = getCsvValue(values, colIndex++, emptyColCnt); // 2: 품번 - String partName = getCsvValue(values, colIndex++, emptyColCnt); // 3: 품명 - String qty = getCsvValue(values, colIndex++, emptyColCnt); // 4: 수량 - String itemQty = getCsvValue(values, colIndex++, emptyColCnt); // 5: 항목수량 - String material = getCsvValue(values, colIndex++, emptyColCnt); // 6: 재료 - String heatTreatmentHardness = getCsvValue(values, colIndex++, emptyColCnt); // 7: 열처리경도 - String heatTreatmentMethod = getCsvValue(values, colIndex++, emptyColCnt); // 8: 열처리방법 - String surfaceTreatment = getCsvValue(values, colIndex++, emptyColCnt); // 9: 표면처리 - String supplier = getCsvValue(values, colIndex++, emptyColCnt); // 10: 공급업체 - String partType = getCsvValue(values, colIndex++, emptyColCnt); // 11: 범주이름 - - // CSV에서 모품번을 직접 제공하므로 별도 처리 불필요 - // level은 상태(수준) 값으로 사용됨 - // parentPartNo는 이미 1번 컬럼에서 읽음 + int colIndex = 0; + + // 각 컬럼 파싱 (CSV: 수준, 품번, 품명, 수량, ...) + String level = getCsvValue(values, colIndex++, emptyColCnt); // 0: 수준 + String partNo = getCsvValue(values, colIndex++, emptyColCnt); // 1: 품번 + String partName = getCsvValue(values, colIndex++, emptyColCnt); // 2: 품명 + String qty = getCsvValue(values, colIndex++, emptyColCnt); // 3: 수량 + String itemQty = getCsvValue(values, colIndex++, emptyColCnt); // 4: 항목수량 + String material = getCsvValue(values, colIndex++, emptyColCnt); // 5: 재료 + String heatTreatmentHardness = getCsvValue(values, colIndex++, emptyColCnt); // 6: 열처리경도 + String heatTreatmentMethod = getCsvValue(values, colIndex++, emptyColCnt); // 7: 열처리방법 + String surfaceTreatment = getCsvValue(values, colIndex++, emptyColCnt); // 8: 표면처리 + String supplier = getCsvValue(values, colIndex++, emptyColCnt); // 9: 공급업체 + String partType = getCsvValue(values, colIndex++, emptyColCnt); // 10: 범주이름 + + // 수준으로부터 부모 품번 찾기 + String parentPartNo = ""; + if (!StringUtils.isBlank(level)) { + // 숫자만 있는 경우 (1, 2, 3, 4 등) + try { + int currentDepth = Integer.parseInt(level); + + // 현재 깊이의 품번 저장 (다음 행에서 참조할 수 있도록) + if (!StringUtils.isBlank(partNo)) { + currentDepthPartNoMap.put(currentDepth, partNo); + } + + // 부모 찾기: 바로 이전 깊이의 최신 품번 + if (currentDepth > 1) { + int parentDepth = currentDepth - 1; + if (currentDepthPartNoMap.containsKey(parentDepth)) { + parentPartNo = currentDepthPartNoMap.get(parentDepth); + } + } + } catch (NumberFormatException e) { + // 숫자가 아닌 경우 (1.1, 1.4.1 등) - 기존 로직 사용 + String parentLevel = getParentLevel(level); + if (!StringUtils.isBlank(parentLevel) && levelToPartNoMap.containsKey(parentLevel)) { + parentPartNo = levelToPartNoMap.get(parentLevel); + } + } + } // 유효성 검증 if(!StringUtils.isBlank(parentPartNo) && rowIndex > 2) { @@ -4423,29 +4446,28 @@ public class PartMngService extends BaseService { insertMap.put("OBJID", CommonUtils.createObjId()); insertMap.put("BOM_REPORT_OBJID", objid); insertMap.put("PARENT_PART_NO", PARENT_PART_NO); - insertMap.put("PART_NO", PART_NO); - insertMap.put("PART_NAME", CommonUtils.checkNull((String)insertMap.get("PART_NAME"))); - insertMap.put("QTY", CommonUtils.checkNull((String)insertMap.get("QTY"))); - insertMap.put("ITEM_QTY", CommonUtils.checkNull((String)insertMap.get("ITEM_QTY"))); // 항목수량 추가 - insertMap.put("UNIT", CommonUtils.checkNull((String)insertMap.get("UNIT"))); - insertMap.put("SPEC", CommonUtils.checkNull((String)insertMap.get("SPEC"))); - insertMap.put("MATERIAL", CommonUtils.checkNull((String)insertMap.get("MATERIAL"))); - insertMap.put("THICKNESS", CommonUtils.checkNull((String)insertMap.get("THICKNESS"))); - insertMap.put("WIDTH", CommonUtils.checkNull((String)insertMap.get("WIDTH"))); - insertMap.put("HEIGHT", CommonUtils.checkNull((String)insertMap.get("HEIGHT"))); - insertMap.put("OUT_DIAMETER", CommonUtils.checkNull((String)insertMap.get("OUT_DIAMETER"))); - insertMap.put("IN_DIAMETER", CommonUtils.checkNull((String)insertMap.get("IN_DIAMETER"))); - insertMap.put("LENGTH", CommonUtils.checkNull((String)insertMap.get("LENGTH"))); - insertMap.put("PART_TYPE", CommonUtils.checkNull((String)insertMap.get("PART_TYPE"))); - insertMap.put("REMARK", CommonUtils.checkNull((String)insertMap.get("REMARK"))); - insertMap.put("SUPPLY_CODE", CommonUtils.checkNull((String)insertMap.get("SUPPLY_CODE"))); - insertMap.put("MAKER", CommonUtils.checkNull((String)insertMap.get("MAKER"))); - insertMap.put("POST_PROCESSING", CommonUtils.checkNull((String)insertMap.get("POST_PROCESSING"))); - insertMap.put("HEAT_TREATMENT_HARDNESS", CommonUtils.checkNull((String)insertMap.get("HEAT_TREATMENT_HARDNESS"))); - insertMap.put("HEAT_TREATMENT_METHOD", CommonUtils.checkNull((String)insertMap.get("HEAT_TREATMENT_METHOD"))); - insertMap.put("SURFACE_TREATMENT", CommonUtils.checkNull((String)insertMap.get("SURFACE_TREATMENT"))); - insertMap.put("STATUS", "deploy"); // 엑셀 업로드 시 deploy 상태로 저장 - insertMap.put("WRITER", CommonUtils.checkNull((String)paramMap.get("CONNECTUSERID"))); + insertMap.put("PART_NO", PART_NO); + insertMap.put("PART_NAME", CommonUtils.checkNull((String)insertMap.get("PART_NAME"))); + insertMap.put("QTY", CommonUtils.checkNull((String)insertMap.get("QTY"))); + insertMap.put("UNIT", CommonUtils.checkNull((String)insertMap.get("UNIT"))); + insertMap.put("SPEC", CommonUtils.checkNull((String)insertMap.get("SPEC"))); + insertMap.put("MATERIAL", CommonUtils.checkNull((String)insertMap.get("MATERIAL"))); + insertMap.put("THICKNESS", CommonUtils.checkNull((String)insertMap.get("THICKNESS"))); + insertMap.put("WIDTH", CommonUtils.checkNull((String)insertMap.get("WIDTH"))); + insertMap.put("HEIGHT", CommonUtils.checkNull((String)insertMap.get("HEIGHT"))); + insertMap.put("OUT_DIAMETER", CommonUtils.checkNull((String)insertMap.get("OUT_DIAMETER"))); + insertMap.put("IN_DIAMETER", CommonUtils.checkNull((String)insertMap.get("IN_DIAMETER"))); + insertMap.put("LENGTH", CommonUtils.checkNull((String)insertMap.get("LENGTH"))); + insertMap.put("PART_TYPE", CommonUtils.checkNull((String)insertMap.get("PART_TYPE"))); + insertMap.put("REMARK", CommonUtils.checkNull((String)insertMap.get("REMARK"))); + insertMap.put("SUPPLY_CODE", CommonUtils.checkNull((String)insertMap.get("SUPPLY_CODE"))); + insertMap.put("MAKER", CommonUtils.checkNull((String)insertMap.get("MAKER"))); + insertMap.put("POST_PROCESSING", CommonUtils.checkNull((String)insertMap.get("POST_PROCESSING"))); + insertMap.put("HEAT_TREATMENT_HARDNESS", CommonUtils.checkNull((String)insertMap.get("HEAT_TREATMENT_HARDNESS"))); + insertMap.put("HEAT_TREATMENT_METHOD", CommonUtils.checkNull((String)insertMap.get("HEAT_TREATMENT_METHOD"))); + insertMap.put("SURFACE_TREATMENT", CommonUtils.checkNull((String)insertMap.get("SURFACE_TREATMENT"))); + insertMap.put("STATUS", "deploy"); // 엑셀 업로드 시 deploy 상태로 저장 + insertMap.put("WRITER", CommonUtils.checkNull((String)paramMap.get("CONNECTUSERID"))); insertMap.put("CONTRACT_OBJID", CommonUtils.checkNull((String)paramMap.get("CONTRACT_OBJID"))); insertMap.put("PRODUCT_MGMT_OBJID", CommonUtils.checkNull((String)paramMap.get("product_mgmt_objid"))); -- 2.49.1