M-BOM관리페이지 업데이트
This commit is contained in:
@@ -1007,4 +1007,168 @@ public class ProductionPlanningController extends BaseService {
|
||||
}
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* M-BOM 팝업
|
||||
* @param request
|
||||
* @param paramMap
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping("/productionplanning/mBomFormPopup.do")
|
||||
public String mBomFormPopup(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
|
||||
try {
|
||||
String objId = CommonUtils.checkNull(paramMap.get("objId"));
|
||||
|
||||
// PROJECT_MGMT 기본 정보 조회
|
||||
if(!objId.isEmpty()) {
|
||||
Map<String, Object> projectInfo = productionPlanningService.getProjectMgmtInfo(objId);
|
||||
request.setAttribute("projectInfo", projectInfo);
|
||||
|
||||
// E-BOM이 할당되어 있는지 확인 (PART_OBJID 사용)
|
||||
String partObjid = CommonUtils.checkNull(projectInfo.get("PART_OBJID"));
|
||||
if(!partObjid.isEmpty()) {
|
||||
// E-BOM 정보 조회
|
||||
Map<String, Object> ebomInfo = productionPlanningService.getEbomInfo(partObjid);
|
||||
request.setAttribute("ebomInfo", ebomInfo);
|
||||
}
|
||||
}
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return "/productionplanning/mBomFormPopup";
|
||||
}
|
||||
|
||||
/**
|
||||
* M-BOM 그리드 데이터 조회 (저장된 M-BOM 또는 빈 데이터)
|
||||
* @param request
|
||||
* @param paramMap
|
||||
* @return
|
||||
*/
|
||||
@ResponseBody
|
||||
@RequestMapping("/productionplanning/getMBomGridData.do")
|
||||
public Map<String, Object> getMBomGridData(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
|
||||
Map<String, Object> resultMap = new HashMap<>();
|
||||
try {
|
||||
String projectMgmtObjid = CommonUtils.checkNull(paramMap.get("projectMgmtObjid"));
|
||||
|
||||
if(projectMgmtObjid.isEmpty()) {
|
||||
resultMap.put("success", false);
|
||||
resultMap.put("message", "프로젝트 정보가 없습니다.");
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
// 저장된 M-BOM 데이터 조회 (없으면 빈 리스트)
|
||||
List<Map<String, Object>> mbomList = productionPlanningService.getSavedMBomData(projectMgmtObjid);
|
||||
|
||||
resultMap.put("success", true);
|
||||
resultMap.put("data", mbomList);
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
resultMap.put("success", false);
|
||||
resultMap.put("message", "오류가 발생했습니다: " + e.getMessage());
|
||||
}
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* E-BOM을 M-BOM으로 복사
|
||||
* @param request
|
||||
* @param paramMap
|
||||
* @return
|
||||
*/
|
||||
@ResponseBody
|
||||
@RequestMapping("/productionplanning/copyEbomToMbom.do")
|
||||
public Map<String, Object> copyEbomToMbom(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
|
||||
Map<String, Object> resultMap = new HashMap<>();
|
||||
try {
|
||||
System.out.println("===== copyEbomToMbom 호출됨 =====");
|
||||
System.out.println("paramMap: " + paramMap);
|
||||
System.out.println("paramMap.projectMgmtObjid: " + paramMap.get("projectMgmtObjid"));
|
||||
|
||||
String projectMgmtObjid = CommonUtils.checkNull(paramMap.get("projectMgmtObjid"));
|
||||
System.out.println("변환된 projectMgmtObjid: " + projectMgmtObjid);
|
||||
|
||||
if(projectMgmtObjid.isEmpty()) {
|
||||
System.out.println("projectMgmtObjid가 비어있음!");
|
||||
resultMap.put("success", false);
|
||||
resultMap.put("message", "프로젝트 정보가 없습니다.");
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
// E-BOM 데이터를 M-BOM으로 복사
|
||||
System.out.println("getMBomDataFromEbom 호출 - projectMgmtObjid: " + projectMgmtObjid);
|
||||
List<Map<String, Object>> mbomList = productionPlanningService.getMBomDataFromEbom(projectMgmtObjid);
|
||||
System.out.println("조회된 mbomList 크기: " + (mbomList != null ? mbomList.size() : "null"));
|
||||
|
||||
if(mbomList == null || mbomList.isEmpty()) {
|
||||
resultMap.put("success", false);
|
||||
resultMap.put("message", "E-BOM 데이터가 없습니다. 먼저 E-BOM을 할당해주세요.");
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
resultMap.put("success", true);
|
||||
resultMap.put("data", mbomList);
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
resultMap.put("success", false);
|
||||
resultMap.put("message", "오류가 발생했습니다: " + e.getMessage());
|
||||
}
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* M-BOM 데이터 저장
|
||||
* @param request
|
||||
* @param paramMap
|
||||
* @return
|
||||
*/
|
||||
@ResponseBody
|
||||
@RequestMapping("/productionplanning/saveMBomData.do")
|
||||
public Map<String, Object> saveMBomData(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
|
||||
Map<String, Object> resultMap = new HashMap<>();
|
||||
try {
|
||||
// M-BOM 데이터 저장 로직
|
||||
productionPlanningService.saveMBomData(request, paramMap);
|
||||
|
||||
resultMap.put("success", true);
|
||||
resultMap.put("message", "M-BOM이 저장되었습니다.");
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
resultMap.put("success", false);
|
||||
resultMap.put("message", "저장 중 오류가 발생했습니다: " + e.getMessage());
|
||||
}
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* M-BOM 데이터 삭제
|
||||
* @param request
|
||||
* @param paramMap
|
||||
* @return
|
||||
*/
|
||||
@ResponseBody
|
||||
@RequestMapping("/productionplanning/deleteMBomData.do")
|
||||
public Map<String, Object> deleteMBomData(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
|
||||
Map<String, Object> resultMap = new HashMap<>();
|
||||
try {
|
||||
String projectMgmtObjid = CommonUtils.checkNull(paramMap.get("projectMgmtObjid"));
|
||||
|
||||
if(projectMgmtObjid.isEmpty()) {
|
||||
resultMap.put("success", false);
|
||||
resultMap.put("message", "프로젝트 정보가 없습니다.");
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
// M-BOM 데이터 삭제 로직
|
||||
productionPlanningService.deleteMBomData(projectMgmtObjid);
|
||||
|
||||
resultMap.put("success", true);
|
||||
resultMap.put("message", "M-BOM이 삭제되었습니다.");
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
resultMap.put("success", false);
|
||||
resultMap.put("message", "삭제 중 오류가 발생했습니다: " + e.getMessage());
|
||||
}
|
||||
return resultMap;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3011,4 +3011,326 @@
|
||||
LEFT JOIN USER_INFO UI ON UI.USER_ID = T.WRITER
|
||||
WHERE T.OBJID::VARCHAR = #{objid}
|
||||
</select>
|
||||
|
||||
<!-- PROJECT_MGMT 정보 조회 -->
|
||||
<select id="getProjectMgmtInfo" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
||||
SELECT
|
||||
PM.OBJID,
|
||||
PM.CONTRACT_OBJID,
|
||||
PM.PROJECT_NO,
|
||||
PM.PART_NO,
|
||||
PM.PART_NAME,
|
||||
PM.PART_OBJID,
|
||||
PM.QUANTITY,
|
||||
PM.REQ_DEL_DATE,
|
||||
PM.BOM_REPORT_OBJID,
|
||||
CM.CUSTOMER_OBJID,
|
||||
(SELECT SUPPLY_NAME FROM SUPPLY_MNG WHERE OBJID::VARCHAR = CM.CUSTOMER_OBJID LIMIT 1) AS CUSTOMER_NAME,
|
||||
CM.PRODUCT,
|
||||
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = CM.PRODUCT LIMIT 1) AS PRODUCT_NAME
|
||||
FROM
|
||||
PROJECT_MGMT PM
|
||||
LEFT JOIN CONTRACT_MGMT CM ON CM.OBJID = PM.CONTRACT_OBJID
|
||||
WHERE PM.OBJID = #{objid}
|
||||
</select>
|
||||
|
||||
<!-- E-BOM 데이터를 기반으로 M-BOM 데이터 조회 -->
|
||||
<select id="getMBomDataFromEbom" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
||||
WITH RECURSIVE BOM_TREE AS (
|
||||
-- 최상위 레벨 (LEVEL = 0)
|
||||
SELECT
|
||||
BPQ.OBJID,
|
||||
BPQ.BOM_REPORT_OBJID,
|
||||
BPQ.PARENT_OBJID,
|
||||
BPQ.CHILD_OBJID,
|
||||
BPQ.PARENT_PART_NO,
|
||||
BPQ.PART_NO,
|
||||
BPQ.QTY,
|
||||
0 AS LEVEL,
|
||||
CAST(BPQ.SEQ AS VARCHAR) AS SORT_PATH,
|
||||
PM.PART_NO AS PART_NO_TITLE,
|
||||
PM.PART_NAME,
|
||||
PM.MATERIAL,
|
||||
PM.SPEC,
|
||||
PM.UNIT,
|
||||
PM.WEIGHT,
|
||||
PM.REVISION,
|
||||
'' AS HEAT_TREAT_HARDNESS,
|
||||
'' AS HEAT_TREAT_METHOD,
|
||||
'' AS SURFACE_TREATMENT,
|
||||
'' AS SUPPLIER_NAME,
|
||||
'' AS CATEGORY_NAME,
|
||||
'' AS RAW_MATERIAL,
|
||||
'' AS SIZE,
|
||||
0 AS ORDER_QTY,
|
||||
BPQ.QTY AS QUANTITY,
|
||||
0 AS PRODUCTION_QTY,
|
||||
'' AS PROCESSOR_NAME,
|
||||
'' AS PROCESS_DUE_DATE,
|
||||
'' AS GRINDING_DUE_DATE,
|
||||
-- 파일 첨부 여부 (3D, 2D, PDF)
|
||||
CASE WHEN EXISTS(
|
||||
SELECT 1 FROM attach_file_info AF
|
||||
WHERE AF.DOC_TYPE = 'PART_3D'
|
||||
AND AF.OBJID = PM.OBJID::NUMERIC
|
||||
AND AF.STATUS = 'ACTIVE'
|
||||
) THEN 'Y' ELSE 'N' END AS HAS_3D,
|
||||
CASE WHEN EXISTS(
|
||||
SELECT 1 FROM attach_file_info AF
|
||||
WHERE AF.DOC_TYPE = 'PART_2D'
|
||||
AND AF.OBJID = PM.OBJID::NUMERIC
|
||||
AND AF.STATUS = 'ACTIVE'
|
||||
) THEN 'Y' ELSE 'N' END AS HAS_2D,
|
||||
CASE WHEN EXISTS(
|
||||
SELECT 1 FROM attach_file_info AF
|
||||
WHERE AF.DOC_TYPE = 'PART_PDF'
|
||||
AND AF.OBJID = PM.OBJID::NUMERIC
|
||||
AND AF.STATUS = 'ACTIVE'
|
||||
) THEN 'Y' ELSE 'N' END AS HAS_PDF
|
||||
FROM
|
||||
BOM_PART_QTY BPQ
|
||||
LEFT JOIN PART_MNG PM ON PM.OBJID::VARCHAR = BPQ.PART_NO
|
||||
WHERE
|
||||
BPQ.BOM_REPORT_OBJID::VARCHAR = #{bomReportObjid}
|
||||
AND (BPQ.PARENT_OBJID IS NULL OR BPQ.PARENT_OBJID = '')
|
||||
|
||||
UNION ALL
|
||||
|
||||
-- 하위 레벨 (재귀)
|
||||
SELECT
|
||||
BPQ.OBJID,
|
||||
BPQ.BOM_REPORT_OBJID,
|
||||
BPQ.PARENT_OBJID,
|
||||
BPQ.CHILD_OBJID,
|
||||
BPQ.PARENT_PART_NO,
|
||||
BPQ.PART_NO,
|
||||
BPQ.QTY,
|
||||
BT.LEVEL + 1,
|
||||
BT.SORT_PATH || '-' || CAST(BPQ.SEQ AS VARCHAR),
|
||||
PM.PART_NO AS PART_NO_TITLE,
|
||||
PM.PART_NAME,
|
||||
PM.MATERIAL,
|
||||
PM.SPEC,
|
||||
PM.UNIT,
|
||||
PM.WEIGHT,
|
||||
PM.REVISION,
|
||||
'' AS HEAT_TREAT_HARDNESS,
|
||||
'' AS HEAT_TREAT_METHOD,
|
||||
'' AS SURFACE_TREATMENT,
|
||||
'' AS SUPPLIER_NAME,
|
||||
'' AS CATEGORY_NAME,
|
||||
'' AS RAW_MATERIAL,
|
||||
'' AS SIZE,
|
||||
0 AS ORDER_QTY,
|
||||
BPQ.QTY AS QUANTITY,
|
||||
0 AS PRODUCTION_QTY,
|
||||
'' AS PROCESSOR_NAME,
|
||||
'' AS PROCESS_DUE_DATE,
|
||||
'' AS GRINDING_DUE_DATE,
|
||||
CASE WHEN EXISTS(
|
||||
SELECT 1 FROM attach_file_info AF
|
||||
WHERE AF.DOC_TYPE = 'PART_3D'
|
||||
AND AF.OBJID = PM.OBJID::NUMERIC
|
||||
AND AF.STATUS = 'ACTIVE'
|
||||
) THEN 'Y' ELSE 'N' END AS HAS_3D,
|
||||
CASE WHEN EXISTS(
|
||||
SELECT 1 FROM attach_file_info AF
|
||||
WHERE AF.DOC_TYPE = 'PART_2D'
|
||||
AND AF.OBJID = PM.OBJID::NUMERIC
|
||||
AND AF.STATUS = 'ACTIVE'
|
||||
) THEN 'Y' ELSE 'N' END AS HAS_2D,
|
||||
CASE WHEN EXISTS(
|
||||
SELECT 1 FROM attach_file_info AF
|
||||
WHERE AF.DOC_TYPE = 'PART_PDF'
|
||||
AND AF.OBJID = PM.OBJID::NUMERIC
|
||||
AND AF.STATUS = 'ACTIVE'
|
||||
) THEN 'Y' ELSE 'N' END AS HAS_PDF
|
||||
FROM
|
||||
BOM_PART_QTY BPQ
|
||||
INNER JOIN BOM_TREE BT ON BT.CHILD_OBJID = BPQ.PARENT_OBJID
|
||||
LEFT JOIN PART_MNG PM ON PM.OBJID::VARCHAR = BPQ.PART_NO
|
||||
)
|
||||
SELECT
|
||||
OBJID,
|
||||
BOM_REPORT_OBJID,
|
||||
PARENT_OBJID,
|
||||
CHILD_OBJID,
|
||||
PARENT_PART_NO,
|
||||
PART_NO,
|
||||
QTY,
|
||||
LEVEL,
|
||||
PART_NO_TITLE,
|
||||
PART_NAME,
|
||||
QTY AS AGGREGATE_QTY,
|
||||
HAS_3D,
|
||||
HAS_2D,
|
||||
HAS_PDF,
|
||||
MATERIAL,
|
||||
HEAT_TREAT_HARDNESS,
|
||||
HEAT_TREAT_METHOD,
|
||||
SURFACE_TREATMENT,
|
||||
SUPPLIER_NAME,
|
||||
CATEGORY_NAME,
|
||||
RAW_MATERIAL,
|
||||
SIZE,
|
||||
ORDER_QTY,
|
||||
QUANTITY,
|
||||
PRODUCTION_QTY,
|
||||
PROCESSOR_NAME,
|
||||
PROCESS_DUE_DATE,
|
||||
GRINDING_DUE_DATE
|
||||
FROM
|
||||
BOM_TREE
|
||||
ORDER BY
|
||||
SORT_PATH
|
||||
</select>
|
||||
|
||||
<!-- M-BOM 데이터 저장 -->
|
||||
<insert id="insertMBomData" parameterType="map">
|
||||
INSERT INTO m_bom_data (
|
||||
objid,
|
||||
project_mgmt_objid,
|
||||
bom_report_objid,
|
||||
parent_objid,
|
||||
child_objid,
|
||||
parent_part_no,
|
||||
part_no,
|
||||
part_name,
|
||||
qty,
|
||||
aggregate_qty,
|
||||
level,
|
||||
material,
|
||||
heat_treat_hardness,
|
||||
heat_treat_method,
|
||||
surface_treatment,
|
||||
supplier_name,
|
||||
category_name,
|
||||
raw_material,
|
||||
size,
|
||||
order_qty,
|
||||
quantity,
|
||||
production_qty,
|
||||
processor_name,
|
||||
process_due_date,
|
||||
grinding_due_date,
|
||||
writer,
|
||||
regdate
|
||||
) VALUES (
|
||||
#{OBJID}::NUMERIC,
|
||||
#{projectMgmtObjid}::NUMERIC,
|
||||
#{BOM_REPORT_OBJID}::NUMERIC,
|
||||
<choose>
|
||||
<when test="PARENT_OBJID != null and PARENT_OBJID != ''">
|
||||
#{PARENT_OBJID}::NUMERIC,
|
||||
</when>
|
||||
<otherwise>
|
||||
NULL,
|
||||
</otherwise>
|
||||
</choose>
|
||||
<choose>
|
||||
<when test="CHILD_OBJID != null and CHILD_OBJID != ''">
|
||||
#{CHILD_OBJID}::NUMERIC,
|
||||
</when>
|
||||
<otherwise>
|
||||
NULL,
|
||||
</otherwise>
|
||||
</choose>
|
||||
#{PARENT_PART_NO},
|
||||
#{PART_NO},
|
||||
#{PART_NAME},
|
||||
#{QTY}::NUMERIC,
|
||||
#{AGGREGATE_QTY}::NUMERIC,
|
||||
#{LEVEL}::INTEGER,
|
||||
#{MATERIAL},
|
||||
#{HEAT_TREAT_HARDNESS},
|
||||
#{HEAT_TREAT_METHOD},
|
||||
#{SURFACE_TREATMENT},
|
||||
#{SUPPLIER_NAME},
|
||||
#{CATEGORY_NAME},
|
||||
#{RAW_MATERIAL},
|
||||
#{SIZE},
|
||||
#{ORDER_QTY}::NUMERIC,
|
||||
#{QUANTITY}::NUMERIC,
|
||||
#{PRODUCTION_QTY}::NUMERIC,
|
||||
#{PROCESSOR_NAME},
|
||||
#{PROCESS_DUE_DATE},
|
||||
#{GRINDING_DUE_DATE},
|
||||
#{writer},
|
||||
NOW()
|
||||
)
|
||||
</insert>
|
||||
|
||||
<!-- M-BOM 버전 업데이트 -->
|
||||
<update id="updateMBomVersion" parameterType="map">
|
||||
UPDATE project_mgmt
|
||||
SET
|
||||
mbom_version = COALESCE(mbom_version, 0) + 1,
|
||||
mbom_regdate = NOW(),
|
||||
mbom_writer = #{writer},
|
||||
mbom_status = 'Y'
|
||||
WHERE objid = #{projectMgmtObjid}
|
||||
</update>
|
||||
|
||||
<!-- M-BOM 데이터 삭제 (STATUS를 'DELETED'로 업데이트) -->
|
||||
<delete id="deleteMBomData" parameterType="map">
|
||||
UPDATE m_bom_data
|
||||
SET
|
||||
STATUS = 'DELETED',
|
||||
EDIT_DATE = NOW()
|
||||
WHERE PROJECT_MGMT_OBJID = #{projectMgmtObjid}::NUMERIC
|
||||
AND STATUS = 'ACTIVE'
|
||||
</delete>
|
||||
|
||||
<!-- M-BOM 상태 초기화 -->
|
||||
<update id="resetMBomStatus" parameterType="map">
|
||||
UPDATE project_mgmt
|
||||
SET
|
||||
mbom_status = NULL,
|
||||
mbom_version = NULL,
|
||||
mbom_regdate = NULL,
|
||||
mbom_writer = NULL
|
||||
WHERE objid = #{projectMgmtObjid}
|
||||
</update>
|
||||
|
||||
<!-- 저장된 M-BOM 데이터 조회 -->
|
||||
<select id="getSavedMBomData" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
||||
SELECT
|
||||
OBJID,
|
||||
PROJECT_MGMT_OBJID,
|
||||
BOM_REPORT_OBJID,
|
||||
PARENT_OBJID,
|
||||
CHILD_OBJID,
|
||||
PARENT_PART_NO,
|
||||
PART_NO,
|
||||
PART_NAME AS PART_NO_TITLE,
|
||||
PART_NAME,
|
||||
QTY,
|
||||
AGGREGATE_QTY,
|
||||
LEVEL,
|
||||
MATERIAL,
|
||||
HEAT_TREAT_HARDNESS,
|
||||
HEAT_TREAT_METHOD,
|
||||
SURFACE_TREATMENT,
|
||||
SUPPLIER_NAME,
|
||||
CATEGORY_NAME,
|
||||
RAW_MATERIAL,
|
||||
SIZE,
|
||||
ORDER_QTY,
|
||||
QUANTITY,
|
||||
PRODUCTION_QTY,
|
||||
PROCESSOR_NAME,
|
||||
PROCESS_DUE_DATE,
|
||||
GRINDING_DUE_DATE,
|
||||
-- 파일 첨부 여부 확인 (저장된 경우)
|
||||
'N' AS HAS_3D,
|
||||
'N' AS HAS_2D,
|
||||
'N' AS HAS_PDF
|
||||
FROM
|
||||
m_bom_data
|
||||
WHERE
|
||||
PROJECT_MGMT_OBJID = #{projectMgmtObjid}::NUMERIC
|
||||
AND STATUS = 'ACTIVE'
|
||||
ORDER BY
|
||||
LEVEL, OBJID
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -779,4 +779,201 @@ public class ProductionPlanningService {
|
||||
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* PROJECT_MGMT 정보 조회
|
||||
* @param projectMgmtObjid
|
||||
* @return
|
||||
*/
|
||||
public Map<String, Object> getProjectMgmtInfo(String projectMgmtObjid) {
|
||||
Map<String, Object> resultMap = new HashMap<>();
|
||||
SqlSession sqlSession = null;
|
||||
|
||||
try {
|
||||
sqlSession = SqlMapConfig.getInstance().getSqlSession();
|
||||
Map<String, Object> paramMap = new HashMap<>();
|
||||
paramMap.put("objid", projectMgmtObjid);
|
||||
resultMap = sqlSession.selectOne("productionplanning.getProjectMgmtInfo", paramMap);
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
if(sqlSession != null) {
|
||||
sqlSession.close();
|
||||
}
|
||||
}
|
||||
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 저장된 M-BOM 데이터 조회 (없으면 빈 리스트 반환)
|
||||
* @param projectMgmtObjid
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
public List<Map<String, Object>> getSavedMBomData(String projectMgmtObjid) throws Exception {
|
||||
List<Map<String, Object>> resultList = new ArrayList<>();
|
||||
SqlSession sqlSession = null;
|
||||
|
||||
try {
|
||||
sqlSession = SqlMapConfig.getInstance().getSqlSession();
|
||||
|
||||
Map<String, Object> paramMap = new HashMap<>();
|
||||
paramMap.put("projectMgmtObjid", projectMgmtObjid);
|
||||
|
||||
// 저장된 M-BOM 데이터 조회
|
||||
resultList = sqlSession.selectList("productionplanning.getSavedMBomData", paramMap);
|
||||
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
throw e;
|
||||
} finally {
|
||||
if(sqlSession != null) {
|
||||
sqlSession.close();
|
||||
}
|
||||
}
|
||||
|
||||
return resultList;
|
||||
}
|
||||
|
||||
/**
|
||||
* E-BOM 데이터를 기반으로 M-BOM 데이터 조회/생성
|
||||
* @param projectMgmtObjid
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
public List<Map<String, Object>> getMBomDataFromEbom(String projectMgmtObjid) throws Exception {
|
||||
List<Map<String, Object>> resultList = new ArrayList<>();
|
||||
SqlSession sqlSession = null;
|
||||
|
||||
try {
|
||||
sqlSession = SqlMapConfig.getInstance().getSqlSession();
|
||||
|
||||
// PROJECT_MGMT 정보 조회
|
||||
Map<String, Object> paramMap = new HashMap<>();
|
||||
paramMap.put("objid", projectMgmtObjid);
|
||||
|
||||
Map<String, Object> projectInfo = sqlSession.selectOne("productionplanning.getProjectMgmtInfo", paramMap);
|
||||
|
||||
if(projectInfo != null) {
|
||||
// PART_OBJID 사용 (E-BOM의 OBJID)
|
||||
String partObjid = CommonUtils.checkNull(projectInfo.get("PART_OBJID"));
|
||||
|
||||
if(!partObjid.isEmpty()) {
|
||||
// E-BOM이 할당되어 있으면 E-BOM 데이터를 복사하여 M-BOM으로 반환
|
||||
paramMap.put("bomReportObjid", partObjid);
|
||||
resultList = sqlSession.selectList("productionplanning.getMBomDataFromEbom", paramMap);
|
||||
}
|
||||
}
|
||||
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
throw e;
|
||||
} finally {
|
||||
if(sqlSession != null) {
|
||||
sqlSession.close();
|
||||
}
|
||||
}
|
||||
|
||||
return resultList;
|
||||
}
|
||||
|
||||
/**
|
||||
* M-BOM 데이터 저장
|
||||
* @param request
|
||||
* @param paramMap
|
||||
* @throws Exception
|
||||
*/
|
||||
public void saveMBomData(HttpServletRequest request, Map<String, Object> paramMap) throws Exception {
|
||||
SqlSession sqlSession = null;
|
||||
|
||||
try {
|
||||
sqlSession = SqlMapConfig.getInstance().getSqlSession(false);
|
||||
HttpSession session = request.getSession();
|
||||
PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN);
|
||||
String userId = person.getUserId();
|
||||
|
||||
// M-BOM 그리드 데이터 파싱
|
||||
List<Map<String, Object>> gridDataList = JsonUtil.JsonToList(CommonUtils.checkNull(paramMap.get("gridData")));
|
||||
|
||||
String projectMgmtObjid = CommonUtils.checkNull(paramMap.get("projectMgmtObjid"));
|
||||
|
||||
// 기존 M-BOM 데이터 삭제 (필요한 경우)
|
||||
if(!projectMgmtObjid.isEmpty()) {
|
||||
sqlSession.delete("productionplanning.deleteMBomData", paramMap);
|
||||
}
|
||||
|
||||
// M-BOM 데이터 저장
|
||||
for(Map<String, Object> data : gridDataList) {
|
||||
data.put("projectMgmtObjid", projectMgmtObjid);
|
||||
data.put("writer", userId);
|
||||
|
||||
// 항상 새로운 OBJID 생성 (E-BOM의 OBJID와 충돌 방지)
|
||||
data.put("OBJID", CommonUtils.createObjId());
|
||||
|
||||
// 빈 문자열을 null로 변환 (NUMERIC 타입 컬럼들)
|
||||
if(CommonUtils.checkNull(data.get("PARENT_OBJID")).isEmpty()) {
|
||||
data.put("PARENT_OBJID", null);
|
||||
}
|
||||
if(CommonUtils.checkNull(data.get("CHILD_OBJID")).isEmpty()) {
|
||||
data.put("CHILD_OBJID", null);
|
||||
}
|
||||
|
||||
sqlSession.insert("productionplanning.insertMBomData", data);
|
||||
}
|
||||
|
||||
// PROJECT_MGMT의 M-BOM 버전 업데이트
|
||||
Map<String, Object> updateMap = new HashMap<>();
|
||||
updateMap.put("projectMgmtObjid", projectMgmtObjid);
|
||||
updateMap.put("writer", userId);
|
||||
sqlSession.update("productionplanning.updateMBomVersion", updateMap);
|
||||
|
||||
sqlSession.commit();
|
||||
|
||||
} catch(Exception e) {
|
||||
if(sqlSession != null) {
|
||||
sqlSession.rollback();
|
||||
}
|
||||
e.printStackTrace();
|
||||
throw e;
|
||||
} finally {
|
||||
if(sqlSession != null) {
|
||||
sqlSession.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* M-BOM 데이터 삭제
|
||||
* @param projectMgmtObjid
|
||||
* @throws Exception
|
||||
*/
|
||||
public void deleteMBomData(String projectMgmtObjid) throws Exception {
|
||||
SqlSession sqlSession = null;
|
||||
try {
|
||||
sqlSession = SqlMapConfig.getInstance().getSqlSession(false);
|
||||
|
||||
Map<String, Object> paramMap = new HashMap<>();
|
||||
paramMap.put("projectMgmtObjid", projectMgmtObjid);
|
||||
|
||||
// M-BOM 데이터 삭제
|
||||
sqlSession.delete("productionplanning.deleteMBomData", paramMap);
|
||||
|
||||
// PROJECT_MGMT의 MBOM_STATUS를 NULL로 업데이트
|
||||
sqlSession.update("productionplanning.resetMBomStatus", paramMap);
|
||||
|
||||
sqlSession.commit();
|
||||
|
||||
} catch(Exception e) {
|
||||
if(sqlSession != null) {
|
||||
sqlSession.rollback();
|
||||
}
|
||||
e.printStackTrace();
|
||||
throw e;
|
||||
} finally {
|
||||
if(sqlSession != null) {
|
||||
sqlSession.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user