diff --git a/src/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml b/src/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml
index 019f127..8b310ff 100644
--- a/src/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml
+++ b/src/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml
@@ -847,12 +847,11 @@
-- S/N: CONTRACT_ITEM_SERIAL(마스터) 우선, 없으면 판매등록 텍스트 fallback (콤마 구분 전체 목록)
COALESCE(
(SELECT STRING_AGG(CIS.SERIAL_NO, ',' ORDER BY CIS.SEQ)
- FROM CONTRACT_ITEM CI
- LEFT JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID AND UPPER(CIS.STATUS) = 'ACTIVE'
- WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
- AND CI.PART_OBJID = T.PART_OBJID
- AND CI.STATUS = 'ACTIVE'
- AND CIS.SERIAL_NO IS NOT NULL),
+ FROM CONTRACT_ITEM_SERIAL CIS
+ WHERE CIS.ITEM_OBJID::VARCHAR = T.CONTRACT_ITEM_OBJID
+ AND UPPER(CIS.STATUS) = 'ACTIVE'
+ AND CIS.SERIAL_NO IS NOT NULL
+ AND CIS.SERIAL_NO != ''),
SR.serial_no
) AS SERIAL_NO,
-- 분할S/N: shipment_log에서 해당 프로젝트의 모든 분할S/N 집계
@@ -1016,13 +1015,10 @@
AND EXISTS (
- SELECT 1 FROM CONTRACT_ITEM CI
- JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
- WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
- AND CI.PART_OBJID = T.PART_OBJID
- AND CI.STATUS = 'ACTIVE'
- AND UPPER(CIS.SERIAL_NO) LIKE UPPER(CONCAT('%', #{serialNo}, '%'))
+ SELECT 1 FROM CONTRACT_ITEM_SERIAL CIS
+ WHERE CIS.ITEM_OBJID::VARCHAR = T.CONTRACT_ITEM_OBJID
AND UPPER(CIS.STATUS) = 'ACTIVE'
+ AND UPPER(CIS.SERIAL_NO) LIKE UPPER(CONCAT('%', #{serialNo}, '%'))
)
@@ -1194,13 +1190,10 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC
AND EXISTS (
- SELECT 1 FROM CONTRACT_ITEM CI
- JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
- WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
- AND CI.PART_OBJID = T.PART_OBJID
- AND CI.STATUS = 'ACTIVE'
- AND UPPER(CIS.SERIAL_NO) LIKE UPPER(CONCAT('%', #{serialNo}, '%'))
+ SELECT 1 FROM CONTRACT_ITEM_SERIAL CIS
+ WHERE CIS.ITEM_OBJID::VARCHAR = T.CONTRACT_ITEM_OBJID
AND UPPER(CIS.STATUS) = 'ACTIVE'
+ AND UPPER(CIS.SERIAL_NO) LIKE UPPER(CONCAT('%', #{serialNo}, '%'))
)
@@ -1351,11 +1344,8 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC
AND (
EXISTS (
- SELECT 1 FROM CONTRACT_ITEM CI
- JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
- WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
- AND CI.PART_OBJID = T.PART_OBJID
- AND CI.STATUS = 'ACTIVE'
+ SELECT 1 FROM CONTRACT_ITEM_SERIAL CIS
+ WHERE CIS.ITEM_OBJID::VARCHAR = T.CONTRACT_ITEM_OBJID
AND UPPER(CIS.STATUS) = 'ACTIVE'
AND UPPER(CIS.SERIAL_NO) LIKE UPPER('%' || #{serialNo} || '%')
)
@@ -1567,12 +1557,11 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC
-- S/N: CONTRACT_ITEM_SERIAL(마스터) 우선, 전체 콤마 리스트 (판매등록 폼 파싱용)
COALESCE(
(SELECT STRING_AGG(CIS.SERIAL_NO, ', ' ORDER BY CIS.SERIAL_NO)
- FROM CONTRACT_ITEM CI
- LEFT JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID AND UPPER(CIS.STATUS) = 'ACTIVE'
- WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
- AND CI.PART_OBJID = T.PART_OBJID
- AND CI.STATUS = 'ACTIVE'
- AND CIS.SERIAL_NO IS NOT NULL),
+ FROM CONTRACT_ITEM_SERIAL CIS
+ WHERE CIS.ITEM_OBJID::VARCHAR = T.CONTRACT_ITEM_OBJID
+ AND UPPER(CIS.STATUS) = 'ACTIVE'
+ AND CIS.SERIAL_NO IS NOT NULL
+ AND CIS.SERIAL_NO != ''),
SR.serial_no
) AS SERIAL_NO,
COALESCE(NULLIF(REPLACE(T.QUANTITY, ',', ''), '')::numeric, 0) AS ORDER_QUANTITY,
@@ -1723,11 +1712,11 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC
-- 기존 S/N (CONTRACT_ITEM_SERIAL 마스터에서 조회)
COALESCE((
SELECT STRING_AGG(CIS2.SERIAL_NO, ',' ORDER BY CIS2.SEQ)
- FROM CONTRACT_ITEM CI2
- JOIN CONTRACT_ITEM_SERIAL CIS2 ON CI2.OBJID = CIS2.ITEM_OBJID AND CIS2.STATUS = 'ACTIVE'
- WHERE CI2.CONTRACT_OBJID = PM.CONTRACT_OBJID
- AND CI2.PART_OBJID = PM.PART_OBJID
- AND CI2.STATUS = 'ACTIVE'
+ FROM CONTRACT_ITEM_SERIAL CIS2
+ WHERE CIS2.ITEM_OBJID::VARCHAR = PM.CONTRACT_ITEM_OBJID
+ AND UPPER(CIS2.STATUS) = 'ACTIVE'
+ AND CIS2.SERIAL_NO IS NOT NULL
+ AND CIS2.SERIAL_NO != ''
), '') AS SERIAL_NO
FROM PROJECT_MGMT PM
@@ -1805,13 +1794,11 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC
) AS REQ_DEL_DATE,
-- S/N 조회 (CONTRACT_ITEM_SERIAL에서)
(SELECT STRING_AGG(CIS.SERIAL_NO, ', ' ORDER BY CIS.SERIAL_NO)
- FROM CONTRACT_ITEM CI
- JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
- WHERE CI.CONTRACT_OBJID = PM.CONTRACT_OBJID
- AND CI.PART_OBJID = PM.PART_OBJID
- AND CI.STATUS = 'ACTIVE'
+ FROM CONTRACT_ITEM_SERIAL CIS
+ WHERE CIS.ITEM_OBJID::VARCHAR = PM.CONTRACT_ITEM_OBJID
AND UPPER(CIS.STATUS) = 'ACTIVE'
AND CIS.SERIAL_NO IS NOT NULL
+ AND CIS.SERIAL_NO != ''
) AS SERIAL_NO,
-- 고객요청사항 (CONTRACT_ITEM에서)
(SELECT CI.CUSTOMER_REQUEST
@@ -1994,10 +1981,12 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC
COALESCE(SL.shipping_status, '미등록') AS shipping_order_status,
COALESCE((
SELECT STRING_AGG(CIS.SERIAL_NO, ',' ORDER BY CIS.SEQ)
- FROM CONTRACT_ITEM CI
- JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID AND CIS.STATUS = 'ACTIVE'
- JOIN PROJECT_MGMT PM ON PM.CONTRACT_OBJID = CI.CONTRACT_OBJID AND PM.PART_OBJID = CI.PART_OBJID
- WHERE PM.PROJECT_NO = SL.target_objid AND CI.STATUS = 'ACTIVE'
+ FROM CONTRACT_ITEM_SERIAL CIS
+ JOIN PROJECT_MGMT PM ON CIS.ITEM_OBJID::VARCHAR = PM.CONTRACT_ITEM_OBJID
+ WHERE PM.PROJECT_NO = SL.target_objid
+ AND UPPER(CIS.STATUS) = 'ACTIVE'
+ AND CIS.SERIAL_NO IS NOT NULL
+ AND CIS.SERIAL_NO != ''
), '-') AS serial_no,
SL.target_objid AS project_no,
COALESCE(SL.split_serial_no, '-') AS split_serial_no,
@@ -2019,10 +2008,12 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC
COALESCE(SL.shipping_method, '') AS SHIPPING_METHOD,
COALESCE((
SELECT STRING_AGG(CIS.SERIAL_NO, ',' ORDER BY CIS.SEQ)
- FROM CONTRACT_ITEM CI
- JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID AND CIS.STATUS = 'ACTIVE'
- JOIN PROJECT_MGMT PM ON PM.CONTRACT_OBJID = CI.CONTRACT_OBJID AND PM.PART_OBJID = CI.PART_OBJID
- WHERE PM.PROJECT_NO = SL.target_objid AND CI.STATUS = 'ACTIVE'
+ FROM CONTRACT_ITEM_SERIAL CIS
+ JOIN PROJECT_MGMT PM ON CIS.ITEM_OBJID::VARCHAR = PM.CONTRACT_ITEM_OBJID
+ WHERE PM.PROJECT_NO = SL.target_objid
+ AND UPPER(CIS.STATUS) = 'ACTIVE'
+ AND CIS.SERIAL_NO IS NOT NULL
+ AND CIS.SERIAL_NO != ''
), '') AS SERIAL_NO,
COALESCE(SL.sales_unit_price, 0) AS SALES_UNIT_PRICE,
COALESCE(SL.sales_supply_price, 0) AS SALES_SUPPLY_PRICE,
@@ -2181,13 +2172,11 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC
/* salesNcollectMgmt.getAllSerialNumbers - 프로젝트의 모든 S/N 조회 */
SELECT CIS.SERIAL_NO
FROM PROJECT_MGMT PM
- JOIN CONTRACT_ITEM CI ON CI.CONTRACT_OBJID = PM.CONTRACT_OBJID
- AND CI.PART_OBJID = PM.PART_OBJID
- AND CI.STATUS = 'ACTIVE'
- JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
+ JOIN CONTRACT_ITEM_SERIAL CIS ON CIS.ITEM_OBJID::VARCHAR = PM.CONTRACT_ITEM_OBJID
AND UPPER(CIS.STATUS) = 'ACTIVE'
WHERE PM.PROJECT_NO = #{projectNo}
AND CIS.SERIAL_NO IS NOT NULL
+ AND CIS.SERIAL_NO != ''
ORDER BY CIS.SERIAL_NO
@@ -2412,10 +2401,11 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC
T.PART_NAME AS PRODUCT_NAME,
COALESCE((
SELECT STRING_AGG(CIS.SERIAL_NO, ',' ORDER BY CIS.SEQ)
- FROM CONTRACT_ITEM CI
- JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID AND CIS.STATUS = 'ACTIVE'
- WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
- AND CI.PART_OBJID = T.PART_OBJID AND CI.STATUS = 'ACTIVE'
+ FROM CONTRACT_ITEM_SERIAL CIS
+ WHERE CIS.ITEM_OBJID::VARCHAR = T.CONTRACT_ITEM_OBJID
+ AND UPPER(CIS.STATUS) = 'ACTIVE'
+ AND CIS.SERIAL_NO IS NOT NULL
+ AND CIS.SERIAL_NO != ''
), '') AS SERIAL_NO,
COALESCE(SL.split_serial_no, '') AS SPLIT_SERIAL_NO,
COALESCE(NULLIF(REPLACE(T.QUANTITY, ',', ''), '')::numeric, 0) AS ORDER_QUANTITY,
@@ -2482,13 +2472,10 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC
AND EXISTS (
- SELECT 1 FROM CONTRACT_ITEM CI
- JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
- WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
- AND CI.PART_OBJID = T.PART_OBJID
- AND CI.STATUS = 'ACTIVE'
- AND UPPER(CIS.SERIAL_NO) LIKE UPPER(CONCAT('%', #{serialNo}, '%'))
+ SELECT 1 FROM CONTRACT_ITEM_SERIAL CIS
+ WHERE CIS.ITEM_OBJID::VARCHAR = T.CONTRACT_ITEM_OBJID
AND UPPER(CIS.STATUS) = 'ACTIVE'
+ AND UPPER(CIS.SERIAL_NO) LIKE UPPER(CONCAT('%', #{serialNo}, '%'))
)
@@ -2573,13 +2560,10 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC
AND EXISTS (
- SELECT 1 FROM CONTRACT_ITEM CI
- JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
- WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
- AND CI.PART_OBJID = T.PART_OBJID
- AND CI.STATUS = 'ACTIVE'
- AND UPPER(CIS.SERIAL_NO) LIKE UPPER(CONCAT('%', #{serialNo}, '%'))
+ SELECT 1 FROM CONTRACT_ITEM_SERIAL CIS
+ WHERE CIS.ITEM_OBJID::VARCHAR = T.CONTRACT_ITEM_OBJID
AND UPPER(CIS.STATUS) = 'ACTIVE'
+ AND UPPER(CIS.SERIAL_NO) LIKE UPPER(CONCAT('%', #{serialNo}, '%'))
)
@@ -2649,10 +2633,9 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC
AND EXISTS (
- SELECT 1 FROM CONTRACT_ITEM CI
- JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
- WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID AND CI.PART_OBJID = T.PART_OBJID
- AND CI.STATUS = 'ACTIVE' AND UPPER(CIS.STATUS) = 'ACTIVE'
+ SELECT 1 FROM CONTRACT_ITEM_SERIAL CIS
+ WHERE CIS.ITEM_OBJID::VARCHAR = T.CONTRACT_ITEM_OBJID
+ AND UPPER(CIS.STATUS) = 'ACTIVE'
AND UPPER(CIS.SERIAL_NO) LIKE UPPER('%' || #{serialNo} || '%')
)