생산관리_M-BOM관리페이지 e-bom까지 완료

This commit is contained in:
Johngreen
2025-10-29 11:14:13 +09:00
parent 7a37d6efd0
commit 91b97be376
9 changed files with 583 additions and 41 deletions

View File

@@ -904,4 +904,70 @@ public class ProductionPlanningController extends BaseService {
commonService.selectListPagingNew("productionplanning.mBomMgmtGridList", request, paramMap);
return paramMap;
}
/**
* M-BOM E-BOM 선택 팝업
* @param request
* @param paramMap
* @return
*/
@RequestMapping("/productionplanning/mBomEbomSelectPopup.do")
public String mBomEbomSelectPopup(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
try {
// 필요한 코드 맵 설정 (structureList.jsp 참고)
Map<String, Object> codeMap = new HashMap<>();
// 제품구분 코드 - structureList와 동일하게 설정
codeMap.put("product_cd", commonService.bizMakeOptionList("0000001", CommonUtils.nullToEmpty((String)paramMap.get("product_cd")), "common.getCodeselect"));
request.setAttribute("code_map", codeMap);
// 현재 할당된 E-BOM 정보 조회
String bomReportObjid = CommonUtils.checkNull(paramMap.get("bomReportObjid"));
if(!"".equals(bomReportObjid)) {
// E-BOM 정보 조회
Map<String, Object> ebomInfo = productionPlanningService.getEbomInfo(bomReportObjid);
request.setAttribute("currentEbom", ebomInfo);
}
} catch(Exception e) {
e.printStackTrace();
}
return "/productionplanning/mBomEbomSelectPopup";
}
/**
* E-BOM을 M-BOM(PROJECT_MGMT)에 할당
* @param request
* @param paramMap
* @return
*/
@ResponseBody
@RequestMapping("/productionplanning/assignEbomToMbom.do")
public Map<String, Object> assignEbomToMbom(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
Map<String, Object> resultMap = new HashMap<>();
try {
String projectMgmtObjid = CommonUtils.checkNull(paramMap.get("projectMgmtObjid"));
String bomReportObjid = CommonUtils.checkNull(paramMap.get("bomReportObjid"));
if(projectMgmtObjid.isEmpty() || bomReportObjid.isEmpty()) {
resultMap.put("success", false);
resultMap.put("message", "필수 파라미터가 누락되었습니다.");
return resultMap;
}
// PROJECT_MGMT 테이블의 PART_OBJID 업데이트
int updateResult = productionPlanningService.assignEbomToProject(projectMgmtObjid, bomReportObjid);
if(updateResult > 0) {
resultMap.put("success", true);
resultMap.put("message", "E-BOM이 할당되었습니다.");
} else {
resultMap.put("success", false);
resultMap.put("message", "할당에 실패했습니다.");
}
} catch(Exception e) {
e.printStackTrace();
resultMap.put("success", false);
resultMap.put("message", "오류가 발생했습니다: " + e.getMessage());
}
return resultMap;
}
}

View File

