Merge pull request '판매관리 리스트의 요청납기, 고객사요청사항, 발주일, 주문서 컬럼의 내용넘어오게 수정' (#6) from V2025101701 into main

Reviewed-on: #6
This commit was merged in pull request #6.
This commit is contained in:
2025-10-22 10:38:23 +00:00
6 changed files with 384 additions and 747 deletions

View File

@@ -258,19 +258,26 @@ public class SalesNcollectMgmtController {
}
}
Map<String, Object> codeMap = new HashMap<String, Object>();
// 담당자
codeMap.put("managerList",
salesMgmtCommonService.bizMakeOptionList("", "", "salesMgmtCommon.getSalesmanList"));
// 기존 판매 정보 조회
if(paramMap.get("orderNo") != null && !paramMap.get("orderNo").equals("")) {
Map<String, Object> saleInfo = salesNcollectMgmtService.getSaleInfo(paramMap);
request.setAttribute("saleInfo", saleInfo);
}
request.setAttribute("codeMap", codeMap);
Map<String, Object> codeMap = new HashMap<String, Object>();
// 담당자
codeMap.put("managerList",
salesMgmtCommonService.bizMakeOptionList("", "", "salesMgmtCommon.getSalesmanList"));
// 기존 판매 정보 조회 후 환종(통화) 공통코드 세팅
Map<String, Object> saleInfo = null;
String salesCurrency = "";
if(paramMap.get("orderNo") != null && !paramMap.get("orderNo").equals("")) {
saleInfo = salesNcollectMgmtService.getSaleInfo(paramMap);
salesCurrency = CommonUtils.nullToEmpty((String)saleInfo.get("SALES_CURRENCY"));
request.setAttribute("saleInfo", saleInfo);
}
// 환종(통화) - 공통코드 0001533
codeMap.put("salesCurrency",
commonService.bizMakeOptionList("0001533", salesCurrency, "common.getCodeselect"));
request.setAttribute("codeMap", codeMap);
} catch (Exception e) {
e.printStackTrace();
}

View File

