Merge branch 'main' into V20251023001

This commit is contained in:
Johngreen
2025-10-28 13:33:26 +09:00
5 changed files with 127 additions and 18 deletions

View File

@@ -2,6 +2,23 @@
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ page import="com.pms.common.utils.*"%>
<%@ page import="java.util.*"%>
<%
// URL 파라미터 가져오기 (request.getParameter는 자동으로 URL 디코딩됨)
String bomPartNo = request.getParameter("BOM_PART_NO");
String bomPartName = request.getParameter("BOM_PART_NAME");
String bomVersion = request.getParameter("BOM_VERSION");
// 디버깅: 콘솔에 출력
System.out.println("=== BOM 파라미터 디버깅 ===");
System.out.println("bomPartNo: " + bomPartNo);
System.out.println("bomPartName: " + bomPartName);
System.out.println("bomVersion: " + bomVersion);
// null 체크
if(bomPartNo == null) bomPartNo = "";
if(bomPartName == null) bomPartName = "";
if(bomVersion == null) bomVersion = "";
%>
<%@include file="/init_jqGrid.jsp"%>
<!DOCTYPE html>
<html>
@@ -302,9 +319,13 @@ $(document).ready(function(){
}
}
}
,{name:"SUPPLIER",index:"SUPPLIER", width: 120, align:"center", hidden: false, sortable:false, editable:true
,{name:"SUPPLY_CODE",index:"SUPPLY_CODE", width: 120, align:"center", hidden: false, sortable:false, editable:true
,edittype :"select"
,formatter :"select"
,editoptions:{
dataInit : function(e){
value: sup_code
,dataInit : function(e){
e.style.width = "92%";
e.style.fontSize = 13;
}
}
@@ -934,15 +955,15 @@ function fn_save(){
</td>
<td style="font-size:12px;" class="align_c"><label for="bom_part_no">품번</label></td>
<td>
<input type="text" name="bom_part_no" id="bom_part_no" required reqTitle="품번" value="${param.BOM_PART_NO}" style="width: 170px;"/>
<input type="text" name="bom_part_no" id="bom_part_no" required reqTitle="품번" value="<%= bomPartNo %>" style="width: 170px;"/>
</td>
<td style="font-size:12px;" class="align_c"><label for="bom_part_name">품명</label></td>
<td>
<input type="text" name="bom_part_name" id="bom_part_name" required reqTitle="품명" value="${param.BOM_PART_NAME}" style="width: 170px;"/>
<input type="text" name="bom_part_name" id="bom_part_name" required reqTitle="품명" value="<%= bomPartName %>" style="width: 170px;"/>
</td>
<td style="font-size:12px;" class="align_c"><label for="version">Version</label></td>
<td>
<input type="text" name="version" id="version" reqTitle="Version" value="${param.BOM_VERSION}" style="width: 140px;"/>
<input type="text" name="version" id="version" reqTitle="Version" value="<%= bomVersion %>" style="width: 140px;"/>
</td>
</tr>
<tr>

View File

@@ -21,7 +21,10 @@ $(document).ready(function(){
$("._table1").scrollLeft($("._table2").scrollLeft());
});
// 품번/품명 Select2 AJAX 초기화 (common.js의 새 함수 사용)
initPartSelect2Ajax("#search_partNo", "#search_partName", "#search_partObjId", {
debug: false // 디버깅 모드 비활성화
});
$("#mainGrid").jqGrid({
height : 630,
@@ -759,6 +762,24 @@ function fn_excelExport(pGridObj,pFileName){
<td class="align_r">
<label for="" class="">품번</label>
</td>
<td>
<select name="search_partNo" id="search_partNo" class="select2-part" style="width: 100%;">
<option value="">품번 선택</option>
</select>
<input type="hidden" name="search_partObjId" id="search_partObjId" value=""/>
</td>
<td class="align_r">
<label for="" class="">품명</label>
</td>
<td colspan="3">
<select name="search_partName" id="search_partName" class="select2-part" style="width: 100%;">
<option value="">품명 선택</option>
</select>
</td>
<!-- <td class="align_r">
<label for="" class="">품번</label>
</td>
<td>
<input type="text" name="search_partNo" id="search_partNo" value="${param.search_partNo}" class="text_area" style="width:200px;"/>
</td>
@@ -767,7 +788,7 @@ function fn_excelExport(pGridObj,pFileName){
</td>
<td>
<input type="text" name="search_partName" id="search_partName" value="${param.search_partName}" class="text_area" style="width:200px;"/>
</td>
</td> -->
<!-- <td class="align_r">
<label for="" class="">LEVEL</label>
</td>

View File

@@ -158,7 +158,7 @@ var columns = [
{headerHozAlign : 'center', hozAlign : 'center', width : '200', title : '제품구분', field : 'PRODUCT_NAME' },
{headerHozAlign : 'center', hozAlign : 'center', title : '제품구분', field : 'PRODUCT_CD' ,hidden: true},
// {headerHozAlign : 'center', hozAlign : 'center', title : '제품구분', field : 'PRODUCT_CD' ,hidden: true},
{headerHozAlign : 'center', hozAlign : 'left', width : '300', title : '품번', field : 'PART_NO' },
{headerHozAlign : 'center', hozAlign : 'left', /* width : '300',*/ title : '품명', field : 'PART_NAME' },
@@ -552,8 +552,21 @@ function saveexcelpop() {
BOM_VERSION = fnc_checkNull(selectedStructure[i].REVISION);
}
var url = "/partMng/openBomReportExcelImportPopUp.do?PRODUCT_CD="+BOM_PRODUCT_CD+"&BOM_PART_NAME="+BOM_PART_NAME+"&BOM_PART_NO="+BOM_PART_NO+"&BOM_REPORT_OBJID="+BOM_REPORT_OBJID+"&BOM_VERSION="+BOM_VERSION;
var target = "openBomReportExcelImportPopUp";
// hiddenForm을 사용하여 POST 방식으로 팝업 열기 (한글 인코딩 문제 해결)
var hiddenForm = document.hiddenForm;
var url = "/partMng/openBomReportExcelImportPopUp.do";
var target = "openBomReportExcelImportPopUp";
hiddenForm.PRODUCT_CD.value = BOM_PRODUCT_CD;
hiddenForm.BOM_PART_NAME.value = BOM_PART_NAME;
hiddenForm.BOM_PART_NO.value = BOM_PART_NO;
hiddenForm.BOM_REPORT_OBJID.value = BOM_REPORT_OBJID;
hiddenForm.BOM_VERSION.value = BOM_VERSION;
window.open('', target, 'width=1920, height=860, menubars=no, scrollbars=yes, resizable=yes');
hiddenForm.action = url;
hiddenForm.target = target;
hiddenForm.submit();
}
}else{
if($("#customer_cd").val()==""){
@@ -571,8 +584,8 @@ function saveexcelpop() {
var url = "/partMng/openBomReportExcelImportPopUp.do?customer_cd="+$("#customer_cd").val()+"&project_name="+$("#project_name").val()+"&unit_code="+$("#unit_code").val();
var target = "openBomReportExcelImportPopUp";
window.open(url, target,"width=1920, height=860, menubars=no, scrollbars=yes, resizable=yes");
}
window.open(url, target,"width=1920, height=860, menubars=no, scrollbars=yes, resizable=yes");
}
</script>
</head>
@@ -583,6 +596,11 @@ function saveexcelpop() {
<input type="hidden" name="param_product_mgmt_spec" id="param_product_mgmt_spec">
<input type="hidden" name="param_upg_no" id="param_upg_no">
<input type="hidden" name="BOM_REPORT_OBJID" id="BOM_REPORT_OBJID">
<!-- BOM Excel Import 팝업용 파라미터 -->
<input type="hidden" name="PRODUCT_CD" id="PRODUCT_CD">
<input type="hidden" name="BOM_PART_NAME" id="BOM_PART_NAME">
<input type="hidden" name="BOM_PART_NO" id="BOM_PART_NO">
<input type="hidden" name="BOM_VERSION" id="BOM_VERSION">
</form>
<form name="form1" id="form1" action="" method="post">

View File

@@ -3850,6 +3850,7 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.*
PARENT_PART_NO,
PART_NO,
QTY,
ITEM_QTY,
QTY_TEMP,
REGDATE,
WRITER,
@@ -3873,6 +3874,7 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.*
<!-- (SELECT PART_NO FROM BOM_PART_QTY WHERE 1=1 AND CHILD_OBJID = #{PARENT_OBJID} AND BOM_REPORT_OBJID = #{BOM_REPORT_OBJID}),
#{PART_OBJID}, -->
#{QTY},
#{ITEM_QTY},
#{QTY_TEMP},
NOW(),
#{WRITER},
@@ -6353,6 +6355,7 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.*
BPQ.PART_NO,
BPQ.PARENT_PART_NO,
BPQ.QTY,
BPQ.ITEM_QTY,
BPQ.SEQ,
COALESCE(BPQ.LAST_PART_OBJID, BPQ.PART_NO) AS LAST_PART_OBJID,
1 AS LEV,
@@ -6380,6 +6383,7 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.*
BPQ.PART_NO,
BPQ.PARENT_PART_NO,
BPQ.QTY,
BPQ.ITEM_QTY,
BPQ.SEQ,
COALESCE(BPQ.LAST_PART_OBJID, BPQ.PART_NO) AS LAST_PART_OBJID,
BT.LEV + 1,
@@ -6400,12 +6404,14 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.*
BT.LEV,
BT.LEV AS LEVEL,
BT.QTY,
BT.ITEM_QTY,
BT.QTY AS P_QTY,
BT.SEQ,
-- PART 정보
PM.OBJID AS PART_OBJID,
PM.PART_NO AS PART_NO_TITLE,
PM.PART_NO,
PM.PART_NAME,
PM.REVISION AS REV,
PM.REVISION,
PM.MATERIAL,
PM.SPEC,
PM.WEIGHT,
@@ -7643,6 +7649,15 @@ SELECT PM.OBJID
AND PARENT_CODE_ID='0000062'
</select>
<!-- 공급업체명으로 OBJID 조회 -->
<select id="getSupplyCodeByName" parameterType="map" resultType="map">
SELECT
OBJID
FROM ADMIN_SUPPLY_MNG
WHERE SUPPLY_NAME = #{SUPPLY_NAME}
LIMIT 1
</select>
<!-- PART 관리 목록 조회 -->
<select id="supplyInfo" parameterType="map" resultType="map">
SELECT

View File

@@ -3064,7 +3064,7 @@ public class PartMngService extends BaseService {
insertMap.put("LENGTH", CommonUtils.checkNull((String)insertMap.get("LENGTH")));
insertMap.put("PART_TYPE", CommonUtils.checkNull((String)insertMap.get("PART_TYPE")));
insertMap.put("REMARK", CommonUtils.checkNull((String)insertMap.get("REMARK")));
insertMap.put("SUPPLY_CODE", CommonUtils.checkNull((String)insertMap.get("SUP_CODE")));
insertMap.put("SUPPLY_CODE", CommonUtils.checkNull((String)insertMap.get("SUPPLY_CODE")));
insertMap.put("MAKER", CommonUtils.checkNull((String)insertMap.get("MAKER")));
insertMap.put("POST_PROCESSING", CommonUtils.checkNull((String)insertMap.get("POST_PROCESSING")));
// insertMap.put("CONTRACT_OBJID", CommonUtils.checkNull((String)paramMap.get("CONTRACT_OBJID")));
@@ -3080,7 +3080,7 @@ public class PartMngService extends BaseService {
//PART저장
insertMap.put("OBJID", part_objid);
insertMap.put("CONNECTUSERID", CommonUtils.checkNull((String)paramMap.get("CONNECTUSERID")));
insertMap.put("SUPPLY_CODE", CommonUtils.checkNull((String)insertMap.get("SUP_CODE")));
insertMap.put("SUPPLY_CODE", CommonUtils.checkNull((String)insertMap.get("SUPPLY_CODE")));
//sqlSession.insert("partMng.insertpartInfo", insertMap);
sqlSession.insert("partMng.mergePartMng", insertMap);
/*
@@ -3292,6 +3292,20 @@ public class PartMngService extends BaseService {
}
}
// SUPPLY_CODE 코드 조회 (공급업체명 -> OBJID 변환)
String supplyCode = "";
if(!StringUtils.isBlank(supplier)) {
Map sqlParamMap = new HashMap();
sqlParamMap.put("SUPPLY_NAME", supplier);
Map supplyMap = sqlSession.selectOne("partMng.getSupplyCodeByName", sqlParamMap);
if(null != supplyMap && supplyMap.get("objid") != null){
// OBJID는 BIGINT 타입이므로 String으로 변환
supplyCode = String.valueOf(supplyMap.get("objid"));
} else {
noteMsg += "공급업체 확인:" + supplier + ";";
}
}
// Map에 데이터 저장
partMap.put("LEVEL", level); // 수준 값 (화면 표시용)
partMap.put("PARENT_PART_NO", parentPartNo); // 실제 부모 품번 (저장용)
@@ -3303,7 +3317,7 @@ public class PartMngService extends BaseService {
partMap.put("HEAT_TREATMENT_HARDNESS", heatTreatmentHardness);
partMap.put("HEAT_TREATMENT_METHOD", heatTreatmentMethod);
partMap.put("SURFACE_TREATMENT", surfaceTreatment);
partMap.put("SUPPLIER", supplier);
partMap.put("SUPPLY_CODE", supplyCode);
partMap.put("PART_TYPE", partTypeCode);
partMap.put("NOTE", noteMsg);
@@ -3626,6 +3640,20 @@ public class PartMngService extends BaseService {
}
}
// SUPPLY_CODE 코드 조회 (공급업체명 -> OBJID 변환)
String supplyCode = "";
if(!StringUtils.isBlank(supplier)) {
Map sqlParamMap = new HashMap();
sqlParamMap.put("SUPPLY_NAME", supplier);
Map supplyMap = sqlSession.selectOne("partMng.getSupplyCodeByName", sqlParamMap);
if(null != supplyMap && supplyMap.get("objid") != null){
// OBJID는 BIGINT 타입이므로 String으로 변환
supplyCode = String.valueOf(supplyMap.get("objid"));
} else {
noteMsg += "공급업체 확인:" + supplier + ";";
}
}
// Map에 데이터 저장
partMap.put("PARENT_PART_NO", parentPartNo);
partMap.put("PART_NO", partNo);
@@ -3636,7 +3664,7 @@ public class PartMngService extends BaseService {
partMap.put("HEAT_TREATMENT_HARDNESS", heatHardness);
partMap.put("HEAT_TREATMENT_METHOD", heatMethod);
partMap.put("SURFACE_TREATMENT", surfaceTreatment);
partMap.put("SUPPLIER", supplier);
partMap.put("SUPPLY_CODE", supplyCode);
partMap.put("PART_TYPE", partTypeCode);
partMap.put("NOTE", noteMsg);
@@ -4412,7 +4440,7 @@ public class PartMngService extends BaseService {
insertMap.put("LENGTH", CommonUtils.checkNull((String)insertMap.get("LENGTH")));
insertMap.put("PART_TYPE", CommonUtils.checkNull((String)insertMap.get("PART_TYPE")));
insertMap.put("REMARK", CommonUtils.checkNull((String)insertMap.get("REMARK")));
insertMap.put("SUPPLY_CODE", CommonUtils.checkNull((String)insertMap.get("SUP_CODE")));
insertMap.put("SUPPLY_CODE", CommonUtils.checkNull((String)insertMap.get("SUPPLY_CODE")));
insertMap.put("MAKER", CommonUtils.checkNull((String)insertMap.get("MAKER")));
insertMap.put("POST_PROCESSING", CommonUtils.checkNull((String)insertMap.get("POST_PROCESSING")));
insertMap.put("HEAT_TREATMENT_HARDNESS", CommonUtils.checkNull((String)insertMap.get("HEAT_TREATMENT_HARDNESS")));
@@ -4424,6 +4452,12 @@ public class PartMngService extends BaseService {
insertMap.put("CONTRACT_OBJID", CommonUtils.checkNull((String)paramMap.get("CONTRACT_OBJID")));
insertMap.put("PRODUCT_MGMT_OBJID", CommonUtils.checkNull((String)paramMap.get("product_mgmt_objid")));
insertMap.put("CONNECTUSERID", CommonUtils.checkNull((String)paramMap.get("CONNECTUSERID")));
// 디버깅: SUPPLY_CODE 값 확인
//System.out.println("=== SUPPLY_CODE DEBUG ===");
//System.out.println("PART_NO: " + PART_NO);
//System.out.println("SUPPLY_CODE: " + insertMap.get("SUPPLY_CODE"));
//System.out.println("========================");
partobjMap.put("PART_NO", PART_NO);
resultMap = (HashMap)sqlSession.selectOne("partMng.getPartObjid", partobjMap); //part_no로 is_last = 1 건 조회