품의서 양식 개발, 입고관리 등...

This commit is contained in:
2025-12-02 15:10:41 +09:00
parent f97399d45b
commit 4c1967cd63
10 changed files with 1133 additions and 73 deletions

View File

@@ -1361,107 +1361,100 @@ public class ProductionPlanningService {
}
}
// M-BOM 업데이트
// M-BOM 헤더 업데이트
paramMap.put("mbomHeaderObjid", existingMbom.get("OBJID"));
sqlSession.update("productionplanning.updateMbomHeader", paramMap);
// 삭제 전에 기존 데이터 백업 (PROPOSAL_DATE, VENDOR, NET_QTY, PO_QTY 등 보존)
// 기존 데이터 조회
Map<String, Object> queryParam = new HashMap<>();
queryParam.put("mbomHeaderObjid", existingMbom.get("OBJID")); // camelCase로 수정
queryParam.put("mbomHeaderObjid", existingMbom.get("OBJID"));
List<Map> oldMbomDetails = sqlSession.selectList("productionplanning.getMbomDetailList", queryParam);
// OBJID를 키로 하는 맵 생성 (빠른 조회)
// 기존 OBJID Set 생성
java.util.Set<String> existingObjids = new java.util.HashSet<>();
Map<String, Map> existingDataMap = new HashMap<>();
if(oldMbomDetails != null) {
for(Map detail : oldMbomDetails) {
detail = CommonUtils.toUpperCaseMapKey(detail);
String objid = CommonUtils.checkNull(detail.get("OBJID"));
if(!objid.isEmpty()) {
existingObjids.add(objid);
existingDataMap.put(objid, detail);
}
}
}
sqlSession.delete("productionplanning.deleteMbomDetail", paramMap);
// JSP에서 넘어온 OBJID Set 생성
java.util.Set<String> newObjids = new java.util.HashSet<>();
// 새 상세 데이터 삽입
// UPSERT 처리
if(mbomData != null && !mbomData.isEmpty()) {
for(Map<String, Object> item : mbomData) {
item.put("mbomHeaderObjid", existingMbom.get("OBJID"));
item.put("sessionUserId", userId);
// SEQ가 없으면 기존 SEQ 유지 (JSP에서 전송된 seq 사용)
// 없는 경우에만 새로 부여
// SEQ 기본값
if(item.get("seq") == null || "".equals(item.get("seq"))) {
item.put("seq", 999); // 임시값 (나중에 정렬 필요)
item.put("seq", 999);
}
// 기존 항목인 경우 objid와 childObjid 유지
// 새 항목인 경우에만 생성
String objid = CommonUtils.checkNull(item.get("objid"));
String childObjid = CommonUtils.checkNull(item.get("childObjid"));
// 신규 항목: objid가 비어있을 때만
if("".equals(objid)) {
objid = CommonUtils.createObjId();
item.put("objid", objid);
}
if("".equals(childObjid)) {
childObjid = objid; // 새 항목은 objid와 동일
childObjid = objid;
item.put("childObjid", childObjid);
}
// 기존 데이터에서 보존해야 할 값들 복원
newObjids.add(objid);
// 기존 데이터에서 보존할 값 복원
Map existingData = existingDataMap.get(objid);
if(existingData != null) {
// PROPOSAL_DATE가 JSP에서 안 넘어왔으면 기존 값 사용
if(item.get("proposalDate") == null || "".equals(item.get("proposalDate"))) {
Object proposalDate = existingData.get("PROPOSAL_DATE");
if(proposalDate != null) {
item.put("proposalDate", proposalDate);
System.out.println("PROPOSAL_DATE 복원: " + objid + " -> " + proposalDate);
}
Object val = existingData.get("PROPOSAL_DATE");
if(val != null) item.put("proposalDate", val);
}
// VENDOR가 JSP에서 안 넘어왔으면 기존 값 사용
if(item.get("vendor") == null || "".equals(item.get("vendor"))) {
Object vendor = existingData.get("VENDOR");
if(vendor != null) {
item.put("vendor", vendor);
System.out.println("VENDOR 복원: " + objid + " -> " + vendor);
}
Object val = existingData.get("VENDOR");
if(val != null) item.put("vendor", val);
}
// NET_QTY가 JSP에서 안 넘어왔으면 기존 값 사용
if(item.get("netQty") == null || "".equals(item.get("netQty"))) {
Object netQty = existingData.get("NET_QTY");
if(netQty != null) {
item.put("netQty", netQty);
}
Object val = existingData.get("NET_QTY");
if(val != null) item.put("netQty", val);
}
// PO_QTY가 JSP에서 안 넘어왔으면 기존 값 사용
if(item.get("poQty") == null || "".equals(item.get("poQty"))) {
Object poQty = existingData.get("PO_QTY");
if(poQty != null) {
item.put("poQty", poQty);
}
Object val = existingData.get("PO_QTY");
if(val != null) item.put("poQty", val);
}
}
// LEVEL이 없으면 기본값 1 설정
// LEVEL 기본값
if(item.get("level") == null || "".equals(item.get("level"))) {
item.put("level", 1);
}
System.out.println("UPDATE M-BOM DETAIL: seq=" + item.get("seq") +
", level=" + item.get("level") +
", partNo=" + item.get("partNo") +
", parentObjid=" + item.get("parentObjid") +
", childObjid=" + childObjid);
sqlSession.insert("productionplanning.insertMbomDetail", item);
// UPSERT: 기존 항목이면 UPDATE, 신규면 INSERT
if(existingObjids.contains(objid)) {
sqlSession.update("productionplanning.updateMbomDetail", item);
} else {
sqlSession.insert("productionplanning.insertMbomDetail", item);
}
}
}
// DELETE: DB에 있는데 JSP에 없는 항목 삭제
for(String existingObjid : existingObjids) {
if(!newObjids.contains(existingObjid)) {
Map<String, Object> deleteParam = new HashMap<>();
deleteParam.put("objid", existingObjid);
sqlSession.delete("productionplanning.deleteMbomDetailByObjid", deleteParam);
}
}