수정 #34

Merged
geonhee merged 1 commits from V20251023001 into main 2025-10-30 09:19:32 +00:00
2 changed files with 75 additions and 44 deletions

View File

@@ -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() {

View File

@@ -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")));