V20260210 #135

Merged
hjjeong merged 3 commits from V20260210 into main 2026-02-10 05:59:13 +00:00
11 changed files with 317 additions and 23 deletions

View File

@@ -233,10 +233,12 @@ $(document).ready(function(){
// JSON 파싱 시 에러 처리
var unit_cd_val = $("#unit_cd").val();
var part_type_val = $("#part_type").val();
var acctfg_code_val = $("#acctfg_code").val();
var sup_code_val = $("#sup_code").val();
var unit_cd = unit_cd_val && unit_cd_val.trim() !== '' ? $.parseJSON(unit_cd_val) : {};
var part_type = part_type_val && part_type_val.trim() !== '' ? $.parseJSON(part_type_val) : {};
var acctfg_code = acctfg_code_val && acctfg_code_val.trim() !== '' ? $.parseJSON(acctfg_code_val) : {};
var sup_code = sup_code_val && sup_code_val.trim() !== '' ? $.parseJSON(sup_code_val) : {};
//Excel File Upload된 파일 목록 부분을 초기화 한다.
@@ -248,7 +250,7 @@ $(document).ready(function(){
grid = $("#expenseDetailGrid").jqGrid({
url: ""
,datatype: "local"
,colNames: ["상태","모품번","품번","품명","수량","항목수량","재료","열처리경도","열처리방법","표면처리","메이커","범주이름"]
,colNames: ["상태","모품번","품번","품명","수량","항목수량","재료","열처리경도","열처리방법","표면처리","메이커","범주이름","계정구분","조달구분"]
,colModel: [
{name:"NOTE",index:"NOTE", width: 200, align:"center", hidden: false, sortable:false, editable:true
,editoptions:{
@@ -352,6 +354,28 @@ $(document).ready(function(){
}
}
}
,{name:"ACCTFG" ,index:"ACCTFG" , width:80, align:"center", hidden:false, sortable:false, editable: true
,edittype :"select"
,formatter :"select"
,editoptions:{
value: acctfg_code
,dataInit : function(e){
e.style.width = "92%";
e.style.fontSize = 13;
}
}
}
,{name:"ODRFG" ,index:"ODRFG" , width:80, 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;
}
}
}
]
//,cellEdit : true
//,cellsubmit : "clientArray"
@@ -1245,6 +1269,7 @@ function fn_save(){
</div>
<textarea style="width:0px; height:0px; visibility: hidden;" id="unit_cd">${code_map.unit_cd}</textarea><!-- 코드동적설정 -->
<textarea style="width:0px; height:0px; visibility: hidden;" id="part_type">${code_map.part_type}</textarea><!-- 코드동적설정 -->
<textarea style="width:0px; height:0px; visibility: hidden;" id="acctfg_code">${code_map.acctfg_code}</textarea><!-- 계정구분 코드동적설정 -->
<textarea style="width:0px; height:0px; visibility: hidden;" id="sup_code">${code_map.sup_code}</textarea><!-- 코드동적설정 -->
</form>
</body>

View File

@@ -36,6 +36,7 @@ $(document).ready(function(){
//var unit_cd = $.parseJSON($("#unit_cd").val()); //jqGrid 구분
var part_type = $.parseJSON($("#part_type").val()); //jqGrid 구분
var acctfg_code = $.parseJSON($("#acctfg_code").val()); //jqGrid 계정구분
var sup_code = $.parseJSON($("#sup_code").val()); //jqGrid 구분
//Excel File Upload된 파일 목록 부분을 초기화 한다.
@@ -48,7 +49,7 @@ $(document).ready(function(){
url: ""
,datatype: "local"
,colNames: ["결과",
"품번","품명","재료","열처리경도","열처리방법","표면처리","공급업체","범주 이름","비고"] //PART구분(부품 유형)
"품번","품명","재료","열처리경도","열처리방법","표면처리","공급업체","범주 이름","계정구분","조달구분","비고"] //PART구분(부품 유형)
,colModel: [
/* */
{name:"NOTE",index:"NOTE", width: 200, align:"left", hidden: false, sortable:false, editable:true
@@ -156,6 +157,28 @@ $(document).ready(function(){
}
}
}
,{name:"ACCTFG" ,index:"ACCTFG" , width:80, align:"center", hidden:false, sortable:false, editable: true
,edittype :"select"
,formatter :"select"
,editoptions:{
value: acctfg_code
,dataInit : function(e){
e.style.width = "92%";
e.style.fontSize = 13;
}
}
}
,{name:"ODRFG" ,index:"ODRFG" , width:80, 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:"REMARK",index:"REMARK", width: 130, align:"center", hidden: false, sortable:false, editable:true
,editoptions:{
dataInit : function(e){
@@ -961,6 +984,7 @@ function fn_save(){
</div>
<textarea style="width:0px; height:0px; visibility: hidden;" id="unit_cd">${code_map.unit_cd}</textarea><!-- 코드동적설정 -->
<textarea style="width:0px; height:0px; visibility: hidden;" id="part_type">${code_map.part_type}</textarea><!-- 코드동적설정 -->
<textarea style="width:0px; height:0px; visibility: hidden;" id="acctfg_code">${code_map.acctfg_code}</textarea><!-- 계정구분 코드동적설정 -->
<textarea style="width:0px; height:0px; visibility: hidden;" id="sup_code">${code_map.sup_code}</textarea><!-- 코드동적설정 -->
</form>
</body>

View File

@@ -65,6 +65,7 @@ $(document).ready(function(){
fnc_getCodeListAppend("<%=Constants.UNIT_CODE%>","UNIT","${resultMap.UNIT}");
fnc_getCodeListAppend("<%=Constants.PART_TYPE_CODE%>","PART_TYPE","${resultMap.PART_TYPE}");
fnc_getCodeListAppend("<%=Constants.ACCTFG_CODE%>","ACCTFG","${resultMap.ACCTFG}");
fnc_getCodeListAppend("<%=Constants.MATERIAL_CODE%>","MATERIAL","${resultMap.MATERIAL}");
fnc_getCodeListAppend("<%=Constants.SPEC_NO_CODE%>","SPEC_NO","${resultMap.SPEC_NO}");
fnc_getCodeListAppend("<%=Constants.DESIGN_APPLY_POINT_CODE%>","DESIGN_APPLY_POINT","${resultMap.DESIGN_APPLY_POINT}");
@@ -317,6 +318,8 @@ function fn_enableEdit(){
$('#SURFACE_TREATMENT').prop('readonly', false).prop('disabled', false);
$('#MAKER').prop('readonly', false).prop('disabled', false);
$('#PART_TYPE').prop('disabled', false);
$('#ACCTFG').prop('disabled', false);
$('#ODRFG').prop('disabled', false);
$('#REMARK').prop('readonly', false).prop('disabled', false);
// 버튼 표시 변경
@@ -349,6 +352,8 @@ function fn_save(){
SURFACE_TREATMENT: $('#SURFACE_TREATMENT').val(),
MAKER: $('#MAKER').val(),
PART_TYPE: $('#PART_TYPE').val(),
ACCTFG: $('#ACCTFG').val(),
ODRFG: $('#ODRFG').val(),
REMARK: $('#REMARK').val()
};
@@ -552,6 +557,24 @@ section {
<select name="PART_TYPE" id="PART_TYPE" class=""></select>
</td>
</tr>
<tr>
<td class="input_title">
<label for="">계정구분</label>
</td>
<td class="input_sub_title" colspan="2">
<select name="ACCTFG" id="ACCTFG" class=""></select>
</td>
<td class="input_title">
<label for="">조달구분</label>
</td>
<td class="input_sub_title">
<select name="ODRFG" id="ODRFG" class="">
<option value="">선택</option>
<option value="0" ${'0' eq resultMap.ODRFG ? 'selected' : ''}>구매</option>
<option value="1" ${'1' eq resultMap.ODRFG ? 'selected' : ''}>생산</option>
</select>
</td>
</tr>
<tr>
<td class="input_title">
<label for="">비고</label>

View File

@@ -47,6 +47,7 @@ $(document).ready(function(){
fnc_getCodeListAppend("<%=Constants.UNIT_CODE%>","UNIT","${resultMap.UNIT}");
fnc_getCodeListAppend("<%=Constants.PART_TYPE_CODE%>","PART_TYPE","${resultMap.PART_TYPE}");
fnc_getCodeListAppend("<%=Constants.ACCTFG_CODE%>","ACCTFG","${resultMap.ACCTFG}");
fnc_getCodeListAppend("<%=Constants.MATERIAL_CODE%>","MATERIAL","${resultMap.MATERIAL}");
fnc_getCodeListAppend("<%=Constants.SPEC_NO_CODE%>","SPEC_NO","${resultMap.SPEC_NO}");
fnc_getCodeListAppend("<%=Constants.DESIGN_APPLY_POINT_CODE%>","DESIGN_APPLY_POINT","${resultMap.DESIGN_APPLY_POINT}");
@@ -374,6 +375,25 @@ function fn_overlapPartMng(){
</td>
</tr>
<tr>
<td class="input_title">
<label for="">계정구분</label>
</td>
<td class="input_sub_title" colspan="2">
<select name="ACCTFG" id="ACCTFG" class=""></select>
</td>
<td class="input_title">
<label for="">조달구분</label>
</td>
<td class="input_sub_title">
<select name="ODRFG" id="ODRFG" class="">
<option value="">선택</option>
<option value="0" ${'0' eq resultMap.ODRFG ? 'selected' : ''}>구매</option>
<option value="1" ${'1' eq resultMap.ODRFG ? 'selected' : ''}>생산</option>
</select>
</td>
</tr>
<c:if test="${ !empty param.ACTION_TYPE}">
<tr>
<td class="input_title" >

View File

@@ -277,7 +277,7 @@ var columns = [
headerHozAlign: 'center',
hozAlign: 'right',
width: 90,
title: '출하대기',
title: '포장',
field: 'SHIP_WAIT_QTY',
cssClass: 'col-light-green',
formatter: fnc_createGridAnchorTag,

View File

@@ -390,7 +390,7 @@ window.addEventListener('unload', function() {
<th style="width:150px;">날짜</th>
<th style="width:120px;">완조립</th>
<th style="width:120px;">검사</th>
<th style="width:120px;">출하대기</th>
<th style="width:120px;">포장</th>
<th style="width:60px;">삭제</th>
</tr>
</thead>

View File

@@ -423,6 +423,7 @@ public class Constants {
public static final String UNIT_CODE = "0000059"; //UNIT
public static final String UPG_COMMON_CODE = "0000042"; //UPG
public static final String PART_TYPE_CODE = "0000062"; //PART_TYPE
public static final String ACCTFG_CODE = "0900213"; //계정구분
public static final String PART_CHANGE_TYPE_CODE = "0001054"; //CHANGE_TYPE_
public static final String PART_CHANGE_OPTION_CODE = "0000318"; //CHANGE_OPTION

View File

@@ -667,6 +667,16 @@ public class PartMngController {
try{
objid = CommonUtils.createObjId();
// 범주이름(PART_TYPE) 공통코드 조회 - jqGrid selectBox용 JSON
Map partTypeParam = new HashMap();
partTypeParam.put("codeId", Constants.PART_TYPE_CODE);
code_map.put("part_type", commonService.getJqGridSelectBoxJsonData("common.getCodeList", partTypeParam, "선택"));
// 계정구분(ACCTFG) 공통코드 조회 - jqGrid selectBox용 JSON
Map acctfgParam = new HashMap();
acctfgParam.put("codeId", Constants.ACCTFG_CODE);
code_map.put("acctfg_code", commonService.getJqGridSelectBoxJsonData("common.getCodeList", acctfgParam, "선택"));
/*
code_map.put("customer_cd",commonService.bizMakeOptionList("", (String)paramMap.get("customer_cd"),"common.getsupplyselect"));
code_map.put("project_name",commonService.bizMakeOptionList("", (String)paramMap.get("project_name"),"common.getProjectNameList"));
@@ -1856,6 +1866,11 @@ public class PartMngController {
//제품구분
code_map.put("product_cd", commonService.bizMakeOptionList("0000001", CommonUtils.nullToEmpty((String)paramMap.get("product_cd")),"common.getCodeselect")); //제품구분
// 계정구분(ACCTFG) 공통코드 조회 - jqGrid selectBox용 JSON
Map acctfgParam = new HashMap();
acctfgParam.put("codeId", Constants.ACCTFG_CODE);
code_map.put("acctfg_code", commonService.getJqGridSelectBoxJsonData("common.getCodeList", acctfgParam, "선택"));
sqlSession = SqlMapConfig.getInstance().getSqlSession();

View File

@@ -157,6 +157,8 @@
P.HEAT_TREATMENT_HARDNESS,
P.HEAT_TREATMENT_METHOD,
P.SURFACE_TREATMENT,
P.ACCTFG,
P.ODRFG,
COALESCE(FILE_CNT.CU01_CNT, 0) CU01_CNT,
COALESCE(FILE_CNT.CU02_CNT, 0) CU02_CNT,
COALESCE(FILE_CNT.CU03_CNT, 0) CU03_CNT,
@@ -655,7 +657,9 @@
SUB_CATEGORY,
HEAT_TREATMENT_HARDNESS,
HEAT_TREATMENT_METHOD,
SURFACE_TREATMENT
SURFACE_TREATMENT,
ACCTFG,
ODRFG
) VALUES (
#{OBJID}::NUMERIC,
#{PRODUCT_MGMT_OBJID},
@@ -701,7 +705,9 @@
#{SUB_CATEGORY},
#{HEAT_TREATMENT_HARDNESS},
#{HEAT_TREATMENT_METHOD},
#{SURFACE_TREATMENT}
#{SURFACE_TREATMENT},
#{ACCTFG},
#{ODRFG}
) ON
CONFLICT (OBJID) DO
UPDATE
@@ -745,7 +751,9 @@
SUB_CATEGORY = #{SUB_CATEGORY},
HEAT_TREATMENT_HARDNESS = #{HEAT_TREATMENT_HARDNESS},
HEAT_TREATMENT_METHOD = #{HEAT_TREATMENT_METHOD},
SURFACE_TREATMENT = #{SURFACE_TREATMENT}
SURFACE_TREATMENT = #{SURFACE_TREATMENT},
ACCTFG = #{ACCTFG},
ODRFG = #{ODRFG}
</update>
@@ -802,7 +810,9 @@
HEAT_TREATMENT_HARDNESS,
HEAT_TREATMENT_METHOD,
SURFACE_TREATMENT,
SUPPLY_CODE
SUPPLY_CODE,
ACCTFG,
ODRFG
) VALUES (
#{OBJID}::NUMERIC,
#{PRODUCT_MGMT_OBJID},
@@ -860,7 +870,9 @@
#{HEAT_TREATMENT_HARDNESS},
#{HEAT_TREATMENT_METHOD},
#{SURFACE_TREATMENT},
#{SUPPLY_CODE}
#{SUPPLY_CODE},
#{ACCTFG},
#{ODRFG}
) ON
CONFLICT (OBJID) DO
UPDATE
@@ -911,7 +923,9 @@
HEAT_TREATMENT_HARDNESS = #{HEAT_TREATMENT_HARDNESS},
HEAT_TREATMENT_METHOD = #{HEAT_TREATMENT_METHOD},
SURFACE_TREATMENT = #{SURFACE_TREATMENT},
SUPPLY_CODE = #{SUPPLY_CODE}
SUPPLY_CODE = #{SUPPLY_CODE},
ACCTFG = #{ACCTFG},
ODRFG = #{ODRFG}
</update>
<update id="mergePartMngHistory" parameterType="map">
INSERT INTO PART_MNG_HISTORY
@@ -2653,6 +2667,8 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.*
SURFACE_TREATMENT = #{SURFACE_TREATMENT},
MAKER = #{MAKER},
PART_TYPE = #{PART_TYPE},
ACCTFG = #{ACCTFG},
ODRFG = #{ODRFG},
REMARK = #{REMARK},
EDIT_DATE = NOW()
WHERE OBJID = #{OBJID}
@@ -6680,6 +6696,16 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.*
AND status='create'
</update>
<!-- BOM에 연결된 create 상태 파트 OBJID 목록 조회 (ERP 전송용) -->
<select id="getCreatePartObjidsByBomObjid" parameterType="map" resultType="string">
SELECT CAST(p.OBJID AS VARCHAR) AS PART_OBJID
FROM part_mng p
WHERE p.OBJID IN (
SELECT part_no FROM bom_part_qty AS t
WHERE t.bom_report_objid = #{checkArr}
)
AND p.status = 'create'
</select>
<!-- 선택된 구조등록 연결PART를 삭제한다.. -->
<delete id="deleteBomQtyPart" parameterType="map">
@@ -7448,6 +7474,8 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.*
,HEAT_TREATMENT_HARDNESS
,HEAT_TREATMENT_METHOD
,SURFACE_TREATMENT
,ACCTFG
,ODRFG
) VALUES (
#{PART_OBJID}::NUMERIC
,#{PART_NO}
@@ -7476,6 +7504,8 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.*
,#{HEAT_TREATMENT_HARDNESS}
,#{HEAT_TREATMENT_METHOD}
,#{SURFACE_TREATMENT}
,#{ACCTFG}
,#{ODRFG}
)
</insert>
@@ -7699,6 +7729,15 @@ SELECT PM.OBJID
AND PARENT_CODE_ID='0000062'
</select>
<!-- 계정구분 코드 조회 (한글명 → ERP 코드값) -->
<select id="getAcctfgCode" parameterType="map" resultType="map">
SELECT
CODE_ID
FROM COMM_CODE
WHERE CODE_NAME = #{CODE_NAME}
AND PARENT_CODE_ID = '0900213'
</select>
<!-- 공급업체명으로 OBJID 조회 -->
<select id="getSupplyCodeByName" parameterType="map" resultType="map">
SELECT

View File

@@ -673,17 +673,26 @@ public class PartMngService extends BaseService {
if(result > 0){
sqlSession.commit();
// ERP로 수정된 PART 정보 전송
// ERP로 수정된 PART 정보 전송 (release 상태일 때만)
String partObjid = CommonUtils.checkNull(paramMap.get("OBJID"));
if (!partObjid.isEmpty()) {
try {
System.out.println("====================================");
System.out.println("PART 상세 수정 후 ERP 전송: " + partObjid);
System.out.println("====================================");
// 파트 상태 확인
Map<String, Object> partInfo = sqlSession.selectOne("partMng.partMngInfo", paramMap);
String partStatus = partInfo != null ? CommonUtils.checkNull(partInfo.get("status")) : "";
batchService.updatePartToErp(partObjid);
System.out.println("ERP 전송 완료 (PART 상세 수정)");
// release 상태일 때만 ERP Update 전송
if("release".equals(partStatus)) {
System.out.println("====================================");
System.out.println("PART 상세 수정 후 ERP 전송: " + partObjid);
System.out.println("====================================");
batchService.updatePartToErp(partObjid);
System.out.println("ERP 전송 완료 (PART 상세 수정)");
} else {
System.out.println("PART 상태가 release가 아니므로 ERP 전송 생략: " + partStatus);
}
} catch (Exception erpEx) {
// ERP 전송 실패해도 DB 저장은 성공으로 처리
System.err.println("ERP 전송 실패 (PART 상세 수정): " + erpEx.getMessage());
@@ -1095,6 +1104,9 @@ public class PartMngService extends BaseService {
String userId = person.getUserId();
paramMap.put("EDITER", userId);
// ERP 전송할 파트 OBJID 목록 (DB 트랜잭션 외부에서 사용)
List<String> partObjidsForErp = new ArrayList<String>();
try{
// BOM 상태 업데이트
int cnt = sqlSession.update("partMng.updateStructureStatus", paramMap);
@@ -1106,6 +1118,9 @@ public class PartMngService extends BaseService {
Map deployParam = new HashMap();
deployParam.put("checkArr", objId);
// ERP 전송할 파트 OBJID 목록 조회 (상태 변경 전에 조회)
partObjidsForErp = sqlSession.selectList("partMng.getCreatePartObjidsByBomObjid", deployParam);
// BOM에 연결된 파트들의 상태를 create -> release로 변경
sqlSession.update("partMng.deployPartInfo", deployParam);
}
@@ -1119,6 +1134,33 @@ public class PartMngService extends BaseService {
sqlSession.close();
}
// DB 트랜잭션 성공 후 ERP 전송 (ERP 실패해도 DB 저장은 유지)
if(result && !partObjidsForErp.isEmpty()){
System.out.println("====================================");
System.out.println("E-BOM 상태변경 후 ERP 전송 시작");
System.out.println("전송 대상 파트 수: " + partObjidsForErp.size());
System.out.println("====================================");
for(String partObjid : partObjidsForErp){
try{
Map<String, Object> erpResult = batchService.sendSinglePartToErp(partObjid);
if(erpResult != null && Boolean.TRUE.equals(erpResult.get("success"))){
System.out.println("ERP 전송 성공 (PART OBJID: " + partObjid + ")");
}else{
System.err.println("ERP 전송 실패 (PART OBJID: " + partObjid + ")");
}
}catch(Exception erpEx){
// ERP 전송 실패해도 다음 파트 진행
System.err.println("ERP 전송 에러 (PART OBJID: " + partObjid + "): " + erpEx.getMessage());
erpEx.printStackTrace();
}
}
System.out.println("====================================");
System.out.println("E-BOM 상태변경 후 ERP 전송 완료");
System.out.println("====================================");
}
return result;
}
@@ -2842,6 +2884,13 @@ public class PartMngService extends BaseService {
} else if (fileName.endsWith(".xlsx") || fileName.endsWith(".XLSX")) {
workBook = new XSSFWorkbook(fis);
}
// workBook null 체크
if(workBook == null) {
System.err.println("지원하지 않는 파일 형식입니다: " + fileName);
fis.close();
return resultList;
}
Sheet sheet = workBook.getSheetAt(0);
// 데이터 포멧터
@@ -3017,12 +3066,44 @@ public class PartMngService extends BaseService {
}
}
//비고(REMARK)
partMap.put("REMARK", getCellValue(row, columnIndex++, formatter, emptyColCnt));
// 계정구분(ACCTFG) - 한글명 입력 시 코드값으로 변환
String acctfgValue = getCellValue(row, columnIndex++, formatter, emptyColCnt);
if(!CommonUtils.isBlank(acctfgValue)){
// 숫자면 그대로 사용, 한글이면 코드 조회
if(acctfgValue.matches("\\d+")) {
partMap.put("ACCTFG", acctfgValue);
} else {
Map acctfgParam = new HashMap();
acctfgParam.put("CODE_NAME", acctfgValue.trim());
Map acctfgResult = sqlSession.selectOne("partMng.getAcctfgCode", acctfgParam);
if(acctfgResult != null && !StringUtils.isBlank((String)acctfgResult.get("code_id"))){
partMap.put("ACCTFG", acctfgResult.get("code_id"));
} else {
partMap.put("ACCTFG", acctfgValue); // 변환 실패 시 원본 유지
}
}
} else {
partMap.put("ACCTFG", "");
}
// 조달구분(ODRFG) - 한글명 입력 시 코드값으로 변환
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 {
partMap.put("ODRFG", odrfgValue); // 숫자면 그대로
}
} else {
partMap.put("ODRFG", "");
}
//비고(REMARK)
partMap.put("REMARK", getCellValue(row, columnIndex++, formatter, emptyColCnt));
if(logging) logger.info("partMap:"+partMap);
if(emptyColCnt.intValue() < 8) { //모두 공백 아니면 담기
if(logging) logger.info("partMap:"+partMap);
if(emptyColCnt.intValue() < 8) { //모두 공백 아니면 담기
resultList.add(partMap);
}else {
emptyRowCnt++;
@@ -3352,6 +3433,9 @@ 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: 조달구분
// 수준으로부터 부모 품번 찾기
String parentPartNo = "";
@@ -3456,6 +3540,35 @@ public class PartMngService extends BaseService {
partMap.put("SURFACE_TREATMENT", surfaceTreatment);
partMap.put("MAKER", makerValue); // MAKER에 저장
partMap.put("PART_TYPE", partTypeCode);
// 계정구분(ACCTFG) - 한글명 입력 시 코드값으로 변환
if(!StringUtils.isBlank(acctfg)){
if(acctfg.matches("\\d+")) {
partMap.put("ACCTFG", acctfg);
} else {
Map acctfgParam = new HashMap();
acctfgParam.put("CODE_NAME", acctfg.trim());
Map acctfgResult = sqlSession.selectOne("partMng.getAcctfgCode", acctfgParam);
if(acctfgResult != null && !StringUtils.isBlank((String)acctfgResult.get("code_id"))){
partMap.put("ACCTFG", acctfgResult.get("code_id"));
} else {
partMap.put("ACCTFG", acctfg);
}
}
} else {
partMap.put("ACCTFG", "");
}
// 조달구분(ODRFG) - 한글명 입력 시 코드값으로 변환
if(!CommonUtils.isBlank(odrfg)){
if("구매".equals(odrfg.trim())){
partMap.put("ODRFG", "0");
} else if("생산".equals(odrfg.trim())){
partMap.put("ODRFG", "1");
} else {
partMap.put("ODRFG", odrfg); // 숫자면 그대로
}
} else {
partMap.put("ODRFG", "");
}
partMap.put("NOTE", noteMsg);
if(!StringUtils.isBlank(noteMsg) || emptyColCnt.intValue() < 9) {
@@ -3707,7 +3820,7 @@ 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)
// 10: 공급업체(SUPPLIER), 11: 범주이름(PART_TYPE), 12: 계정구분(ACCTFG), 13: 조달구분(ODRFG)
String parentPartNo = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 모품번
String partNo = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 품번
@@ -3720,6 +3833,8 @@ 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 acctfg = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 계정구분
String odrfg = getCellValue(row, columnIndex++, formatter, emptyColCnt).trim(); // 조달구분
// 빈 행 체크
if(StringUtils.isBlank(partNo) && StringUtils.isBlank(partName)){
@@ -3837,6 +3952,35 @@ public class PartMngService extends BaseService {
partMap.put("SURFACE_TREATMENT", surfaceTreatment);
partMap.put("MAKER", makerValue); // MAKER에 저장
partMap.put("PART_TYPE", partTypeCode);
// 계정구분(ACCTFG) - 한글명 입력 시 코드값으로 변환
if(!StringUtils.isBlank(acctfg)){
if(acctfg.matches("\\d+")) {
partMap.put("ACCTFG", acctfg);
} else {
Map acctfgParam = new HashMap();
acctfgParam.put("CODE_NAME", acctfg.trim());
Map acctfgResult = sqlSession.selectOne("partMng.getAcctfgCode", acctfgParam);
if(acctfgResult != null && !StringUtils.isBlank((String)acctfgResult.get("code_id"))){
partMap.put("ACCTFG", acctfgResult.get("code_id"));
} else {
partMap.put("ACCTFG", acctfg);
}
}
} else {
partMap.put("ACCTFG", "");
}
// 조달구분(ODRFG) - 한글명 입력 시 코드값으로 변환
if(!CommonUtils.isBlank(odrfg)){
if("구매".equals(odrfg.trim())){
partMap.put("ODRFG", "0");
} else if("생산".equals(odrfg.trim())){
partMap.put("ODRFG", "1");
} else {
partMap.put("ODRFG", odrfg); // 숫자면 그대로
}
} else {
partMap.put("ODRFG", "");
}
partMap.put("NOTE", noteMsg);
if(logging) logger.info("partMap:"+partMap);
@@ -4628,6 +4772,9 @@ public class PartMngService extends BaseService {
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("ACCTFG", CommonUtils.checkNull((String)insertMap.get("ACCTFG")));
insertMap.put("ODRFG", CommonUtils.checkNull((String)insertMap.get("ODRFG")));
insertMap.put("STATUS", "deploy"); // 엑셀 업로드 시 deploy 상태로 저장
insertMap.put("WRITER", CommonUtils.checkNull((String)paramMap.get("CONNECTUSERID")));