원자재, 구매리스트 가공업체 수정~~
This commit is contained in:
@@ -4796,7 +4796,7 @@
|
||||
SELECT
|
||||
MD.RAW_MATERIAL_PART_NO AS PART_NO,
|
||||
MD.RAW_MATERIAL AS PART_NAME,
|
||||
COALESCE(MD.REQUIRED_QTY, '1')::INTEGER AS ITEM_QTY,
|
||||
COALESCE(MD.REQUIRED_QTY, '0')::NUMERIC AS ITEM_QTY,
|
||||
'원소재' AS CATEGORY_NAME,
|
||||
'' AS UNIT,
|
||||
MD.RAW_MATERIAL AS MATERIAL,
|
||||
@@ -4804,7 +4804,7 @@
|
||||
MD.RAW_MATERIAL,
|
||||
MD.RAW_MATERIAL_SIZE,
|
||||
MD.RAW_MATERIAL_PART_NO,
|
||||
COALESCE(MD.REQUIRED_QTY, '1')::INTEGER AS RAW_MATERIAL_QTY
|
||||
COALESCE(MD.REQUIRED_QTY, '0')::NUMERIC AS RAW_MATERIAL_QTY
|
||||
FROM MBOM_DETAIL MD
|
||||
WHERE MD.MBOM_HEADER_OBJID = #{mbomHeaderObjid}
|
||||
AND MD.STATUS = 'ACTIVE'
|
||||
|
||||
@@ -665,6 +665,9 @@ VALUES
|
||||
SRM.PROJECT_NO,
|
||||
PM.PROJECT_NO AS PROJECT_NUMBER,
|
||||
PM.PROJECT_NAME,
|
||||
PM.PART_NO,
|
||||
PM.PART_NAME,
|
||||
PM.DUE_DATE,
|
||||
COALESCE(
|
||||
PM.OBJID,
|
||||
(SELECT OBJID FROM PROJECT_MGMT WHERE PROJECT_NO = SRM.PROJECT_NO LIMIT 1)
|
||||
@@ -718,9 +721,9 @@ VALUES
|
||||
COALESCE(NULLIF(SRM.AREA_CD, ''), SM.AREA_CD) AS AREA_CD, -- 국내/해외
|
||||
COALESCE(NULLIF(SRM.CUSTOMER_OBJID, ''), SM.OBJID::VARCHAR) AS CUSTOMER_OBJID, -- 고객사
|
||||
COALESCE(NULLIF(SRM.PAID_TYPE, ''), CM.PAID_TYPE) AS PAID_TYPE, -- 유/무상
|
||||
CM.CATEGORY_CD AS CATEGORY_CD, -- 제품유형 코드 ID (드롭다운 선택용)
|
||||
CM.CATEGORY_CD AS CATEGORY_CD -- 제품유형 코드 ID (드롭다운 선택용)
|
||||
-- 품번/품명: 첫 번째 품목 + 외 N건 형태
|
||||
(SELECT
|
||||
<!-- (SELECT
|
||||
CASE
|
||||
WHEN (SELECT COUNT(*) FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID) > 1 THEN
|
||||
COALESCE((SELECT PM2.PART_NO FROM PART_MNG PM2 WHERE PM2.OBJID::VARCHAR = (SELECT PART_OBJID FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1)), '') || ' 외 ' || ((SELECT COUNT(*) FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID) - 1)::TEXT || '건'
|
||||
@@ -735,7 +738,7 @@ VALUES
|
||||
ELSE
|
||||
COALESCE((SELECT PM2.PART_NAME FROM PART_MNG PM2 WHERE PM2.OBJID::VARCHAR = (SELECT PART_OBJID FROM SALES_REQUEST_PART WHERE SALES_REQUEST_MASTER_OBJID = SRM.OBJID ORDER BY REGDATE LIMIT 1)), '')
|
||||
END
|
||||
) AS PART_NAME
|
||||
) AS PART_NAME -->
|
||||
|
||||
FROM
|
||||
SALES_REQUEST_MASTER SRM
|
||||
|
||||
@@ -2004,10 +2004,10 @@ public class ProductionPlanningService {
|
||||
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("MATERIAL", "");
|
||||
newItem.put("SPEC", "");
|
||||
newItem.put("REQUIRED_QTY", requiredQty);
|
||||
// 구매품은 소재 관련 컬럼 빈값
|
||||
newItem.put("RAW_MATERIAL", "");
|
||||
newItem.put("RAW_MATERIAL_SIZE", "");
|
||||
newItem.put("MATERIAL_PART_NO", "");
|
||||
@@ -2017,40 +2017,50 @@ public class ProductionPlanningService {
|
||||
}
|
||||
|
||||
// 2. 원소재 조회 (RAW_MATERIAL_PART_NO가 있는 항목)
|
||||
// 원소재는 소재품번 기준으로 합산 (소수점 합산 후 올림)
|
||||
List<Map<String, Object>> rawSourceItems = sqlSession.selectList("productionplanning.getMbomRawSourceItems", queryParam);
|
||||
for(Map<String, Object> bomItem : rawSourceItems) {
|
||||
String partNo = CommonUtils.nullToEmpty((String)bomItem.get("part_no"));
|
||||
if("".equals(partNo)) continue;
|
||||
String materialPartNo = CommonUtils.nullToEmpty((String)bomItem.get("raw_material_part_no"));
|
||||
if("".equals(materialPartNo)) continue;
|
||||
|
||||
int itemQty = getIntValue(bomItem.get("item_qty"));
|
||||
int requiredQty = inputQty * itemQty;
|
||||
double itemQty = getDoubleValue(bomItem.get("item_qty"));
|
||||
double requiredQty = inputQty * itemQty;
|
||||
|
||||
if(rawSourcePartNoMap.containsKey(partNo)) {
|
||||
Map<String, Object> existingItem = rawSourcePartNoMap.get(partNo);
|
||||
int existingQty = (Integer)existingItem.get("REQUIRED_QTY");
|
||||
existingItem.put("REQUIRED_QTY", existingQty + requiredQty);
|
||||
if(rawSourcePartNoMap.containsKey(materialPartNo)) {
|
||||
Map<String, Object> existingItem = rawSourcePartNoMap.get(materialPartNo);
|
||||
double existingQty = (Double)existingItem.get("MATERIAL_REQUIRED_QTY_RAW");
|
||||
existingItem.put("MATERIAL_REQUIRED_QTY_RAW", existingQty + requiredQty);
|
||||
} else {
|
||||
Map<String, Object> newItem = new LinkedHashMap<>();
|
||||
newItem.put("PART_NO", partNo);
|
||||
newItem.put("PART_NAME", bomItem.get("part_name"));
|
||||
// 원소재는 품번, 품명, 소요량 빈값
|
||||
newItem.put("PART_NO", "");
|
||||
newItem.put("PART_NAME", "");
|
||||
newItem.put("CATEGORY_NAME", "원소재");
|
||||
newItem.put("UNIT", "");
|
||||
newItem.put("MATERIAL", bomItem.get("raw_material"));
|
||||
newItem.put("SPEC", bomItem.get("raw_material_size"));
|
||||
newItem.put("REQUIRED_QTY", requiredQty);
|
||||
// 원소재 관련 컬럼
|
||||
newItem.put("REQUIRED_QTY", "");
|
||||
// 원소재 관련 컬럼만 표시
|
||||
newItem.put("RAW_MATERIAL", bomItem.get("raw_material"));
|
||||
newItem.put("RAW_MATERIAL_SIZE", bomItem.get("raw_material_size"));
|
||||
newItem.put("MATERIAL_PART_NO", bomItem.get("raw_material_part_no"));
|
||||
newItem.put("MATERIAL_REQUIRED_QTY", requiredQty);
|
||||
rawSourcePartNoMap.put(partNo, newItem);
|
||||
newItem.put("MATERIAL_PART_NO", materialPartNo);
|
||||
newItem.put("MATERIAL_REQUIRED_QTY_RAW", requiredQty); // 합산용 (소수점)
|
||||
rawSourcePartNoMap.put(materialPartNo, newItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 구매품 먼저, 원소재 나중에 합침
|
||||
// 구매품 먼저 추가
|
||||
resultList.addAll(purchasePartNoMap.values());
|
||||
resultList.addAll(rawSourcePartNoMap.values());
|
||||
|
||||
// 원소재는 소수점 합산 후 올림 처리하여 추가
|
||||
for(Map<String, Object> item : rawSourcePartNoMap.values()) {
|
||||
double rawQty = (Double)item.get("MATERIAL_REQUIRED_QTY_RAW");
|
||||
int ceilQty = (int)Math.ceil(rawQty); // 올림 처리
|
||||
item.put("MATERIAL_REQUIRED_QTY", ceilQty);
|
||||
item.remove("MATERIAL_REQUIRED_QTY_RAW"); // 임시 필드 제거
|
||||
resultList.add(item);
|
||||
}
|
||||
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
@@ -2077,4 +2087,19 @@ public class ProductionPlanningService {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Object를 double로 변환하는 유틸 메서드
|
||||
*/
|
||||
private double getDoubleValue(Object obj) {
|
||||
if(obj == null) return 0.0;
|
||||
if(obj instanceof Number) {
|
||||
return ((Number)obj).doubleValue();
|
||||
}
|
||||
try {
|
||||
return Double.parseDouble(obj.toString());
|
||||
} catch(NumberFormatException e) {
|
||||
return 0.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user