일단저장
This commit is contained in:
@@ -887,18 +887,18 @@
|
||||
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,
|
||||
-- 잔량 계산: 수주수량 - 모든 분할 출하의 합계
|
||||
-- 잔량 계산: 수주수량 - shipment_log의 split_quantity 합계
|
||||
COALESCE(T.QUANTITY::numeric, 0) - COALESCE(
|
||||
(SELECT SUM(sales_quantity)
|
||||
FROM sales_registration
|
||||
WHERE project_no LIKE T.PROJECT_NO || '%'),
|
||||
(SELECT SUM(COALESCE(split_quantity, 0))
|
||||
FROM shipment_log
|
||||
WHERE target_objid = T.PROJECT_NO),
|
||||
0
|
||||
) AS REMAINING_QUANTITY,
|
||||
-- 잔량원화총액 계산: (수주수량 - 모든 분할 출하 합계) * 판매단가
|
||||
-- 잔량원화총액 계산: (수주수량 - shipment_log 합계) * 판매단가
|
||||
(COALESCE(T.QUANTITY::numeric, 0) - COALESCE(
|
||||
(SELECT SUM(sales_quantity)
|
||||
FROM sales_registration
|
||||
WHERE project_no LIKE T.PROJECT_NO || '%'),
|
||||
(SELECT SUM(COALESCE(split_quantity, 0))
|
||||
FROM shipment_log
|
||||
WHERE target_objid = T.PROJECT_NO),
|
||||
0
|
||||
)) * COALESCE(SR.sales_unit_price, 0) AS REMAINING_AMOUNT_KRW,
|
||||
COALESCE(SR.sales_currency, T.CONTRACT_CURRENCY) AS SALES_CURRENCY,
|
||||
@@ -1630,7 +1630,13 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC
|
||||
<!-- 모든 분할 출하의 총 판매 수량 조회 -->
|
||||
<select id="getTotalSalesQuantity" parameterType="map" resultType="map">
|
||||
/* salesNcollectMgmt.getTotalSalesQuantity - project_no로 시작하는 모든 레코드의 판매 수량 합계 */
|
||||
SELECT COALESCE(SUM(NULLIF(sales_quantity, '')::NUMERIC), 0) as total
|
||||
SELECT COALESCE(SUM(
|
||||
CASE
|
||||
WHEN sales_quantity IS NULL THEN 0
|
||||
WHEN TRIM(CAST(sales_quantity AS TEXT)) = '' THEN 0
|
||||
ELSE CAST(sales_quantity AS NUMERIC)
|
||||
END
|
||||
), 0) as total
|
||||
FROM sales_registration
|
||||
WHERE project_no LIKE #{orderNo} || '%'
|
||||
</select>
|
||||
@@ -1732,23 +1738,21 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC
|
||||
SELECT OBJID FROM PROJECT_MGMT WHERE PROJECT_NO = #{orderNo}
|
||||
</select>
|
||||
|
||||
<!-- 출하일 상세 내역 조회 (모든 분할 출하 포함) -->
|
||||
<!-- 출하일 상세 내역 조회 (shipment_log에서 조회) -->
|
||||
<select id="getShippingDetailList" parameterType="map" resultType="map">
|
||||
/* salesNcollectMgmt.getShippingDetailList - 모든 분할 출하 포함 */
|
||||
/* salesNcollectMgmt.getShippingDetailList - shipment_log에서 모든 분할 출하 조회 */
|
||||
SELECT
|
||||
COALESCE(TO_CHAR(SR.shipping_date, 'YYYY-MM-DD'), '미등록') AS shipping_date,
|
||||
COALESCE(SR.sales_quantity, 0) AS shipping_quantity,
|
||||
COALESCE(SR.shipping_order_status, '미등록') AS shipping_order_status,
|
||||
COALESCE(SR.serial_no, '-') AS serial_no,
|
||||
SR.project_no,
|
||||
CASE
|
||||
WHEN SR.project_no = #{projectNo} THEN '최초 출하'
|
||||
ELSE '분할 출하 ' || SUBSTRING(SR.project_no FROM LENGTH(#{projectNo}) + 2)
|
||||
END AS source
|
||||
FROM sales_registration SR
|
||||
WHERE SR.project_no LIKE #{projectNo} || '%'
|
||||
COALESCE(TO_CHAR(SL.shipping_date, 'YYYY-MM-DD'), '미등록') AS shipping_date,
|
||||
COALESCE(SL.split_quantity, 0) AS shipping_quantity,
|
||||
COALESCE(SL.shipping_status, '미등록') AS shipping_order_status,
|
||||
COALESCE(SL.serial_no, '-') AS serial_no,
|
||||
SL.target_objid AS project_no,
|
||||
'분할 출하 ' || SL.log_id AS source,
|
||||
TO_CHAR(SL.reg_date, 'YYYY-MM-DD HH24:MI:SS') AS reg_date
|
||||
FROM shipment_log SL
|
||||
WHERE SL.target_objid = #{projectNo}
|
||||
|
||||
ORDER BY shipping_date DESC, project_no
|
||||
ORDER BY SL.shipping_date DESC, SL.log_id DESC
|
||||
</select>
|
||||
|
||||
<!-- 거래명세서 - 고객 정보 조회 -->
|
||||
|
||||
@@ -138,10 +138,14 @@
|
||||
var popup_width = 850;
|
||||
var popup_height = 550;
|
||||
|
||||
// 기본 파라미터만 전달 (orderNo, saleNo)
|
||||
// 잔량 계산은 Controller에서 자동으로 처리됨
|
||||
// 신규 판매등록: orderNo와 잔량 전달 (saleNo 없음)
|
||||
var params = "orderNo=" + encodeURIComponent(rowData.PROJECT_NO);
|
||||
params += "&saleNo=" + (rowData.SALE_NO ? encodeURIComponent(rowData.SALE_NO) : "");
|
||||
// saleNo는 전달하지 않음 (신규 등록 모드)
|
||||
|
||||
// 그리드에서 계산된 잔량 전달
|
||||
if(rowData.REMAINING_QUANTITY != null) {
|
||||
params += "&remainingQuantity=" + encodeURIComponent(rowData.REMAINING_QUANTITY);
|
||||
}
|
||||
|
||||
// 금액 정보는 Controller에서 자동으로 불러옴 (수주 데이터 기반)
|
||||
// URL 파라미터로 전달하지 않음
|
||||
|
||||
@@ -801,19 +801,19 @@ function fn_calculateSelectedItem() {
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!-- 두번째 행: 판매수량 (잔량 자동 표시), 출하일 -->
|
||||
<!-- 두번째 행: 판매수량 (잔량 표시), 출하일 -->
|
||||
<tr>
|
||||
<td class="input_title">
|
||||
<label for="salesQuantity">판매수량</label>
|
||||
<span style="color:#666; font-size:11px; display:block; margin-top:2px;">
|
||||
(잔량: ${saleInfo.SALES_QUANTITY}개)
|
||||
(잔량: ${saleInfo.REMAINING_QUANTITY != null ? saleInfo.REMAINING_QUANTITY : saleInfo.ORDER_QUANTITY}개)
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<input type="number" name="salesQuantity" id="salesQuantity"
|
||||
value="${saleInfo.SALES_QUANTITY}"
|
||||
value="${saleInfo.SALES_QUANTITY != null && saleInfo.SALES_QUANTITY != '' && saleInfo.SALES_QUANTITY != 0 ? saleInfo.SALES_QUANTITY : ''}"
|
||||
onchange="fn_calculateSupplyPrice()"
|
||||
placeholder="판매할 수량 입력" />
|
||||
placeholder="판매할 수량 입력 (잔량: ${saleInfo.REMAINING_QUANTITY != null ? saleInfo.REMAINING_QUANTITY : saleInfo.ORDER_QUANTITY}개)" />
|
||||
</td>
|
||||
<td class="input_title"><label for="shippingDate">출하일</label></td>
|
||||
<td>
|
||||
|
||||
@@ -280,107 +280,64 @@ public class SalesNcollectMgmtController {
|
||||
request.setAttribute("saleInfo", saleInfo);
|
||||
request.setAttribute("orderInfo", saleInfo);
|
||||
}
|
||||
// orderNo가 있으면 기존 판매 정보 조회
|
||||
// orderNo가 있으면 판매 정보 조회
|
||||
else if(paramMap.get("orderNo") != null && !paramMap.get("orderNo").equals("")) {
|
||||
System.out.println("=== salesRegForm.do 파라미터 확인 ===");
|
||||
System.out.println("orderNo: " + paramMap.get("orderNo"));
|
||||
System.out.println("salesQuantity: " + paramMap.get("salesQuantity"));
|
||||
System.out.println("salesUnitPrice: " + paramMap.get("salesUnitPrice"));
|
||||
System.out.println("salesSupplyPrice: " + paramMap.get("salesSupplyPrice"));
|
||||
System.out.println("salesVat: " + paramMap.get("salesVat"));
|
||||
System.out.println("salesTotalAmount: " + paramMap.get("salesTotalAmount"));
|
||||
System.out.println("salesCurrency: " + paramMap.get("salesCurrency"));
|
||||
System.out.println("salesExchangeRate: " + paramMap.get("salesExchangeRate"));
|
||||
System.out.println("saleNo: " + paramMap.get("saleNo"));
|
||||
System.out.println("remainingQuantity: " + paramMap.get("remainingQuantity"));
|
||||
|
||||
saleInfo = salesNcollectMgmtService.getSaleInfo(paramMap);
|
||||
salesCurrency = CommonUtils.nullToEmpty((String)saleInfo.get("SALES_CURRENCY"));
|
||||
|
||||
System.out.println("=== DB에서 조회한 saleInfo ===");
|
||||
System.out.println("ORDER_QUANTITY: " + saleInfo.get("ORDER_QUANTITY"));
|
||||
System.out.println("SALES_QUANTITY: " + saleInfo.get("SALES_QUANTITY"));
|
||||
System.out.println("SALES_UNIT_PRICE: " + saleInfo.get("SALES_UNIT_PRICE"));
|
||||
System.out.println("SALES_SUPPLY_PRICE: " + saleInfo.get("SALES_SUPPLY_PRICE"));
|
||||
// saleNo가 있으면 기존 판매 데이터 수정 모드
|
||||
if(paramMap.get("saleNo") != null && !paramMap.get("saleNo").equals("")) {
|
||||
System.out.println("=== 기존 판매 데이터 수정 모드 ===");
|
||||
saleInfo = salesNcollectMgmtService.getSaleInfo(paramMap);
|
||||
salesCurrency = CommonUtils.nullToEmpty((String)saleInfo.get("SALES_CURRENCY"));
|
||||
|
||||
// URL 파라미터로 그리드 데이터가 전달된 경우 우선 사용
|
||||
if(paramMap.get("salesQuantity") != null && !paramMap.get("salesQuantity").equals("")) {
|
||||
System.out.println("=== URL 파라미터로 그리드 데이터 설정 ===");
|
||||
if(saleInfo == null) saleInfo = new HashMap<String, Object>();
|
||||
|
||||
saleInfo.put("SALES_UNIT_PRICE", paramMap.get("salesUnitPrice"));
|
||||
saleInfo.put("SALES_SUPPLY_PRICE", paramMap.get("salesSupplyPrice"));
|
||||
saleInfo.put("SALES_VAT", paramMap.get("salesVat"));
|
||||
saleInfo.put("SALES_TOTAL_AMOUNT", paramMap.get("salesTotalAmount"));
|
||||
if(paramMap.get("salesCurrency") != null) {
|
||||
saleInfo.put("SALES_CURRENCY", paramMap.get("salesCurrency"));
|
||||
salesCurrency = CommonUtils.nullToEmpty((String)paramMap.get("salesCurrency"));
|
||||
}
|
||||
if(paramMap.get("salesExchangeRate") != null) {
|
||||
saleInfo.put("SALES_EXCHANGE_RATE", paramMap.get("salesExchangeRate"));
|
||||
}
|
||||
System.out.println("설정 후 SALES_UNIT_PRICE: " + saleInfo.get("SALES_UNIT_PRICE"));
|
||||
System.out.println("설정 후 SALES_SUPPLY_PRICE: " + saleInfo.get("SALES_SUPPLY_PRICE"));
|
||||
System.out.println("설정 후 SALES_VAT: " + saleInfo.get("SALES_VAT"));
|
||||
System.out.println("설정 후 SALES_TOTAL_AMOUNT: " + saleInfo.get("SALES_TOTAL_AMOUNT"));
|
||||
System.out.println("=== DB에서 조회한 saleInfo ===");
|
||||
System.out.println("ORDER_QUANTITY: " + saleInfo.get("ORDER_QUANTITY"));
|
||||
System.out.println("SALES_QUANTITY: " + saleInfo.get("SALES_QUANTITY"));
|
||||
System.out.println("SALES_UNIT_PRICE: " + saleInfo.get("SALES_UNIT_PRICE"));
|
||||
System.out.println("SALES_SUPPLY_PRICE: " + saleInfo.get("SALES_SUPPLY_PRICE"));
|
||||
}
|
||||
// 판매 정보가 비어있거나 금액이 0이면 수주 데이터로 채우기
|
||||
else if(saleInfo == null ||
|
||||
(saleInfo.get("SALES_SUPPLY_PRICE") == null ||
|
||||
"0".equals(String.valueOf(saleInfo.get("SALES_SUPPLY_PRICE"))) ||
|
||||
Integer.parseInt(String.valueOf(saleInfo.get("SALES_SUPPLY_PRICE"))) == 0)) {
|
||||
// orderNo로 contractObjId 조회 후 수주 데이터 가져오기
|
||||
Map<String, Object> orderDataParam = new HashMap<String, Object>();
|
||||
orderDataParam.put("orderNo", paramMap.get("orderNo"));
|
||||
Map<String, Object> orderData = salesNcollectMgmtService.getOrderDataByOrderNo(orderDataParam);
|
||||
// saleNo가 없으면 신규 판매 등록 모드 -> 수주 데이터만 조회
|
||||
else {
|
||||
System.out.println("=== 신규 판매 등록 모드 ===");
|
||||
Map<String, Object> orderDataParam = new HashMap<String, Object>();
|
||||
orderDataParam.put("orderNo", paramMap.get("orderNo"));
|
||||
saleInfo = salesNcollectMgmtService.getOrderDataByOrderNo(orderDataParam);
|
||||
|
||||
if(saleInfo != null) {
|
||||
salesCurrency = CommonUtils.nullToEmpty((String)saleInfo.get("SALES_CURRENCY"));
|
||||
// 수주 데이터의 SALES_QUANTITY를 ORDER_QUANTITY로 변경
|
||||
saleInfo.put("ORDER_QUANTITY", saleInfo.get("SALES_QUANTITY"));
|
||||
saleInfo.put("SALES_QUANTITY", ""); // 신규 등록이므로 판매수량은 비워둠
|
||||
|
||||
if(orderData != null && orderData.get("SALES_SUPPLY_PRICE") != null) {
|
||||
// 수주 데이터를 saleInfo에 병합 (기존 S/N 등은 유지)
|
||||
if(saleInfo == null) saleInfo = new HashMap<String, Object>();
|
||||
// SALES_QUANTITY는 나중에 잔량으로 계산하므로 여기서는 설정하지 않음
|
||||
// saleInfo.put("SALES_QUANTITY", orderData.get("SALES_QUANTITY")); // 제거
|
||||
saleInfo.put("ORDER_QUANTITY", orderData.get("SALES_QUANTITY")); // 주문수량은 ORDER_QUANTITY로 저장
|
||||
saleInfo.put("SALES_UNIT_PRICE", orderData.get("SALES_UNIT_PRICE"));
|
||||
saleInfo.put("SALES_SUPPLY_PRICE", orderData.get("SALES_SUPPLY_PRICE"));
|
||||
saleInfo.put("SALES_VAT", orderData.get("SALES_VAT"));
|
||||
saleInfo.put("SALES_TOTAL_AMOUNT", orderData.get("SALES_TOTAL_AMOUNT"));
|
||||
saleInfo.put("SALES_CURRENCY", orderData.get("SALES_CURRENCY"));
|
||||
saleInfo.put("SALES_CURRENCY_NAME", orderData.get("SALES_CURRENCY_NAME"));
|
||||
saleInfo.put("SALES_EXCHANGE_RATE", orderData.get("SALES_EXCHANGE_RATE"));
|
||||
if(saleInfo.get("SHIPPING_DATE") == null || "".equals(saleInfo.get("SHIPPING_DATE"))) {
|
||||
saleInfo.put("SHIPPING_DATE", orderData.get("SHIPPING_DATE"));
|
||||
}
|
||||
salesCurrency = CommonUtils.nullToEmpty((String)orderData.get("SALES_CURRENCY"));
|
||||
System.out.println("=== 수주 데이터 조회 완료 ===");
|
||||
System.out.println("ORDER_QUANTITY: " + saleInfo.get("ORDER_QUANTITY"));
|
||||
System.out.println("SALES_QUANTITY: " + saleInfo.get("SALES_QUANTITY"));
|
||||
System.out.println("SALES_UNIT_PRICE: " + saleInfo.get("SALES_UNIT_PRICE"));
|
||||
System.out.println("SALES_SUPPLY_PRICE: " + saleInfo.get("SALES_SUPPLY_PRICE"));
|
||||
}
|
||||
}
|
||||
|
||||
// 신규 등록 모드에서는 이미 수주 데이터를 조회했으므로 추가 처리 불필요
|
||||
|
||||
// 잔량 계산: ORDER_QUANTITY - 모든 분할 출하의 합계
|
||||
if(saleInfo != null && saleInfo.get("ORDER_QUANTITY") != null) {
|
||||
int orderQuantity = Integer.parseInt(String.valueOf(saleInfo.get("ORDER_QUANTITY")).split("\\.")[0]);
|
||||
|
||||
// 모든 분할 출하의 합계 조회
|
||||
int totalSoldQuantity = 0;
|
||||
try {
|
||||
Map<String, Object> totalResult = salesNcollectMgmtService.getTotalSalesQuantity(paramMap);
|
||||
System.out.println("getTotalSalesQuantity 결과: " + totalResult);
|
||||
if(totalResult != null && totalResult.get("total") != null) {
|
||||
System.out.println("total 값: " + totalResult.get("total"));
|
||||
totalSoldQuantity = Integer.parseInt(String.valueOf(totalResult.get("total")).split("\\.")[0]);
|
||||
}
|
||||
} catch(Exception e) {
|
||||
System.out.println("getTotalSalesQuantity 에러 발생!");
|
||||
e.printStackTrace();
|
||||
// 잔량은 그리드에서 이미 계산되어 있으므로 별도 계산 불필요
|
||||
// URL 파라미터로 잔량이 전달된 경우 사용
|
||||
if(paramMap.get("remainingQuantity") != null && !paramMap.get("remainingQuantity").equals("")) {
|
||||
if(saleInfo == null) saleInfo = new HashMap<String, Object>();
|
||||
saleInfo.put("REMAINING_QUANTITY", paramMap.get("remainingQuantity"));
|
||||
System.out.println("=== 그리드에서 전달받은 잔량 ===");
|
||||
System.out.println("잔량 (REMAINING_QUANTITY): " + saleInfo.get("REMAINING_QUANTITY"));
|
||||
}
|
||||
|
||||
// 판매수량은 기존 값 유지 (이미 판매 등록된 경우) 또는 비워둠 (신규 등록)
|
||||
if(saleInfo != null) {
|
||||
if(saleInfo.get("SALES_QUANTITY") == null || saleInfo.get("SALES_QUANTITY").equals(0)) {
|
||||
saleInfo.put("SALES_QUANTITY", ""); // 신규 등록: 비워둠
|
||||
}
|
||||
|
||||
int remainingQuantity = orderQuantity - totalSoldQuantity;
|
||||
|
||||
System.out.println("=== 잔량 계산 ===");
|
||||
System.out.println("주문수량 (ORDER_QUANTITY): " + orderQuantity);
|
||||
System.out.println("총 판매 수량 (모든 분할 출하 합계): " + totalSoldQuantity);
|
||||
System.out.println("잔량 (remainingQuantity): " + remainingQuantity);
|
||||
|
||||
// 잔량을 판매수량으로 설정 (정수)
|
||||
saleInfo.put("SALES_QUANTITY", remainingQuantity > 0 ? remainingQuantity : orderQuantity);
|
||||
System.out.println("설정 후 SALES_QUANTITY: " + saleInfo.get("SALES_QUANTITY"));
|
||||
}
|
||||
System.out.println("판매수량 (SALES_QUANTITY): " + saleInfo.get("SALES_QUANTITY"));
|
||||
}
|
||||
|
||||
// 프로젝트의 모든 품목 조회 (Phase 2) - 주석처리: 품목은 하나만 존재
|
||||
/*
|
||||
|
||||
@@ -889,14 +889,26 @@
|
||||
COALESCE(SR.sales_total_amount, 0) AS SALES_TOTAL_AMOUNT_KRW,
|
||||
-- 잔량 계산: 수주수량 - 모든 분할 출하의 합계
|
||||
COALESCE(T.QUANTITY::numeric, 0) - COALESCE(
|
||||
(SELECT SUM(sales_quantity)
|
||||
(SELECT SUM(
|
||||
CASE
|
||||
WHEN sales_quantity IS NULL THEN 0
|
||||
WHEN TRIM(CAST(sales_quantity AS TEXT)) = '' THEN 0
|
||||
ELSE CAST(sales_quantity AS NUMERIC)
|
||||
END
|
||||
)
|
||||
FROM sales_registration
|
||||
WHERE project_no LIKE T.PROJECT_NO || '%'),
|
||||
0
|
||||
) AS REMAINING_QUANTITY,
|
||||
-- 잔량원화총액 계산: (수주수량 - 모든 분할 출하 합계) * 판매단가
|
||||
(COALESCE(T.QUANTITY::numeric, 0) - COALESCE(
|
||||
(SELECT SUM(sales_quantity)
|
||||
(SELECT SUM(
|
||||
CASE
|
||||
WHEN sales_quantity IS NULL THEN 0
|
||||
WHEN TRIM(CAST(sales_quantity AS TEXT)) = '' THEN 0
|
||||
ELSE CAST(sales_quantity AS NUMERIC)
|
||||
END
|
||||
)
|
||||
FROM sales_registration
|
||||
WHERE project_no LIKE T.PROJECT_NO || '%'),
|
||||
0
|
||||
@@ -1630,7 +1642,13 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC
|
||||
<!-- 모든 분할 출하의 총 판매 수량 조회 -->
|
||||
<select id="getTotalSalesQuantity" parameterType="map" resultType="map">
|
||||
/* salesNcollectMgmt.getTotalSalesQuantity - project_no로 시작하는 모든 레코드의 판매 수량 합계 */
|
||||
SELECT COALESCE(SUM(NULLIF(sales_quantity, '')::NUMERIC), 0) as total
|
||||
SELECT COALESCE(SUM(
|
||||
CASE
|
||||
WHEN sales_quantity IS NULL THEN 0
|
||||
WHEN TRIM(CAST(sales_quantity AS TEXT)) = '' THEN 0
|
||||
ELSE CAST(sales_quantity AS NUMERIC)
|
||||
END
|
||||
), 0) as total
|
||||
FROM sales_registration
|
||||
WHERE project_no LIKE #{orderNo} || '%'
|
||||
</select>
|
||||
|
||||
@@ -350,74 +350,97 @@ public Map<String, Object> saveSaleRegistration(HttpServletRequest request, Map<
|
||||
PersonBean person = (PersonBean) request.getSession().getAttribute(Constants.PERSON_BEAN);
|
||||
paramMap.put("cretEmpNo", person.getUserId());
|
||||
|
||||
String projectNo = (String) paramMap.get("orderNo");
|
||||
System.out.println("=== saveSaleRegistration 시작 ===");
|
||||
System.out.println("projectNo: " + projectNo);
|
||||
System.out.println("salesQuantity: " + paramMap.get("salesQuantity"));
|
||||
|
||||
// 기존 판매 데이터가 있는지 확인
|
||||
Map<String, Object> checkParam = new HashMap<String, Object>();
|
||||
checkParam.put("orderNo", projectNo);
|
||||
Map<String, Object> existingSale = sqlSession.selectOne("salesNcollectMgmt.getSaleInfo", checkParam);
|
||||
|
||||
System.out.println("existingSale: " + (existingSale != null ? "있음" : "없음"));
|
||||
String projectNo = (String) paramMap.get("orderNo");
|
||||
String saleNo = (String) paramMap.get("saleNo");
|
||||
|
||||
// SALE_NO가 null이면 첫 판매, 있으면 분할 출하
|
||||
Object saleNoObj = existingSale != null ? existingSale.get("SALE_NO") : null;
|
||||
if(saleNoObj == null) saleNoObj = existingSale != null ? existingSale.get("sale_no") : null;
|
||||
System.out.println("=== saveSaleRegistration 시작 ===");
|
||||
System.out.println("projectNo: " + projectNo);
|
||||
System.out.println("saleNo (파라미터): " + saleNo);
|
||||
System.out.println("salesQuantity: " + paramMap.get("salesQuantity"));
|
||||
|
||||
System.out.println("SALE_NO 확인: " + saleNoObj);
|
||||
// 모든 판매를 shipment_log에 기록 (분할 출하 방식 통일)
|
||||
// 1. 해당 프로젝트의 sales_registration 레코드 확인
|
||||
Map<String, Object> checkParam = new HashMap<String, Object>();
|
||||
checkParam.put("orderNo", projectNo);
|
||||
Map<String, Object> existingSale = sqlSession.selectOne("salesNcollectMgmt.getSaleInfo", checkParam);
|
||||
|
||||
Object saleNoObj = null;
|
||||
if(existingSale != null) {
|
||||
saleNoObj = existingSale.get("SALE_NO");
|
||||
if(saleNoObj == null) saleNoObj = existingSale.get("sale_no");
|
||||
}
|
||||
|
||||
System.out.println("existingSale: " + (existingSale != null ? "있음" : "없음"));
|
||||
System.out.println("SALE_NO: " + saleNoObj);
|
||||
|
||||
// 2. sales_registration 레코드가 없으면 먼저 생성
|
||||
if(saleNoObj == null) {
|
||||
System.out.println("sales_registration 레코드 생성 (첫 판매)");
|
||||
|
||||
if(saleNoObj == null) {
|
||||
// 첫 판매 등록: sales_registration에 INSERT
|
||||
System.out.println("첫 판매 등록 - sales_registration에 INSERT");
|
||||
sqlSession.insert("salesNcollectMgmt.insertSaleRegistration", paramMap);
|
||||
} else {
|
||||
// 분할 출하: shipment_log에 INSERT
|
||||
System.out.println("분할 출하 - shipment_log에 INSERT");
|
||||
|
||||
// existingSale은 이미 대문자 키로 변환되어 있음 (CommonUtils.toUpperCaseMapKey)
|
||||
// 하지만 getSaleInfo에서는 변환 안 함 - 직접 확인
|
||||
Object orderQtyObj = existingSale.get("ORDER_QUANTITY");
|
||||
if(orderQtyObj == null) orderQtyObj = existingSale.get("order_quantity");
|
||||
|
||||
// saleNoObj는 이미 위에서 선언됨 - 재사용
|
||||
// Object saleNoObj = existingSale.get("SALE_NO"); // 중복 제거
|
||||
// if(saleNoObj == null) saleNoObj = existingSale.get("sale_no"); // 이미 위에서 처리
|
||||
|
||||
System.out.println("ORDER_QUANTITY: " + orderQtyObj);
|
||||
System.out.println("SALE_NO: " + saleNoObj);
|
||||
|
||||
if(orderQtyObj == null || saleNoObj == null) {
|
||||
System.out.println("=== existingSale 전체 내용 ===");
|
||||
for(Object key : existingSale.keySet()) {
|
||||
System.out.println(key + ": " + existingSale.get(key));
|
||||
}
|
||||
throw new RuntimeException("ORDER_QUANTITY 또는 SALE_NO가 null입니다");
|
||||
}
|
||||
|
||||
paramMap.put("targetObjid", projectNo);
|
||||
paramMap.put("originalQuantity", orderQtyObj);
|
||||
|
||||
// 잔량 계산
|
||||
int orderQuantity = Integer.parseInt(String.valueOf(orderQtyObj).split("\\.")[0]);
|
||||
int salesQuantity = Integer.parseInt(String.valueOf(paramMap.get("salesQuantity")));
|
||||
int remainingQuantity = orderQuantity - salesQuantity;
|
||||
|
||||
System.out.println("orderQuantity: " + orderQuantity);
|
||||
System.out.println("salesQuantity: " + salesQuantity);
|
||||
System.out.println("remainingQuantity: " + remainingQuantity);
|
||||
|
||||
paramMap.put("remainingQuantity", remainingQuantity);
|
||||
paramMap.put("parentSaleNo", saleNoObj);
|
||||
|
||||
System.out.println("shipment_log INSERT 직전 파라미터:");
|
||||
System.out.println(" targetObjid: " + paramMap.get("targetObjid"));
|
||||
System.out.println(" parentSaleNo: " + paramMap.get("parentSaleNo"));
|
||||
System.out.println(" cretEmpNo: " + paramMap.get("cretEmpNo"));
|
||||
|
||||
sqlSession.insert("salesNcollectMgmt.insertShipmentLog", paramMap);
|
||||
}
|
||||
// sales_registration에 기본 레코드 INSERT (수량은 0으로)
|
||||
Map<String, Object> baseRecord = new HashMap<String, Object>();
|
||||
baseRecord.put("orderNo", projectNo);
|
||||
baseRecord.put("salesQuantity", 0); // 기본 레코드는 수량 0
|
||||
baseRecord.put("salesUnitPrice", paramMap.get("salesUnitPrice"));
|
||||
baseRecord.put("salesSupplyPrice", 0);
|
||||
baseRecord.put("salesVat", 0);
|
||||
baseRecord.put("salesTotalAmount", 0);
|
||||
baseRecord.put("salesCurrency", paramMap.get("salesCurrency"));
|
||||
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("incoterms", paramMap.get("incoterms"));
|
||||
baseRecord.put("serialNo", paramMap.get("serialNo"));
|
||||
baseRecord.put("cretEmpNo", paramMap.get("cretEmpNo"));
|
||||
|
||||
sqlSession.insert("salesNcollectMgmt.insertSaleRegistration", baseRecord);
|
||||
|
||||
// 생성된 sale_no 조회
|
||||
existingSale = sqlSession.selectOne("salesNcollectMgmt.getSaleInfo", checkParam);
|
||||
saleNoObj = existingSale.get("SALE_NO");
|
||||
if(saleNoObj == null) saleNoObj = existingSale.get("sale_no");
|
||||
|
||||
System.out.println("생성된 SALE_NO: " + saleNoObj);
|
||||
}
|
||||
|
||||
// 3. shipment_log에 판매 기록 INSERT
|
||||
System.out.println("shipment_log에 판매 기록 INSERT");
|
||||
|
||||
Object orderQtyObj = existingSale.get("ORDER_QUANTITY");
|
||||
if(orderQtyObj == null) orderQtyObj = existingSale.get("order_quantity");
|
||||
|
||||
System.out.println("ORDER_QUANTITY: " + orderQtyObj);
|
||||
|
||||
if(orderQtyObj == null || saleNoObj == null) {
|
||||
System.out.println("=== existingSale 전체 내용 ===");
|
||||
for(Object key : existingSale.keySet()) {
|
||||
System.out.println(key + ": " + existingSale.get(key));
|
||||
}
|
||||
throw new RuntimeException("ORDER_QUANTITY 또는 SALE_NO가 null입니다");
|
||||
}
|
||||
|
||||
paramMap.put("targetObjid", projectNo);
|
||||
paramMap.put("originalQuantity", orderQtyObj);
|
||||
|
||||
// 잔량 계산
|
||||
int orderQuantity = Integer.parseInt(String.valueOf(orderQtyObj).split("\\.")[0]);
|
||||
int salesQuantity = Integer.parseInt(String.valueOf(paramMap.get("salesQuantity")));
|
||||
int remainingQuantity = orderQuantity - salesQuantity;
|
||||
|
||||
System.out.println("orderQuantity: " + orderQuantity);
|
||||
System.out.println("salesQuantity: " + salesQuantity);
|
||||
System.out.println("remainingQuantity: " + remainingQuantity);
|
||||
|
||||
paramMap.put("remainingQuantity", remainingQuantity);
|
||||
paramMap.put("parentSaleNo", saleNoObj);
|
||||
|
||||
System.out.println("shipment_log INSERT 직전 파라미터:");
|
||||
System.out.println(" targetObjid: " + paramMap.get("targetObjid"));
|
||||
System.out.println(" parentSaleNo: " + paramMap.get("parentSaleNo"));
|
||||
System.out.println(" cretEmpNo: " + paramMap.get("cretEmpNo"));
|
||||
|
||||
sqlSession.insert("salesNcollectMgmt.insertShipmentLog", paramMap);
|
||||
|
||||
sqlSession.commit();
|
||||
resultMap.put("result", true);
|
||||
|
||||
Reference in New Issue
Block a user