Merge branch 'main' into V20251023001

This commit is contained in:
Johngreen
2025-10-27 17:12:43 +09:00
4 changed files with 344 additions and 110 deletions

View File

@@ -76,6 +76,19 @@ $(document).ready(function(){
fn_search();
});
//정전개 조회
$("#btnSearchAscending").click(function(){
$("#searchType").val("ascending");
fn_search();
});
//역전개 조회
$("#btnSearchDescending").click(function(){
$("#searchType").val("descending");
fn_search();
});
$("#btnExcel").click(function(){
$("#search_partNo").val($.trim($("#search_partNo").val()));
@@ -690,18 +703,25 @@ function fn_excelExport(pGridObj,pFileName){
<form name="form1" id="form1" action="" method="post">
<input type="hidden" name="search" id="search" value="Y">
<input type="hidden" name="actionType" id="actionType" value="" />
<input type="hidden" name="searchType" id="searchType" value="ascending" />
<div class="min_part_enroll">
<div class="content-box">
<div class=""> <!-- content-box-s -->
<div class=plm_menu_name_gdnsi>
<h2>
<span>제품관리_BOM 조회</span>
<c:if test="${!empty param.searchType}">
<span style="font-size: 14px; color: #666; margin-left: 10px;">
(${param.searchType eq 'descending' ? '역전개' : '정전개'})
</span>
</c:if>
</h2>
<div class="btnArea">
<!--
<input type="button" value="Excel Download" class="plm_btns" id="btnExcel">
-->
<input type="button" value="조회" class="plm_btns" id="btnSearch">
<input type="button" value="정전개 조회" class="plm_btns" id="btnSearchAscending">
<input type="button" value="역전개 조회" class="plm_btns" id="btnSearchDescending">
</div>
</div>
<div id="plmSearchZon">
@@ -771,6 +791,11 @@ function fn_excelExport(pGridObj,pFileName){
<div class="ascendig_text">
<font size="2px">총 ${fn:length(List)}건</font>
<c:if test="${!empty param.searchType && param.searchType eq 'descending'}">
<font size="2px" style="color: #ff6600; margin-left: 10px;">
※ 역전개: 선택한 부품을 사용하는 상위 BOM을 표시합니다
</font>
</c:if>
</div>
<div class="in_table_scroll_wrap _table1" style="height:26px;width:99.4%;">
@@ -920,10 +945,10 @@ function fn_excelExport(pGridObj,pFileName){
<td><a href="#" class="File file_${item.FILE_2D_CNT eq 0?'empty_':''}icon" data-OBJID="${item.PART_OBJID}" data-docType="2D_DRAWING_CAD" data-docTypeName="2D(Drawing) CAD 첨부파일"></a></td>
<td><a href="#" class="File file_${item.FILE_PDF_CNT eq 0?'empty_':''}icon" data-OBJID="${item.PART_OBJID}" data-docType="2D_PDF_CAD" data-docTypeName="2D(PDF) CAD 첨부파일"></a></td>
<td title="${item.MATERIAL}" class="align_c">${item.MATERIAL}</td><!-- 재료 -->
<td title="${item.SPEC}" class="align_l" style="text-align: left; padding-left: 5px;">${item.SPEC}</td><!-- 열처리경도 -->
<td title="${item.POST_PROCESSING}" class="align_l" style="text-align: left; padding-left: 5px;">${item.POST_PROCESSING}</td><!-- 열처리방법 -->
<td title="${item.POST_PROCESSING}" class="align_l" style="text-align: left; padding-left: 5px;">${item.POST_PROCESSING}</td><!-- 표면처리 -->
<td title="${item.MAKER}" class="align_l" style="text-align: left; padding-left: 5px;">${item.MAKER}</td><!-- 공급업체 -->
<td title="${item.HEAT_TREATMENT_HARDNESS}" class="align_l" style="text-align: left; padding-left: 5px;">${item.HEAT_TREATMENT_HARDNESS}</td><!-- 열처리경도 -->
<td title="${item.HEAT_TREATMENT_METHOD}" class="align_l" style="text-align: left; padding-left: 5px;">${item.HEAT_TREATMENT_METHOD}</td><!-- 열처리방법 -->
<td title="${item.SURFACE_TREATMENT}" class="align_l" style="text-align: left; padding-left: 5px;">${item.SURFACE_TREATMENT}</td><!-- 표면처리 -->
<td title="${item.SUPPLY_NAME}" class="align_l" style="text-align: left; padding-left: 5px;">${item.SUPPLY_NAME}</td><!-- 공급업체 -->
<td title="${item.PART_TYPE_TITLE}" class="align_c">${item.PART_TYPE_TITLE}</td><!-- PART_TYPE -->
<td title="${item.REVISION}" class="align_c" style="text-align: left; padding-left: 5px;">${item.REVISION}</td><!-- REVISION -->
<td title="${item.EO_NO}" class="align_c" style="text-align: left; padding-left: 5px;">${item.EO_NO}</td><!-- EO_NO -->

View File

@@ -1146,9 +1146,17 @@ public class PartMngController {
//유닛명
code_map.put("unit_code",commonService.bizMakeOptionList("", CommonUtils.nullToEmpty((String)paramMap.get("unit_code")),"common.getUnitCodeList"));
if("Y".equals(search)){
if("Y".equals(search)){
String searchType = CommonUtils.checkNull(paramMap.get("searchType"), "ascending");
if("descending".equals(searchType)){
// 역전개 조회
resultList = partMngService.getStructureDescendingList(request,paramMap);
}else{
// 정전개 조회 (기본값)
resultList = partMngService.getStructureAscendingList(request,paramMap);
}
}
}catch(Exception e){
e.printStackTrace();
}

View File

@@ -5532,8 +5532,8 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.*
<!-- BOM_REPORT_OBJID,REGDATE,PATH -->
</select>
<!-- //정전개 조회 쿼리 -->
<select id="selectStructureAscendingList" parameterType="map" resultType="map">
<!-- //정전개 조회 쿼리 (백업) -->
<select id="selectStructureAscendingList_backup" parameterType="map" resultType="map">
<!--
SELECT * FROM (
@@ -5664,16 +5664,10 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.*
<choose>
<when test="search_type != null and !''.equals(search_type) and 'working'.equals(search_type)">
AND STATUS NOT IN ('deleting', 'deleted')
<!--
AND (BQP.STATUS IS NULL OR BQP.STATUS = '')
-->
AND COALESCE(BPQ.STATUS, '') NOT IN ('deleting', 'deleted')
</when>
<otherwise>
AND STATUS IN ('beforeEdit', 'editing','deleting', 'deploy')
<!--
AND COALESCE(STATUS,'') IN ('beforeEdit', 'editing','deleting', 'deploy', '')
-->
AND COALESCE(BPQ.STATUS,'') IN ('beforeEdit', 'editing','deleting', 'deploy', '')
</otherwise>
</choose>
) A,
@@ -5689,7 +5683,7 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.*
-->
AND NVL(A.LAST_PART_OBJID, A.PART_NO) = B.OBJID
AND NVL(A.PARENT_OBJID, '') = ''
AND B.STATUS = 'release'
AND B.STATUS IN ('create', 'release')
<!--
AND B.IS_LAST='1'
AND (C.STATUS = 'create' OR C.STATUS = 'deploy' AND B.IS_LAST='1')
@@ -5796,13 +5790,10 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.*
<choose>
<when test="search_type != null and !''.equals(search_type) and 'working'.equals(search_type)">
AND A.STATUS NOT IN ('deleting', 'deleted')
<!--
AND (BQP.STATUS IS NULL OR BQP.STATUS = '')
-->
AND COALESCE(A.STATUS, '') NOT IN ('deleting', 'deleted')
</when>
<otherwise>
AND A.STATUS IN ('beforeEdit', 'editing','deleting', 'deploy')
AND COALESCE(A.STATUS,'') IN ('beforeEdit', 'editing','deleting', 'deploy', '')
</otherwise>
</choose>
<!--
@@ -5894,11 +5885,183 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.*
</select>
<!-- //정전개 조회 쿼리 (신규 - 간소화) -->
<select id="selectStructureAscendingList" parameterType="map" resultType="map">
WITH RECURSIVE BOM_TREE AS (
-- 최상위 레벨 (PARENT가 없는 항목)
SELECT
BPQ.BOM_REPORT_OBJID,
BPQ.OBJID AS BPQ_OBJID,
BPQ.PARENT_OBJID,
BPQ.CHILD_OBJID,
BPQ.PART_NO,
BPQ.PARENT_PART_NO,
BPQ.QTY,
BPQ.SEQ,
COALESCE(BPQ.LAST_PART_OBJID, BPQ.PART_NO) AS LAST_PART_OBJID,
1 AS LEV,
ARRAY[BPQ.CHILD_OBJID::TEXT] AS PATH,
ARRAY[BPQ.SEQ::TEXT] AS PATH2,
0 AS LEAF
FROM BOM_PART_QTY BPQ
LEFT JOIN PART_BOM_REPORT PBR ON BPQ.BOM_REPORT_OBJID = PBR.OBJID
WHERE COALESCE(BPQ.PARENT_OBJID, '') = ''
AND COALESCE(BPQ.STATUS, '') NOT IN ('deleting', 'deleted')
<!-- BOM REPORT 검색 조건 -->
<if test="customer_cd != null and !''.equals(customer_cd)">
AND PBR.CUSTOMER_OBJID = #{customer_cd}
</if>
<if test="project_name != null and !''.equals(project_name)">
AND PBR.CONTRACT_OBJID = #{project_name}
</if>
<if test="unit_code != null and !''.equals(unit_code)">
AND PBR.UNIT_CODE = #{unit_code}
</if>
<!-- 품번/품명 검색 조건 - 해당 품번이 포함된 BOM만 필터링 -->
<if test="search_partNo != null and !''.equals(search_partNo)">
AND EXISTS (
SELECT 1 FROM BOM_PART_QTY BPQ_SUB
LEFT JOIN PART_MNG PM_SUB ON COALESCE(BPQ_SUB.LAST_PART_OBJID, BPQ_SUB.PART_NO) = PM_SUB.OBJID
WHERE BPQ_SUB.BOM_REPORT_OBJID = BPQ.BOM_REPORT_OBJID
AND UPPER(PM_SUB.PART_NO) LIKE UPPER('%${search_partNo}%')
)
</if>
<if test="search_partName != null and !''.equals(search_partName)">
AND EXISTS (
SELECT 1 FROM BOM_PART_QTY BPQ_SUB
LEFT JOIN PART_MNG PM_SUB ON COALESCE(BPQ_SUB.LAST_PART_OBJID, BPQ_SUB.PART_NO) = PM_SUB.OBJID
WHERE BPQ_SUB.BOM_REPORT_OBJID = BPQ.BOM_REPORT_OBJID
AND UPPER(PM_SUB.PART_NAME) LIKE UPPER('%${search_partName}%')
)
</if>
UNION ALL
-- 하위 레벨 (재귀)
SELECT
BPQ.BOM_REPORT_OBJID,
BPQ.OBJID AS BPQ_OBJID,
BPQ.PARENT_OBJID,
BPQ.CHILD_OBJID,
BPQ.PART_NO,
BPQ.PARENT_PART_NO,
BPQ.QTY,
BPQ.SEQ,
COALESCE(BPQ.LAST_PART_OBJID, BPQ.PART_NO) AS LAST_PART_OBJID,
BT.LEV + 1,
BT.PATH || BPQ.CHILD_OBJID::TEXT,
BT.PATH2 || BPQ.SEQ::TEXT,
0 AS LEAF
FROM BOM_PART_QTY BPQ
INNER JOIN BOM_TREE BT ON BPQ.PARENT_OBJID = BT.CHILD_OBJID
AND BPQ.BOM_REPORT_OBJID = BT.BOM_REPORT_OBJID
WHERE COALESCE(BPQ.STATUS, '') NOT IN ('deleting', 'deleted')
),
MAX_LEVEL_CTE AS (
-- 최대 레벨 계산
SELECT MAX(LEV) AS MAX_LEVEL
FROM BOM_TREE
)
SELECT
BT.BOM_REPORT_OBJID,
BT.LEV,
BT.LEV AS LEVEL,
BT.QTY,
BT.QTY AS QTY_TEMP,
BT.SEQ,
BT.LEAF,
-- PART 정보
PM.OBJID AS PART_OBJID,
PM.PART_NO,
PM.PART_NAME,
PM.REVISION,
PM.MATERIAL,
PM.SPEC,
PM.WEIGHT,
PM.THICKNESS,
PM.WIDTH,
PM.HEIGHT,
PM.OUT_DIAMETER,
PM.IN_DIAMETER,
PM.LENGTH,
PM.MAKER,
PM.POST_PROCESSING,
PM.REMARK,
PM.HEAT_TREATMENT_HARDNESS,
PM.HEAT_TREATMENT_METHOD,
PM.SURFACE_TREATMENT,
PM.SUPPLY_CODE,
(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG O WHERE O.OBJID::VARCHAR = PM.SUPPLY_CODE) AS SUPPLY_NAME,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = PM.PART_TYPE) AS PART_TYPE_TITLE,
PM.DESIGN_DATE,
(SELECT EO_NO FROM EO_MNG EM WHERE EM.OBJID::VARCHAR = PM.EO_NO) AS EO_NO,
(SELECT TO_CHAR(REG_DATE,'YYYY-MM-DD') FROM EO_MNG EM WHERE EM.OBJID::VARCHAR = PM.EO_NO) AS EO_DATE,
PM.SUB_MATERIAL,
-- 첨부파일 개수
(SELECT COUNT(*) FROM ATTACH_FILE_INFO AF WHERE AF.TARGET_OBJID = PM.OBJID AND AF.DOC_TYPE = '3D_CAD' AND AF.STATUS = 'Active') AS FILE_3D_CNT,
(SELECT COUNT(*) FROM ATTACH_FILE_INFO AF WHERE AF.TARGET_OBJID = PM.OBJID AND AF.DOC_TYPE = '2D_DRAWING_CAD' AND AF.STATUS = 'Active') AS FILE_2D_CNT,
(SELECT COUNT(*) FROM ATTACH_FILE_INFO AF WHERE AF.TARGET_OBJID = PM.OBJID AND AF.DOC_TYPE = '2D_PDF_CAD' AND AF.STATUS = 'Active') AS FILE_PDF_CNT,
-- BOM REPORT 정보
PBR.PRODUCT_CD,
PBR.STATUS AS BOM_STATUS,
-- PATH 정보
BT.PATH2,
(SELECT PART_NO FROM PART_MNG P WHERE P.OBJID::VARCHAR = BT.PART_NO) AS PART_MNG_NO,
(SELECT PART_NO FROM PART_MNG P WHERE P.OBJID::VARCHAR = BT.PARENT_PART_NO) AS PARENT_PART_MNG_NO,
-- LEAF 계산 (하위 항목이 있는지 체크)
(
SELECT CASE WHEN COUNT(*) > 0 THEN 0 ELSE 1 END
FROM BOM_PART_QTY BPQ2
WHERE BPQ2.PARENT_OBJID = BT.CHILD_OBJID
AND BPQ2.BOM_REPORT_OBJID = BT.BOM_REPORT_OBJID
AND COALESCE(BPQ2.STATUS, '') NOT IN ('deleting', 'deleted')
) AS LEAF,
-- 상위 품번 (P_QTY 계산용)
BT.QTY AS P_QTY,
-- ROOT 정보
(SELECT CHILD_OBJID FROM BOM_PART_QTY WHERE BOM_REPORT_OBJID = BT.BOM_REPORT_OBJID AND COALESCE(PARENT_OBJID, '') = '' LIMIT 1) AS ROOT_OBJID,
BT.PARENT_OBJID AS SUB_ROOT_OBJID,
-- MAX_LEVEL 추가
ML.MAX_LEVEL
FROM BOM_TREE BT
CROSS JOIN MAX_LEVEL_CTE ML
LEFT JOIN PART_MNG PM ON BT.LAST_PART_OBJID = PM.OBJID
LEFT JOIN PART_BOM_REPORT PBR ON BT.BOM_REPORT_OBJID = PBR.OBJID
WHERE (PM.OBJID IS NULL OR PM.STATUS IN ('create', 'release'))
<!-- 품번/품명 검색 시: 검색된 품번을 포함하는 PATH만 표시 -->
<if test="search_partNo != null and !''.equals(search_partNo)">
AND EXISTS (
SELECT 1 FROM BOM_TREE BT_SEARCH
LEFT JOIN PART_MNG PM_SEARCH ON BT_SEARCH.LAST_PART_OBJID = PM_SEARCH.OBJID
WHERE BT_SEARCH.BOM_REPORT_OBJID = BT.BOM_REPORT_OBJID
AND UPPER(PM_SEARCH.PART_NO) LIKE UPPER('%${search_partNo}%')
AND (
BT.CHILD_OBJID = BT_SEARCH.CHILD_OBJID
OR BT_SEARCH.CHILD_OBJID::TEXT = ANY(BT.PATH)
)
)
</if>
<if test="search_partName != null and !''.equals(search_partName)">
AND EXISTS (
SELECT 1 FROM BOM_TREE BT_SEARCH
LEFT JOIN PART_MNG PM_SEARCH ON BT_SEARCH.LAST_PART_OBJID = PM_SEARCH.OBJID
WHERE BT_SEARCH.BOM_REPORT_OBJID = BT.BOM_REPORT_OBJID
AND UPPER(PM_SEARCH.PART_NAME) LIKE UPPER('%${search_partName}%')
AND (
BT.CHILD_OBJID = BT_SEARCH.CHILD_OBJID
OR BT_SEARCH.CHILD_OBJID::TEXT = ANY(BT.PATH)
)
)
</if>
ORDER BY BT.PATH2
</select>
<!--
//역전개 조회 쿼리
//역전개 조회 쿼리 (백업)
Level을 정전개를 통해가져온다.
-->
<select id="selectStructureDescendingList" parameterType="map" resultType="map">
<select id="selectStructureDescendingList_backup" parameterType="map" resultType="map">
WITH RECURSIVE VIEW_BOM(
BOM_REPORT_OBJID,
PARENT_OBJID,
@@ -6134,6 +6297,112 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.*
PATH1
</select>
<!-- //역전개 조회 쿼리 (신규 - 간소화) -->
<select id="selectStructureDescendingList" parameterType="map" resultType="map">
WITH RECURSIVE BOM_TREE AS (
-- 검색된 파트를 시작점으로
SELECT
BPQ.BOM_REPORT_OBJID,
BPQ.OBJID AS BPQ_OBJID,
BPQ.PARENT_OBJID,
BPQ.CHILD_OBJID,
BPQ.PART_NO,
BPQ.PARENT_PART_NO,
BPQ.QTY,
BPQ.SEQ,
COALESCE(BPQ.LAST_PART_OBJID, BPQ.PART_NO) AS LAST_PART_OBJID,
1 AS LEV,
ARRAY[BPQ.PART_NO::TEXT] AS PATH
FROM BOM_PART_QTY BPQ
INNER JOIN PART_MNG PM ON COALESCE(BPQ.LAST_PART_OBJID, BPQ.PART_NO) = PM.OBJID
WHERE 1=1
AND COALESCE(BPQ.STATUS, '') NOT IN ('deleting', 'deleted')
AND PM.STATUS IN ('create', 'release')
<if test="search_partNo != null and !''.equals(search_partNo)">
AND UPPER(PM.PART_NO) LIKE UPPER('%${search_partNo}%')
</if>
<if test="search_partName != null and !''.equals(search_partName)">
AND UPPER(PM.PART_NAME) LIKE UPPER('%${search_partName}%')
</if>
UNION ALL
-- 상위로 올라가기 (역방향)
SELECT
BPQ.BOM_REPORT_OBJID,
BPQ.OBJID AS BPQ_OBJID,
BPQ.PARENT_OBJID,
BPQ.CHILD_OBJID,
BPQ.PART_NO,
BPQ.PARENT_PART_NO,
BPQ.QTY,
BPQ.SEQ,
COALESCE(BPQ.LAST_PART_OBJID, BPQ.PART_NO) AS LAST_PART_OBJID,
BT.LEV + 1,
BT.PATH || BPQ.PART_NO::TEXT
FROM BOM_PART_QTY BPQ
INNER JOIN BOM_TREE BT ON BPQ.CHILD_OBJID = BT.PARENT_OBJID
AND BPQ.BOM_REPORT_OBJID = BT.BOM_REPORT_OBJID
WHERE COALESCE(BPQ.STATUS, '') NOT IN ('deleting', 'deleted')
AND BPQ.PART_NO != ALL(BT.PATH) -- 순환 방지
),
MAX_LEVEL_CTE AS (
-- 최대 레벨 계산
SELECT MAX(LEV) AS MAX_LEVEL
FROM BOM_TREE
)
SELECT
BT.BOM_REPORT_OBJID,
BT.LEV,
BT.LEV AS LEVEL,
BT.QTY,
BT.SEQ,
-- PART 정보
PM.OBJID AS PART_OBJID,
PM.PART_NO AS PART_NO_TITLE,
PM.PART_NAME,
PM.REVISION AS REV,
PM.MATERIAL,
PM.SPEC,
PM.WEIGHT,
PM.MAKER,
PM.REMARK,
PM.HEAT_TREATMENT_HARDNESS,
PM.HEAT_TREATMENT_METHOD,
PM.SURFACE_TREATMENT,
PM.SUPPLY_CODE,
(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG O WHERE O.OBJID::VARCHAR = PM.SUPPLY_CODE) AS SUPPLY_NAME,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = PM.PART_TYPE) AS PART_TYPE_TITLE,
PM.DESIGN_DATE,
(SELECT EO_NO FROM EO_MNG EM WHERE EM.OBJID::VARCHAR = PM.EO_NO) AS EO_NO,
(SELECT TO_CHAR(REG_DATE,'YYYY-MM-DD') FROM EO_MNG EM WHERE EM.OBJID::VARCHAR = PM.EO_NO) AS EO_DATE,
PM.SUB_MATERIAL,
-- 첨부파일 개수
(SELECT COUNT(*) FROM ATTACH_FILE_INFO AF WHERE AF.TARGET_OBJID = PM.OBJID AND AF.DOC_TYPE = '3D_CAD' AND AF.STATUS = 'Active') AS FILE_3D_CNT,
(SELECT COUNT(*) FROM ATTACH_FILE_INFO AF WHERE AF.TARGET_OBJID = PM.OBJID AND AF.DOC_TYPE = '2D_DRAWING_CAD' AND AF.STATUS = 'Active') AS FILE_2D_CNT,
(SELECT COUNT(*) FROM ATTACH_FILE_INFO AF WHERE AF.TARGET_OBJID = PM.OBJID AND AF.DOC_TYPE = '2D_PDF_CAD' AND AF.STATUS = 'Active') AS FILE_PDF_CNT,
-- BOM REPORT 정보
PBR.REGDATE,
PBR.PRODUCT_CD,
PBR.STATUS AS BOM_STATUS,
-- PATH 정보
BT.PATH,
BT.PARENT_PART_NO,
-- MAX_LEVEL 추가
ML.MAX_LEVEL
FROM BOM_TREE BT
CROSS JOIN MAX_LEVEL_CTE ML
LEFT JOIN PART_MNG PM ON BT.LAST_PART_OBJID = PM.OBJID
LEFT JOIN PART_BOM_REPORT PBR ON BT.BOM_REPORT_OBJID = PBR.OBJID
WHERE 1=1
AND (PM.OBJID IS NULL OR PM.STATUS IN ('create', 'release'))
ORDER BY
PBR.REGDATE DESC,
BT.LEV,
BT.PATH
</select>
<!--
//역전개 조회 쿼리
Level을 정전개를 통해가져오지 않는다.
@@ -7076,6 +7345,9 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.*
,MAKER
,CONTRACT_OBJID
,POST_PROCESSING
,HEAT_TREATMENT_HARDNESS
,HEAT_TREATMENT_METHOD
,SURFACE_TREATMENT
) VALUES (
#{PART_OBJID}::NUMERIC
,#{PART_NO}
@@ -7101,6 +7373,9 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.*
,#{MAKER}
,#{CONTRACT_OBJID}
,#{POST_PROCESSING}
,#{HEAT_TREATMENT_HARDNESS}
,#{HEAT_TREATMENT_METHOD}
,#{SURFACE_TREATMENT}
)
</insert>

View File

@@ -1642,54 +1642,17 @@ public class PartMngService extends BaseService {
* @return
*/
public List getStructureAscendingList(HttpServletRequest request,Map paramMap){
List<Map<String,Object>> spareList = new ArrayList();
List<Map<String,Object>> resultList = new ArrayList();
SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession();
try{
System.out.println("paramMap :: " + paramMap);
spareList = sqlSession.selectList("partMng.selectStructureAscendingList", paramMap);
resultList = sqlSession.selectList("partMng.selectStructureAscendingList", paramMap);
resultList = CommonUtils.toUpperCaseMapKey(resultList);
spareList = CommonUtils.toUpperCaseMapKey(spareList);
// 쿼리에서 이미 MAX_LEVEL을 제공하므로 추가 처리 불필요
// LEV_X 컬럼도 JSP에서 동적으로 처리하므로 생략
int maxLevel = 0;
if(null != spareList && 0 < spareList.size()){
for(int i=0;i<spareList.size();i++){
Map resultMap = new HashMap();
resultMap = (HashMap)spareList.get(i);
int resultLevel = Integer.parseInt(CommonUtils.checkNull(resultMap.get("LEV"),"0"));
if(maxLevel < resultLevel){
maxLevel = resultLevel;
}
}
for(int i=0;i<spareList.size();i++){
Map resultMap = new HashMap();
resultMap = (HashMap)spareList.get(i);
resultMap.put("MAX_LEVEL", maxLevel);
int level = Integer.parseInt(CommonUtils.checkNull(resultMap.get("LEV"),"0"));
for(int j=0;j<maxLevel;j++){
String levelSymbol = "";
if((j+1) == level){
levelSymbol = "*";
}else{
levelSymbol = "";
}
resultMap.put("LEV_"+Integer.toString((j+1)), levelSymbol);
}
resultList.add(resultMap);
}
}
}catch(Exception e){
e.printStackTrace();
}finally{
@@ -1705,61 +1668,21 @@ public class PartMngService extends BaseService {
* @return
*/
public List getStructureDescendingList(HttpServletRequest request,Map paramMap){
List<Map<String,Object>> spareList = new ArrayList();
List<Map<String,Object>> resultList = new ArrayList();
SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession();
try{
if(paramMap != null && !paramMap.isEmpty()){
String partNo = CommonUtils.checkNull(paramMap.get("search_partNo"));
String partName = CommonUtils.checkNull(paramMap.get("search_partName"));
if(!"".equals(partNo) || !"".equals(partName)){
setPartMngCommonCD(paramMap);
spareList = sqlSession.selectList("partMng.selectStructureDescendingList", paramMap);
spareList = CommonUtils.toUpperCaseMapKey(spareList);
int maxLevel = 0;
if(null != spareList && 0 < spareList.size()){
for(int i=0;i<spareList.size();i++){
Map resultMap = new HashMap();
resultMap = (HashMap)spareList.get(i);
int resultLevel = Integer.parseInt(CommonUtils.checkNull(resultMap.get("LEV"),"0"));
if(maxLevel < resultLevel){
maxLevel = resultLevel;
}
}
for(int i=0;i<spareList.size();i++){
Map resultMap = new HashMap();
resultMap = (HashMap)spareList.get(i);
resultMap.put("MAX_LEVEL", maxLevel);
int level = Integer.parseInt(CommonUtils.checkNull(resultMap.get("LEV"),"0"));
for(int j=0;j<maxLevel;j++){
String levelSymbol = "";
if((j+1) == level){
levelSymbol = "*";
}else{
levelSymbol = "";
}
resultMap.put("LEV_"+Integer.toString((j+1)), levelSymbol);
}
resultList.add(resultMap);
}
}
resultList = sqlSession.selectList("partMng.selectStructureDescendingList", paramMap);
resultList = CommonUtils.toUpperCaseMapKey(resultList);
// 쿼리에서 이미 MAX_LEVEL을 제공하므로 추가 처리 불필요
System.out.println("resultList:"+resultList);
}
}
}catch(Exception e){
@@ -1768,7 +1691,7 @@ public class PartMngService extends BaseService {
sqlSession.close();
}
return CommonUtils.toUpperCaseMapKey(resultList);
return resultList;
}
@@ -4470,6 +4393,9 @@ public class PartMngService extends BaseService {
insertMap.put("SUPPLY_CODE", CommonUtils.checkNull((String)insertMap.get("SUP_CODE")));
insertMap.put("MAKER", CommonUtils.checkNull((String)insertMap.get("MAKER")));
insertMap.put("POST_PROCESSING", CommonUtils.checkNull((String)insertMap.get("POST_PROCESSING")));
insertMap.put("HEAT_TREATMENT_HARDNESS", CommonUtils.checkNull((String)insertMap.get("HEAT_TREATMENT_HARDNESS")));
insertMap.put("HEAT_TREATMENT_METHOD", CommonUtils.checkNull((String)insertMap.get("HEAT_TREATMENT_METHOD")));
insertMap.put("SURFACE_TREATMENT", CommonUtils.checkNull((String)insertMap.get("SURFACE_TREATMENT")));
insertMap.put("STATUS", "deploy"); // 엑셀 업로드 시 deploy 상태로 저장
insertMap.put("WRITER", CommonUtils.checkNull((String)paramMap.get("CONNECTUSERID")));