중간커밋

This commit is contained in:
leeheejin
2025-11-26 11:12:42 +09:00
parent cd4f5afe87
commit 47cfa6bbf9
11 changed files with 1254 additions and 468 deletions

View File

@@ -663,6 +663,15 @@ VALUES
SRM.PROJECT_NO,
PM.PROJECT_NO AS PROJECT_NUMBER,
PM.PROJECT_NAME,
COALESCE(
PM.OBJID,
(SELECT OBJID FROM PROJECT_MGMT WHERE PROJECT_NO = SRM.PROJECT_NO LIMIT 1)
) AS PROJECT_MGMT_OBJID,
-- M-BOM 조회용 BOM_REPORT_OBJID 추가
COALESCE(
PM.BOM_REPORT_OBJID,
(SELECT BOM_REPORT_OBJID FROM PROJECT_MGMT WHERE PROJECT_NO = SRM.PROJECT_NO LIMIT 1)
) AS BOM_REPORT_OBJID,
PM.SETUP,
SM.SUPPLY_NAME AS CUSTOMER_NAME,
SM.OBJID::VARCHAR AS CUSTOMER_OBJID, -- 고객사 OBJID (드롭다운 선택용)
@@ -705,7 +714,7 @@ VALUES
FROM
SALES_REQUEST_MASTER SRM
LEFT JOIN PROJECT_MGMT PM ON SRM.PROJECT_NO = PM.OBJID::VARCHAR
LEFT JOIN PROJECT_MGMT PM ON (SRM.PROJECT_NO = PM.OBJID::VARCHAR OR SRM.PROJECT_NO = PM.PROJECT_NO)
LEFT JOIN CONTRACT_MGMT CM ON PM.CONTRACT_OBJID = CM.OBJID::VARCHAR
LEFT JOIN SUPPLY_MNG SM ON CM.CUSTOMER_OBJID::VARCHAR = SM.OBJID::VARCHAR
LEFT JOIN PURCHASE_ORDER_MASTER POM ON SRM.OBJID = POM.SALES_REQUEST_OBJID
@@ -1242,31 +1251,51 @@ VALUES
AND PM.OBJID = #{PROJECT_NO}
</select>
<!-- 전체 품목 조회 (M-BOM이 없을 때 사용) -->
<select id="getAllPartMngList" parameterType="map" resultType="map">
SELECT
PM.OBJID,
PM.PART_NO,
PM.PART_NAME,
PM.SPEC,
PM.MAKER,
PM.MATERIAL,
PM.UNIT,
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = PM.UNIT) AS UNIT_TITLE
FROM PART_MNG PM
WHERE 1=1
AND PM.IS_LAST = '1'
ORDER BY PM.PART_NO
LIMIT 500
</select>
<select id="SalesBomPartListByProjectUnit" parameterType="map" resultType="map">
<!-- M-BOM 데이터 조회: PROJECT_MGMT.BOM_REPORT_OBJID -> BOM_PART_QTY -> PART_MNG -->
<!-- M-BOM 데이터 조회: getMbomList와 동일한 조인 방식 사용 (BPQ.PART_NO = PM.PART_NO) -->
SELECT
BPQ.BOM_REPORT_OBJID
,BPQ.PART_NO AS PART_OBJID
,PM.PART_NAME
,PM.PART_NO
,PM.SPEC
,PM.MAKER
,PM.REMARK
,PM.UNIT
,COALESCE(PM.PART_NO, BPQ.PART_NO, '') AS PART_NO
,COALESCE(PM.PART_NAME, '') AS PART_NAME
,COALESCE(PM.PART_NAME, '') AS PART_FULL_NAME
,COALESCE(PM.SPEC, '') AS SPEC
,BPQ.QTY AS ORDER_QTY
,COALESCE(PM.MAKER, '') AS MAKER
,'' AS REMARK
,'' AS UNIT
,NULL AS SUPPLY_OBJID
,NULL AS WRITER
FROM
PROJECT_MGMT AS PJT
INNER JOIN BOM_PART_QTY AS BPQ
ON PJT.BOM_REPORT_OBJID = BPQ.BOM_REPORT_OBJID::VARCHAR
LEFT JOIN PART_MNG AS PM
ON COALESCE(NULLIF(BPQ.LAST_PART_OBJID, ''), BPQ.PART_NO) = PM.OBJID::VARCHAR
INNER JOIN BOM_PART_QTY AS BPQ
ON PJT.BOM_REPORT_OBJID::VARCHAR = BPQ.BOM_REPORT_OBJID::VARCHAR
LEFT JOIN PART_MGMT AS PM
ON BPQ.PART_NO = PM.PART_NO
WHERE 1=1
AND PJT.OBJID = #{PROJECT_OBJID}
AND PJT.OBJID::VARCHAR = #{PROJECT_OBJID}
AND COALESCE(BPQ.STATUS, '') NOT IN ('deleting', 'deleted')
AND PJT.BOM_REPORT_OBJID IS NOT NULL
AND PJT.BOM_REPORT_OBJID != ''
ORDER BY BPQ.SEQ, PM.PART_NO
ORDER BY BPQ.SEQ
</select>
<update id="mergeReceiptSalesRequestInfo" parameterType="map">
@@ -2775,18 +2804,19 @@ UPDATE SET
</update>
<!-- 구매리스트 관련 쿼리 -->
<!-- M-BOM에서 가져온 PART_OBJID는 BPQ.PART_NO 값이므로 PART_MGMT.PART_NO와 조인 -->
<select id="getSalesRequestPartList" parameterType="string" resultType="map">
SELECT
SRP.OBJID,
SRP.PART_OBJID,
PM.PART_NO,
PM.PART_NAME,
COALESCE(PM.PART_NO, '') AS PART_NO,
COALESCE(PM.PART_NAME, '') AS PART_NAME,
SRP.QTY,
SRP.PARTNER_OBJID,
SRP.PARTNER_PRICE
FROM
SALES_REQUEST_PART SRP
LEFT JOIN PART_MNG PM ON SRP.PART_OBJID = PM.OBJID::VARCHAR
LEFT JOIN PART_MGMT PM ON SRP.PART_OBJID = PM.PART_NO
WHERE
SRP.SALES_REQUEST_MASTER_OBJID = #{SALES_REQUEST_MASTER_OBJID}
ORDER BY SRP.REGDATE
@@ -2895,5 +2925,119 @@ UPDATE SET
UNIT_PRICE = #{UNIT_PRICE},
TOTAL_PRICE = #{TOTAL_PRICE}
</update>
<!-- 구매리스트 상세 조회 (기존 저장된 데이터) -->
<select id="getPurchaseListDetail" parameterType="map" resultType="map">
<!-- SALES_REQUEST_PART에서 저장된 데이터 조회, PART_MNG에서 품목정보 가져옴 -->
SELECT
SRP.OBJID,
SRP.SALES_REQUEST_MASTER_OBJID,
SRP.PART_OBJID,
COALESCE(PMG.PART_NO, '') AS PART_NO,
COALESCE(PMG.PART_NAME, '') AS PART_NAME,
SRP.QTY,
0 AS ITEM_QTY,
-- 파일 개수 (PART_MNG.OBJID 기준으로 조회)
COALESCE((SELECT COUNT(1) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = PMG.OBJID AND DOC_TYPE IN ('3D_CAD') AND UPPER(STATUS) = 'ACTIVE'), 0) AS CU01_CNT,
COALESCE((SELECT COUNT(1) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = PMG.OBJID AND DOC_TYPE IN ('2D_DRAWING_CAD') AND UPPER(STATUS) = 'ACTIVE'), 0) AS CU02_CNT,
COALESCE((SELECT COUNT(1) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = PMG.OBJID AND DOC_TYPE IN ('2D_PDF_CAD') AND UPPER(STATUS) = 'ACTIVE'), 0) AS CU03_CNT,
COALESCE(PMG.MATERIAL, '') AS MATERIAL,
COALESCE(PMG.HEAT_TREATMENT_HARDNESS, '') AS HEAT_TREATMENT_HARDNESS,
COALESCE(PMG.HEAT_TREATMENT_METHOD, '') AS HEAT_TREATMENT_METHOD,
COALESCE(PMG.SURFACE_TREATMENT, '') AS SURFACE_TREATMENT,
COALESCE(PMG.MAKER, '') AS VENDOR,
COALESCE(PMG.PART_TYPE, '') AS PART_TYPE_TITLE,
'' AS SUPPLY_TYPE,
'' AS RAW_MATERIAL,
'' AS SIZE,
'' AS RAW_MATERIAL_NO,
0 AS REQUIRED_QTY,
0 AS ORDER_QTY,
0 AS ITEM_QTY2,
0 AS PRODUCTION_QTY,
'' AS PROCESSING_VENDOR,
NULL AS PROCESSING_DEADLINE,
NULL AS GRINDING_DEADLINE,
'Y' AS USE_YN,
0 AS NET_QTY,
0 AS PO_QTY,
SRP.PARTNER_OBJID AS VENDOR_PM,
COALESCE(NULLIF(SRP.PARTNER_PRICE, '')::numeric, 0) AS UNIT_PRICE,
COALESCE(
COALESCE(NULLIF(SRP.PARTNER_PRICE, '')::numeric, 0) * COALESCE(SRP.QTY::numeric, 0),
0
) AS TOTAL_PRICE,
NULL AS PROPOSAL_DATE
FROM
SALES_REQUEST_PART SRP
LEFT JOIN PART_MNG PMG ON SRP.PART_OBJID = PMG.OBJID::VARCHAR AND PMG.IS_LAST = '1'
WHERE
SRP.SALES_REQUEST_MASTER_OBJID = #{SALES_REQUEST_MASTER_OBJID}
ORDER BY
SRP.REGDATE
</select>
<!-- M-BOM에서 구매리스트 데이터 가져오기 (BOM_PART_QTY 기본 데이터만) -->
<select id="getMBomForPurchaseList" parameterType="map" resultType="map">
<!-- MBOM_DETAIL + PART_MNG 조인하여 조회 -->
SELECT
ROW_NUMBER() OVER (ORDER BY MD.SEQ) AS ROW_NUM,
MD.OBJID::VARCHAR AS OBJID,
MH.OBJID::VARCHAR AS BOM_REPORT_OBJID,
MD.PARENT_OBJID::VARCHAR AS PARENT_OBJID,
MD.CHILD_OBJID::VARCHAR AS CHILD_OBJID,
'' AS PARENT_PART_NO,
MD.PART_OBJID::VARCHAR AS PART_OBJID,
PM.OBJID::VARCHAR AS PM_OBJID,
COALESCE(MD.PART_NO, PM.PART_NO, '') AS PART_NO,
COALESCE(MD.PART_NAME, PM.PART_NAME, '') AS PART_NAME,
COALESCE(MD.QTY, 0) AS QTY,
COALESCE(MD.QTY, 0) AS ITEM_QTY,
0 AS QTY_TEMP,
MD.SEQ,
COALESCE(MD.STATUS, '') AS STATUS,
'' AS LAST_PART_OBJID,
-- 파일 개수 (ATTACH_FILE_INFO에서 서브쿼리로 가져옴)
COALESCE((SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE PM.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('3D_CAD')), 0) AS CU01_CNT,
COALESCE((SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE PM.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('2D_DRAWING_CAD')), 0) AS CU02_CNT,
COALESCE((SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE PM.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('2D_PDF_CAD')), 0) AS CU03_CNT,
-- E-BOM 컬럼들 (PART_MNG에서 가져옴) - 디버그용으로 원본값도 출력
PM.HEAT_TREATMENT_HARDNESS AS PM_HEAT_RAW,
PM.HEAT_TREATMENT_METHOD AS PM_METHOD_RAW,
PM.SURFACE_TREATMENT AS PM_SURFACE_RAW,
COALESCE(PM.MATERIAL, MD.RAW_MATERIAL, '') AS MATERIAL,
COALESCE(PM.HEAT_TREATMENT_HARDNESS, '') AS HEAT_TREATMENT_HARDNESS,
COALESCE(PM.HEAT_TREATMENT_METHOD, '') AS HEAT_TREATMENT_METHOD,
COALESCE(PM.SURFACE_TREATMENT, '') AS SURFACE_TREATMENT,
COALESCE(PM.MAKER, MD.VENDOR, '') AS VENDOR,
COALESCE((SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = PM.PART_TYPE), '') AS PART_TYPE_TITLE,
-- 생산관리 컬럼들 (MBOM_DETAIL에서 가져옴)
COALESCE(MD.SUPPLY_TYPE, '') AS SUPPLY_TYPE,
COALESCE(MD.RAW_MATERIAL, '') AS RAW_MATERIAL,
COALESCE(MD.RAW_MATERIAL_SIZE, '') AS SIZE,
COALESCE(MD.RAW_MATERIAL_PART_NO, '') AS RAW_MATERIAL_NO,
COALESCE(MD.REQUIRED_QTY, 0) AS REQUIRED_QTY,
COALESCE(MD.ORDER_QTY, 0) AS ORDER_QTY,
COALESCE(MD.PRODUCTION_QTY, 0) AS PRODUCTION_QTY,
COALESCE(MD.PROCESSING_VENDOR, '') AS PROCESSING_VENDOR,
MD.PROCESSING_DEADLINE,
MD.GRINDING_DEADLINE,
-- 구매 컬럼들 (편집 가능)
'Y' AS USE_YN,
0 AS NET_QTY,
0 AS PO_QTY,
COALESCE(MD.VENDOR, '') AS VENDOR_PM,
COALESCE(MD.UNIT_PRICE, 0) AS UNIT_PRICE,
COALESCE(MD.TOTAL_PRICE, 0) AS TOTAL_PRICE,
NULL AS PROPOSAL_DATE
FROM
MBOM_HEADER MH
INNER JOIN MBOM_DETAIL MD ON MH.OBJID = MD.MBOM_HEADER_OBJID
LEFT JOIN PART_MNG PM ON PM.OBJID::VARCHAR = MD.PART_OBJID::VARCHAR
WHERE
MH.PROJECT_OBJID = #{PROJECT_MGMT_OBJID}
ORDER BY
MD.SEQ
</select>
</mapper>