From 3068354cd04a69422e6ed4eae3128d395fa58115 Mon Sep 17 00:00:00 2001 From: hjjeong Date: Mon, 9 Feb 2026 16:02:36 +0900 Subject: [PATCH] =?UTF-8?q?=EB=B6=84=ED=95=A0=EC=B6=9C=ED=95=98=20S/N=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=ED=95=98=EB=8A=94=20=EB=B6=80=EB=B6=84=20?= =?UTF-8?q?=EC=88=98=EC=A0=95,=20=EB=94=94=EC=9E=90=EC=9D=B8=20=EA=B8=B0?= =?UTF-8?q?=EC=A1=B4=EA=B3=BC=20=EB=8F=99=EC=9D=BC=ED=95=98=EA=B2=8C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salesmgmt/salesMgmt/splitShipmentForm.jsp | 507 ++++++++++++++---- .../salesmgmt/mapper/salesNcollectMgmt.xml | 5 +- .../service/SalesNcollectMgmtService.java | 50 +- 3 files changed, 423 insertions(+), 139 deletions(-) diff --git a/WebContent/WEB-INF/view/salesmgmt/salesMgmt/splitShipmentForm.jsp b/WebContent/WEB-INF/view/salesmgmt/salesMgmt/splitShipmentForm.jsp index 7ae4212..f417a83 100644 --- a/WebContent/WEB-INF/view/salesmgmt/salesMgmt/splitShipmentForm.jsp +++ b/WebContent/WEB-INF/view/salesmgmt/salesMgmt/splitShipmentForm.jsp @@ -1,22 +1,45 @@ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> -<%@ include file="/init.jsp" %> +<%@ include file="/init_new.jsp" %> 분할출하 등록 - - @@ -74,122 +327,148 @@ + + + + + -
+

분할출하 등록

