ebom 반제품 추가, 삭제 오류 수정
This commit is contained in:
@@ -3960,7 +3960,8 @@ public class PartMngService extends BaseService {
|
||||
}
|
||||
}
|
||||
|
||||
// 새 데이터에서 참조하는 PARENT_OBJID 셋 (삭제 보호용)
|
||||
// 삭제 보호용: UI 새 데이터에서 참조되는 PARENT_OBJID만 수집
|
||||
// (DB 기존 데이터는 포함하지 않음 - 의도적 삭제를 막게 되므로)
|
||||
Set<String> referencedParentObjids = new HashSet<>();
|
||||
for(Map<String, Object> item : ebomData) {
|
||||
String parentObjid = CommonUtils.checkNull(item.get("parentObjid"));
|
||||
@@ -3969,12 +3970,22 @@ public class PartMngService extends BaseService {
|
||||
}
|
||||
}
|
||||
|
||||
// 2. 삭제: 기존에 있지만 새 데이터에 없는 항목 (다른 행이 참조하는 부모는 보호)
|
||||
// 2. 삭제: 기존에 있지만 새 데이터에 없는 항목
|
||||
for(String existingChildObjid : existingMap.keySet()) {
|
||||
if(!newChildObjids.contains(existingChildObjid)) {
|
||||
if(referencedParentObjids.contains(existingChildObjid)) {
|
||||
// 루트 행(PARENT_OBJID 비어있음)은 절대 삭제하지 않음
|
||||
Map<String, Object> existingRow = existingMap.get(existingChildObjid);
|
||||
String existingParentObjid = CommonUtils.checkNull(existingRow.get("parent_objid"), CommonUtils.checkNull(existingRow.get("PARENT_OBJID")));
|
||||
if(existingParentObjid.isEmpty()) {
|
||||
System.out.println("[saveEbomBatch] 루트 행 삭제 방지: CHILD_OBJID=" + existingChildObjid);
|
||||
continue;
|
||||
}
|
||||
// 다른 행이 이 CHILD_OBJID를 부모로 참조하면 삭제 방지
|
||||
if(referencedParentObjids.contains(existingChildObjid)) {
|
||||
System.out.println("[saveEbomBatch] 참조된 부모 행 삭제 방지: CHILD_OBJID=" + existingChildObjid);
|
||||
continue;
|
||||
}
|
||||
System.out.println("[saveEbomBatch] 삭제: CHILD_OBJID=" + existingChildObjid);
|
||||
Map<String, Object> deleteParam = new HashMap<>();
|
||||
deleteParam.put("bomReportObjId", bomReportObjId);
|
||||
deleteParam.put("childObjid", existingChildObjid);
|
||||
@@ -3982,29 +3993,43 @@ public class PartMngService extends BaseService {
|
||||
}
|
||||
}
|
||||
|
||||
// 3. 추가/수정
|
||||
// 3. 추가/수정 (임시ID → 새ID 매핑으로 부모-자식 관계 유지)
|
||||
Map<String, String> tempIdToNewIdMap = new HashMap<>();
|
||||
|
||||
for(int i = 0; i < ebomData.size(); i++) {
|
||||
Map<String, Object> item = ebomData.get(i);
|
||||
String childObjid = CommonUtils.checkNull(item.get("childObjid"));
|
||||
|
||||
if(existingMap.containsKey(childObjid)) {
|
||||
// 기존 항목 → 수정 (수량, 순서 등만 업데이트)
|
||||
String parentObjid = CommonUtils.checkNull(item.get("parentObjid"));
|
||||
// 부모가 임시ID였다면 새 ID로 치환
|
||||
if(!parentObjid.isEmpty() && tempIdToNewIdMap.containsKey(parentObjid)) {
|
||||
parentObjid = tempIdToNewIdMap.get(parentObjid);
|
||||
}
|
||||
Map<String, Object> updateParam = new HashMap<>();
|
||||
updateParam.put("bomReportObjId", bomReportObjId);
|
||||
updateParam.put("childObjid", childObjid);
|
||||
updateParam.put("PARENT_OBJID", CommonUtils.checkNull(item.get("parentObjid")));
|
||||
updateParam.put("PARENT_OBJID", parentObjid);
|
||||
updateParam.put("QTY", CommonUtils.checkNull(item.get("qty"), "1"));
|
||||
updateParam.put("ITEM_QTY", CommonUtils.checkNull(item.get("itemQty"), "1"));
|
||||
updateParam.put("QTY_TEMP", CommonUtils.checkNull(item.get("qtyTemp"), "1"));
|
||||
updateParam.put("SEQ", i + 1);
|
||||
sqlSession.update("partMng.updateBomPartQtyByChildObjid", updateParam);
|
||||
} else {
|
||||
// 신규 항목 → INSERT
|
||||
// 신규 항목 → INSERT (항상 새 CHILD_OBJID 생성, 매핑 추적)
|
||||
String newChildObjid = CommonUtils.createObjId();
|
||||
tempIdToNewIdMap.put(childObjid, newChildObjid);
|
||||
String parentObjid = CommonUtils.checkNull(item.get("parentObjid"));
|
||||
// 부모가 임시ID였다면 새 ID로 치환
|
||||
if(!parentObjid.isEmpty() && tempIdToNewIdMap.containsKey(parentObjid)) {
|
||||
parentObjid = tempIdToNewIdMap.get(parentObjid);
|
||||
}
|
||||
Map<String, Object> insertParam = new HashMap<>();
|
||||
insertParam.put("BOM_REPORT_OBJID", bomReportObjId);
|
||||
insertParam.put("OBJID", CommonUtils.createObjId());
|
||||
insertParam.put("PARENT_OBJID", CommonUtils.checkNull(item.get("parentObjid")));
|
||||
insertParam.put("CHILD_OBJID", childObjid.startsWith("-") ? CommonUtils.createObjId() : childObjid);
|
||||
insertParam.put("PARENT_OBJID", parentObjid);
|
||||
insertParam.put("CHILD_OBJID", newChildObjid);
|
||||
insertParam.put("PARENT_PART_NO", CommonUtils.checkNull(item.get("parentPartNo")));
|
||||
insertParam.put("PART_NO", CommonUtils.checkNull(item.get("partNo")));
|
||||
insertParam.put("LAST_PART_OBJID", CommonUtils.checkNull(item.get("lastPartObjid")));
|
||||
|
||||
Reference in New Issue
Block a user