@@ -814,9 +814,10 @@
<!-- 매출관리 그리드 목록 - project_mgmt 테이블 기반 조회 (S/N, 유무상 포함) -->
<select id="getSalesMgmtGridList" parameterType="map" resultType="map">
/* salesNcollectMgmt.getSalesMgmtGridList - project_mgmt 테이블 기반 조회 (S/N, 유무상 포함) */
/* salesNcollectMgmt.getSalesMgmtGridList - sales_registration LEFT JOIN으로 최적화 */
SELECT
T.PROJECT_NO,
T.CONTRACT_OBJID,
CODE_NAME(T.CATEGORY_CD) AS ORDER_TYPE,
CODE_NAME(T.PRODUCT) AS PRODUCT_TYPE,
CODE_NAME(T.AREA_CD) AS NATION,
@@ -831,143 +832,68 @@
FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID) AS PAYMENT_TYPE,
T.PART_NO AS PRODUCT_NO,
T.PART_NAME AS PRODUCT_NAME,
-- S/N: sales_registration 우선, 없으면 CONTRACT_ITEM_SERIAL (모두 "외 몇건" 형태로 표시)
COALESCE(
(SELECT
CASE
WHEN SR.serial_no IS NULL OR SR.serial_no = '' THEN ''
ELSE
(SELECT
CASE
WHEN array_length(string_to_array(SR.serial_no, ','), 1) = 1 THEN SR.serial_no
ELSE (string_to_array(SR.serial_no, ','))[1] || ' 외 ' || (array_length(string_to_array(SR.serial_no, ','), 1) - 1)::TEXT || '건'
END
)
END
FROM sales_registration SR WHERE SR.project_no = T.PROJECT_NO
),
(SELECT
CASE
WHEN COUNT(*) = 0 THEN ''
WHEN COUNT(*) = 1 THEN MIN(CIS.SERIAL_NO)
ELSE MIN(CIS.SERIAL_NO) || ' 외 ' || (COUNT(*) - 1)::TEXT || '건'
END
FROM CONTRACT_ITEM CI
LEFT JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
AND UPPER(CIS.STATUS) = 'ACTIVE'
), ''
FROM CONTRACT_ITEM CI
LEFT JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID AND UPPER(CIS.STATUS) = 'ACTIVE' AND CIS.SERIAL_NO IS NOT NULL),
''
) AS SERIAL_NO,
COALESCE(T.QUANTITY::numeric, 0) AS ORDER_QUANTITY,
T.DUE_DATE AS REQUEST_DATE,
T.CUSTOMER_PROJECT_NAME AS CUSTOMER_REQUEST,
COALESCE(T.DUE_DATE, (SELECT CM.due_date FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID)) AS REQUEST_DATE,
COALESCE(T.CUSTOMER_PROJECT_NAME, (SELECT CM.customer_request FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID)) AS CUSTOMER_REQUEST,
CODE_NAME(T.CONTRACT_RESULT) AS ORDER_STATUS,
T.PO_NO,
T.CONTRACT_DATE AS ORDER_DATE,
COALESCE(T.CONTRACT_DATE, (SELECT CM.order_date FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID)) AS ORDER_DATE,
CASE WHEN EXISTS(
SELECT 1 FROM ATTACH_FILE_INFO
WHERE TARGET_OBJID = T.OBJID::VARCHAR
WHERE TARGET_OBJID = T.CONTRACT_OBJID
AND DOC_TYPE='ORDER_DOC'
AND UPPER(STATUS) = 'ACTIVE'
) THEN 'Y' ELSE 'N' END AS ORDER_ATTACH,
(SELECT CM.PRODUCTION_STATUS FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID) AS PRODUCTION_STATUS,
COALESCE((
SELECT SL.SHIPPING_STATUS
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), '') AS SHIPPING_ORDER_STATUS,
COALESCE((
SELECT SL.SPLIT_QUANTITY
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), 0) AS SALES_QUANTITY,
COALESCE((
SELECT SL.SALES_UNIT_PRICE
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), 0) AS SALES_UNIT_PRICE,
COALESCE((
SELECT SL.SALES_SUPPLY_PRICE
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), 0) AS SALES_SUPPLY_PRICE,
COALESCE((
SELECT SL.SALES_VAT
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), 0) AS SALES_VAT,
COALESCE((
SELECT SL.SALES_TOTAL_AMOUNT
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), 0) AS SALES_TOTAL_AMOUNT,
COALESCE((
SELECT SL.SALES_TOTAL_AMOUNT
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), 0) AS SALES_TOTAL_AMOUNT_KRW,
COALESCE((
SELECT SL.SALES_CURRENCY
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), T.CONTRACT_CURRENCY) AS SALES_CURRENCY,
COALESCE((
SELECT SL.SALES_EXCHANGE_RATE
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), T.CONTRACT_PRICE_CURRENCY::numeric, 0) AS SALES_EXCHANGE_RATE,
COALESCE((
SELECT TO_CHAR(SL.SHIPPING_DATE, 'YYYY-MM-DD')
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), '') AS SHIPPING_DATE,
COALESCE((
SELECT SL.SHIPPING_METHOD
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), '') AS SHIPPING_METHOD,
COALESCE((
SELECT U.USER_NAME
FROM SHIPMENT_LOG SL
LEFT JOIN USER_INFO U ON U.USER_ID = SL.MANAGER_USER_ID
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = T.PM_USER_ID)) AS MANAGER,
COALESCE((
SELECT SL.INCOTERMS
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), '') AS INCOTERMS,
) THEN 'Y' ELSE 'N' END AS ORDER_ATTACH,
(SELECT CM.PRODUCTION_STATUS FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID) AS PRODUCTION_STATUS,
-- 판매 관련 필드들 (sales_registration 테이블에서 한 번에 가져오기)
COALESCE(SR.shipping_order_status, '') AS SHIPPING_ORDER_STATUS,
COALESCE(SR.sales_quantity, 0) AS SALES_QUANTITY,
COALESCE(SR.sales_unit_price, 0) AS SALES_UNIT_PRICE,
COALESCE(SR.sales_supply_price, 0) AS SALES_SUPPLY_PRICE,
COALESCE(SR.sales_vat, 0) AS SALES_VAT,
COALESCE(SR.sales_total_amount, 0) AS SALES_TOTAL_AMOUNT,
COALESCE(SR.sales_total_amount, 0) AS SALES_TOTAL_AMOUNT_KRW,
COALESCE(SR.sales_currency, T.CONTRACT_CURRENCY) AS SALES_CURRENCY,
COALESCE(SR.sales_exchange_rate, T.CONTRACT_PRICE_CURRENCY::numeric, 0) AS SALES_EXCHANGE_RATE,
COALESCE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), '') AS SHIPPING_DATE,
COALESCE(SR.shipping_method, '') AS SHIPPING_METHOD,
COALESCE(
(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = SR.manager_user_id),
(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = T.PM_USER_ID)
) AS MANAGER,
COALESCE(SR.incoterms, '') AS INCOTERMS,
'N' AS SALES_STATUS,
T.OBJID::VARCHAR AS SALE_NO,
'ORIGINAL' AS RECORD_TYPE,
'' AS SPLIT_LOG_ID
FROM PROJECT_MGMT AS T
LEFT JOIN sales_registration SR ON T.PROJECT_NO = SR.project_no
WHERE 1 = 1
<if test="orderType != null and orderType != ''">
AND T.CATEGORY_CD = #{orderType}
@@ -1289,56 +1215,51 @@
)
</insert>
<!--
<!--
/**
* 판매 등록 저장 (shipment_log 테이블 사용)
* 판매 등록 저장 (sales_registration 테이블 사용)
* INSERT 또는 UPDATE (ON CONFLICT로 중복 방지)
* @since 2025.10.22
* @author johngreen
* @version 1.0
* @version 1.1
**/
-->
<insert id="insertSaleRegistration" parameterType="map">
/* salesNcollectMgmt.insertSaleRegistration - shipment_log에 판매 데이터 저장 */
INSERT INTO shipment_log (
target_objid,
log_type,
log_message,
split_quantity,
shipping_status,
/* salesNcollectMgmt.insertSaleRegistration - sales_registration에 판매 데이터 저장 */
INSERT INTO sales_registration (
project_no,
shipping_order_status,
serial_no,
sales_quantity,
sales_unit_price,
sales_supply_price,
sales_vat,
sales_total_amount,
sales_currency,
sales_exchange_rate,
serial_no,
shipping_date,
shipping_method,
manager_user_id,
incoterms,
is_split_record,
reg_date,
reg_user_id
) VALUES (
#{orderNo},
'SALES_REGISTRATION',
'판매 등록',
#{salesQuantity}::integer,
<choose>
<when test="shippingOrderStatus != null and shippingOrderStatus != ''">
#{shippingOrderStatus},
</when>
<otherwise>
'',
</otherwise>
</choose>
<choose>
<when test="shippingOrderStatus != null and shippingOrderStatus != ''">
#{shippingOrderStatus},
</when>
<otherwise>
'',
</otherwise>
</choose>
#{serialNo},
#{salesQuantity}::integer,
#{salesUnitPrice}::numeric,
#{salesSupplyPrice}::numeric,
#{salesVat}::numeric,
#{salesTotalAmount}::numeric,
#{salesCurrency},
#{salesExchangeRate}::numeric,
#{serialNo},
<choose>
<when test="shippingDate != null and shippingDate != ''">
TO_DATE(#{shippingDate}, 'YYYY-MM-DD'),
@@ -1350,10 +1271,25 @@
#{shippingMethod},
#{manager},
#{incoterms},
false,
NOW(),
#{cretEmpNo}
)
ON CONFLICT (project_no)
DO UPDATE SET
shipping_order_status = EXCLUDED.shipping_order_status,
serial_no = EXCLUDED.serial_no,
sales_quantity = EXCLUDED.sales_quantity,
sales_unit_price = EXCLUDED.sales_unit_price,
sales_supply_price = EXCLUDED.sales_supply_price,
sales_vat = EXCLUDED.sales_vat,
sales_total_amount = EXCLUDED.sales_total_amount,
sales_currency = EXCLUDED.sales_currency,
sales_exchange_rate = EXCLUDED.sales_exchange_rate,
shipping_date = EXCLUDED.shipping_date,
shipping_method = EXCLUDED.shipping_method,
manager_user_id = EXCLUDED.manager_user_id,
incoterms = EXCLUDED.incoterms,
upd_date = NOW(),
upd_user_id = EXCLUDED.reg_user_id
</insert>
<!--
@@ -1366,7 +1302,7 @@
**/
-->
<select id="getSaleInfo" parameterType="map" resultType="map">
/* salesNcollectMgmt.getSaleInfo - 판매등록 팝업용 프로젝트 정보 조회 (리스트와 동일한 구조) */
/* salesNcollectMgmt.getSaleInfo - 판매등록 팝업용 프로젝트 정보 조회 (sales_registration 테이블 사용) */
SELECT
T.PROJECT_NO,
CODE_NAME(T.CATEGORY_CD) AS ORDER_TYPE,
@@ -1383,160 +1319,47 @@
FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID) AS PAYMENT_TYPE,
T.PART_NO AS PRODUCT_NO,
T.PART_NAME AS PRODUCT_NAME,
-- S/N 정보 (리스트와 동일: "첫번째 S/N 외 N건")
COALESCE(
(SELECT
CASE
WHEN COUNT(*) = 0 THEN ''
WHEN COUNT(*) = 1 THEN MIN(CIS.SERIAL_NO)
ELSE MIN(CIS.SERIAL_NO) || ' 외 ' || (COUNT(*) - 1)::TEXT || '건'
END
FROM CONTRACT_ITEM CI
LEFT JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
AND UPPER(CIS.STATUS) = 'ACTIVE'
), ''
) AS SERIAL_NO,
-- S/N 전체 목록 JSON 형식으로
COALESCE(
(SELECT
JSON_AGG(
JSON_BUILD_OBJECT(
'id', sn_data.row_num,
'value', sn_data.serial_no
)
)::TEXT
FROM (
SELECT
ROW_NUMBER() OVER (ORDER BY CIS.SERIAL_NO) AS row_num,
CIS.SERIAL_NO AS serial_no
FROM CONTRACT_ITEM CI
LEFT JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
AND UPPER(CIS.STATUS) = 'ACTIVE'
AND CIS.SERIAL_NO IS NOT NULL
) AS sn_data
), '[]'
) AS SERIAL_NO_LIST,
-- S/N 정보 (sales_registration 우선, 없으면 CONTRACT_ITEM_SERIAL에서)
COALESCE(
SR.serial_no,
(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
WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID
AND UPPER(CIS.STATUS) = 'ACTIVE'
AND CIS.SERIAL_NO IS NOT NULL
),
''
) AS SERIAL_NO,
COALESCE(T.QUANTITY::numeric, 0) AS ORDER_QUANTITY,
T.DUE_DATE AS REQUEST_DATE,
T.CUSTOMER_PROJECT_NAME AS CUSTOMER_REQUEST,
COALESCE(T.DUE_DATE, (SELECT CM.due_date FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID)) AS REQUEST_DATE,
COALESCE(T.CUSTOMER_PROJECT_NAME, (SELECT CM.customer_request FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID)) AS CUSTOMER_REQUEST,
CODE_NAME(T.CONTRACT_RESULT) AS ORDER_STATUS,
T.PO_NO,
T.CONTRACT_DATE AS ORDER_DATE,
COALESCE(T.CONTRACT_DATE, (SELECT CM.order_date FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID)) AS ORDER_DATE,
CASE WHEN EXISTS(
SELECT 1 FROM ATTACH_FILE_INFO
WHERE TARGET_OBJID = T.OBJID::VARCHAR
WHERE TARGET_OBJID = T.CONTRACT_OBJID
AND DOC_TYPE='ORDER_DOC'
AND UPPER(STATUS) = 'ACTIVE'
) THEN 'Y' ELSE 'N' END AS ORDER_ATTACH,
(SELECT CM.PRODUCTION_STATUS FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID) AS PRODUCTION_STATUS,
-- 판매 관련 필드들 (shipment_log에서 가져오기)
COALESCE((
SELECT SL.SHIPPING_STATUS
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), '') AS SHIPPING_ORDER_STATUS,
COALESCE((
SELECT SL.SPLIT_QUANTITY
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), 0) AS SALES_QUANTITY,
COALESCE((
SELECT SL.SALES_UNIT_PRICE
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), 0) AS SALES_UNIT_PRICE,
COALESCE((
SELECT SL.SALES_SUPPLY_PRICE
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), 0) AS SALES_SUPPLY_PRICE,
COALESCE((
SELECT SL.SALES_VAT
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), 0) AS SALES_VAT,
COALESCE((
SELECT SL.SALES_TOTAL_AMOUNT
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), 0) AS SALES_TOTAL_AMOUNT,
COALESCE((
SELECT SL.SALES_TOTAL_AMOUNT
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), 0) AS SALES_TOTAL_AMOUNT_KRW,
COALESCE((
SELECT SL.SALES_CURRENCY
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), T.CONTRACT_CURRENCY) AS SALES_CURRENCY,
COALESCE((
SELECT SL.SALES_EXCHANGE_RATE
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), T.CONTRACT_PRICE_CURRENCY::numeric, 0) AS SALES_EXCHANGE_RATE,
COALESCE((
SELECT TO_CHAR(SL.SHIPPING_DATE, 'YYYY-MM-DD')
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), '') AS SHIPPING_DATE,
COALESCE((
SELECT SL.SHIPPING_METHOD
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), '') AS SHIPPING_METHOD,
COALESCE((
SELECT SL.MANAGER_USER_ID
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), T.PM_USER_ID) AS MANAGER,
COALESCE((
SELECT SL.INCOTERMS
FROM SHIPMENT_LOG SL
WHERE SL.TARGET_OBJID = T.PROJECT_NO
AND SL.LOG_TYPE = 'SALES_REGISTRATION'
ORDER BY SL.REG_DATE DESC
LIMIT 1
), '') AS INCOTERMS
) THEN 'Y' ELSE 'N' END AS ORDER_ATTACH,
(SELECT CM.PRODUCTION_STATUS FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID) AS PRODUCTION_STATUS,
-- 판매 관련 필드들 (sales_registration 테이블에서 가져오기)
COALESCE(SR.shipping_order_status, '') AS SHIPPING_ORDER_STATUS,
COALESCE(SR.sales_quantity, 0) AS SALES_QUANTITY,
COALESCE(SR.sales_unit_price, 0) AS SALES_UNIT_PRICE,
COALESCE(SR.sales_supply_price, 0) AS SALES_SUPPLY_PRICE,
COALESCE(SR.sales_vat, 0) AS SALES_VAT,
COALESCE(SR.sales_total_amount, 0) AS SALES_TOTAL_AMOUNT,
COALESCE(SR.sales_total_amount, 0) AS SALES_TOTAL_AMOUNT_KRW,
COALESCE(SR.sales_currency, T.CONTRACT_CURRENCY) AS SALES_CURRENCY,
COALESCE(SR.sales_exchange_rate, T.CONTRACT_PRICE_CURRENCY::numeric, 0) AS SALES_EXCHANGE_RATE,
COALESCE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), '') AS SHIPPING_DATE,
COALESCE(SR.shipping_method, '') AS SHIPPING_METHOD,
COALESCE(SR.manager_user_id, T.PM_USER_ID) AS MANAGER,
COALESCE(SR.incoterms, '') AS INCOTERMS
FROM PROJECT_MGMT AS T
LEFT JOIN sales_registration SR ON T.PROJECT_NO = SR.project_no
WHERE T.PROJECT_NO = #{orderNo}
</select>

View File

@@ -268,7 +268,7 @@ public class SalesNcollectMgmtService {
PersonBean person = (PersonBean) request.getSession().getAttribute(Constants.PERSON_BEAN);
paramMap.put("cretEmpNo", person.getUserId());
// shipment_log 테이블에 판매 데이터 저장
// sales_registration 테이블에 판매 데이터 저장 (ON CONFLICT로 자동 UPDATE)
sqlSession.insert("salesNcollectMgmt.insertSaleRegistration", paramMap);
sqlSession.commit();