-
- +
+
- - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- -
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ +
+
@@ -200,7 +479,7 @@
- + diff --git a/src/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml b/src/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml index d778578..3ca0119 100644 --- a/src/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml +++ b/src/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml @@ -2090,7 +2090,10 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC COALESCE(CM.PO_NO, '') AS PO_NO, COALESCE(CM.ORDER_DATE, '') AS ORDER_DATE, COALESCE((SELECT SUM(SR.SALES_QUANTITY) FROM SALES_REGISTRATION SR WHERE SR.PROJECT_NO = T.PROJECT_NO), 0) AS SALES_QUANTITY, - COALESCE(T.QUANTITY::NUMERIC, 0) - COALESCE((SELECT SUM(SR.SALES_QUANTITY) FROM SALES_REGISTRATION SR WHERE SR.PROJECT_NO = T.PROJECT_NO), 0) AS REMAINING_QUANTITY + COALESCE(T.QUANTITY::NUMERIC, 0) - COALESCE((SELECT SUM(SR.SALES_QUANTITY) FROM SALES_REGISTRATION SR WHERE SR.PROJECT_NO = T.PROJECT_NO), 0) AS REMAINING_QUANTITY, + COALESCE(NULLIF(CM.ORDER_UNIT_PRICE, '')::NUMERIC, 0) AS ORDER_UNIT_PRICE, + COALESCE(NULLIF(CM.EXCHANGE_RATE, '')::NUMERIC, 1) AS EXCHANGE_RATE, + COALESCE(CM.CONTRACT_CURRENCY, '') AS CONTRACT_CURRENCY FROM PROJECT_MGMT T LEFT JOIN CONTRACT_MGMT CM ON CM.OBJID = T.CONTRACT_OBJID LEFT JOIN SUPPLY_MNG SM ON SM.OBJID = CASE WHEN T.CUSTOMER_OBJID ~ '^[0-9]+$' THEN T.CUSTOMER_OBJID::NUMERIC ELSE NULL END diff --git a/src/com/pms/salesmgmt/service/SalesNcollectMgmtService.java b/src/com/pms/salesmgmt/service/SalesNcollectMgmtService.java index c990cc2..a3fb2d7 100644 --- a/src/com/pms/salesmgmt/service/SalesNcollectMgmtService.java +++ b/src/com/pms/salesmgmt/service/SalesNcollectMgmtService.java @@ -360,6 +360,14 @@ public Map saveSaleRegistration(HttpServletRequest request, Map< System.out.println("saleNo (파라미터): " + saleNo); System.out.println("salesQuantity: " + paramMap.get("salesQuantity")); + // 폼 필드명(manager) → SQL 파라미터명(managerUserId) 매핑 + if(paramMap.get("manager") != null && !"".equals(paramMap.get("manager"))) { + paramMap.put("managerUserId", paramMap.get("manager")); + } + + System.out.println("serialNo: " + paramMap.get("serialNo")); + System.out.println("manager → managerUserId: " + paramMap.get("managerUserId")); + // 모든 판매를 shipment_log에 기록 (분할 출하 방식 통일) // 1. 해당 프로젝트의 sales_registration 레코드 확인 Map checkParam = new HashMap(); @@ -391,9 +399,10 @@ public Map saveSaleRegistration(HttpServletRequest request, Map< baseRecord.put("salesExchangeRate", paramMap.get("salesExchangeRate")); baseRecord.put("shippingDate", paramMap.get("shippingDate")); baseRecord.put("shippingMethod", paramMap.get("shippingMethod")); - baseRecord.put("managerUserId", paramMap.get("managerUserId")); + baseRecord.put("managerUserId", paramMap.get("managerUserId")); // 위에서 manager → managerUserId 매핑됨 baseRecord.put("incoterms", paramMap.get("incoterms")); baseRecord.put("serialNo", paramMap.get("serialNo")); + System.out.println("insertSaleRegistration - serialNo: " + paramMap.get("serialNo")); baseRecord.put("shippingOrderStatus", "출하지시"); // 자동으로 출하지시 상태 설정 baseRecord.put("cretEmpNo", paramMap.get("cretEmpNo")); @@ -495,22 +504,21 @@ public Map saveSaleRegistration(HttpServletRequest request, Map< PersonBean person = (PersonBean) request.getSession().getAttribute(Constants.PERSON_BEAN); String userId = person.getUserId(); - // 원본 데이터 조회 - Map originalData = sqlSession.selectOne("salesNcollectMgmt.getContractByObjid", paramMap); - - if(originalData == null) { - resultMap.put("result", false); - resultMap.put("msg", "원본 데이터를 찾을 수 없습니다."); - return resultMap; - } - // 분할 수량 int splitQuantity = Integer.parseInt(paramMap.get("splitQuantity").toString()); int originalQuantity = Integer.parseInt(paramMap.get("originalQuantity").toString()); - // 원본 데이터의 단가 정보 가져오기 - BigDecimal unitPrice = new BigDecimal(originalData.get("order_unit_price").toString()); - BigDecimal exchangeRate = new BigDecimal(originalData.get("exchange_rate").toString()); + // 단가/환율은 폼 hidden 필드에서 직접 가져옴 (프로젝트 기반, contract_mgmt 직접 조회 불필요) + String unitPriceStr = CommonUtils.checkNull(paramMap.get("orderUnitPrice")); + String exchangeRateStr = CommonUtils.checkNull(paramMap.get("exchangeRate")); + String contractCurrency = CommonUtils.checkNull(paramMap.get("contractCurrency")); + + BigDecimal unitPrice = StringUtils.isNotBlank(unitPriceStr) ? new BigDecimal(unitPriceStr) : BigDecimal.ZERO; + BigDecimal exchangeRate = StringUtils.isNotBlank(exchangeRateStr) ? new BigDecimal(exchangeRateStr) : BigDecimal.ONE; + + System.out.println("=== splitShipment 디버그 ==="); + System.out.println("projectNo: " + paramMap.get("projectNo")); + System.out.println("unitPrice: " + unitPrice + ", exchangeRate: " + exchangeRate + ", currency: " + contractCurrency); // 분할 금액 계산 BigDecimal splitSupplyPrice = unitPrice.multiply(new BigDecimal(splitQuantity)); @@ -527,19 +535,13 @@ public Map saveSaleRegistration(HttpServletRequest request, Map< paramMap.put("salesSupplyPrice", splitSupplyPrice); paramMap.put("salesVat", splitVat); paramMap.put("salesTotalAmount", splitTotalAmount); - paramMap.put("salesCurrency", originalData.get("contract_currency")); + paramMap.put("salesCurrency", contractCurrency); paramMap.put("salesExchangeRate", exchangeRate); - // 팝업에서 입력한 데이터 우선, 없으면 원본 데이터 사용 - paramMap.put("shippingMethod", - StringUtils.isNotBlank((String)paramMap.get("shippingMethod")) ? - paramMap.get("shippingMethod") : originalData.get("shipping_method")); - paramMap.put("incoterms", - StringUtils.isNotBlank((String)paramMap.get("incoterms")) ? - paramMap.get("incoterms") : originalData.get("incoterms")); - paramMap.put("managerUserId", - StringUtils.isNotBlank((String)paramMap.get("manager")) ? - paramMap.get("manager") : originalData.get("pm_user_id")); + // 담당자 매핑 (폼 필드명 manager → SQL 파라미터명 managerUserId) + if(StringUtils.isNotBlank((String)paramMap.get("manager"))) { + paramMap.put("managerUserId", paramMap.get("manager")); + } // 팝업에서 입력한 추가 정보 // serialNo, shippingDate, remark는 팝업에서만 입력 가능