V20260210 #135
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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" >
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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>
|
||||
|
||||
Binary file not shown.
@@ -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
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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")));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user