생산관리

This commit is contained in:
leeheejin
2025-11-18 14:37:36 +09:00
parent af02560097
commit 81a0ac5c62
12 changed files with 1864 additions and 351 deletions

View File

@@ -1078,9 +1078,23 @@ public class ProductionPlanningController extends BaseService {
paramMap.put("objId", objId);
Map<String, Object> projectInfo = commonService.selectOne("productionplanning.getProjectMgmtDetail", request, paramMap);
System.out.println("========== mBomPopupLeft ==========");
System.out.println("objId: " + objId);
System.out.println("projectInfo: " + projectInfo);
if(projectInfo != null) {
System.out.println("BOM_REPORT_OBJID: " + projectInfo.get("BOM_REPORT_OBJID"));
System.out.println("MBOM_STATUS: " + projectInfo.get("MBOM_STATUS"));
// 1. 먼저 저장된 M-BOM 데이터가 있는지 확인
List<Map<String, Object>> mbomDetailList = commonService.selectList("productionplanning.getMbomDetailByProject", request, paramMap);
String bomReportObjid = CommonUtils.checkNull(projectInfo.get("BOM_REPORT_OBJID"));
if(!"".equals(bomReportObjid)) {
Map<String, Object> bomParam = new HashMap<>();
bomParam.put("bomReportObjId", bomReportObjid);
bomParam.put("search_type", "working");
List<Map<String, Object>> mbomDetailList = commonService.selectList("partMng.getBOMTreeList", request, bomParam);
System.out.println("mbomDetailList size: " + (mbomDetailList != null ? mbomDetailList.size() : 0));
if(mbomDetailList != null && !mbomDetailList.isEmpty()) {
// 저장된 M-BOM 데이터가 있으면 이를 표시
@@ -1090,41 +1104,25 @@ public class ProductionPlanningController extends BaseService {
if(level != null && level > maxLevel) {
maxLevel = level;
}
// LEVEL_1, LEVEL_2, ... 필드 추가
if(level != null) {
for(int i = 1; i <= level; i++) {
if(i == level) {
item.put("LEVEL_" + i, "*");
} else {
item.put("LEVEL_" + i, "");
}
}
}
}
request.setAttribute("MAXLEV", maxLevel);
request.setAttribute("bomTreeListJson", gson.toJson(mbomDetailList));
return "/productionplanning/mBomPopupLeft";
}
// 저장된 M-BOM이 없으면 할당된 E-BOM 정보 조회
String bomReportObjid = CommonUtils.checkNull(projectInfo.get("BOM_REPORT_OBJID"));
if(!"".equals(bomReportObjid)) {
Map<String, Object> ebomParam = new HashMap<>();
ebomParam.put("objId", bomReportObjid);
ebomParam.put("bomReportObjId", bomReportObjid);
// E-BOM 정보 조회
Map<String, Object> ebomInfo = commonService.selectOne("partMng.getBomReportInfo", request, ebomParam);
request.setAttribute("ebomInfo", ebomInfo);
// BOM 트리 데이터 조회 (레벨 정보 포함)
List<Map<String, Object>> bomTreeList = commonService.selectList("partMng.getBOMTreeList", request, ebomParam);
if(bomTreeList != null && !bomTreeList.isEmpty()) {
// MAX LEVEL 계산
int maxLevel = 1;
for(Map<String, Object> item : bomTreeList) {
Integer level = (Integer) item.get("LEVEL");
if(level != null && level > maxLevel) {
maxLevel = level;
}
}
request.setAttribute("MAXLEV", maxLevel);
request.setAttribute("bomTreeListJson", gson.toJson(bomTreeList));
return "/productionplanning/mBomPopupLeft";
}
}
}
}
} catch(Exception e) {
@@ -1213,6 +1211,8 @@ public class ProductionPlanningController extends BaseService {
List<Map<String, Object>> mbomData = (List<Map<String, Object>>) paramMap.get("mbomData");
String partNo = CommonUtils.checkNull(paramMap.get("partNo"));
String partName = CommonUtils.checkNull(paramMap.get("partName"));
String mbomPartNo = CommonUtils.checkNull(paramMap.get("mbomPartNo")); // 기존 M-BOM 품번
boolean isUpdate = paramMap.get("isUpdate") != null && (Boolean)paramMap.get("isUpdate"); // 수정 여부
if(mbomData == null || mbomData.isEmpty()) {
resultMap.put("result", "fail");
@@ -1221,11 +1221,12 @@ public class ProductionPlanningController extends BaseService {
}
// M-BOM 저장 서비스 호출
int saveResult = productionPlanningService.saveMbom(request, mbomData, partNo, partName);
// isUpdate가 true이면 기존 M-BOM 품번 유지, false이면 새로 생성
int saveResult = productionPlanningService.saveMbom(request, mbomData, partNo, partName, mbomPartNo, isUpdate);
if(saveResult > 0) {
resultMap.put("result", "success");
resultMap.put("message", "M-BOM이 저장되었습니다.");
resultMap.put("message", isUpdate ? "M-BOM이 수정되었습니다." : "M-BOM이 저장되었습니다.");
} else {
resultMap.put("result", "fail");
resultMap.put("message", "저장에 실패했습니다.");
@@ -1237,4 +1238,123 @@ public class ProductionPlanningController extends BaseService {
}
return resultMap;
}
/**
* 품번으로 최신 M-BOM 조회 (Machine 이외 제품용)
* @param request
* @param paramMap
* @return
*/
@ResponseBody
@RequestMapping("/productionplanning/getLatestMbomByPartNo.do")
public Map<String, Object> getLatestMbomByPartNo(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
Map<String, Object> resultMap = new HashMap<>();
try {
String partNo = CommonUtils.checkNull(paramMap.get("partNo"));
if("".equals(partNo)) {
return resultMap;
}
// 최신 M-BOM 조회
Map<String, Object> mbomInfo = commonService.selectOne("productionplanning.getLatestMbomByPartNo", request, paramMap);
if(mbomInfo != null) {
resultMap.putAll(mbomInfo);
}
} catch(Exception e) {
e.printStackTrace();
}
return resultMap;
}
/**
* M-BOM 이력 조회
* @param request
* @param paramMap
* @return
*/
@ResponseBody
@RequestMapping("/productionplanning/getMbomHistory.do")
public Map<String, Object> getMbomHistory(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
Map<String, Object> resultMap = new HashMap<>();
try {
String mbomPartNo = CommonUtils.checkNull(paramMap.get("mbomPartNo"));
if("".equals(mbomPartNo)) {
resultMap.put("historyList", new ArrayList<>());
return resultMap;
}
// M-BOM 이력 조회 (PART_BOM_REPORT 테이블에서 동일 PART_NO로 조회)
List<Map<String, Object>> historyList = commonService.selectList("productionplanning.getMbomHistory", request, paramMap);
resultMap.put("historyList", historyList != null ? historyList : new ArrayList<>());
} catch(Exception e) {
e.printStackTrace();
resultMap.put("historyList", new ArrayList<>());
}
return resultMap;
}
/**
* M-BOM Part 연결 (E-BOM의 relatePartInfo와 동일)
* @param request
* @param paramMap
* @param rightCheckedArr
* @return
*/
@ResponseBody
@RequestMapping("/productionplanning/relateMbomPartInfo.do")
public Map<String, Object> relateMbomPartInfo(HttpServletRequest request, @RequestParam Map<String, Object> paramMap, @RequestParam(value = "rightCheckedArr[]") List<String> rightCheckedArr){
Map<String, Object> resultMap = new HashMap<>();
try {
boolean result = productionPlanningService.relateMbomPartInfo(request, paramMap, rightCheckedArr);
resultMap.put("result", result);
} catch(Exception e) {
e.printStackTrace();
resultMap.put("result", false);
}
return resultMap;
}
/**
* M-BOM Part 연결 해제 (E-BOM의 deleteStatusPartRelateInfo와 동일)
* @param request
* @param paramMap
* @return
*/
@ResponseBody
@RequestMapping("/productionplanning/deleteMbomPartRelateInfo.do")
public Map<String, Object> deleteMbomPartRelateInfo(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
Map<String, Object> resultMap = new HashMap<>();
try {
boolean result = productionPlanningService.deleteMbomPartRelateInfo(request, paramMap);
resultMap.put("result", result);
} catch(Exception e) {
e.printStackTrace();
resultMap.put("result", false);
}
return resultMap;
}
/**
* M-BOM Part 변경 (E-BOM의 changeRelatePartInfo와 동일)
* @param request
* @param paramMap
* @return
*/
@ResponseBody
@RequestMapping("/productionplanning/changeMbomPartInfo.do")
public Map<String, Object> changeMbomPartInfo(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
Map<String, Object> resultMap = new HashMap<>();
try {
boolean result = productionPlanningService.changeMbomPartInfo(request, paramMap);
resultMap.put("result", result);
} catch(Exception e) {
e.printStackTrace();
resultMap.put("result", false);
}
return resultMap;
}
}