개발관리_설계변경리스트

This commit is contained in:
2026-01-07 14:49:27 +09:00
parent 2d836456c6
commit 799ea4faf7
4 changed files with 654 additions and 0 deletions

View File

@@ -2107,4 +2107,68 @@ public class ProductionPlanningController extends BaseService {
return resultMap;
}
/**
* M-BOM 변경이력 목록 페이지
*/
@RequestMapping("/productionplanning/mBomHistoryList.do")
public String mBomHistoryList(HttpServletRequest request, @RequestParam Map paramMap){
Map code_map = new HashMap();
try {
// 주문유형 (0000167)
code_map.put("category_cd", commonService.bizMakeOptionList("0000167", (String)paramMap.get("search_category_cd"), "common.getCodeselect"));
// 제품구분 (0000001)
code_map.put("product_cd", commonService.bizMakeOptionList("0000001", (String)paramMap.get("search_product_cd"), "common.getCodeselect"));
// 고객사 (SUPPLY_MNG + CLIENT_MNG)
code_map.put("customer_cd", commonService.bizMakeOptionList("", (String)paramMap.get("search_customer_objid"), "common.getAllSupplySelect"));
request.setAttribute("code_map", code_map);
} catch(Exception e) {
e.printStackTrace();
}
return "/productionplanning/mBomHistoryList";
}
/**
* M-BOM 변경이력 그리드 목록 조회 (MBOM_HISTORY 기준)
*/
@ResponseBody
@RequestMapping("/productionplanning/mBomHistoryGridList.do")
public Map mBomHistoryGridList(HttpServletRequest request, @RequestParam Map paramMap){
commonService.selectListPagingNew("productionplanning.getMbomHistoryGridList", request, paramMap);
return paramMap;
}
/**
* M-BOM 변경이력 상세 팝업
*/
@RequestMapping("/productionplanning/mBomHistoryDetailPopup.do")
public String mBomHistoryDetailPopup(HttpServletRequest request, @RequestParam Map paramMap){
try {
String historyObjId = CommonUtils.nullToEmpty((String)paramMap.get("historyObjId"));
if(!"".equals(historyObjId)) {
// 이력 상세 정보 조회
Map<String, Object> historyInfo = commonService.selectOne("productionplanning.getMbomHistoryDetail", request, paramMap);
if(historyInfo != null) {
// JSON 데이터 이스케이프 처리 (JSP에서 JavaScript로 전달 시 오류 방지)
String beforeData = CommonUtils.nullToEmpty((String)historyInfo.get("BEFORE_DATA"));
String afterData = CommonUtils.nullToEmpty((String)historyInfo.get("AFTER_DATA"));
// 줄바꿈, 작은따옴표 등 이스케이프
beforeData = beforeData.replace("\\", "\\\\").replace("'", "\\'").replace("\n", "\\n").replace("\r", "");
afterData = afterData.replace("\\", "\\\\").replace("'", "\\'").replace("\n", "\\n").replace("\r", "");
historyInfo.put("BEFORE_DATA_ESCAPED", beforeData);
historyInfo.put("AFTER_DATA_ESCAPED", afterData);
request.setAttribute("historyInfo", historyInfo);
}
}
} catch(Exception e) {
e.printStackTrace();
}
return "/productionplanning/mBomHistoryDetailPopup";
}
}

View File

