생산관리_반제품소요량
This commit is contained in:
@@ -2,6 +2,7 @@ package com.pms.service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -1827,4 +1828,110 @@ public class ProductionPlanningService {
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* M-BOM 기준 반제품 소요량 조회
|
||||
* - 여러 M-BOM을 입력받아 범주가 '부품', '조립품'인 항목만 조회
|
||||
* - 동일 품번은 합산하여 반환
|
||||
* @param paramMap - mbomItems: [{mbomObjid, qty}, ...]
|
||||
* @return 품번별 합산된 소요량 목록
|
||||
*/
|
||||
public List getSemiProductRequirementList(Map paramMap) {
|
||||
SqlSession sqlSession = null;
|
||||
List resultList = new ArrayList();
|
||||
|
||||
try {
|
||||
sqlSession = SqlMapConfig.getInstance().getSqlSession();
|
||||
|
||||
// 입력받은 M-BOM 목록
|
||||
List<Map<String, Object>> mbomItems = (List<Map<String, Object>>) paramMap.get("mbomItems");
|
||||
if(mbomItems == null || mbomItems.isEmpty()) {
|
||||
return resultList;
|
||||
}
|
||||
|
||||
// 품번별 소요량을 합산하기 위한 Map (key: PART_NO, value: {품번정보, 소요량합계})
|
||||
Map<String, Map<String, Object>> partNoMap = new LinkedHashMap<>();
|
||||
|
||||
// 각 M-BOM별로 조회하여 합산
|
||||
for(Map<String, Object> mbomItem : mbomItems) {
|
||||
String mbomObjid = CommonUtils.nullToEmpty((String)mbomItem.get("mbomObjid"));
|
||||
int inputQty = 0;
|
||||
Object qtyObj = mbomItem.get("qty");
|
||||
if(qtyObj != null) {
|
||||
if(qtyObj instanceof Number) {
|
||||
inputQty = ((Number)qtyObj).intValue();
|
||||
} else {
|
||||
try {
|
||||
inputQty = Integer.parseInt(qtyObj.toString());
|
||||
} catch(NumberFormatException e) {
|
||||
inputQty = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if("".equals(mbomObjid) || inputQty <= 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// M-BOM 항목 조회 (범주가 '부품', '조립품'인 것만)
|
||||
Map<String, Object> queryParam = new HashMap<>();
|
||||
queryParam.put("mbomHeaderObjid", mbomObjid);
|
||||
List<Map<String, Object>> bomItems = sqlSession.selectList("productionplanning.getMbomSemiProductItems", queryParam);
|
||||
|
||||
// 소요량 합산 (PostgreSQL은 소문자 키로 반환)
|
||||
for(Map<String, Object> bomItem : bomItems) {
|
||||
String partNo = CommonUtils.nullToEmpty((String)bomItem.get("part_no"));
|
||||
if("".equals(partNo)) continue;
|
||||
|
||||
// M-BOM의 항목수량
|
||||
int itemQty = 0;
|
||||
Object itemQtyObj = bomItem.get("item_qty");
|
||||
if(itemQtyObj != null) {
|
||||
if(itemQtyObj instanceof Number) {
|
||||
itemQty = ((Number)itemQtyObj).intValue();
|
||||
} else {
|
||||
try {
|
||||
itemQty = Integer.parseInt(itemQtyObj.toString());
|
||||
} catch(NumberFormatException e) {
|
||||
itemQty = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 소요량 = 입력수량 × 항목수량
|
||||
int requiredQty = inputQty * itemQty;
|
||||
|
||||
if(partNoMap.containsKey(partNo)) {
|
||||
// 기존 품번이면 소요량만 합산
|
||||
Map<String, Object> existingItem = partNoMap.get(partNo);
|
||||
int existingQty = (Integer)existingItem.get("REQUIRED_QTY");
|
||||
existingItem.put("REQUIRED_QTY", existingQty + requiredQty);
|
||||
} else {
|
||||
// 새로운 품번이면 추가
|
||||
Map<String, Object> newItem = new LinkedHashMap<>();
|
||||
newItem.put("PART_NO", partNo);
|
||||
newItem.put("PART_NAME", bomItem.get("part_name"));
|
||||
newItem.put("CATEGORY_NAME", bomItem.get("category_name"));
|
||||
newItem.put("UNIT", bomItem.get("unit"));
|
||||
newItem.put("MATERIAL", bomItem.get("material"));
|
||||
newItem.put("SPEC", bomItem.get("spec"));
|
||||
newItem.put("REQUIRED_QTY", requiredQty);
|
||||
partNoMap.put(partNo, newItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Map -> List 변환
|
||||
resultList = new ArrayList(partNoMap.values());
|
||||
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
if(sqlSession != null) {
|
||||
sqlSession.close();
|
||||
}
|
||||
}
|
||||
|
||||
return resultList;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user