Merge pull request 'V2025101701' (#5) from V2025101701 into main
Reviewed-on: #5
This commit was merged in pull request #5.
This commit is contained in:
@@ -3907,15 +3907,26 @@
|
||||
,CODE_NAME(MANUFACTURE_PLANT) AS MANUFACTURE_PLANT_NAME
|
||||
,CONTRACT_RESULT
|
||||
,CODE_NAME(CONTRACT_RESULT) AS CONTRACT_RESULT_NAME
|
||||
,CODE_NAME(AREA_CD) AS AREA_NAME
|
||||
,PROJECT_NAME
|
||||
,(SELECT CODE_NAME(O.PAID_TYPE) FROM CONTRACT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS FREE_OF_CHARGE
|
||||
,(SELECT O.QUANTITY FROM CONTRACT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS CONTRACT_QTY
|
||||
,(SELECT O.PART_NO FROM CONTRACT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS PRODUCT_ITEM_CODE
|
||||
,(SELECT O.PART_NAME FROM CONTRACT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS PRODUCT_ITEM_NAME
|
||||
,(SELECT O.SERIAL_NO FROM CONTRACT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS SERIAL_NO
|
||||
영업관리_주문서관리_수주등록 ,EBOM_STATUS
|
||||
,MBOM_STATUS
|
||||
,CODE_NAME(AREA_CD) AS AREA_NAME
|
||||
,PROJECT_NAME
|
||||
,(SELECT
|
||||
CASE
|
||||
WHEN O.PAID_TYPE = 'paid' THEN '유상'
|
||||
WHEN O.PAID_TYPE = 'free' THEN '무상'
|
||||
ELSE O.PAID_TYPE
|
||||
END
|
||||
FROM CONTRACT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS FREE_OF_CHARGE
|
||||
,(SELECT SUM(O.QUANTITY) FROM CONTRACT_ITEM AS O WHERE O.CONTRACT_OBJID = T.CONTRACT_OBJID) AS CONTRACT_QTY
|
||||
,(SELECT STRING_AGG(O.PART_NO, ', ' ORDER BY O.SEQ) FROM CONTRACT_ITEM AS O WHERE O.CONTRACT_OBJID = T.CONTRACT_OBJID AND O.PART_NO IS NOT NULL AND O.PART_NO != '') AS PRODUCT_ITEM_CODE
|
||||
,(SELECT STRING_AGG(O.PART_NAME, ', ' ORDER BY O.SEQ) FROM CONTRACT_ITEM AS O WHERE O.CONTRACT_OBJID = T.CONTRACT_OBJID AND O.PART_NAME IS NOT NULL AND O.PART_NAME != '') AS PRODUCT_ITEM_NAME
|
||||
,(SELECT STRING_AGG(S.SERIAL_NO, ', ' ORDER BY S.SEQ)
|
||||
FROM CONTRACT_ITEM AS I
|
||||
LEFT JOIN CONTRACT_ITEM_SERIAL AS S ON S.ITEM_OBJID = I.OBJID AND S.STATUS = 'ACTIVE'
|
||||
WHERE I.CONTRACT_OBJID = T.CONTRACT_OBJID
|
||||
AND S.SERIAL_NO IS NOT NULL) AS SERIAL_NO
|
||||
-- 영업관리_주문서관리_수주등록
|
||||
,EBOM_STATUS
|
||||
,MBOM_STATUS
|
||||
,(SELECT O.PURCHASE_DATE FROM PURCHASE_ORDER_MASTER AS O WHERE O.CONTRACT_MGMT_OBJID = T.CONTRACT_OBJID LIMIT 1) AS ORDER_DATE
|
||||
,RECEIVING_RATE
|
||||
,PRODUCTION_TEAM_12
|
||||
|
||||
@@ -243,6 +243,21 @@ public class SalesNcollectMgmtController {
|
||||
@RequestMapping(value = "/salesMgmt/salesRegForm.do", method = RequestMethod.GET)
|
||||
public String showSalesRegForm(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
|
||||
try {
|
||||
// URL 인코딩 처리: 한글 프로젝트 번호 디코딩
|
||||
if(paramMap.get("orderNo") != null) {
|
||||
String orderNo = paramMap.get("orderNo").toString();
|
||||
// 이미 디코딩된 경우와 구분하기 위해 %가 포함된 경우에만 디코딩
|
||||
if(orderNo.contains("%")) {
|
||||
try {
|
||||
orderNo = java.net.URLDecoder.decode(orderNo, "UTF-8");
|
||||
paramMap.put("orderNo", orderNo);
|
||||
} catch(Exception ex) {
|
||||
// 디코딩 실패시 원본 사용
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Map<String, Object> codeMap = new HashMap<String, Object>();
|
||||
|
||||
// 담당자
|
||||
|
||||
@@ -812,178 +812,328 @@
|
||||
,editEmpNo = #{cretEmpNo} /* 수정자 */
|
||||
</update>
|
||||
|
||||
<!-- 매출관리 그리드 목록 (SW 테이블 사용 안함) -->
|
||||
<!-- 매출관리 그리드 목록 - project_mgmt 테이블 기반 조회 (S/N, 유무상 포함) -->
|
||||
<select id="getSalesMgmtGridList" parameterType="map" resultType="map">
|
||||
/* salesNcollectMgmt.getSalesMgmtGridList - VIEW 기반 조회 (원본 + 분할출하 통합) */
|
||||
/* salesNcollectMgmt.getSalesMgmtGridList - project_mgmt 테이블 기반 조회 (S/N, 유무상 포함) */
|
||||
SELECT
|
||||
PROJECT_NO,
|
||||
ORDER_TYPE,
|
||||
PRODUCT_TYPE,
|
||||
NATION,
|
||||
RECEIPT_DATE,
|
||||
CUSTOMER,
|
||||
PAYMENT_TYPE,
|
||||
PRODUCT_NO,
|
||||
PRODUCT_NAME,
|
||||
SERIAL_NO,
|
||||
COALESCE(ORDER_QUANTITY, 0) AS ORDER_QUANTITY,
|
||||
REQUEST_DATE,
|
||||
CUSTOMER_REQUEST,
|
||||
ORDER_STATUS,
|
||||
PO_NO,
|
||||
ORDER_DATE,
|
||||
ORDER_ATTACH,
|
||||
PRODUCTION_STATUS,
|
||||
SHIPPING_ORDER_STATUS,
|
||||
COALESCE(SALES_QUANTITY, 0) AS SALES_QUANTITY,
|
||||
COALESCE(SALES_UNIT_PRICE, 0) AS SALES_UNIT_PRICE,
|
||||
COALESCE(SALES_SUPPLY_PRICE, 0) AS SALES_SUPPLY_PRICE,
|
||||
COALESCE(SALES_VAT, 0) AS SALES_VAT,
|
||||
COALESCE(SALES_TOTAL_AMOUNT, 0) AS SALES_TOTAL_AMOUNT,
|
||||
COALESCE(SALES_TOTAL_AMOUNT_KRW, 0) AS SALES_TOTAL_AMOUNT_KRW,
|
||||
SALES_CURRENCY,
|
||||
COALESCE(SALES_EXCHANGE_RATE, 0) AS SALES_EXCHANGE_RATE,
|
||||
SHIPPING_DATE,
|
||||
SHIPPING_METHOD,
|
||||
MANAGER,
|
||||
INCOTERMS,
|
||||
SALES_STATUS,
|
||||
SALE_NO,
|
||||
RECORD_TYPE,
|
||||
SPLIT_LOG_ID
|
||||
FROM v_sales_mgmt_with_splits
|
||||
T.PROJECT_NO,
|
||||
CODE_NAME(T.CATEGORY_CD) AS ORDER_TYPE,
|
||||
CODE_NAME(T.PRODUCT) AS PRODUCT_TYPE,
|
||||
CODE_NAME(T.AREA_CD) AS NATION,
|
||||
TO_CHAR(T.REGDATE, 'YYYY-MM-DD') AS RECEIPT_DATE,
|
||||
(SELECT SUPPLY_NAME FROM SUPPLY_MNG WHERE OBJID = T.CUSTOMER_OBJID::NUMERIC) AS CUSTOMER,
|
||||
(SELECT
|
||||
CASE
|
||||
WHEN CM.PAID_TYPE = 'paid' THEN '유상'
|
||||
WHEN CM.PAID_TYPE = 'free' THEN '무상'
|
||||
ELSE CM.PAID_TYPE
|
||||
END
|
||||
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,
|
||||
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,
|
||||
COALESCE(T.QUANTITY::numeric, 0) AS ORDER_QUANTITY,
|
||||
T.DUE_DATE AS REQUEST_DATE,
|
||||
T.CUSTOMER_PROJECT_NAME AS CUSTOMER_REQUEST,
|
||||
CODE_NAME(T.CONTRACT_RESULT) AS ORDER_STATUS,
|
||||
T.PO_NO,
|
||||
T.CONTRACT_DATE AS ORDER_DATE,
|
||||
CASE WHEN EXISTS(
|
||||
SELECT 1 FROM ATTACH_FILE_INFO
|
||||
WHERE TARGET_OBJID = T.OBJID::VARCHAR
|
||||
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,
|
||||
'N' AS SALES_STATUS,
|
||||
T.OBJID::VARCHAR AS SALE_NO,
|
||||
'ORIGINAL' AS RECORD_TYPE,
|
||||
'' AS SPLIT_LOG_ID
|
||||
FROM PROJECT_MGMT AS T
|
||||
WHERE 1 = 1
|
||||
<if test="orderType != null and orderType != ''">
|
||||
AND CATEGORY_CD = #{orderType}
|
||||
AND T.CATEGORY_CD = #{orderType}
|
||||
</if>
|
||||
<if test="productType != null and productType != ''">
|
||||
AND PRODUCT_TYPE = #{productType}
|
||||
AND T.PRODUCT = #{productType}
|
||||
</if>
|
||||
<if test="nation != null and nation != ''">
|
||||
AND AREA_CD = #{nation}
|
||||
AND T.AREA_CD = #{nation}
|
||||
</if>
|
||||
<if test="customer != null and customer != ''">
|
||||
AND CUSTOMER LIKE CONCAT('%', #{customer}, '%')
|
||||
AND EXISTS (
|
||||
SELECT 1 FROM SUPPLY_MNG
|
||||
WHERE OBJID = T.CUSTOMER_OBJID::NUMERIC
|
||||
AND SUPPLY_NAME LIKE CONCAT('%', #{customer}, '%')
|
||||
)
|
||||
</if>
|
||||
<if test="paymentType != null and paymentType != ''">
|
||||
AND PAID_TYPE = #{paymentType}
|
||||
AND EXISTS (
|
||||
SELECT 1 FROM CONTRACT_MGMT CM
|
||||
WHERE CM.OBJID = T.CONTRACT_OBJID
|
||||
AND (
|
||||
(#{paymentType} = 'N' AND CM.PAID_TYPE = 'paid') OR
|
||||
(#{paymentType} = 'Y' AND CM.PAID_TYPE = 'free')
|
||||
)
|
||||
)
|
||||
</if>
|
||||
<if test="productNo != null and productNo != ''">
|
||||
AND PRODUCT_NO LIKE CONCAT('%', #{productNo}, '%')
|
||||
AND T.PART_NO LIKE CONCAT('%', #{productNo}, '%')
|
||||
</if>
|
||||
<if test="productName != null and productName != ''">
|
||||
AND PRODUCT_NAME LIKE CONCAT('%', #{productName}, '%')
|
||||
AND T.PART_NAME LIKE CONCAT('%', #{productName}, '%')
|
||||
</if>
|
||||
<if test="serialNo != null and serialNo != ''">
|
||||
AND SERIAL_NO LIKE CONCAT('%', #{serialNo}, '%')
|
||||
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 CIS.SERIAL_NO LIKE CONCAT('%', #{serialNo}, '%')
|
||||
AND UPPER(CIS.STATUS) = 'ACTIVE'
|
||||
)
|
||||
</if>
|
||||
<if test="orderStatus != null and orderStatus != ''">
|
||||
AND STATUS_CD = #{orderStatus}
|
||||
AND T.CONTRACT_RESULT = #{orderStatus}
|
||||
</if>
|
||||
<if test="poNo != null and poNo != ''">
|
||||
AND PO_NO LIKE CONCAT('%', #{poNo}, '%')
|
||||
AND T.PO_NO LIKE CONCAT('%', #{poNo}, '%')
|
||||
</if>
|
||||
<if test="requestDateFrom != null and requestDateFrom != ''">
|
||||
AND REQUEST_DATE <![CDATA[>=]]> #{requestDateFrom}
|
||||
AND T.DUE_DATE <![CDATA[>=]]> #{requestDateFrom}
|
||||
</if>
|
||||
<if test="requestDateTo != null and requestDateTo != ''">
|
||||
AND REQUEST_DATE <![CDATA[<=]]> #{requestDateTo}
|
||||
AND T.DUE_DATE <![CDATA[<=]]> #{requestDateTo}
|
||||
</if>
|
||||
<if test="orderDateFrom != null and orderDateFrom != ''">
|
||||
AND ORDER_DATE <![CDATA[>=]]> #{orderDateFrom}
|
||||
AND T.CONTRACT_DATE <![CDATA[>=]]> #{orderDateFrom}
|
||||
</if>
|
||||
<if test="orderDateTo != null and orderDateTo != ''">
|
||||
AND ORDER_DATE <![CDATA[<=]]> #{orderDateTo}
|
||||
AND T.CONTRACT_DATE <![CDATA[<=]]> #{orderDateTo}
|
||||
</if>
|
||||
<if test="shippingStatus != null and shippingStatus != ''">
|
||||
AND SALES_STATUS = #{shippingStatus}
|
||||
/* SALES_STATUS 필드 없음 - 검색 조건 무시 */
|
||||
</if>
|
||||
<if test="shippingDateFrom != null and shippingDateFrom != ''">
|
||||
AND SHIPPING_DATE <![CDATA[>=]]> #{shippingDateFrom}
|
||||
/* SHIPPING_DATE 필드 없음 - 검색 조건 무시 */
|
||||
</if>
|
||||
<if test="shippingDateTo != null and shippingDateTo != ''">
|
||||
AND SHIPPING_DATE <![CDATA[<=]]> #{shippingDateTo}
|
||||
/* SHIPPING_DATE 필드 없음 - 검색 조건 무시 */
|
||||
</if>
|
||||
<if test="shippingMethod != null and shippingMethod != ''">
|
||||
AND SHIPPING_METHOD = #{shippingMethod}
|
||||
/* SHIPPING_METHOD 필드 없음 - 검색 조건 무시 */
|
||||
</if>
|
||||
<if test="manager != null and manager != ''">
|
||||
AND PM_USER_ID = #{manager}
|
||||
AND T.PM_USER_ID = #{manager}
|
||||
</if>
|
||||
<if test="incoterms != null and incoterms != ''">
|
||||
AND INCOTERMS = #{incoterms}
|
||||
/* INCOTERMS 필드 없음 - 검색 조건 무시 */
|
||||
</if>
|
||||
ORDER BY REGDATE DESC
|
||||
ORDER BY T.REGDATE DESC
|
||||
LIMIT #{COUNT_PER_PAGE} OFFSET #{PAGE_START}
|
||||
</select>
|
||||
|
||||
<!-- 매출관리 그리드 목록 개수 (VIEW 기반) -->
|
||||
<!-- 매출관리 그리드 목록 개수 - project_mgmt 테이블 기반 -->
|
||||
<select id="getSalesMgmtGridListCount" parameterType="map" resultType="map">
|
||||
/* salesNcollectMgmt.getSalesMgmtGridListCount - VIEW 기반 */
|
||||
/* salesNcollectMgmt.getSalesMgmtGridListCount - project_mgmt 테이블 기반 */
|
||||
SELECT
|
||||
CEIL(COUNT(1)::float / #{COUNT_PER_PAGE}::float)::numeric::integer AS MAX_PAGE_SIZE,
|
||||
COUNT(1)::integer AS TOTAL_CNT
|
||||
FROM v_sales_mgmt_with_splits
|
||||
FROM PROJECT_MGMT AS T
|
||||
WHERE 1 = 1
|
||||
<if test="orderType != null and orderType != ''">
|
||||
AND CATEGORY_CD = #{orderType}
|
||||
AND T.CATEGORY_CD = #{orderType}
|
||||
</if>
|
||||
<if test="productType != null and productType != ''">
|
||||
AND PRODUCT_TYPE = #{productType}
|
||||
AND T.PRODUCT = #{productType}
|
||||
</if>
|
||||
<if test="nation != null and nation != ''">
|
||||
AND AREA_CD = #{nation}
|
||||
AND T.AREA_CD = #{nation}
|
||||
</if>
|
||||
<if test="customer != null and customer != ''">
|
||||
AND CUSTOMER LIKE CONCAT('%', #{customer}, '%')
|
||||
AND EXISTS (
|
||||
SELECT 1 FROM SUPPLY_MNG
|
||||
WHERE OBJID = T.CUSTOMER_OBJID::NUMERIC
|
||||
AND SUPPLY_NAME LIKE CONCAT('%', #{customer}, '%')
|
||||
)
|
||||
</if>
|
||||
<if test="paymentType != null and paymentType != ''">
|
||||
AND PAID_TYPE = #{paymentType}
|
||||
AND EXISTS (
|
||||
SELECT 1 FROM CONTRACT_MGMT CM
|
||||
WHERE CM.OBJID = T.CONTRACT_OBJID
|
||||
AND (
|
||||
(#{paymentType} = 'N' AND CM.PAID_TYPE = 'paid') OR
|
||||
(#{paymentType} = 'Y' AND CM.PAID_TYPE = 'free')
|
||||
)
|
||||
)
|
||||
</if>
|
||||
<if test="productNo != null and productNo != ''">
|
||||
AND PRODUCT_NO LIKE CONCAT('%', #{productNo}, '%')
|
||||
AND T.PART_NO LIKE CONCAT('%', #{productNo}, '%')
|
||||
</if>
|
||||
<if test="productName != null and productName != ''">
|
||||
AND PRODUCT_NAME LIKE CONCAT('%', #{productName}, '%')
|
||||
AND T.PART_NAME LIKE CONCAT('%', #{productName}, '%')
|
||||
</if>
|
||||
<if test="serialNo != null and serialNo != ''">
|
||||
AND SERIAL_NO LIKE CONCAT('%', #{serialNo}, '%')
|
||||
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 CIS.SERIAL_NO LIKE CONCAT('%', #{serialNo}, '%')
|
||||
AND UPPER(CIS.STATUS) = 'ACTIVE'
|
||||
)
|
||||
</if>
|
||||
<if test="orderStatus != null and orderStatus != ''">
|
||||
AND STATUS_CD = #{orderStatus}
|
||||
AND T.CONTRACT_RESULT = #{orderStatus}
|
||||
</if>
|
||||
<if test="poNo != null and poNo != ''">
|
||||
AND PO_NO LIKE CONCAT('%', #{poNo}, '%')
|
||||
AND T.PO_NO LIKE CONCAT('%', #{poNo}, '%')
|
||||
</if>
|
||||
<if test="requestDateFrom != null and requestDateFrom != ''">
|
||||
AND REQUEST_DATE <![CDATA[>=]]> #{requestDateFrom}
|
||||
AND T.DUE_DATE <![CDATA[>=]]> #{requestDateFrom}
|
||||
</if>
|
||||
<if test="requestDateTo != null and requestDateTo != ''">
|
||||
AND REQUEST_DATE <![CDATA[<=]]> #{requestDateTo}
|
||||
AND T.DUE_DATE <![CDATA[<=]]> #{requestDateTo}
|
||||
</if>
|
||||
<if test="orderDateFrom != null and orderDateFrom != ''">
|
||||
AND ORDER_DATE <![CDATA[>=]]> #{orderDateFrom}
|
||||
AND T.CONTRACT_DATE <![CDATA[>=]]> #{orderDateFrom}
|
||||
</if>
|
||||
<if test="orderDateTo != null and orderDateTo != ''">
|
||||
AND ORDER_DATE <![CDATA[<=]]> #{orderDateTo}
|
||||
AND T.CONTRACT_DATE <![CDATA[<=]]> #{orderDateTo}
|
||||
</if>
|
||||
<if test="shippingStatus != null and shippingStatus != ''">
|
||||
AND SALES_STATUS = #{shippingStatus}
|
||||
/* SALES_STATUS 필드 없음 - 검색 조건 무시 */
|
||||
</if>
|
||||
<if test="shippingDateFrom != null and shippingDateFrom != ''">
|
||||
AND SHIPPING_DATE <![CDATA[>=]]> #{shippingDateFrom}
|
||||
/* SHIPPING_DATE 필드 없음 - 검색 조건 무시 */
|
||||
</if>
|
||||
<if test="shippingDateTo != null and shippingDateTo != ''">
|
||||
AND SHIPPING_DATE <![CDATA[<=]]> #{shippingDateTo}
|
||||
/* SHIPPING_DATE 필드 없음 - 검색 조건 무시 */
|
||||
</if>
|
||||
<if test="shippingMethod != null and shippingMethod != ''">
|
||||
AND SHIPPING_METHOD = #{shippingMethod}
|
||||
/* SHIPPING_METHOD 필드 없음 - 검색 조건 무시 */
|
||||
</if>
|
||||
<if test="manager != null and manager != ''">
|
||||
AND PM_USER_ID = #{manager}
|
||||
AND T.PM_USER_ID = #{manager}
|
||||
</if>
|
||||
<if test="incoterms != null and incoterms != ''">
|
||||
AND INCOTERMS = #{incoterms}
|
||||
/* INCOTERMS 필드 없음 - 검색 조건 무시 */
|
||||
</if>
|
||||
</select>
|
||||
|
||||
@@ -1139,5 +1289,256 @@
|
||||
)
|
||||
</insert>
|
||||
|
||||
<!--
|
||||
/**
|
||||
* 판매 등록 저장 (shipment_log 테이블 사용)
|
||||
* @since 2025.10.22
|
||||
* @author johngreen
|
||||
* @version 1.0
|
||||
**/
|
||||
-->
|
||||
<insert id="insertSaleRegistration" parameterType="map">
|
||||
/* salesNcollectMgmt.insertSaleRegistration - shipment_log에 판매 데이터 저장 */
|
||||
INSERT INTO shipment_log (
|
||||
target_objid,
|
||||
log_type,
|
||||
log_message,
|
||||
split_quantity,
|
||||
shipping_status,
|
||||
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>
|
||||
#{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'),
|
||||
</when>
|
||||
<otherwise>
|
||||
NULL,
|
||||
</otherwise>
|
||||
</choose>
|
||||
#{shippingMethod},
|
||||
#{manager},
|
||||
#{incoterms},
|
||||
false,
|
||||
NOW(),
|
||||
#{cretEmpNo}
|
||||
)
|
||||
</insert>
|
||||
|
||||
<!--
|
||||
/**
|
||||
* 판매 정보 조회 - 판매등록 팝업에서 사용
|
||||
* PROJECT_NO 또는 SALE_NO로 조회
|
||||
* @since 2025.10.22
|
||||
* @author johngreen
|
||||
* @version 1.0
|
||||
**/
|
||||
-->
|
||||
<select id="getSaleInfo" parameterType="map" resultType="map">
|
||||
/* salesNcollectMgmt.getSaleInfo - 판매등록 팝업용 프로젝트 정보 조회 (리스트와 동일한 구조) */
|
||||
SELECT
|
||||
T.PROJECT_NO,
|
||||
CODE_NAME(T.CATEGORY_CD) AS ORDER_TYPE,
|
||||
CODE_NAME(T.PRODUCT) AS PRODUCT_TYPE,
|
||||
CODE_NAME(T.AREA_CD) AS NATION,
|
||||
TO_CHAR(T.REGDATE, 'YYYY-MM-DD') AS RECEIPT_DATE,
|
||||
(SELECT SUPPLY_NAME FROM SUPPLY_MNG WHERE OBJID = T.CUSTOMER_OBJID::NUMERIC) AS CUSTOMER,
|
||||
(SELECT
|
||||
CASE
|
||||
WHEN CM.PAID_TYPE = 'paid' THEN '유상'
|
||||
WHEN CM.PAID_TYPE = 'free' THEN '무상'
|
||||
ELSE CM.PAID_TYPE
|
||||
END
|
||||
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,
|
||||
COALESCE(T.QUANTITY::numeric, 0) AS ORDER_QUANTITY,
|
||||
T.DUE_DATE AS REQUEST_DATE,
|
||||
T.CUSTOMER_PROJECT_NAME AS CUSTOMER_REQUEST,
|
||||
CODE_NAME(T.CONTRACT_RESULT) AS ORDER_STATUS,
|
||||
T.PO_NO,
|
||||
T.CONTRACT_DATE AS ORDER_DATE,
|
||||
CASE WHEN EXISTS(
|
||||
SELECT 1 FROM ATTACH_FILE_INFO
|
||||
WHERE TARGET_OBJID = T.OBJID::VARCHAR
|
||||
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
|
||||
FROM PROJECT_MGMT AS T
|
||||
WHERE T.PROJECT_NO = #{orderNo}
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
|
||||
@@ -268,17 +268,16 @@ public class SalesNcollectMgmtService {
|
||||
PersonBean person = (PersonBean) request.getSession().getAttribute(Constants.PERSON_BEAN);
|
||||
paramMap.put("cretEmpNo", person.getUserId());
|
||||
|
||||
// SWSC110A_TBL 업데이트
|
||||
sqlSession.update("salesNcollectMgmt.updateSaleRegistration_swsc110a", paramMap);
|
||||
|
||||
// SWSD010A_TBL 업데이트 (insert or update)
|
||||
sqlSession.update("salesNcollectMgmt.upsertSaleRegistration_swsd010a", paramMap);
|
||||
// shipment_log 테이블에 판매 데이터 저장
|
||||
sqlSession.insert("salesNcollectMgmt.insertSaleRegistration", paramMap);
|
||||
|
||||
sqlSession.commit();
|
||||
resultMap.put("result", true);
|
||||
resultMap.put("msg", "저장되었습니다.");
|
||||
} catch(Exception e) {
|
||||
sqlSession.rollback();
|
||||
if(sqlSession != null) {
|
||||
sqlSession.rollback();
|
||||
}
|
||||
resultMap.put("result", false);
|
||||
resultMap.put("msg", "저장 중 오류가 발생했습니다.");
|
||||
e.printStackTrace();
|
||||
|
||||
Reference in New Issue
Block a user