From 9015acb8dd948a2cc0e5126648c9bf230a3007af Mon Sep 17 00:00:00 2001 From: hjjeong Date: Thu, 12 Feb 2026 15:27:14 +0900 Subject: [PATCH 1/4] =?UTF-8?q?=ED=8C=8C=ED=8A=B8=20=EB=8B=A8=EA=B1=B4=20?= =?UTF-8?q?=EB=93=B1=EB=A1=9D,=20=ED=99=95=EC=A0=95=EC=8B=9C=20=EC=95=84?= =?UTF-8?q?=EB=A7=88=EB=9E=80=EC=8A=A4=20=EC=97=B0=EB=8F=99=20=ED=95=84?= =?UTF-8?q?=EC=88=98=20=EC=BB=AC=EB=9F=BC=20=EC=B6=94=EA=B0=80=EC=97=90=20?= =?UTF-8?q?=EB=94=B0=EB=A5=B8=20=EB=93=B1=EB=A1=9D=EC=B0=BD=20=EB=93=B1=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD,=20=ED=95=98=EB=93=9C=EC=BD=94=EB=94=A9=20?= =?UTF-8?q?=EB=90=98=EC=96=B4=EC=9E=88=EB=8D=98=20=EA=B0=92=EB=93=A4=20?= =?UTF-8?q?=EC=8B=A4=EC=A0=9C=20=EA=B0=92=EC=9C=BC=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../view/partMng/partMngDetailPopUp.jsp | 175 ++++++++++++++--- .../WEB-INF/view/partMng/partMngFormPopUp.jsp | 160 +++++++++++++--- .../WEB-INF/view/partMng/partMngTempList.jsp | 2 +- src/com/pms/mapper/partMng.xml | 97 +++++++++- src/com/pms/service/BatchService.java | 81 +++++--- src/com/pms/service/PartMngService.java | 176 ++++++++++++++++++ 6 files changed, 613 insertions(+), 78 deletions(-) diff --git a/WebContent/WEB-INF/view/partMng/partMngDetailPopUp.jsp b/WebContent/WEB-INF/view/partMng/partMngDetailPopUp.jsp index 62dde9a..a0f52a8 100644 --- a/WebContent/WEB-INF/view/partMng/partMngDetailPopUp.jsp +++ b/WebContent/WEB-INF/view/partMng/partMngDetailPopUp.jsp @@ -84,7 +84,7 @@ $(document).ready(function(){ fn_setReadOnly(); - window.resizeTo(820,750); + window.resizeTo(820,930); }); @@ -318,8 +318,19 @@ function fn_enableEdit(){ $('#SURFACE_TREATMENT').prop('readonly', false).prop('disabled', false); $('#MAKER').prop('readonly', false).prop('disabled', false); $('#PART_TYPE').prop('disabled', false); + $('#SPEC').prop('readonly', false).prop('disabled', false); $('#ACCTFG').prop('disabled', false); $('#ODRFG').prop('disabled', false); + $('#UNIT_DC').prop('readonly', false).prop('disabled', false); + $('#UNITMANG_DC').prop('readonly', false).prop('disabled', false); + $('#UNITCHNG_NB').prop('readonly', false).prop('disabled', false); + $('#LOT_FG').prop('disabled', false); + $('#USE_YN').prop('disabled', false); + $('#QC_FG').prop('disabled', false); + $('#SETITEM_FG').prop('disabled', false); + $('#REQ_FG').prop('disabled', false); + $('#UNIT_LENGTH').prop('readonly', false).prop('disabled', false); + $('#UNIT_QTY').prop('readonly', false).prop('disabled', false); $('#REMARK').prop('readonly', false).prop('disabled', false); // 버튼 표시 변경 @@ -328,40 +339,48 @@ function fn_enableEdit(){ $('#btnCancel').show(); } +// 숫자 검증 함수 +function isNumeric(value){ + if(value == null || value == '') return true; // 빈 값은 허용 + return /^[0-9]*\.?[0-9]*$/.test(value); +} + // 저장 기능 function fn_save(){ + // 필수값 검증 + if(!fnc_validate("form1")){ + return; + } + + // 숫자 필드 검증 + var unitchngNb = $('#UNITCHNG_NB').val(); + if(!isNumeric(unitchngNb)){ + alert("환산수량은 숫자만 입력 가능합니다."); + $('#UNITCHNG_NB').focus(); + return; + } + var unitLength = $('#UNIT_LENGTH').val(); + if(!isNumeric(unitLength)){ + alert("개당길이는 숫자만 입력 가능합니다."); + $('#UNIT_LENGTH').focus(); + return; + } + var unitQty = $('#UNIT_QTY').val(); + if(!isNumeric(unitQty)){ + alert("개당소요량은 숫자만 입력 가능합니다."); + $('#UNIT_QTY').focus(); + return; + } + if(!confirm("저장하시겠습니까?")){ return; } - // 유효성 검사 - var partName = $('#PART_NAME').val(); - if(!partName || partName.trim() == ""){ - alert("품명을 입력해주세요."); - $('#PART_NAME').focus(); - return; - } - - // 저장할 데이터 준비 - var saveData = { - OBJID: $('#OBJID').val(), - PART_NAME: $('#PART_NAME').val(), - MATERIAL: $('#MATERIAL').val(), - HEAT_TREATMENT_HARDNESS: $('#HEAT_TREATMENT_HARDNESS').val(), - HEAT_TREATMENT_METHOD: $('#HEAT_TREATMENT_METHOD').val(), - SURFACE_TREATMENT: $('#SURFACE_TREATMENT').val(), - MAKER: $('#MAKER').val(), - PART_TYPE: $('#PART_TYPE').val(), - ACCTFG: $('#ACCTFG').val(), - ODRFG: $('#ODRFG').val(), - REMARK: $('#REMARK').val() - }; - // 저장 요청 $.ajax({ url: "/partMng/updatePartDetail.do", type: "POST", - data: saveData, + data: $("#form1").serialize(), dataType: "json", success: function(data){ if(data.result == "success"){ @@ -539,7 +558,7 @@ section { - + @@ -557,24 +576,124 @@ section { + + + + + + + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/WebContent/WEB-INF/view/partMng/partMngFormPopUp.jsp b/WebContent/WEB-INF/view/partMng/partMngFormPopUp.jsp index d063eaf..ad8dbf5 100644 --- a/WebContent/WEB-INF/view/partMng/partMngFormPopUp.jsp +++ b/WebContent/WEB-INF/view/partMng/partMngFormPopUp.jsp @@ -61,13 +61,13 @@ $(document).ready(function(){ if('changeDesign' == '${param.ACTION_TYPE}'){ //alert('c'); - window.resizeTo(800,750); + window.resizeTo(800,850); //fnc_datepick(); }else if(fnc_isEmpty('${param.ACTION_TYPE}')){ - window.resizeTo(800,720); + window.resizeTo(800,850); //alert('r'); }else{//수정 - window.resizeTo(800,760); + window.resizeTo(800,850); //alert('e'); } }); @@ -204,16 +204,33 @@ function fileDelete(fileObjId,areaId){ } } +// 숫자 검증 함수 +function isNumeric(value){ + if(value == null || value == '') return true; // 빈 값은 허용 + return /^[0-9]*\.?[0-9]*$/.test(value); +} + function fn_save(){ - //var CHANGE_OPTION_Arr = new Array(); - // $('input:checkbox[name="CHANGE_OPTION"]').each(function() { - // if(this.checked){//checked 처리된 항목의 값 - // CHANGE_OPTION_Arr.push(this.value); - // } - // }); - // $("#CHANGE_OPTION_Arr").val(CHANGE_OPTION_Arr); - - + // 숫자 필드 검증 + var unitchngNb = $('#UNITCHNG_NB').val(); + if(!isNumeric(unitchngNb)){ + alert("환산수량은 숫자만 입력 가능합니다."); + $('#UNITCHNG_NB').focus(); + return; + } + var unitLength = $('#UNIT_LENGTH').val(); + if(!isNumeric(unitLength)){ + alert("개당길이는 숫자만 입력 가능합니다."); + $('#UNIT_LENGTH').focus(); + return; + } + var unitQty = $('#UNIT_QTY').val(); + if(!isNumeric(unitQty)){ + alert("개당소요량은 숫자만 입력 가능합니다."); + $('#UNIT_QTY').focus(); + return; + } + if(fnc_validate('form1')){ if(fn_overlapPartMng()){ if(confirm("저장하시겠습니까?")){ @@ -314,13 +331,13 @@ function fn_overlapPartMng(){ - + - + @@ -356,7 +373,7 @@ function fn_overlapPartMng(){ - + @@ -371,28 +388,129 @@ function fn_overlapPartMng(){ - + + - + - - + + + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/WebContent/WEB-INF/view/partMng/partMngTempList.jsp b/WebContent/WEB-INF/view/partMng/partMngTempList.jsp index 768c82f..0ae7e76 100644 --- a/WebContent/WEB-INF/view/partMng/partMngTempList.jsp +++ b/WebContent/WEB-INF/view/partMng/partMngTempList.jsp @@ -213,7 +213,7 @@ ui-jqgrid tr.jqgrow td { var target = "partMngPopUp"; - window.open(url,target,"width=600, height=900, menubars=no, scrollbars=yes, resizable=yes"); + window.open(url,target,"width=600, height=1200, menubars=no, scrollbars=yes, resizable=yes"); hiddenForm.action = url; hiddenForm.OBJID.value = objId; diff --git a/src/com/pms/mapper/partMng.xml b/src/com/pms/mapper/partMng.xml index 7d504a6..d390ba0 100644 --- a/src/com/pms/mapper/partMng.xml +++ b/src/com/pms/mapper/partMng.xml @@ -159,6 +159,16 @@ P.SURFACE_TREATMENT, P.ACCTFG, P.ODRFG, + P.UNIT_DC, + P.UNITMANG_DC, + P.UNITCHNG_NB, + P.LOT_FG, + P.USE_YN, + P.QC_FG, + P.SETITEM_FG, + P.REQ_FG, + P.UNIT_LENGTH, + P.UNIT_QTY, COALESCE(FILE_CNT.CU01_CNT, 0) CU01_CNT, COALESCE(FILE_CNT.CU02_CNT, 0) CU02_CNT, COALESCE(FILE_CNT.CU03_CNT, 0) CU03_CNT, @@ -659,7 +669,17 @@ HEAT_TREATMENT_METHOD, SURFACE_TREATMENT, ACCTFG, - ODRFG + ODRFG, + UNIT_DC, + UNITMANG_DC, + UNITCHNG_NB, + LOT_FG, + USE_YN, + QC_FG, + SETITEM_FG, + REQ_FG, + UNIT_LENGTH, + UNIT_QTY ) VALUES ( #{OBJID}::NUMERIC, #{PRODUCT_MGMT_OBJID}, @@ -707,7 +727,17 @@ #{HEAT_TREATMENT_METHOD}, #{SURFACE_TREATMENT}, #{ACCTFG}, - #{ODRFG} + #{ODRFG}, + #{UNIT_DC}, + #{UNITMANG_DC}, + #{UNITCHNG_NB}::NUMERIC, + COALESCE(#{LOT_FG}, '0'), + COALESCE(#{USE_YN}, '1'), + COALESCE(#{QC_FG}, '0'), + COALESCE(#{SETITEM_FG}, '0'), + COALESCE(#{REQ_FG}, '0'), + #{UNIT_LENGTH}, + #{UNIT_QTY} ) ON CONFLICT (OBJID) DO UPDATE @@ -753,7 +783,17 @@ HEAT_TREATMENT_METHOD = #{HEAT_TREATMENT_METHOD}, SURFACE_TREATMENT = #{SURFACE_TREATMENT}, ACCTFG = #{ACCTFG}, - ODRFG = #{ODRFG} + ODRFG = #{ODRFG}, + UNIT_DC = #{UNIT_DC}, + UNITMANG_DC = #{UNITMANG_DC}, + UNITCHNG_NB = #{UNITCHNG_NB}::NUMERIC, + LOT_FG = COALESCE(#{LOT_FG}, PART_MNG.LOT_FG), + USE_YN = COALESCE(#{USE_YN}, PART_MNG.USE_YN), + QC_FG = COALESCE(#{QC_FG}, PART_MNG.QC_FG), + SETITEM_FG = COALESCE(#{SETITEM_FG}, PART_MNG.SETITEM_FG), + REQ_FG = COALESCE(#{REQ_FG}, PART_MNG.REQ_FG), + UNIT_LENGTH = #{UNIT_LENGTH}, + UNIT_QTY = #{UNIT_QTY} @@ -2669,6 +2709,17 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.* PART_TYPE = #{PART_TYPE}, ACCTFG = #{ACCTFG}, ODRFG = #{ODRFG}, + SPEC = #{SPEC}, + UNIT_DC = #{UNIT_DC}, + UNITMANG_DC = #{UNITMANG_DC}, + UNITCHNG_NB = #{UNITCHNG_NB}::NUMERIC, + LOT_FG = #{LOT_FG}, + USE_YN = #{USE_YN}, + QC_FG = #{QC_FG}, + SETITEM_FG = #{SETITEM_FG}, + REQ_FG = #{REQ_FG}, + UNIT_LENGTH = #{UNIT_LENGTH}, + UNIT_QTY = #{UNIT_QTY}, REMARK = #{REMARK}, EDIT_DATE = NOW() WHERE OBJID = #{OBJID} @@ -7476,6 +7527,16 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.* ,SURFACE_TREATMENT ,ACCTFG ,ODRFG + ,UNIT_DC + ,UNITMANG_DC + ,UNITCHNG_NB + ,LOT_FG + ,USE_YN + ,QC_FG + ,SETITEM_FG + ,REQ_FG + ,UNIT_LENGTH + ,UNIT_QTY ) VALUES ( #{PART_OBJID}::NUMERIC ,#{PART_NO} @@ -7506,6 +7567,16 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.* ,#{SURFACE_TREATMENT} ,#{ACCTFG} ,#{ODRFG} + ,#{UNIT_DC} + ,#{UNITMANG_DC} + ,#{UNITCHNG_NB}::NUMERIC + ,COALESCE(#{LOT_FG}, '0') + ,COALESCE(#{USE_YN}, '1') + ,COALESCE(#{QC_FG}, '0') + ,COALESCE(#{SETITEM_FG}, '0') + ,COALESCE(#{REQ_FG}, '0') + ,#{UNIT_LENGTH} + ,#{UNIT_QTY} ) @@ -8179,7 +8250,15 @@ SELECT PM.OBJID PART_NAME, SPEC, acctfg, - odrfg + odrfg, + UNIT_DC, + UNITMANG_DC, + UNITCHNG_NB, + LOT_FG, + USE_YN, + QC_FG, + SETITEM_FG, + REQ_FG FROM PART_MNG WHERE STATUS = 'release' AND PART_NO IS NOT NULL @@ -8195,7 +8274,15 @@ SELECT PM.OBJID PART_NAME, SPEC, acctfg, - odrfg + odrfg, + UNIT_DC, + UNITMANG_DC, + UNITCHNG_NB, + LOT_FG, + USE_YN, + QC_FG, + SETITEM_FG, + REQ_FG FROM PART_MNG WHERE OBJID = #{objid} diff --git a/src/com/pms/service/BatchService.java b/src/com/pms/service/BatchService.java index 1b3bc7d..b502c15 100644 --- a/src/com/pms/service/BatchService.java +++ b/src/com/pms/service/BatchService.java @@ -1291,19 +1291,30 @@ public class BatchService extends BaseService { String odrFg = CommonUtils.checkNull(part.get("odrfg")); String itemDc = CommonUtils.checkNull(part.get("spec")); - // 하드코딩 고정값 - String coCd = "1000"; // 회사코드 - String unitDc = "1"; // 단위 - String unitmangDc = "1"; // 단위관리 - int unitchngNb = 1; // 단위변환 - String lotFg = "0"; // LOT구분 - String qcFg = "0"; // 검사구분 - String reqFg = "0"; // 청구구분 - String setitemFg = "0"; // 세트품목구분 - String useYn = "1"; // 사용여부 + // 회사코드 고정값 + String coCd = "1000"; + // DB에서 가져온 ERP 연동 필드 + String unitDc = CommonUtils.checkNull(part.get("unit_dc")); + String unitmangDc = CommonUtils.checkNull(part.get("unitmang_dc")); + String unitchngNbStr = CommonUtils.checkNull(part.get("unitchng_nb")); + int unitchngNb = 0; + try { + if (!unitchngNbStr.isEmpty()) { + unitchngNb = (int) Double.parseDouble(unitchngNbStr); + } + } catch (Exception e) { + // 변환 실패 시 0 유지 + } + String lotFg = CommonUtils.checkNull(part.get("lot_fg")); + String qcFg = CommonUtils.checkNull(part.get("qc_fg")); + String reqFg = CommonUtils.checkNull(part.get("req_fg")); + String setitemFg = CommonUtils.checkNull(part.get("setitem_fg")); + String useYn = CommonUtils.checkNull(part.get("use_yn")); - // 필수값 체크 - if (itemCd.isEmpty() || itemNm.isEmpty()) { + // 필수값 체크 - 모든 필수 필드가 있어야 ERP 전송 + if (itemCd.isEmpty() || itemNm.isEmpty() || acctFg.isEmpty() || odrFg.isEmpty() || + unitDc.isEmpty() || unitmangDc.isEmpty() || unitchngNb == 0 || + lotFg.isEmpty() || qcFg.isEmpty() || reqFg.isEmpty() || setitemFg.isEmpty() || useYn.isEmpty()) { failCount++; continue; } @@ -1388,23 +1399,47 @@ public class BatchService extends BaseService { String odrFg = CommonUtils.checkNull(part.get("odrfg")); String itemDc = CommonUtils.checkNull(part.get("spec")); - // 하드코딩 고정값 - String coCd = "1000"; // 회사코드 - String unitDc = "1"; // 단위 - String unitmangDc = "1"; // 단위관리 - int unitchngNb = 1; // 단위변환 - String lotFg = "0"; // LOT구분 - String qcFg = "0"; // 검사구분 - String reqFg = "0"; // 청구구분 - String setitemFg = "0"; // 세트품목구분 - String useYn = "1"; // 사용여부 + // 회사코드 고정값 + String coCd = "1000"; + // DB에서 가져온 ERP 연동 필드 + String unitDc = CommonUtils.checkNull(part.get("unit_dc")); + String unitmangDc = CommonUtils.checkNull(part.get("unitmang_dc")); + String unitchngNbStr = CommonUtils.checkNull(part.get("unitchng_nb")); + int unitchngNb = 0; + try { + if (!unitchngNbStr.isEmpty()) { + unitchngNb = (int) Double.parseDouble(unitchngNbStr); + } + } catch (Exception e) { + // 변환 실패 시 0 유지 + } + String lotFg = CommonUtils.checkNull(part.get("lot_fg")); + String qcFg = CommonUtils.checkNull(part.get("qc_fg")); + String reqFg = CommonUtils.checkNull(part.get("req_fg")); + String setitemFg = CommonUtils.checkNull(part.get("setitem_fg")); + String useYn = CommonUtils.checkNull(part.get("use_yn")); - // 필수값 체크 + // 필수값 체크 - 모든 필수 필드가 있어야 ERP 전송 if (itemCd.isEmpty() || itemNm.isEmpty()) { result.put("success", false); result.put("message", "품번 또는 품명이 없습니다."); return result; } + if (acctFg.isEmpty() || odrFg.isEmpty()) { + result.put("success", false); + result.put("message", "계정구분 또는 조달구분이 없습니다."); + return result; + } + if (unitDc.isEmpty() || unitmangDc.isEmpty() || unitchngNb == 0) { + result.put("success", false); + result.put("message", "재고단위, 관리단위, 환산수량이 없습니다."); + return result; + } + if (lotFg.isEmpty() || qcFg.isEmpty() || reqFg.isEmpty() || setitemFg.isEmpty() || useYn.isEmpty()) { + result.put("success", false); + result.put("message", "LOT구분, 검사여부, 의뢰여부, SET품여부, 사용여부가 없습니다."); + return result; + } // ERP로 전송 PartErpApiClient partErpClient = new PartErpApiClient(); diff --git a/src/com/pms/service/PartMngService.java b/src/com/pms/service/PartMngService.java index aa59002..fb38c31 100644 --- a/src/com/pms/service/PartMngService.java +++ b/src/com/pms/service/PartMngService.java @@ -3098,6 +3098,86 @@ public class PartMngService extends BaseService { } else { partMap.put("ODRFG", ""); } + // ERP 연동 필드 파싱 + String unitDc = getCellValue(row, columnIndex++, formatter, emptyColCnt); + partMap.put("UNIT_DC", unitDc.trim()); + + String unitmangDc = getCellValue(row, columnIndex++, formatter, emptyColCnt); + partMap.put("UNITMANG_DC", unitmangDc.trim()); + + String unitchngNb = getCellValue(row, columnIndex++, formatter, emptyColCnt); + partMap.put("UNITCHNG_NB", unitchngNb.trim()); + + // LOT구분 - 한글명 입력 시 코드값으로 변환 + String lotFg = getCellValue(row, columnIndex++, formatter, emptyColCnt); + if(!CommonUtils.isBlank(lotFg)){ + if("사용".equals(lotFg.trim())){ + partMap.put("LOT_FG", "1"); + } else if("미사용".equals(lotFg.trim())){ + partMap.put("LOT_FG", "0"); + } else { + partMap.put("LOT_FG", lotFg.trim()); + } + } else { + partMap.put("LOT_FG", "0"); + } + + // 사용여부 - 한글명 입력 시 코드값으로 변환 + String useYn = getCellValue(row, columnIndex++, formatter, emptyColCnt); + if(!CommonUtils.isBlank(useYn)){ + if("사용".equals(useYn.trim())){ + partMap.put("USE_YN", "1"); + } else if("미사용".equals(useYn.trim())){ + partMap.put("USE_YN", "0"); + } else { + partMap.put("USE_YN", useYn.trim()); + } + } else { + partMap.put("USE_YN", "1"); + } + + // 검사여부 - 한글명 입력 시 코드값으로 변환 + String qcFg = getCellValue(row, columnIndex++, formatter, emptyColCnt); + if(!CommonUtils.isBlank(qcFg)){ + if("검사".equals(qcFg.trim())){ + partMap.put("QC_FG", "1"); + } else if("무검사".equals(qcFg.trim())){ + partMap.put("QC_FG", "0"); + } else { + partMap.put("QC_FG", qcFg.trim()); + } + } else { + partMap.put("QC_FG", "0"); + } + + // SET품여부 - 한글명 입력 시 코드값으로 변환 + String setitemFg = getCellValue(row, columnIndex++, formatter, emptyColCnt); + if(!CommonUtils.isBlank(setitemFg)){ + if("여".equals(setitemFg.trim())){ + partMap.put("SETITEM_FG", "1"); + } else if("부".equals(setitemFg.trim())){ + partMap.put("SETITEM_FG", "0"); + } else { + partMap.put("SETITEM_FG", setitemFg.trim()); + } + } else { + partMap.put("SETITEM_FG", "0"); + } + + // 의뢰여부 - 한글명 입력 시 코드값으로 변환 + String reqFg = getCellValue(row, columnIndex++, formatter, emptyColCnt); + if(!CommonUtils.isBlank(reqFg)){ + if("여".equals(reqFg.trim())){ + partMap.put("REQ_FG", "1"); + } else if("부".equals(reqFg.trim())){ + partMap.put("REQ_FG", "0"); + } else { + partMap.put("REQ_FG", reqFg.trim()); + } + } else { + partMap.put("REQ_FG", "0"); + } + //비고(REMARK) partMap.put("REMARK", getCellValue(row, columnIndex++, formatter, emptyColCnt)); @@ -3821,6 +3901,8 @@ public class PartMngService extends BaseService { // 4: 수량(QTY), 5: 항목수량(ITEM_QTY), 6: 재료(MATERIAL) // 7: 열처리경도(HEAT_TREATMENT_HARDNESS), 8: 열처리방법(HEAT_TREATMENT_METHOD), 9: 표면처리(SURFACE_TREATMENT) // 10: 공급업체(SUPPLIER), 11: 범주이름(PART_TYPE), 12: 계정구분(ACCTFG), 13: 조달구분(ODRFG) + // 14: 재고단위(UNIT_DC), 15: 관리단위(UNITMANG_DC), 16: 환산수량(UNITCHNG_NB) + // 17: LOT구분(LOT_FG), 18: 사용여부(USE_YN), 19: 검사여부(QC_FG), 20: SET품여부(SETITEM_FG), 21: 의뢰여부(REQ_FG) String parentPartNo = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 모품번 String partNo = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 품번 @@ -3835,6 +3917,15 @@ public class PartMngService extends BaseService { String partType = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 범주이름 String acctfg = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 계정구분 String odrfg = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 조달구분 + // ERP 연동 필드 파싱 + String unitDc = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 재고단위 + String unitmangDc = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 관리단위 + String unitchngNb = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 환산수량 + String lotFg = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // LOT구분 + String useYn = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 사용여부 + String qcFg = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 검사여부 + String setitemFg = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // SET품여부 + String reqFg = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 의뢰여부 // 빈 행 체크 if(StringUtils.isBlank(partNo) && StringUtils.isBlank(partName)){ @@ -3981,6 +4072,77 @@ public class PartMngService extends BaseService { } else { partMap.put("ODRFG", ""); } + + // ERP 연동 필드 + partMap.put("UNIT_DC", unitDc); + partMap.put("UNITMANG_DC", unitmangDc); + partMap.put("UNITCHNG_NB", unitchngNb); + + // LOT구분 - 한글명 입력 시 코드값으로 변환 + if(!StringUtils.isBlank(lotFg)){ + if("사용".equals(lotFg.trim())){ + partMap.put("LOT_FG", "1"); + } else if("미사용".equals(lotFg.trim())){ + partMap.put("LOT_FG", "0"); + } else { + partMap.put("LOT_FG", lotFg); + } + } else { + partMap.put("LOT_FG", "0"); + } + + // 사용여부 - 한글명 입력 시 코드값으로 변환 + if(!StringUtils.isBlank(useYn)){ + if("사용".equals(useYn.trim())){ + partMap.put("USE_YN", "1"); + } else if("미사용".equals(useYn.trim())){ + partMap.put("USE_YN", "0"); + } else { + partMap.put("USE_YN", useYn); + } + } else { + partMap.put("USE_YN", "1"); + } + + // 검사여부 - 한글명 입력 시 코드값으로 변환 + if(!StringUtils.isBlank(qcFg)){ + if("검사".equals(qcFg.trim())){ + partMap.put("QC_FG", "1"); + } else if("무검사".equals(qcFg.trim())){ + partMap.put("QC_FG", "0"); + } else { + partMap.put("QC_FG", qcFg); + } + } else { + partMap.put("QC_FG", "0"); + } + + // SET품여부 - 한글명 입력 시 코드값으로 변환 + if(!StringUtils.isBlank(setitemFg)){ + if("여".equals(setitemFg.trim())){ + partMap.put("SETITEM_FG", "1"); + } else if("부".equals(setitemFg.trim())){ + partMap.put("SETITEM_FG", "0"); + } else { + partMap.put("SETITEM_FG", setitemFg); + } + } else { + partMap.put("SETITEM_FG", "0"); + } + + // 의뢰여부 - 한글명 입력 시 코드값으로 변환 + if(!StringUtils.isBlank(reqFg)){ + if("여".equals(reqFg.trim())){ + partMap.put("REQ_FG", "1"); + } else if("부".equals(reqFg.trim())){ + partMap.put("REQ_FG", "0"); + } else { + partMap.put("REQ_FG", reqFg); + } + } else { + partMap.put("REQ_FG", "0"); + } + partMap.put("NOTE", noteMsg); if(logging) logger.info("partMap:"+partMap); @@ -4775,6 +4937,20 @@ public class PartMngService extends BaseService { // 계정구분, 조달구분 insertMap.put("ACCTFG", CommonUtils.checkNull((String)insertMap.get("ACCTFG"))); insertMap.put("ODRFG", CommonUtils.checkNull((String)insertMap.get("ODRFG"))); + // ERP 연동 필드 + insertMap.put("UNIT_DC", CommonUtils.checkNull((String)insertMap.get("UNIT_DC"))); + insertMap.put("UNITMANG_DC", CommonUtils.checkNull((String)insertMap.get("UNITMANG_DC"))); + insertMap.put("UNITCHNG_NB", CommonUtils.checkNull((String)insertMap.get("UNITCHNG_NB"))); + String lotFgVal = CommonUtils.checkNull((String)insertMap.get("LOT_FG")); + insertMap.put("LOT_FG", StringUtils.isBlank(lotFgVal) ? "0" : lotFgVal); + String useYnVal = CommonUtils.checkNull((String)insertMap.get("USE_YN")); + insertMap.put("USE_YN", StringUtils.isBlank(useYnVal) ? "1" : useYnVal); + String qcFgVal = CommonUtils.checkNull((String)insertMap.get("QC_FG")); + insertMap.put("QC_FG", StringUtils.isBlank(qcFgVal) ? "0" : qcFgVal); + String setitemFgVal = CommonUtils.checkNull((String)insertMap.get("SETITEM_FG")); + insertMap.put("SETITEM_FG", StringUtils.isBlank(setitemFgVal) ? "0" : setitemFgVal); + String reqFgVal = CommonUtils.checkNull((String)insertMap.get("REQ_FG")); + insertMap.put("REQ_FG", StringUtils.isBlank(reqFgVal) ? "0" : reqFgVal); insertMap.put("STATUS", "deploy"); // 엑셀 업로드 시 deploy 상태로 저장 insertMap.put("WRITER", CommonUtils.checkNull((String)paramMap.get("CONNECTUSERID"))); -- 2.49.1 From 111889ad099cf4f3102222dc36ce089c022b2825 Mon Sep 17 00:00:00 2001 From: hjjeong Date: Thu, 12 Feb 2026 16:45:42 +0900 Subject: [PATCH 2/4] =?UTF-8?q?=ED=92=88=EB=AA=A9=20=EC=BB=AC=EB=9F=BC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20=ED=8C=8C?= =?UTF-8?q?=ED=8A=B8=20=EC=97=91=EC=85=80=20=EC=97=85=EB=A1=9C=EB=93=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95(api=EA=B4=80=EB=A0=A8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../view/partMng/openPartExcelImportPopUp.jsp | 102 +++++++++++++++++- .../view/partMng/partMngDetailPopUp.jsp | 1 + .../WEB-INF/view/partMng/partMngFormPopUp.jsp | 1 + .../WEB-INF/view/partMng/partMngList.jsp | 34 +++--- .../WEB-INF/view/partMng/partMngTempList.jsp | 27 ++--- .../template/PART_EXCEL_IMPORT_TEMPLATE.xlsx | Bin 89209 -> 127127 bytes src/com/pms/mapper/partMng.xml | 7 ++ src/com/pms/service/BatchService.java | 21 +++- src/com/pms/service/PartMngService.java | 42 ++++++-- 9 files changed, 198 insertions(+), 37 deletions(-) diff --git a/WebContent/WEB-INF/view/partMng/openPartExcelImportPopUp.jsp b/WebContent/WEB-INF/view/partMng/openPartExcelImportPopUp.jsp index 32c6a4f..1be877a 100644 --- a/WebContent/WEB-INF/view/partMng/openPartExcelImportPopUp.jsp +++ b/WebContent/WEB-INF/view/partMng/openPartExcelImportPopUp.jsp @@ -49,7 +49,8 @@ $(document).ready(function(){ url: "" ,datatype: "local" ,colNames: ["결과", - "품번","품명","재료","열처리경도","열처리방법","표면처리","공급업체","범주 이름","계정구분","조달구분","비고"] //PART구분(부품 유형) + "품번","품명","재료","열처리경도","열처리방법","표면처리","메이커","범주 이름","규격","계정구분","조달구분", + "재고단위","관리단위","환산수량","LOT구분","사용여부","검사여부","SET품여부","의뢰여부","개당길이","개당소요량","비고"] //PART구분(부품 유형) ,colModel: [ /* */ {name:"NOTE",index:"NOTE", width: 200, align:"left", hidden: false, sortable:false, editable:true @@ -157,6 +158,13 @@ $(document).ready(function(){ } } } + ,{name:"SPEC",index:"SPEC", width: 100, align:"center", hidden: false, sortable:false, editable:true + ,editoptions:{ + dataInit : function(e){ + e.style.fontSize = 13; + } + } + } ,{name:"ACCTFG" ,index:"ACCTFG" , width:80, align:"center", hidden:false, sortable:false, editable: true ,edittype :"select" ,formatter :"select" @@ -172,13 +180,103 @@ $(document).ready(function(){ ,edittype :"select" ,formatter :"select" ,editoptions:{ - value: {"":"선택","0":"구매","1":"생산"} + value: {"":"선택","0":"구매","1":"생산","8":"Phantom"} ,dataInit : function(e){ e.style.width = "92%"; e.style.fontSize = 13; } } } + ,{name:"UNIT_DC",index:"UNIT_DC", width: 70, align:"center", hidden: false, sortable:false, editable:true + ,editoptions:{ + dataInit : function(e){ + e.style.fontSize = 13; + } + } + } + ,{name:"UNITMANG_DC",index:"UNITMANG_DC", width: 70, align:"center", hidden: false, sortable:false, editable:true + ,editoptions:{ + dataInit : function(e){ + e.style.fontSize = 13; + } + } + } + ,{name:"UNITCHNG_NB",index:"UNITCHNG_NB", width: 70, align:"center", hidden: false, sortable:false, editable:true + ,editoptions:{ + dataInit : function(e){ + e.style.fontSize = 13; + } + } + } + ,{name:"LOT_FG" ,index:"LOT_FG" , width:70, align:"center", hidden:false, sortable:false, editable: true + ,edittype :"select" + ,formatter :"select" + ,editoptions:{ + value: {"0":"미사용","1":"사용"} + ,dataInit : function(e){ + e.style.width = "92%"; + e.style.fontSize = 13; + } + } + } + ,{name:"USE_YN" ,index:"USE_YN" , width:70, align:"center", hidden:false, sortable:false, editable: true + ,edittype :"select" + ,formatter :"select" + ,editoptions:{ + value: {"1":"사용","0":"미사용"} + ,dataInit : function(e){ + e.style.width = "92%"; + e.style.fontSize = 13; + } + } + } + ,{name:"QC_FG" ,index:"QC_FG" , width:70, align:"center", hidden:false, sortable:false, editable: true + ,edittype :"select" + ,formatter :"select" + ,editoptions:{ + value: {"0":"무검사","1":"검사"} + ,dataInit : function(e){ + e.style.width = "92%"; + e.style.fontSize = 13; + } + } + } + ,{name:"SETITEM_FG" ,index:"SETITEM_FG" , width:70, align:"center", hidden:false, sortable:false, editable: true + ,edittype :"select" + ,formatter :"select" + ,editoptions:{ + value: {"0":"부","1":"여"} + ,dataInit : function(e){ + e.style.width = "92%"; + e.style.fontSize = 13; + } + } + } + ,{name:"REQ_FG" ,index:"REQ_FG" , width:70, align:"center", hidden:false, sortable:false, editable: true + ,edittype :"select" + ,formatter :"select" + ,editoptions:{ + value: {"0":"부","1":"여"} + ,dataInit : function(e){ + e.style.width = "92%"; + e.style.fontSize = 13; + } + } + } + ,{name:"UNIT_LENGTH",index:"UNIT_LENGTH", width: 70, align:"center", hidden: false, sortable:false, editable:true + ,editoptions:{ + dataInit : function(e){ + e.style.fontSize = 13; + } + } + } + ,{name:"UNIT_QTY",index:"UNIT_QTY", width: 80, align:"center", hidden: false, sortable:false, editable:true + ,editoptions:{ + dataInit : function(e){ + e.style.fontSize = 13; + } + } + } ,{name:"REMARK",index:"REMARK", width: 130, align:"center", hidden: false, sortable:false, editable:true ,editoptions:{ dataInit : function(e){ diff --git a/WebContent/WEB-INF/view/partMng/partMngDetailPopUp.jsp b/WebContent/WEB-INF/view/partMng/partMngDetailPopUp.jsp index a0f52a8..3f7b38d 100644 --- a/WebContent/WEB-INF/view/partMng/partMngDetailPopUp.jsp +++ b/WebContent/WEB-INF/view/partMng/partMngDetailPopUp.jsp @@ -599,6 +599,7 @@ section { + diff --git a/WebContent/WEB-INF/view/partMng/partMngFormPopUp.jsp b/WebContent/WEB-INF/view/partMng/partMngFormPopUp.jsp index ad8dbf5..169eed2 100644 --- a/WebContent/WEB-INF/view/partMng/partMngFormPopUp.jsp +++ b/WebContent/WEB-INF/view/partMng/partMngFormPopUp.jsp @@ -416,6 +416,7 @@ function fn_overlapPartMng(){ + diff --git a/WebContent/WEB-INF/view/partMng/partMngList.jsp b/WebContent/WEB-INF/view/partMng/partMngList.jsp index 5ab3b5e..071c468 100644 --- a/WebContent/WEB-INF/view/partMng/partMngList.jsp +++ b/WebContent/WEB-INF/view/partMng/partMngList.jsp @@ -156,7 +156,7 @@ String connector = person.getUserId(); }); var columns = [ - {title:'OBJID', field:'OBJID' ,visible:false }, + {title:'OBJID', field:'OBJID' ,visible:false ,frozen:true}, //{headerHozAlign : 'center', hozAlign : 'center', width : '30', title : '순', field : 'NUM' , headersorting:false}, //{headerHozAlign : 'center', hozAlign : 'left ', width : '100', title : '프로젝트번호', field : 'PROJECT_NO' }, @@ -174,14 +174,14 @@ String connector = person.getUserId(); }, */ //{headerHozAlign : 'center', hozAlign : 'left', width : '125', title : '모품번', field : 'PARENT_PART_INFO' }, - {headerHozAlign : 'center', hozAlign : 'left', width : '250', title : '품번', field : 'PART_NO', + {headerHozAlign : 'center', hozAlign : 'left', width : '180', title : '품번', field : 'PART_NO', frozen:true, formatter:fnc_createGridAnchorTag, cellClick:function(e, cell){ var objid = fnc_checkNull(cell.getData().OBJID); openPartMngPopup(objid); } }, - {headerHozAlign : 'center', hozAlign : 'left', /*width : '200',*/ title : '품명', field : 'PART_NAME' }, + {headerHozAlign : 'center', hozAlign : 'left', width : '180', title : '품명', field : 'PART_NAME' ,frozen:true}, // {headerHozAlign : 'center', hozAlign : 'center', width : '50', title : '수량', field : 'BOM_QTY' }, //Q_QTY QTY QTY_P {headerHozAlign : 'center', hozAlign : 'center', width : '60', title : '3D', field : 'CU01_CNT', formatter:fnc_subInfoValueFormatter, @@ -215,19 +215,21 @@ String connector = person.getUserId(); {headerHozAlign : 'center', hozAlign : 'center', width : '120', title : '열처리방법', field : 'HEAT_TREATMENT_METHOD' }, {headerHozAlign : 'center', hozAlign : 'center', width : '120', title : '표면처리', field : 'SURFACE_TREATMENT' }, {headerHozAlign : 'center', hozAlign : 'center', width : '150', title : '메이커', field : 'MAKER' }, - {headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '범주 이름', field : 'PART_TYPE_TITLE' }, - - // {headerHozAlign : 'center', hozAlign : 'center', width : '90', title : '재질', field : 'MATERIAL' }, - // {headerHozAlign : 'center', hozAlign : 'left', width : '90', title : '사양(규격)', field : 'SPEC' }, - // {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '후처리', field : 'POST_PROCESSING' }, - // {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : 'MAKER', field : 'MAKER' }, - // {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '대분류', field : 'MAJOR_CATEGORY' }, - // {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '중분류', field : 'SUB_CATEGORY' }, - //{headerHozAlign : 'center', hozAlign : 'center', width : '90', title : 'Revision', field : 'REVISION' }, - //{headerHozAlign : 'center', hozAlign : 'center', width : '90', title : 'EO No', field : 'EO_NO' }, - //{headerHozAlign : 'center', hozAlign : 'center', width : '80', title : 'EO Date', field : 'EO_DATE' }, -// {headerHozAlign : 'center', hozAlign : 'center', width : '88', title : 'PART구분', field : 'PART_TYPE_TITLE' }, - {headerHozAlign : 'center', hozAlign : 'center', width : '120', title : '비고', field : 'REMARK' } + {headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '범주 이름', field : 'PART_TYPE_TITLE' }, + {headerHozAlign : 'center', hozAlign : 'left', width : '100', title : '규격', field : 'SPEC' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '계정구분', field : 'ACCTFG_NM' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '조달구분', field : 'ODRFG_NM' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '재고단위', field : 'UNIT_DC' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '관리단위', field : 'UNITMANG_DC' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '환산수량', field : 'UNITCHNG_NB' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : 'LOT구분', field : 'LOT_FG_NM' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '사용여부', field : 'USE_YN_NM' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '검사여부', field : 'QC_FG_NM' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '90', title : 'SET품여부', field : 'SETITEM_FG_NM' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '의뢰여부', field : 'REQ_FG_NM' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '개당길이', field : 'UNIT_LENGTH' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '90', title : '개당소요량', field : 'UNIT_QTY' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '120', title : '비고', field : 'REMARK' } ]; //var grid; diff --git a/WebContent/WEB-INF/view/partMng/partMngTempList.jsp b/WebContent/WEB-INF/view/partMng/partMngTempList.jsp index 0ae7e76..5f2543a 100644 --- a/WebContent/WEB-INF/view/partMng/partMngTempList.jsp +++ b/WebContent/WEB-INF/view/partMng/partMngTempList.jsp @@ -144,14 +144,14 @@ ui-jqgrid tr.jqgrow td { // {headerHozAlign : 'center', hozAlign : 'center', width : '60', title : '순', field : 'RNUM' ,frozen:true}, // {headerHozAlign : 'center', hozAlign : 'left', width : '125', title : '모품번', field : 'PARENT_PART_INFO' ,frozen:true}, - {headerHozAlign : 'center', hozAlign : 'left', width : '250', title : '품번', field : 'PART_NO',frozen:true, + {headerHozAlign : 'center', hozAlign : 'left', width : '180', title : '품번', field : 'PART_NO',frozen:true, formatter:fnc_createGridAnchorTag, cellClick:function(e, cell){ var objid = fnc_checkNull(cell.getData().OBJID); openPartMngPopup(objid); } }, - {headerHozAlign : 'center', hozAlign : 'left', /*width : '200',*/ title : '품명', field : 'PART_NAME' ,frozen:true}, + {headerHozAlign : 'center', hozAlign : 'left', width : '180', title : '품명', field : 'PART_NAME' ,frozen:true}, // {headerHozAlign : 'center', hozAlign : 'center', width : '70', title : '수량', field : 'Q_QTY' }, {headerHozAlign : 'center', hozAlign : 'center', width : '60', title : '3D', field : 'CU01_CNT', formatter:fnc_subInfoValueFormatter, @@ -186,16 +186,19 @@ ui-jqgrid tr.jqgrow td { {headerHozAlign : 'center', hozAlign : 'center', width : '120', title : '표면처리', field : 'SURFACE_TREATMENT' }, {headerHozAlign : 'center', hozAlign : 'center', width : '150', title : '메이커', field : 'MAKER' }, {headerHozAlign : 'center', hozAlign : 'center', width : '100', title : '범주 이름', field : 'PART_TYPE_TITLE' }, - - // {headerHozAlign : 'center', hozAlign : 'left', width : '190', title : '사양(규격)', field : 'SPEC' }, -// {headerHozAlign : 'center', hozAlign : 'center', width : '90', title : '후처리', field : 'POST_PROCESSING' }, -// {headerHozAlign : 'center', hozAlign : 'center', width : '90', title : 'MAKER', field : 'MAKER' }, -// {headerHozAlign : 'center', hozAlign : 'center', width : '120', title : '대분류', field : 'MAJOR_CATEGORY' }, -// {headerHozAlign : 'center', hozAlign : 'center', width : '120', title : '중분류', field : 'SUB_CATEGORY' }, -// {headerHozAlign : 'center', hozAlign : 'center', width : '90', title : 'Revision', field : 'REVISION' }, -// {headerHozAlign : 'center', hozAlign : 'center', width : '90', title : 'EO No', field : 'EO_NO' }, -// {headerHozAlign : 'center', hozAlign : 'center', width : '90', title : 'EO Date', field : 'EO_DATE' }, -// {headerHozAlign : 'center', hozAlign : 'center', width : '90', title : 'PART 구분', field : 'PART_TYPE_TITLE' }, + {headerHozAlign : 'center', hozAlign : 'left', width : '100', title : '규격', field : 'SPEC' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '계정구분', field : 'ACCTFG_NM' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '조달구분', field : 'ODRFG_NM' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '재고단위', field : 'UNIT_DC' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '관리단위', field : 'UNITMANG_DC' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '환산수량', field : 'UNITCHNG_NB' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : 'LOT구분', field : 'LOT_FG_NM' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '사용여부', field : 'USE_YN_NM' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '검사여부', field : 'QC_FG_NM' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '90', title : 'SET품여부', field : 'SETITEM_FG_NM' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '의뢰여부', field : 'REQ_FG_NM' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '80', title : '개당길이', field : 'UNIT_LENGTH' }, + {headerHozAlign : 'center', hozAlign : 'center', width : '90', title : '개당소요량', field : 'UNIT_QTY' }, {headerHozAlign : 'center', hozAlign : 'center', width : '120', title : '비고', field : 'REMARK' } ]; diff --git a/WebContent/template/PART_EXCEL_IMPORT_TEMPLATE.xlsx b/WebContent/template/PART_EXCEL_IMPORT_TEMPLATE.xlsx index b2c24546fd4ad2178bb611e2ed97b9136acf831d..ebf7d495bc1b4c3b0e6ebda9f29a0ceaecfb084c 100644 GIT binary patch literal 127127 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 z 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 literal 89209 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 diff --git a/src/com/pms/mapper/partMng.xml b/src/com/pms/mapper/partMng.xml index d390ba0..50f0d6d 100644 --- a/src/com/pms/mapper/partMng.xml +++ b/src/com/pms/mapper/partMng.xml @@ -158,15 +158,22 @@ P.HEAT_TREATMENT_METHOD, P.SURFACE_TREATMENT, P.ACCTFG, + (SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = P.ACCTFG) AS ACCTFG_NM, P.ODRFG, + CASE WHEN P.ODRFG = '0' THEN '구매' WHEN P.ODRFG = '1' THEN '생산' WHEN P.ODRFG = '8' THEN 'Phantom' ELSE '' END AS ODRFG_NM, P.UNIT_DC, P.UNITMANG_DC, P.UNITCHNG_NB, P.LOT_FG, + CASE WHEN P.LOT_FG = '1' THEN '사용' WHEN P.LOT_FG = '0' THEN '미사용' ELSE '' END AS LOT_FG_NM, P.USE_YN, + CASE WHEN P.USE_YN = '1' THEN '사용' WHEN P.USE_YN = '0' THEN '미사용' ELSE '' END AS USE_YN_NM, P.QC_FG, + CASE WHEN P.QC_FG = '1' THEN '검사' WHEN P.QC_FG = '0' THEN '무검사' ELSE '' END AS QC_FG_NM, P.SETITEM_FG, + CASE WHEN P.SETITEM_FG = '1' THEN '여' WHEN P.SETITEM_FG = '0' THEN '부' ELSE '' END AS SETITEM_FG_NM, P.REQ_FG, + CASE WHEN P.REQ_FG = '1' THEN '여' WHEN P.REQ_FG = '0' THEN '부' ELSE '' END AS REQ_FG_NM, P.UNIT_LENGTH, P.UNIT_QTY, COALESCE(FILE_CNT.CU01_CNT, 0) CU01_CNT, diff --git a/src/com/pms/service/BatchService.java b/src/com/pms/service/BatchService.java index b502c15..82b9dc0 100644 --- a/src/com/pms/service/BatchService.java +++ b/src/com/pms/service/BatchService.java @@ -1441,10 +1441,29 @@ public class BatchService extends BaseService { return result; } - // ERP로 전송 + // ERP로 전송 - 전송 데이터 로그 출력 + System.out.println("====== ERP 전송 데이터 ======"); + System.out.println("coCd: " + coCd); + System.out.println("itemCd(품번): " + itemCd); + System.out.println("itemNm(품명): " + itemNm); + System.out.println("itemDc(규격): " + itemDc); + System.out.println("acctFg(계정구분): " + acctFg); + System.out.println("odrFg(조달구분): " + odrFg); + System.out.println("unitDc(재고단위): " + unitDc); + System.out.println("unitmangDc(관리단위): " + unitmangDc); + System.out.println("unitchngNb(환산수량): " + unitchngNb); + System.out.println("lotFg(LOT구분): " + lotFg); + System.out.println("qcFg(검사여부): " + qcFg); + System.out.println("reqFg(의뢰여부): " + reqFg); + System.out.println("setitemFg(SET품여부): " + setitemFg); + System.out.println("useYn(사용여부): " + useYn); + System.out.println("============================="); + PartErpApiClient partErpClient = new PartErpApiClient(); String response = partErpClient.sendPartToErp(baseUrl, coCd, itemCd, itemNm, itemDc, acctFg, odrFg, unitDc, unitmangDc, unitchngNb, lotFg, qcFg, reqFg, setitemFg, useYn); + + System.out.println("ERP 응답: " + response); // 응답 확인 if (response.contains("\"resultCode\":0") || response.contains("\"resultCode\":\"0\"")) { diff --git a/src/com/pms/service/PartMngService.java b/src/com/pms/service/PartMngService.java index fb38c31..5870cac 100644 --- a/src/com/pms/service/PartMngService.java +++ b/src/com/pms/service/PartMngService.java @@ -3066,6 +3066,10 @@ public class PartMngService extends BaseService { } } + // 규격(SPEC) + String specValue = getCellValue(row, columnIndex++, formatter, emptyColCnt); + partMap.put("SPEC", specValue.trim()); + // 계정구분(ACCTFG) - 한글명 입력 시 코드값으로 변환 String acctfgValue = getCellValue(row, columnIndex++, formatter, emptyColCnt); if(!CommonUtils.isBlank(acctfgValue)){ @@ -3085,13 +3089,15 @@ public class PartMngService extends BaseService { } else { partMap.put("ACCTFG", ""); } - // 조달구분(ODRFG) - 한글명 입력 시 코드값으로 변환 + // 조달구분(ODRFG) - 한글명 입력 시 코드값으로 변환 (0:구매, 1:생산, 8:Phantom) String odrfgValue = getCellValue(row, columnIndex++, formatter, emptyColCnt); if(!CommonUtils.isBlank(odrfgValue)){ if("구매".equals(odrfgValue.trim())){ partMap.put("ODRFG", "0"); } else if("생산".equals(odrfgValue.trim())){ partMap.put("ODRFG", "1"); + } else if("Phantom".equalsIgnoreCase(odrfgValue.trim())){ + partMap.put("ODRFG", "8"); } else { partMap.put("ODRFG", odrfgValue); // 숫자면 그대로 } @@ -3178,6 +3184,14 @@ public class PartMngService extends BaseService { partMap.put("REQ_FG", "0"); } + // 개당길이(UNIT_LENGTH) + String unitLength = getCellValue(row, columnIndex++, formatter, emptyColCnt); + partMap.put("UNIT_LENGTH", unitLength.trim()); + + // 개당소요량(UNIT_QTY) + String unitQty = getCellValue(row, columnIndex++, formatter, emptyColCnt); + partMap.put("UNIT_QTY", unitQty.trim()); + //비고(REMARK) partMap.put("REMARK", getCellValue(row, columnIndex++, formatter, emptyColCnt)); @@ -3637,12 +3651,14 @@ public class PartMngService extends BaseService { } else { partMap.put("ACCTFG", ""); } - // 조달구분(ODRFG) - 한글명 입력 시 코드값으로 변환 + // 조달구분(ODRFG) - 한글명 입력 시 코드값으로 변환 (0:구매, 1:생산, 8:Phantom) if(!CommonUtils.isBlank(odrfg)){ if("구매".equals(odrfg.trim())){ partMap.put("ODRFG", "0"); } else if("생산".equals(odrfg.trim())){ partMap.put("ODRFG", "1"); + } else if("Phantom".equalsIgnoreCase(odrfg.trim())){ + partMap.put("ODRFG", "8"); } else { partMap.put("ODRFG", odrfg); // 숫자면 그대로 } @@ -3900,9 +3916,10 @@ public class PartMngService extends BaseService { // 1: 모품번(PARENT_PART_NO), 2: 품번(PART_NO), 3: 품명(PART_NAME) // 4: 수량(QTY), 5: 항목수량(ITEM_QTY), 6: 재료(MATERIAL) // 7: 열처리경도(HEAT_TREATMENT_HARDNESS), 8: 열처리방법(HEAT_TREATMENT_METHOD), 9: 표면처리(SURFACE_TREATMENT) - // 10: 공급업체(SUPPLIER), 11: 범주이름(PART_TYPE), 12: 계정구분(ACCTFG), 13: 조달구분(ODRFG) - // 14: 재고단위(UNIT_DC), 15: 관리단위(UNITMANG_DC), 16: 환산수량(UNITCHNG_NB) - // 17: LOT구분(LOT_FG), 18: 사용여부(USE_YN), 19: 검사여부(QC_FG), 20: SET품여부(SETITEM_FG), 21: 의뢰여부(REQ_FG) + // 10: 공급업체(SUPPLIER), 11: 범주이름(PART_TYPE), 12: 규격(SPEC), 13: 계정구분(ACCTFG), 14: 조달구분(ODRFG) + // 15: 재고단위(UNIT_DC), 16: 관리단위(UNITMANG_DC), 17: 환산수량(UNITCHNG_NB) + // 18: LOT구분(LOT_FG), 19: 사용여부(USE_YN), 20: 검사여부(QC_FG), 21: SET품여부(SETITEM_FG), 22: 의뢰여부(REQ_FG) + // 23: 개당길이(UNIT_LENGTH), 24: 개당소요량(UNIT_QTY) String parentPartNo = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 모품번 String partNo = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 품번 @@ -3915,6 +3932,7 @@ public class PartMngService extends BaseService { String surfaceTreatment = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 표면처리 String supplier = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 공급업체 String partType = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 범주이름 + String spec = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 규격 String acctfg = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 계정구분 String odrfg = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 조달구분 // ERP 연동 필드 파싱 @@ -3926,6 +3944,8 @@ public class PartMngService extends BaseService { String qcFg = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 검사여부 String setitemFg = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // SET품여부 String reqFg = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 의뢰여부 + String unitLength = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 개당길이 + String unitQty = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 개당소요량 // 빈 행 체크 if(StringUtils.isBlank(partNo) && StringUtils.isBlank(partName)){ @@ -4043,6 +4063,7 @@ public class PartMngService extends BaseService { partMap.put("SURFACE_TREATMENT", surfaceTreatment); partMap.put("MAKER", makerValue); // MAKER에 저장 partMap.put("PART_TYPE", partTypeCode); + partMap.put("SPEC", spec); // 규격 // 계정구분(ACCTFG) - 한글명 입력 시 코드값으로 변환 if(!StringUtils.isBlank(acctfg)){ if(acctfg.matches("\\d+")) { @@ -4060,12 +4081,14 @@ public class PartMngService extends BaseService { } else { partMap.put("ACCTFG", ""); } - // 조달구분(ODRFG) - 한글명 입력 시 코드값으로 변환 + // 조달구분(ODRFG) - 한글명 입력 시 코드값으로 변환 (0:구매, 1:생산, 8:Phantom) if(!CommonUtils.isBlank(odrfg)){ if("구매".equals(odrfg.trim())){ partMap.put("ODRFG", "0"); } else if("생산".equals(odrfg.trim())){ partMap.put("ODRFG", "1"); + } else if("Phantom".equalsIgnoreCase(odrfg.trim())){ + partMap.put("ODRFG", "8"); } else { partMap.put("ODRFG", odrfg); // 숫자면 그대로 } @@ -4143,6 +4166,10 @@ public class PartMngService extends BaseService { partMap.put("REQ_FG", "0"); } + // 개당길이, 개당소요량 + partMap.put("UNIT_LENGTH", unitLength); + partMap.put("UNIT_QTY", unitQty); + partMap.put("NOTE", noteMsg); if(logging) logger.info("partMap:"+partMap); @@ -4951,6 +4978,9 @@ public class PartMngService extends BaseService { insertMap.put("SETITEM_FG", StringUtils.isBlank(setitemFgVal) ? "0" : setitemFgVal); String reqFgVal = CommonUtils.checkNull((String)insertMap.get("REQ_FG")); insertMap.put("REQ_FG", StringUtils.isBlank(reqFgVal) ? "0" : reqFgVal); + // 개당길이, 개당소요량 + insertMap.put("UNIT_LENGTH", CommonUtils.checkNull((String)insertMap.get("UNIT_LENGTH"))); + insertMap.put("UNIT_QTY", CommonUtils.checkNull((String)insertMap.get("UNIT_QTY"))); insertMap.put("STATUS", "deploy"); // 엑셀 업로드 시 deploy 상태로 저장 insertMap.put("WRITER", CommonUtils.checkNull((String)paramMap.get("CONNECTUSERID"))); -- 2.49.1 From f0f2a5f1e1e8232f504c0c6eda2dca639a6da965 Mon Sep 17 00:00:00 2001 From: hjjeong Date: Thu, 12 Feb 2026 17:11:34 +0900 Subject: [PATCH 3/4] =?UTF-8?q?=ED=92=88=EB=AA=A9=20=EC=BB=AC=EB=9F=BC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20=EB=B4=84=20?= =?UTF-8?q?=EC=97=91=EC=85=80=20=EC=97=85=EB=A1=9C=EB=93=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95(api=EA=B4=80=EB=A0=A8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../partMng/openBomReportExcelImportPopUp.jsp | 102 +++++++++++++++++- src/com/pms/service/PartMngService.java | 86 ++++++++++++++- 2 files changed, 183 insertions(+), 5 deletions(-) diff --git a/WebContent/WEB-INF/view/partMng/openBomReportExcelImportPopUp.jsp b/WebContent/WEB-INF/view/partMng/openBomReportExcelImportPopUp.jsp index 3d2e2d7..96aedd3 100644 --- a/WebContent/WEB-INF/view/partMng/openBomReportExcelImportPopUp.jsp +++ b/WebContent/WEB-INF/view/partMng/openBomReportExcelImportPopUp.jsp @@ -250,7 +250,8 @@ $(document).ready(function(){ grid = $("#expenseDetailGrid").jqGrid({ url: "" ,datatype: "local" - ,colNames: ["상태","모품번","품번","품명","수량","항목수량","재료","열처리경도","열처리방법","표면처리","메이커","범주이름","계정구분","조달구분"] + ,colNames: ["상태","모품번","품번","품명","수량","항목수량","재료","열처리경도","열처리방법","표면처리","메이커","범주이름","규격","계정구분","조달구분", + "재고단위","관리단위","환산수량","LOT구분","사용여부","검사여부","SET품여부","의뢰여부","개당길이","개당소요량"] ,colModel: [ {name:"NOTE",index:"NOTE", width: 200, align:"center", hidden: false, sortable:false, editable:true ,editoptions:{ @@ -354,6 +355,13 @@ $(document).ready(function(){ } } } + ,{name:"SPEC",index:"SPEC", width: 100, align:"center", hidden: false, sortable:false, editable:true + ,editoptions:{ + dataInit : function(e){ + e.style.fontSize = 13; + } + } + } ,{name:"ACCTFG" ,index:"ACCTFG" , width:80, align:"center", hidden:false, sortable:false, editable: true ,edittype :"select" ,formatter :"select" @@ -369,13 +377,103 @@ $(document).ready(function(){ ,edittype :"select" ,formatter :"select" ,editoptions:{ - value: {"":"선택","0":"구매","1":"생산"} + value: {"":"선택","0":"구매","1":"생산","8":"Phantom"} ,dataInit : function(e){ e.style.width = "92%"; e.style.fontSize = 13; } } } + ,{name:"UNIT_DC",index:"UNIT_DC", width: 70, align:"center", hidden: false, sortable:false, editable:true + ,editoptions:{ + dataInit : function(e){ + e.style.fontSize = 13; + } + } + } + ,{name:"UNITMANG_DC",index:"UNITMANG_DC", width: 70, align:"center", hidden: false, sortable:false, editable:true + ,editoptions:{ + dataInit : function(e){ + e.style.fontSize = 13; + } + } + } + ,{name:"UNITCHNG_NB",index:"UNITCHNG_NB", width: 70, align:"center", hidden: false, sortable:false, editable:true + ,editoptions:{ + dataInit : function(e){ + e.style.fontSize = 13; + } + } + } + ,{name:"LOT_FG" ,index:"LOT_FG" , width:70, align:"center", hidden:false, sortable:false, editable: true + ,edittype :"select" + ,formatter :"select" + ,editoptions:{ + value: {"0":"미사용","1":"사용"} + ,dataInit : function(e){ + e.style.width = "92%"; + e.style.fontSize = 13; + } + } + } + ,{name:"USE_YN" ,index:"USE_YN" , width:70, align:"center", hidden:false, sortable:false, editable: true + ,edittype :"select" + ,formatter :"select" + ,editoptions:{ + value: {"1":"사용","0":"미사용"} + ,dataInit : function(e){ + e.style.width = "92%"; + e.style.fontSize = 13; + } + } + } + ,{name:"QC_FG" ,index:"QC_FG" , width:70, align:"center", hidden:false, sortable:false, editable: true + ,edittype :"select" + ,formatter :"select" + ,editoptions:{ + value: {"0":"무검사","1":"검사"} + ,dataInit : function(e){ + e.style.width = "92%"; + e.style.fontSize = 13; + } + } + } + ,{name:"SETITEM_FG" ,index:"SETITEM_FG" , width:70, align:"center", hidden:false, sortable:false, editable: true + ,edittype :"select" + ,formatter :"select" + ,editoptions:{ + value: {"0":"부","1":"여"} + ,dataInit : function(e){ + e.style.width = "92%"; + e.style.fontSize = 13; + } + } + } + ,{name:"REQ_FG" ,index:"REQ_FG" , width:70, align:"center", hidden:false, sortable:false, editable: true + ,edittype :"select" + ,formatter :"select" + ,editoptions:{ + value: {"0":"부","1":"여"} + ,dataInit : function(e){ + e.style.width = "92%"; + e.style.fontSize = 13; + } + } + } + ,{name:"UNIT_LENGTH",index:"UNIT_LENGTH", width: 70, align:"center", hidden: false, sortable:false, editable:true + ,editoptions:{ + dataInit : function(e){ + e.style.fontSize = 13; + } + } + } + ,{name:"UNIT_QTY",index:"UNIT_QTY", width: 80, align:"center", hidden: false, sortable:false, editable:true + ,editoptions:{ + dataInit : function(e){ + e.style.fontSize = 13; + } + } + } ] //,cellEdit : true //,cellsubmit : "clientArray" diff --git a/src/com/pms/service/PartMngService.java b/src/com/pms/service/PartMngService.java index 5870cac..6ea7a97 100644 --- a/src/com/pms/service/PartMngService.java +++ b/src/com/pms/service/PartMngService.java @@ -3527,9 +3527,21 @@ public class PartMngService extends BaseService { String surfaceTreatment = getCsvValue(values, colIndex++, emptyColCnt); // 8: 표면처리 String supplier = getCsvValue(values, colIndex++, emptyColCnt); // 9: 공급업체 String partType = getCsvValue(values, colIndex++, emptyColCnt); // 10: 범주이름 - // 계정구분/조달구분은 CSV에 있을 수도 없을 수도 있음 - String acctfg = colIndex < values.length ? getCsvValue(values, colIndex++, emptyColCnt) : ""; // 11: 계정구분 - String odrfg = colIndex < values.length ? getCsvValue(values, colIndex++, emptyColCnt) : ""; // 12: 조달구분 + // CSV 컬럼 순서: 11: 규격, 12: 계정구분, 13: 조달구분, 14: 재고단위, 15: 관리단위, 16: 환산수량 + // 17: LOT구분, 18: 사용여부, 19: 검사여부, 20: SET품여부, 21: 의뢰여부, 22: 개당길이, 23: 개당소요량 + String spec = colIndex < values.length ? getCsvValue(values, colIndex++, emptyColCnt) : ""; // 11: 규격 + String acctfg = colIndex < values.length ? getCsvValue(values, colIndex++, emptyColCnt) : ""; // 12: 계정구분 + String odrfg = colIndex < values.length ? getCsvValue(values, colIndex++, emptyColCnt) : ""; // 13: 조달구분 + String unitDc = colIndex < values.length ? getCsvValue(values, colIndex++, emptyColCnt) : ""; // 14: 재고단위 + String unitmangDc = colIndex < values.length ? getCsvValue(values, colIndex++, emptyColCnt) : ""; // 15: 관리단위 + String unitchngNb = colIndex < values.length ? getCsvValue(values, colIndex++, emptyColCnt) : ""; // 16: 환산수량 + String lotFg = colIndex < values.length ? getCsvValue(values, colIndex++, emptyColCnt) : ""; // 17: LOT구분 + String useYn = colIndex < values.length ? getCsvValue(values, colIndex++, emptyColCnt) : ""; // 18: 사용여부 + String qcFg = colIndex < values.length ? getCsvValue(values, colIndex++, emptyColCnt) : ""; // 19: 검사여부 + String setitemFg = colIndex < values.length ? getCsvValue(values, colIndex++, emptyColCnt) : ""; // 20: SET품여부 + String reqFg = colIndex < values.length ? getCsvValue(values, colIndex++, emptyColCnt) : ""; // 21: 의뢰여부 + String unitLength = colIndex < values.length ? getCsvValue(values, colIndex++, emptyColCnt) : ""; // 22: 개당길이 + String unitQty = colIndex < values.length ? getCsvValue(values, colIndex++, emptyColCnt) : ""; // 23: 개당소요량 // 수준으로부터 부모 품번 찾기 String parentPartNo = ""; @@ -3634,6 +3646,7 @@ public class PartMngService extends BaseService { partMap.put("SURFACE_TREATMENT", surfaceTreatment); partMap.put("MAKER", makerValue); // MAKER에 저장 partMap.put("PART_TYPE", partTypeCode); + partMap.put("SPEC", spec.trim()); // 규격 // 계정구분(ACCTFG) - 한글명 입력 시 코드값으로 변환 if(!StringUtils.isBlank(acctfg)){ if(acctfg.matches("\\d+")) { @@ -3665,6 +3678,73 @@ public class PartMngService extends BaseService { } else { partMap.put("ODRFG", ""); } + // ERP 연동 필드 + partMap.put("UNIT_DC", unitDc.trim()); + partMap.put("UNITMANG_DC", unitmangDc.trim()); + partMap.put("UNITCHNG_NB", unitchngNb.trim()); + // LOT구분 - 한글명 입력 시 코드값으로 변환 (0:미사용, 1:사용) + if(!CommonUtils.isBlank(lotFg)){ + if("사용".equals(lotFg.trim())){ + partMap.put("LOT_FG", "1"); + } else if("미사용".equals(lotFg.trim())){ + partMap.put("LOT_FG", "0"); + } else { + partMap.put("LOT_FG", lotFg.trim()); + } + } else { + partMap.put("LOT_FG", ""); + } + // 사용여부 - 한글명 입력 시 코드값으로 변환 (0:미사용, 1:사용) + if(!CommonUtils.isBlank(useYn)){ + if("사용".equals(useYn.trim())){ + partMap.put("USE_YN", "1"); + } else if("미사용".equals(useYn.trim())){ + partMap.put("USE_YN", "0"); + } else { + partMap.put("USE_YN", useYn.trim()); + } + } else { + partMap.put("USE_YN", ""); + } + // 검사여부 - 한글명 입력 시 코드값으로 변환 (0:무검사, 1:검사) + if(!CommonUtils.isBlank(qcFg)){ + if("검사".equals(qcFg.trim())){ + partMap.put("QC_FG", "1"); + } else if("무검사".equals(qcFg.trim())){ + partMap.put("QC_FG", "0"); + } else { + partMap.put("QC_FG", qcFg.trim()); + } + } else { + partMap.put("QC_FG", ""); + } + // SET품여부 - 한글명 입력 시 코드값으로 변환 (0:부, 1:여) + if(!CommonUtils.isBlank(setitemFg)){ + if("여".equals(setitemFg.trim())){ + partMap.put("SETITEM_FG", "1"); + } else if("부".equals(setitemFg.trim())){ + partMap.put("SETITEM_FG", "0"); + } else { + partMap.put("SETITEM_FG", setitemFg.trim()); + } + } else { + partMap.put("SETITEM_FG", ""); + } + // 의뢰여부 - 한글명 입력 시 코드값으로 변환 (0:부, 1:여) + if(!CommonUtils.isBlank(reqFg)){ + if("여".equals(reqFg.trim())){ + partMap.put("REQ_FG", "1"); + } else if("부".equals(reqFg.trim())){ + partMap.put("REQ_FG", "0"); + } else { + partMap.put("REQ_FG", reqFg.trim()); + } + } else { + partMap.put("REQ_FG", ""); + } + // 개당길이, 개당소요량 + partMap.put("UNIT_LENGTH", unitLength.trim()); + partMap.put("UNIT_QTY", unitQty.trim()); partMap.put("NOTE", noteMsg); if(!StringUtils.isBlank(noteMsg) || emptyColCnt.intValue() < 9) { -- 2.49.1 From a2530957a898a4b6589ceef4ebc40bba34d6d51e Mon Sep 17 00:00:00 2001 From: hjjeong Date: Thu, 12 Feb 2026 17:33:14 +0900 Subject: [PATCH 4/4] =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=EC=95=88=EB=90=98?= =?UTF-8?q?=EB=8A=94=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WebContent/WEB-INF/view/productionplanning/mBomPopupRight.jsp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/WebContent/WEB-INF/view/productionplanning/mBomPopupRight.jsp b/WebContent/WEB-INF/view/productionplanning/mBomPopupRight.jsp index 50474ff..71aa334 100644 --- a/WebContent/WEB-INF/view/productionplanning/mBomPopupRight.jsp +++ b/WebContent/WEB-INF/view/productionplanning/mBomPopupRight.jsp @@ -138,8 +138,8 @@ function initEbomTable() { function fn_searchEbom() { var partNo = $("#search_part_no").val().trim(); var partName = $("#search_part_name").val().trim(); - var material = $("#search_material").val().trim(); - var supplier = $("#search_supplier").val().trim(); + var material = ($("#search_material").val() || '').trim(); + var supplier = ($("#search_supplier").val() || '').trim(); $.ajax({ url: "/partMng/getPartMngList_ajax.do", -- 2.49.1