@@ -4933,4 +4933,93 @@
WHERE PROJECT_OBJID = #{projectObjid}
</delete>
<!-- M-BOM 변경이력 목록 조회 (MBOM_HISTORY 기준) -->
<select id="getMbomHistoryGridList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
SELECT
MH.OBJID AS HISTORY_OBJID,
MH.MBOM_HEADER_OBJID,
MH.CHANGE_TYPE,
--TO_CHAR(MH.CHANGE_DATE, 'YYYY-MM-DD HH24:MI:SS') AS CHANGE_DATE,
TO_CHAR(MH.CHANGE_DATE, 'YYYY-MM-DD') AS CHANGE_DATE,
MH.CHANGE_USER,
COALESCE(
(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = MH.CHANGE_USER LIMIT 1),
MH.CHANGE_USER
) AS CHANGE_USER_NAME,
PM.OBJID AS PROJECT_OBJID,
PM.PROJECT_NO,
PM.PART_NO,
PM.PART_NAME,
COALESCE(PM.QUANTITY::numeric, 0) AS QUANTITY,
COALESCE(PM.DUE_DATE, CM.REQ_DEL_DATE) AS REQ_DEL_DATE,
CM.OBJID AS CONTRACT_OBJID,
COALESCE((SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = CM.CATEGORY_CD LIMIT 1), '') AS CATEGORY_NAME,
COALESCE((SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = CM.PRODUCT LIMIT 1), '') AS PRODUCT_NAME,
COALESCE((SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = CM.AREA_CD LIMIT 1), '') AS AREA_NAME,
TO_CHAR(PM.REGDATE, 'YYYY-MM-DD') AS RECEIPT_DATE,
COALESCE(
CASE WHEN CM.CUSTOMER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG AS C WHERE 'C_' || C.OBJID::VARCHAR = CM.CUSTOMER_OBJID LIMIT 1) ELSE (SELECT SUPPLY_NAME FROM SUPPLY_MNG WHERE OBJID::VARCHAR = CM.CUSTOMER_OBJID::VARCHAR LIMIT 1) END,
''
) AS CUSTOMER_NAME,
COALESCE(
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = CM.PAID_TYPE LIMIT 1),
CASE
WHEN CM.PAID_TYPE = 'paid' THEN '유상'
WHEN CM.PAID_TYPE = 'free' THEN '무상'
ELSE ''
END
) AS PAID_TYPE_NAME,
COALESCE(CI.CUSTOMER_REQUEST, '') AS CUSTOMER_REQUEST
FROM MBOM_HISTORY MH
INNER JOIN MBOM_HEADER MHD ON MH.MBOM_HEADER_OBJID = MHD.OBJID
INNER JOIN PROJECT_MGMT PM ON MHD.PROJECT_OBJID = PM.OBJID::VARCHAR
LEFT OUTER JOIN CONTRACT_ITEM CI ON PM.CONTRACT_OBJID = CI.CONTRACT_OBJID
LEFT JOIN CONTRACT_MGMT CM ON PM.CONTRACT_OBJID = CM.OBJID
WHERE 1=1
<if test="search_category_cd != null and search_category_cd != ''">
AND CM.CATEGORY_CD = #{search_category_cd}
</if>
<if test="search_product_cd != null and search_product_cd != ''">
AND CM.PRODUCT = #{search_product_cd}
</if>
<if test="search_area_cd != null and search_area_cd != ''">
AND CM.AREA_CD = #{search_area_cd}
</if>
<if test="search_customer_objid != null and search_customer_objid != ''">
AND CM.CUSTOMER_OBJID = #{search_customer_objid}
</if>
<if test="search_change_date_from != null and search_change_date_from != ''">
AND MH.CHANGE_DATE >= TO_DATE(#{search_change_date_from}, 'YYYY-MM-DD')
</if>
<if test="search_change_date_to != null and search_change_date_to != ''">
AND MH.CHANGE_DATE &lt;= TO_DATE(#{search_change_date_to}, 'YYYY-MM-DD') + INTERVAL '1 day'
</if>
ORDER BY MH.CHANGE_DATE DESC
</select>
<!-- M-BOM 변경이력 상세 조회 (개별 히스토리 건) -->
<select id="getMbomHistoryDetail" parameterType="map" resultType="com.pms.common.UpperKeyMap">
SELECT
MH.OBJID AS HISTORY_OBJID,
MH.MBOM_HEADER_OBJID,
MH.CHANGE_TYPE,
MH.CHANGE_DESCRIPTION,
MH.BEFORE_DATA::TEXT AS BEFORE_DATA,
MH.AFTER_DATA::TEXT AS AFTER_DATA,
TO_CHAR(MH.CHANGE_DATE, 'YYYY-MM-DD HH24:MI:SS') AS CHANGE_DATE,
MH.CHANGE_USER,
COALESCE(
(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = MH.CHANGE_USER LIMIT 1),
MH.CHANGE_USER
) AS CHANGE_USER_NAME,
-- PROJECT 정보
PM.PROJECT_NO,
PM.PART_NO,
PM.PART_NAME
FROM MBOM_HISTORY MH
INNER JOIN MBOM_HEADER MHD ON MH.MBOM_HEADER_OBJID = MHD.OBJID
INNER JOIN PROJECT_MGMT PM ON MHD.PROJECT_OBJID = PM.OBJID::VARCHAR
WHERE MH.OBJID::VARCHAR = #{historyObjId}
</select>
</mapper>