분할 출하 기능 완료 - 잔량 계산 수정

This commit is contained in:
leeheejin
2025-11-12 15:40:51 +09:00
parent c366b71174
commit 6b3a2c1cf1
13 changed files with 1430 additions and 191 deletions

View File

@@ -282,11 +282,47 @@ public class SalesNcollectMgmtController {
}
// 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"));
saleInfo = salesNcollectMgmtService.getSaleInfo(paramMap);
salesCurrency = CommonUtils.nullToEmpty((String)saleInfo.get("SALES_CURRENCY"));
System.out.println("=== DB에서 조회한 saleInfo ===");
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"));
// 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"));
}
// 판매 정보가 비어있거나 금액이 0이면 수주 데이터로 채우기
if(saleInfo == null ||
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)) {
@@ -310,13 +346,40 @@ public class SalesNcollectMgmtController {
saleInfo.put("SHIPPING_DATE", orderData.get("SHIPPING_DATE"));
}
salesCurrency = CommonUtils.nullToEmpty((String)orderData.get("SALES_CURRENCY"));
}
}
// 잔량 계산: 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);
if(totalResult != null && totalResult.get("total") != null) {
totalSoldQuantity = Integer.parseInt(String.valueOf(totalResult.get("total")).split("\\.")[0]);
}
} catch(Exception e) {
e.printStackTrace();
}
request.setAttribute("saleInfo", saleInfo);
int remainingQuantity = orderQuantity - totalSoldQuantity;
// orderInfo로 견적 정보 전달 (saleInfo가 이미 모든 필요한 정보를 포함)
request.setAttribute("orderInfo", saleInfo);
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"));
}
request.setAttribute("saleInfo", saleInfo);
// orderInfo로 견적 정보 전달 (saleInfo가 이미 모든 필요한 정보를 포함)
request.setAttribute("orderInfo", saleInfo);
}
// 환종(통화) - 공통코드 0001533
@@ -418,6 +481,27 @@ public class SalesNcollectMgmtController {
return resultMap;
}
/**
* <pre>
* 출하일 상세 내역 팝업
* </pre>
* @param request
* @param paramMap - projectNo
* @return String
*/
@RequestMapping(value = "/salesMgmt/shippingDetailPopup.do", method = RequestMethod.GET)
public String showShippingDetailPopup(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
try {
String projectNo = (String) paramMap.get("projectNo");
List<Map<String, Object>> shippingList = salesNcollectMgmtService.getShippingDetailList(projectNo);
request.setAttribute("shippingList", shippingList);
request.setAttribute("projectNo", projectNo);
} catch (Exception e) {
e.printStackTrace();
}
return "/salesmgmt/salesMgmt/shippingDetailPopup";
}
/**
* <pre>
* 계약관리 목록 조회