@@ -2928,7 +2928,7 @@
FROM CONTRACT_ITEM CI
WHERE CI.CONTRACT_OBJID = PM.CONTRACT_OBJID
AND CI.PART_OBJID = PM.PART_OBJID
AND CI.STATUS = 'ACTIVE'),
AND CI.STATUS = 'ACTIVE' LIMIT 1),
PM.DUE_DATE,
CM.req_del_date
) AS REQ_DEL_DATE,
@@ -2938,19 +2938,31 @@
FROM CONTRACT_ITEM CI
WHERE CI.CONTRACT_OBJID = PM.CONTRACT_OBJID
AND CI.PART_OBJID = PM.PART_OBJID
AND CI.STATUS = 'ACTIVE'),
AND CI.STATUS = 'ACTIVE' LIMIT 1),
''
) AS CUSTOMER_REQUEST,
PBR.OBJID AS BOM_REPORT_OBJID,
COALESCE(PBR.STATUS, '') AS EBOM_STATUS,
COALESCE(TO_CHAR(PBR.REGDATE, 'YYYY-MM-DD'), '') AS EBOM_REGDATE,
-- E-BOM 정보: PM.PART_OBJID가 E-BOM OBJID를 직접 가리킴
PM.PART_OBJID AS BOM_REPORT_OBJID,
COALESCE(
(SELECT PBR.STATUS
FROM PART_BOM_REPORT PBR
WHERE PBR.OBJID::VARCHAR = PM.PART_OBJID
LIMIT 1),
''
) AS EBOM_STATUS,
COALESCE(
(SELECT TO_CHAR(PBR.REGDATE, 'YYYY-MM-DD')
FROM PART_BOM_REPORT PBR
WHERE PBR.OBJID::VARCHAR = PM.PART_OBJID
LIMIT 1),
''
) AS EBOM_REGDATE,
COALESCE(PM.MBOM_STATUS, '') AS MBOM_STATUS,
'1.0' AS MBOM_VERSION,
TO_CHAR(PM.REGDATE, 'YYYY-MM-DD') AS MBOM_REGDATE
FROM
PROJECT_MGMT PM
LEFT JOIN CONTRACT_MGMT CM ON PM.CONTRACT_OBJID = CM.OBJID
LEFT JOIN PART_BOM_REPORT PBR ON PM.CONTRACT_OBJID = PBR.CONTRACT_OBJID::VARCHAR
WHERE 1=1
AND PM.PROJECT_NO IS NOT NULL
AND PM.PROJECT_NO != ''
@@ -2964,4 +2976,31 @@
</if>
ORDER BY PM.REGDATE DESC
</select>
<!-- E-BOM을 PROJECT_MGMT에 할당 -->
<update id="assignEbomToProject" parameterType="map">
UPDATE PROJECT_MGMT
SET
PART_OBJID = #{bomReportObjid}
WHERE OBJID = #{projectMgmtObjid}
</update>
<!-- E-BOM 정보 조회 -->
<select id="getEbomInfo" parameterType="map" resultType="com.pms.common.UpperKeyMap">
SELECT
T.OBJID,
T.PRODUCT_CD,
CODE_NAME(T.PRODUCT_CD) as PRODUCT_NAME,
T.PART_NO,
T.PART_NAME,
T.STATUS,
T.REVISION,
TO_CHAR(T.REGDATE, 'YYYY-MM-DD') AS REG_DATE,
UI.USER_NAME AS WRITER_NAME,
UI.DEPT_NAME
FROM
PART_BOM_REPORT T
LEFT JOIN USER_INFO UI ON UI.USER_ID = T.WRITER
WHERE T.OBJID::VARCHAR = #{objid}
</select>
</mapper>

View File

@@ -692,4 +692,61 @@ public class ProductionPlanningService {
}
return resultMap;
}
/**
* E-BOM을 PROJECT_MGMT에 할당
* @param projectMgmtObjid
* @param bomReportObjid
* @return
* @throws Exception
*/
public int assignEbomToProject(String projectMgmtObjid, String bomReportObjid) throws Exception {
SqlSession sqlSession = null;
try {
sqlSession = SqlMapConfig.getInstance().getSqlSession();
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("projectMgmtObjid", projectMgmtObjid);
paramMap.put("bomReportObjid", bomReportObjid);
int result = sqlSession.update("productionplanning.assignEbomToProject", paramMap);
sqlSession.commit();
return result;
} catch(Exception e) {
if(sqlSession != null) {
sqlSession.rollback();
}
throw e;
} finally {
if(sqlSession != null) {
sqlSession.close();
}
}
}
/**
* E-BOM 정보 조회
* @param bomReportObjid
* @return
*/
public Map<String, Object> getEbomInfo(String bomReportObjid) {
Map<String, Object> resultMap = new HashMap<>();
SqlSession sqlSession = null;
try {
sqlSession = SqlMapConfig.getInstance().getSqlSession();
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("objid", bomReportObjid);
resultMap = sqlSession.selectOne("productionplanning.getEbomInfo", paramMap);
} catch(Exception e) {
e.printStackTrace();
} finally {
if(sqlSession != null) {
sqlSession.close();
}
}
return resultMap;
}
}