diff --git a/WebContent/WEB-INF/view/partMng/partMngTempList.jsp b/WebContent/WEB-INF/view/partMng/partMngTempList.jsp index 6da03c8..d09ae82 100644 --- a/WebContent/WEB-INF/view/partMng/partMngTempList.jsp +++ b/WebContent/WEB-INF/view/partMng/partMngTempList.jsp @@ -185,8 +185,30 @@ ui-jqgrid tr.jqgrow td { // {headerHozAlign : 'center', hozAlign : 'center', width : '90', title : 'PART 구분', field : 'PART_TYPE_TITLE' }, {headerHozAlign : 'center', hozAlign : 'center', width : '90', title : '비고', field : 'REMARK' } ]; + + // 중복 요청 방지 플래그 + var isSearching = false; + function fn_search(){ - _tabulGrid = fnc_tabul_search(_tabul_layout_fitColumns, _tabulGrid, "/partMng/partMngTempGridList.do", columns, true); + // 이미 검색 중이면 중단 + if (isSearching) { + console.log('검색 중입니다. 잠시만 기다려주세요.'); + return; + } + + isSearching = true; + + _tabulGrid = fnc_tabul_search(_tabul_layout_fitColumns, _tabulGrid, "/partMng/partMngTempGridList.do", columns, true, function() { + // 검색 완료 후 플래그 해제 + isSearching = false; + }); + + // 타임아웃 방어 (10초 후 자동 해제) + setTimeout(function() { + if (isSearching) { + isSearching = false; + } + }, 10000); } function openPartMngPopup(objId){ diff --git a/WebContent/WEB-INF/view/partMng/structureList.jsp b/WebContent/WEB-INF/view/partMng/structureList.jsp index 8e0c80e..a127940 100644 --- a/WebContent/WEB-INF/view/partMng/structureList.jsp +++ b/WebContent/WEB-INF/view/partMng/structureList.jsp @@ -180,9 +180,31 @@ var columns = [ {headerHozAlign : 'center', hozAlign : 'center', width : '200', title : '상태', field : 'STATUS' } ]; +// 중복 요청 방지를 위한 로딩 플래그 +var isSearching = false; + //var grid; function fn_search(){ - _tabulGrid = fnc_tabul_search(_tabul_layout_fitColumns, _tabulGrid, "/partMng/searchStructureGridList.do", columns, true); + // 이미 검색 중이면 중복 요청 방지 + if (isSearching) { + console.log('검색 중입니다. 잠시만 기다려주세요.'); + return; + } + + isSearching = true; + + // 기존 그리드 검색 함수 실행 + _tabulGrid = fnc_tabul_search(_tabul_layout_fitColumns, _tabulGrid, "/partMng/searchStructureGridList.do", columns, true, function() { + // 검색 완료 후 플래그 해제 + isSearching = false; + }); + + // fnc_tabul_search가 콜백을 지원하지 않을 경우를 위한 타임아웃 처리 + setTimeout(function() { + if (isSearching) { + isSearching = false; + } + }, 10000); // 10초 타임아웃 } //양산제품에 해당하는 SPEC 정보 목록을 가져온다. diff --git a/src/com/pms/mapper/partMng.xml b/src/com/pms/mapper/partMng.xml index 7029c33..c4e2cc1 100644 --- a/src/com/pms/mapper/partMng.xml +++ b/src/com/pms/mapper/partMng.xml @@ -97,8 +97,8 @@ P.PART_NO, P.PART_NAME, P.UNIT, - (SELECT CODE_NAME FROM COMM_CODE CC WHERE 1=1 AND CODE_ID = P.UNIT) AS UNIT_TITLE, - NVL((SELECT QTY FROM BOM_PART_QTY Q WHERE Q.LAST_PART_OBJID = P.OBJID AND STATUS = 'deploy' ORDER BY DEPLOY_DATE DESC LIMIT 1), P.QTY) QTY, + CC_UNIT.CODE_NAME AS UNIT_TITLE, + COALESCE(BOM_QTY_DATA.QTY, P.QTY) QTY, P.QTY QTY_P, P.SPEC, P.POST_PROCESSING, @@ -106,19 +106,14 @@ P.WEIGHT, P.PART_TYPE, P.IS_LONGD, - (SELECT CODE_NAME FROM COMM_CODE CC WHERE 1=1 AND CODE_ID = P.PART_TYPE) AS PART_TYPE_TITLE, + CC_PART.CODE_NAME AS PART_TYPE_TITLE, P.REMARK, P.ES_SPEC, P.MS_SPEC, P.CHANGE_TYPE, P.DESIGN_APPLY_POINT, P.CHANGE_OPTION, - (SELECT ARRAY_TO_STRING(ARRAY_AGG(CODE_NAME),',') - FROM COMM_CODE AS CC - WHERE CC.CODE_ID IN (SELECT UNNEST(STRING_TO_ARRAY(CHANGE_OPTION, ',')) AS CHANGE_OPTION - FROM PART_MNG AS T - WHERE T.OBJID = P.OBJID) - ) CHANGE_OPTION_NAME, + CHANGE_OPT.CHANGE_OPTION_NAME, P.SUPPLY_CODE, - (SELECT SUPPLY_NAME FROM admin_supply_mng O WHERE O.objid::varchar = P.SUPPLY_CODE) AS SUPPLY_NAME, + SUP.SUPPLY_NAME, P.HEAT_TREATMENT_HARDNESS, P.HEAT_TREATMENT_METHOD, - P.SURFACE_TREATMENT - ,(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('3D_CAD')) CU01_CNT - ,(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('2D_DRAWING_CAD')) CU02_CNT - ,(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('2D_PDF_CAD')) CU03_CNT - ,(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('2D_PDF_CAD','2D_DRAWING_CAD')) CU_TOTAL_CNT + P.SURFACE_TREATMENT, + COALESCE(FILE_CNT.CU01_CNT, 0) CU01_CNT, + COALESCE(FILE_CNT.CU02_CNT, 0) CU02_CNT, + COALESCE(FILE_CNT.CU03_CNT, 0) CU03_CNT, + COALESCE(FILE_CNT.CU_TOTAL_CNT, 0) CU_TOTAL_CNT FROM PART_MNG P + LEFT JOIN COMM_CODE CC_UNIT ON CC_UNIT.CODE_ID = P.UNIT + LEFT JOIN COMM_CODE CC_PART ON CC_PART.CODE_ID = P.PART_TYPE + LEFT JOIN admin_supply_mng SUP ON SUP.objid::varchar = P.SUPPLY_CODE + LEFT JOIN LATERAL ( + SELECT QTY + FROM BOM_PART_QTY Q + WHERE Q.LAST_PART_OBJID = P.OBJID + AND STATUS = 'deploy' + ORDER BY DEPLOY_DATE DESC + LIMIT 1 + ) BOM_QTY_DATA ON TRUE + LEFT JOIN LATERAL ( + SELECT ARRAY_TO_STRING(ARRAY_AGG(CC.CODE_NAME), ',') AS CHANGE_OPTION_NAME + FROM COMM_CODE AS CC + WHERE CC.CODE_ID IN ( + SELECT UNNEST(STRING_TO_ARRAY(P.CHANGE_OPTION, ',')) + ) + ) CHANGE_OPT ON TRUE + LEFT JOIN ( + SELECT + TARGET_OBJID, + SUM(CASE WHEN DOC_TYPE = '3D_CAD' THEN 1 ELSE 0 END) AS CU01_CNT, + SUM(CASE WHEN DOC_TYPE = '2D_DRAWING_CAD' THEN 1 ELSE 0 END) AS CU02_CNT, + SUM(CASE WHEN DOC_TYPE = '2D_PDF_CAD' THEN 1 ELSE 0 END) AS CU03_CNT, + SUM(CASE WHEN DOC_TYPE IN ('2D_PDF_CAD', '2D_DRAWING_CAD') THEN 1 ELSE 0 END) AS CU_TOTAL_CNT + FROM ATTACH_FILE_INFO + WHERE STATUS = 'Active' + AND DOC_TYPE IN ('3D_CAD', '2D_DRAWING_CAD', '2D_PDF_CAD') + GROUP BY TARGET_OBJID + ) FILE_CNT ON FILE_CNT.TARGET_OBJID = P.OBJID - (SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = T.UNIT_CODE) AS UNIT_NAME, - STATUS, - CASE UPPER(STATUS) + COALESCE(WT.UNIT_NO || '-' || WT.TASK_NAME, '') AS UNIT_NAME, + T.STATUS, + CASE UPPER(T.STATUS) WHEN 'CREATE' THEN '등록중' WHEN 'CHANGEDESIGN' THEN '설계변경미배포' WHEN 'DEPLOY' THEN '배포완료' ELSE '' END STATUS_TITLE, - WRITER, - (SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WRITER) AS DEPT_NAME, - (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = WRITER) AS USER_NAME, - REGDATE AS REGDATE, - TO_CHAR(REGDATE, 'YYYY-MM-DD') AS REG_DATE, - DEPLOY_DATE, - REVISION, + T.WRITER, + UI.DEPT_NAME, + UI.USER_NAME, + T.REGDATE AS REGDATE, + TO_CHAR(T.REGDATE, 'YYYY-MM-DD') AS REG_DATE, + T.DEPLOY_DATE, + T.REVISION, - (SELECT MAX(PM.EO_NO) FROM BOM_PART_QTY AS BP LEFT JOIN PART_MNG AS PM ON BP.PART_NO = PM.OBJID::VARCHAR WHERE BP.BOM_REPORT_OBJID =T.OBJID) AS EO_NO, - (SELECT MAX(PM.EO_DATE) FROM BOM_PART_QTY AS BP LEFT JOIN PART_MNG AS PM ON BP.PART_NO = PM.OBJID::VARCHAR WHERE BP.BOM_REPORT_OBJID =T.OBJID) AS EO_DATE, - NOTE, - (SELECT COUNT(*) FROM BOM_PART_QTY AS A WHERE A.BOM_REPORT_OBJID = T.OBJID) AS BOM_CNT + EO_DATA.EO_NO, + EO_DATA.EO_DATE, + T.NOTE, + COALESCE(EO_DATA.BOM_CNT, 0) AS BOM_CNT FROM PART_BOM_REPORT AS T + LEFT JOIN SUPPLY_MNG SM ON SM.OBJID::VARCHAR = T.CUSTOMER_OBJID + LEFT JOIN PROJECT_MGMT PM ON PM.OBJID = T.CONTRACT_OBJID + LEFT JOIN PMS_WBS_TASK WT ON WT.OBJID = T.UNIT_CODE + LEFT JOIN USER_INFO UI ON UI.USER_ID = T.WRITER + LEFT JOIN ( + SELECT + BP.BOM_REPORT_OBJID, + MAX(PM2.EO_NO) AS EO_NO, + MAX(PM2.EO_DATE) AS EO_DATE, + COUNT(*) AS BOM_CNT + FROM BOM_PART_QTY BP + LEFT JOIN PART_MNG PM2 ON BP.PART_NO = PM2.OBJID::VARCHAR + GROUP BY BP.BOM_REPORT_OBJID + ) EO_DATA ON EO_DATA.BOM_REPORT_OBJID = T.OBJID WHERE 1=1 AND T.CUSTOMER_OBJID = #{customer_cd} @@ -2734,48 +2737,62 @@ SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.*