Files
wace_plm/src/com/pms/salesmgmt/controller/SalesNcollectMgmtController.java
hjjeong cb93f5e6cc 매출관리 출하건별 분리: shipment_log 기반으로 변경
- 매출관리 그리드: shipment_log 건별 1행 표시 (기존 sales_registration 합계 → 개별)
- 매출마감: 출하건(log_id) 단위로 마감 가능, 전체 마감 시 PROJECT_MGMT 상태 갱신
- 마감정보입력: shipment_log 컬럼에 저장 (기존 PROJECT_MGMT → shipment_log)
- 아마란스 전표 API: 기존 로직 유지, 데이터 소스만 shipment_log로 변경
- DB: shipment_log에 마감 관련 7개 컬럼 추가 + 기존 마감 데이터 마이그레이션
- 판매관리 영향 없음

Made-with: Cursor
2026-03-09 14:43:46 +09:00

1114 lines
40 KiB
Java

/*
* ContractMgmtController
*
* 1.0
*
* 2021.10.01
*
* Copyright ions
*/
package com.pms.salesmgmt.controller;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.pms.common.utils.CommonUtils;
import com.pms.salesmgmt.service.ContractMgmtService;
import com.pms.salesmgmt.service.SalesMgmtCommonService;
import com.pms.salesmgmt.service.SalesNcollectMgmtService;
import com.pms.service.CommonService;
/**
* <pre>
* 매출수금관리 Controller
* </pre>
* @since 2021.11.05
* @author min
* @version 1.0
*
* <pre>
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* ---------------- --------------------- --------------------------------------------------------
* 2021.11.05 민상익 최초작성
*
* </pre>
*
*/
@Controller
public class SalesNcollectMgmtController {
/** 계약관리 Service */
@Autowired
private ContractMgmtService contractMgmtService;
/** 매출수금 Service */
@Autowired
private SalesNcollectMgmtService salesNcollectMgmtService;
/** 영업관리 공통 Service */
@Autowired
private SalesMgmtCommonService salesMgmtCommonService;
@Autowired
private CommonService commonService;
/**
* <pre>
* 매출관리 메인 페이지 (메뉴 진입점)
* </pre>
* @param request
* @param paramMap - 검색 정보
* @return String
*
* <pre>
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* ---------------- --------------------- ----------------------------------------------------------
* 2025.10.15 수정 메뉴 URL 매핑 추가
*
* </pre>
*/
@RequestMapping(value = "/salesMgmt/salesMgmtList.do", method = RequestMethod.GET)
public String salesMgmtList(HttpServletRequest request
, @RequestParam Map<String, Object> paramMap) {
// /salesNcollectMgmt/contractList.do로 리다이렉트
return salesContractList(request, paramMap);
}
/**
* <pre>
* 매출관리 목록 페이지
* </pre>
* @param request
* @param paramMap - 검색 정보
* @return String
*/
@RequestMapping(value = "/revenueMgmt/revenueList.do", method = RequestMethod.GET)
public String showRevenueMgmtList(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
try {
// 코드정보
Map<String, Object> codeMap = new HashMap<String, Object>();
// 주문유형
codeMap.put("orderTypeList" , commonService.bizMakeOptionList("0000167", "" , "common.getCodeselect"));
// 제품구분
codeMap.put("productTypeList", commonService.bizMakeOptionList("0000001", "", "common.getCodeselect"));
// 국내/해외
codeMap.put("nationList", commonService.bizMakeOptionList("0001219", "", "common.getCodeselect"));
//고객사
codeMap.put("customer_cd",commonService.bizMakeOptionList("", CommonUtils.nullToEmpty((String)paramMap.get("customer_objid")),"common.getsupplyselect"));
/*
// 유/무상
codeMap.put("paymentTypeList",
salesMgmtCommonService.bizMakeOptionList("0000156", "", "salesMgmtCommon.getCodeList"));
*/
// 수주상태
codeMap.put("orderStatusList", commonService.bizMakeOptionList("0000963", "", "common.getCodeselect"));
//codeMap.put("orderStatusList",
// commonService.bizMakeOptionList("0000932", "", "common.getCodeselect"));
// 출하지시상태 - 하드코딩
StringBuilder shippingStatusOptions = new StringBuilder();
shippingStatusOptions.append("<option value='대기'>대기</option>");
shippingStatusOptions.append("<option value='출하지시'>출하지시</option>");
shippingStatusOptions.append("<option value='출하완료'>출하완료</option>");
codeMap.put("shippingStatusList", shippingStatusOptions.toString());
/*
// 출고방법
codeMap.put("shippingMethodList",
salesMgmtCommonService.bizMakeOptionList("SM", "", "salesMgmtCommon.getCodeList"));
*/
// 담당자
codeMap.put("managerList", commonService.bizMakeOptionList("", "", "common.getUserselect"));
//codeMap.put("managerList",
// salesMgmtCommonService.bizMakeOptionList("", "", "salesMgmtCommon.getSalesmanList"));
/*
// 인도조건
codeMap.put("incotermsList",
salesMgmtCommonService.bizMakeOptionList("IT", "", "salesMgmtCommon.getCodeList"));
*/
// 과세구분
codeMap.put("taxTypeList", commonService.bizMakeOptionList("0900215", "", "common.getCodeselect"));
request.setAttribute("codeMap", codeMap);
} catch (Exception e) {
e.printStackTrace();
}
return "/salesmgmt/salesMgmt/revenueMgmtList";
}
/**
* <pre>
* 신규 매출관리 목록 페이지
* </pre>
* @param request
* @param paramMap - 검색 정보
* @return String
*/
@RequestMapping(value = "/contractMgmt/salesMgmtList.do", method = RequestMethod.GET)
public String showSalesMgmtList(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
try {
// 코드정보 (기존 로직과 동일하게 설정 가능)
Map<String, Object> codeMap = new HashMap<String, Object>();
// 주문유형 - 0000167 코드 사용 (판매, 개발, 수리, 개조)
codeMap.put("orderTypeList",
commonService.bizMakeOptionList("0000167", "", "common.getCodeselect"));
// 제품구분
codeMap.put("productTypeList",
commonService.bizMakeOptionList("0000001", "", "common.getCodeselect"));
// 국내/해외
codeMap.put("nationList",
commonService.bizMakeOptionList("0001219", "", "common.getCodeselect"));
// 고객사
codeMap.put("customer_cd", commonService.bizMakeOptionList("", CommonUtils.nullToEmpty((String)paramMap.get("customer_objid")), "common.getsupplyselect"));
// 수주상태
codeMap.put("orderStatusList",
commonService.bizMakeOptionList("0000963", "", "common.getCodeselect"));
// 출하지시상태 - 하드코딩
StringBuilder shippingStatusOptions = new StringBuilder();
shippingStatusOptions.append("<option value='대기'>대기</option>");
shippingStatusOptions.append("<option value='출하지시'>출하지시</option>");
shippingStatusOptions.append("<option value='출하완료'>출하완료</option>");
codeMap.put("shippingStatusList", shippingStatusOptions.toString());
// 담당자
codeMap.put("managerList", commonService.bizMakeOptionList("", "", "common.getUserselect"));
// 판매상태 - 0900207
codeMap.put("salesStatusList", commonService.bizMakeOptionList("0900207", "", "common.getCodeselect"));
request.setAttribute("codeMap", codeMap);
} catch (Exception e) {
e.printStackTrace();
}
return "/salesmgmt/salesMgmt/salesMgmtList";
}
/**
* <pre>
* 매출관리 그리드 데이터 조회 (Tabulator용)
* </pre>
* @param request
* @param paramMap - 검색 정보
* @return Map
*/
@ResponseBody
@RequestMapping(value = "/revenueMgmt/revenueGridList.do", method = RequestMethod.POST)
public Map<String, Object> salesMgmtGridList(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
try {
commonService.selectListPagingNew("salesNcollectMgmt.getRevenueMgmtGridList", request, paramMap);
Map<String, Object> totals = salesNcollectMgmtService.getRevenueMgmtTotals(paramMap);
paramMap.put("TOTALS", totals);
} catch(Exception e) {
e.printStackTrace();
paramMap.put("RESULTLIST", new java.util.ArrayList<>());
Map<String, Object> emptyTotals = new HashMap<String, Object>();
emptyTotals.put("TOTAL_SUPPLY_PRICE", 0);
emptyTotals.put("TOTAL_VAT", 0);
emptyTotals.put("TOTAL_AMOUNT", 0);
paramMap.put("TOTALS", emptyTotals);
}
return paramMap;
}
/**
* <pre>
* 판매등록 폼 팝업
* </pre>
* @param request
* @param paramMap
* @return String
*/
@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>();
// 담당자
codeMap.put("managerList", commonService.bizMakeOptionList("", "", "common.getUserselect"));
// 기존 판매 정보 조회 후 환종(통화) 공통코드 세팅
Map<String, Object> saleInfo = null;
String salesCurrency = "";
// contractObjId가 있으면 주문서 관리에서 넘어온 것 -> 수주 데이터 조회
if(paramMap.get("contractObjId") != null && !paramMap.get("contractObjId").equals("")) {
// 수주 데이터 조회 (CONTRACT_ITEM 테이블에서)
saleInfo = salesNcollectMgmtService.getOrderDataForSale(paramMap);
salesCurrency = CommonUtils.nullToEmpty((String)saleInfo.get("SALES_CURRENCY"));
request.setAttribute("saleInfo", saleInfo);
request.setAttribute("orderInfo", saleInfo);
}
// 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("saleNo: " + paramMap.get("saleNo"));
System.out.println("remainingQuantity: " + paramMap.get("remainingQuantity"));
// saleNo가 "detail"이면 주문서 관리의 결재 정보 조회 모드
if(paramMap.get("saleNo") != null && "detail".equals(paramMap.get("saleNo"))) {
System.out.println("=== 주문서 관리 결재 정보 조회 모드 ===");
// PROJECT_MGMT에서 CONTRACT_OBJID 조회
Map<String, Object> projectInfo = salesNcollectMgmtService.getProjectInfo(paramMap);
Object contractObjId = projectInfo != null ? projectInfo.get("contract_objid") : null;
if(contractObjId == null && projectInfo != null) {
contractObjId = projectInfo.get("CONTRACT_OBJID");
}
System.out.println("CONTRACT_OBJID: " + contractObjId);
if(contractObjId != null) {
// CONTRACT_MGMT 상세 정보 조회
Map<String, Object> contractParam = new HashMap<String, Object>();
contractParam.put("objId", contractObjId);
Map<String, Object> contractInfo = commonService.selectOne("contractMgmt.getContractInfo", request, contractParam);
// PROJECT_MGMT에서 품번/품명/S/N/요청납기/고객요청사항/반납사유 조회
if(projectInfo != null) {
// 품번
if(contractInfo.get("PART_NO") == null || "".equals(contractInfo.get("PART_NO"))) {
contractInfo.put("PART_NO", projectInfo.get("part_no") != null ? projectInfo.get("part_no") : projectInfo.get("PART_NO"));
}
// 품명
if(contractInfo.get("PART_NAME") == null || "".equals(contractInfo.get("PART_NAME"))) {
contractInfo.put("PART_NAME", projectInfo.get("part_name") != null ? projectInfo.get("part_name") : projectInfo.get("PART_NAME"));
}
// S/N
Object serialNo = projectInfo.get("serial_no") != null ? projectInfo.get("serial_no") : projectInfo.get("SERIAL_NO");
contractInfo.put("SERIAL_NO", serialNo != null ? serialNo : "-");
// 요청납기
Object reqDelDate = projectInfo.get("req_del_date") != null ? projectInfo.get("req_del_date") : projectInfo.get("REQ_DEL_DATE");
contractInfo.put("REQ_DEL_DATE", reqDelDate != null ? reqDelDate : "-");
// 고객요청사항
Object customerRequest = projectInfo.get("customer_request") != null ? projectInfo.get("customer_request") : projectInfo.get("CUSTOMER_REQUEST");
contractInfo.put("CUSTOMER_REQUEST", customerRequest != null ? customerRequest : "-");
// 반납사유
Object returnReason = projectInfo.get("return_reason") != null ? projectInfo.get("return_reason") : projectInfo.get("RETURN_REASON");
contractInfo.put("RETURN_REASON", returnReason != null ? returnReason : "-");
}
// 결재 라인 정보 조회
Map<String, Object> approvalParam = new HashMap<String, Object>();
approvalParam.put("objId", contractObjId);
List<Map<String, Object>> approvalLine = commonService.selectList("approval.getApprovalLine", request, approvalParam);
request.setAttribute("info", contractInfo);
request.setAttribute("approvalLine", approvalLine);
System.out.println("=== 주문서 관리 데이터 조회 완료 ===");
System.out.println("CATEGORY_NAME: " + contractInfo.get("CATEGORY_NAME"));
System.out.println("PRODUCT_NAME: " + contractInfo.get("PRODUCT_NAME"));
System.out.println("PART_NO: " + contractInfo.get("PART_NO"));
System.out.println("PART_NAME: " + contractInfo.get("PART_NAME"));
System.out.println("결재 라인 개수: " + (approvalLine != null ? approvalLine.size() : 0));
// 별도의 JSP로 이동
return "/salesmgmt/salesMgmt/projectDetailView";
}
}
// logId가 있으면 shipment_log 수정 모드
else if(paramMap.get("logId") != null && !paramMap.get("logId").equals("")) {
System.out.println("=== shipment_log 수정 모드 (logId: " + paramMap.get("logId") + ") ===");
saleInfo = salesNcollectMgmtService.getShipmentLogById((String) paramMap.get("logId"));
if(saleInfo != null) {
salesCurrency = CommonUtils.nullToEmpty((String)saleInfo.get("SALES_CURRENCY"));
request.setAttribute("logId", paramMap.get("logId"));
System.out.println("=== shipment_log 조회 완료 ===");
System.out.println("LOG_ID: " + paramMap.get("logId"));
System.out.println("SALES_QUANTITY: " + saleInfo.get("SALES_QUANTITY"));
System.out.println("SHIPPING_DATE: " + saleInfo.get("SHIPPING_DATE"));
System.out.println("SERIAL_NO: " + saleInfo.get("SERIAL_NO"));
}
}
// saleNo가 있지만 "detail"이 아니면 판매등록 수정 모드 - getSaleInfo로 S/N 포함 조회
else if(paramMap.get("saleNo") != null && !paramMap.get("saleNo").equals("")) {
System.out.println("=== 판매등록 수정 모드 ===");
Map<String, Object> saleInfoParam = new HashMap<String, Object>();
saleInfoParam.put("orderNo", paramMap.get("orderNo"));
saleInfoParam.put("saleNo", paramMap.get("saleNo"));
saleInfo = salesNcollectMgmtService.getSaleInfo(saleInfoParam);
if(saleInfo != null) {
salesCurrency = CommonUtils.nullToEmpty((String)saleInfo.get("SALES_CURRENCY"));
System.out.println("=== 판매등록 수정 모드 조회 완료 ===");
System.out.println("SALE_NO: " + saleInfo.get("SALE_NO"));
System.out.println("ORDER_QUANTITY: " + saleInfo.get("ORDER_QUANTITY"));
System.out.println("SALES_QUANTITY: " + saleInfo.get("SALES_QUANTITY"));
System.out.println("SERIAL_NO: " + saleInfo.get("SERIAL_NO"));
System.out.println("MANAGER: " + saleInfo.get("MANAGER"));
System.out.println("INCOTERMS: " + saleInfo.get("INCOTERMS"));
System.out.println("SHIPPING_METHOD: " + saleInfo.get("SHIPPING_METHOD"));
}
}
// 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", ""); // 신규 등록이므로 판매수량은 비워둠
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"));
}
}
// 신규 등록 모드에서는 이미 수주 데이터를 조회했으므로 추가 처리 불필요
// 잔량은 그리드에서 이미 계산되어 있으므로 별도 계산 불필요
// 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", ""); // 신규 등록: 비워둠
}
System.out.println("판매수량 (SALES_QUANTITY): " + saleInfo.get("SALES_QUANTITY"));
}
// 프로젝트의 모든 품목 조회 (Phase 2) - 주석처리: 품목은 하나만 존재
/*
List<Map<String, Object>> projectItems = null;
if(paramMap.get("orderNo") != null && !paramMap.get("orderNo").equals("")) {
projectItems = salesNcollectMgmtService.getProjectItems(paramMap);
System.out.println("=== 프로젝트 품목 조회 ===");
System.out.println("품목 개수: " + (projectItems != null ? projectItems.size() : 0));
request.setAttribute("projectItems", projectItems);
}
*/
request.setAttribute("saleInfo", saleInfo);
// orderInfo로 견적 정보 전달 (saleInfo가 이미 모든 필요한 정보를 포함)
request.setAttribute("orderInfo", saleInfo);
}
// 수정 모드: saleInfo에서 담당자 선택값 반영
if(saleInfo != null && saleInfo.get("MANAGER") != null) {
String selectedManager = saleInfo.get("MANAGER").toString();
System.out.println("=== 담당자 선택값 반영 ===");
System.out.println("selectedManager: [" + selectedManager + "]");
codeMap.put("managerList", commonService.bizMakeOptionList("", selectedManager, "common.getUserselect"));
} else {
System.out.println("=== 담당자 선택값 없음 ===");
System.out.println("saleInfo null: " + (saleInfo == null));
if(saleInfo != null) {
System.out.println("MANAGER value: " + saleInfo.get("MANAGER"));
}
}
// 환종(통화) - 공통코드 0001533
codeMap.put("salesCurrency",
commonService.bizMakeOptionList("0001533", salesCurrency, "common.getCodeselect"));
request.setAttribute("codeMap", codeMap);
} catch (Exception e) {
e.printStackTrace();
}
return "/salesmgmt/salesMgmt/salesRegForm";
}
@RequestMapping(value = "/salesMgmt/salesMgmtGridList.do", method = RequestMethod.POST)
@ResponseBody
public Map<String, Object> getSalesMgmtGridList(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
// 디버깅: 검색 파라미터 로그 출력
System.out.println("=== 판매관리 조회 파라미터 (백엔드) ===");
System.out.println("search_partObjId: [" + paramMap.get("search_partObjId") + "]");
System.out.println("search_partNo: [" + paramMap.get("search_partNo") + "]");
System.out.println("search_partName: [" + paramMap.get("search_partName") + "]");
System.out.println("orderType: [" + paramMap.get("orderType") + "]");
System.out.println("poNo: [" + paramMap.get("poNo") + "]");
System.out.println("serialNo: [" + paramMap.get("serialNo") + "]");
// 판매상태 멀티 선택 처리 (배열 → 리스트 변환)
String[] salesStatusArr = request.getParameterValues("salesStatus");
System.out.println("=== 판매상태 파라미터 디버깅 ===");
System.out.println("salesStatusArr: " + (salesStatusArr != null ? java.util.Arrays.toString(salesStatusArr) : "null"));
if(salesStatusArr != null && salesStatusArr.length > 0) {
List<String> salesStatusList = new ArrayList<String>();
for(String status : salesStatusArr) {
System.out.println(" status 값: [" + status + "]");
if(status != null && !status.isEmpty()) {
salesStatusList.add(status);
}
}
System.out.println("salesStatusList: " + salesStatusList);
if(!salesStatusList.isEmpty()) {
paramMap.put("salesStatus", salesStatusList);
} else {
paramMap.remove("salesStatus");
}
} else {
paramMap.remove("salesStatus");
}
// 품명/품번 파라미터가 비어있으면 경고
if((paramMap.get("search_partNo") == null || paramMap.get("search_partNo").toString().isEmpty()) &&
(paramMap.get("search_partName") == null || paramMap.get("search_partName").toString().isEmpty())) {
System.out.println("⚠️ 품번/품명 파라미터가 비어있습니다!");
}
// commonService.selectListPagingNew를 사용하여 페이지네이션 HTML 생성
commonService.selectListPagingNew("salesNcollectMgmt.getSalesMgmtGridList", request, paramMap);
// 디버깅: 조회 결과 개수 출력
List<?> resultList = (List<?>) paramMap.get("RESULTLIST");
System.out.println("✅ 조회 결과 개수: " + (resultList != null ? resultList.size() : 0));
return paramMap;
}
@RequestMapping(value = "/salesMgmt/saveSales.do", method = RequestMethod.POST)
@ResponseBody
public Map<String, Object> saveSales(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
Map<String, Object> resultMap = new HashMap<String, Object>();
try {
resultMap = salesNcollectMgmtService.saveSaleRegistration(request, paramMap);
} catch (Exception e) {
resultMap.put("result", false);
resultMap.put("msg", "저장 중 오류가 발생했습니다.");
e.printStackTrace();
}
return resultMap;
}
/**
* <pre>
* 분할출하 팝업 폼
* </pre>
* @param request
* @param paramMap
* @return String
*/
@RequestMapping(value = "/salesMgmt/splitShipmentForm.do", method = RequestMethod.GET)
public String showSplitShipmentForm(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
try {
Map<String, Object> codeMap = new HashMap<String, Object>();
// 담당자
codeMap.put("managerList",
salesMgmtCommonService.bizMakeOptionList("", "", "salesMgmtCommon.getSalesmanList"));
// 프로젝트 정보 조회
String projectNo = CommonUtils.checkNull(paramMap.get("projectNo"));
if(!"".equals(projectNo)) {
Map<String, Object> projectInfo = salesNcollectMgmtService.getProjectInfoByProjectNo(projectNo);
if(projectInfo != null) {
request.setAttribute("info", projectInfo);
}
}
request.setAttribute("codeMap", codeMap);
} catch (Exception e) {
e.printStackTrace();
}
return "/salesmgmt/salesMgmt/splitShipmentForm";
}
/**
* <pre>
* 분할출하 저장 처리
* </pre>
* @param request
* @param paramMap - 분할출하 정보
* @return Map
*/
@RequestMapping(value = "/salesMgmt/saveSplitShipment.do", method = RequestMethod.POST)
@ResponseBody
public Map<String, Object> saveSplitShipment(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
Map<String, Object> resultMap = new HashMap<String, Object>();
try {
resultMap = salesNcollectMgmtService.splitShipment(request, paramMap);
} catch (Exception e) {
resultMap.put("result", false);
resultMap.put("msg", "분할출하 처리 중 오류가 발생했습니다.");
e.printStackTrace();
}
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";
}
/**
* 거래명세서 폼 표시
*/
@RequestMapping(value = "/salesMgmt/transactionStatementForm.do", method = RequestMethod.GET)
public String showTransactionStatementForm(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
return "/salesmgmt/salesMgmt/transactionStatementForm";
}
/**
* 거래명세서 데이터 조회
*/
@RequestMapping(value = "/salesMgmt/getTransactionStatementData.do", method = RequestMethod.POST)
@ResponseBody
public Map<String, Object> getTransactionStatementData(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
Map<String, Object> resultMap = new HashMap<String, Object>();
try {
String projectNos = (String) paramMap.get("projectNos");
if(projectNos == null || projectNos.isEmpty()) {
resultMap.put("success", false);
resultMap.put("message", "프로젝트 번호가 없습니다.");
return resultMap;
}
// 거래명세서 데이터 조회
Map<String, Object> statementData = salesNcollectMgmtService.getTransactionStatementData(paramMap);
resultMap.put("success", true);
resultMap.putAll(statementData);
} catch (Exception e) {
e.printStackTrace();
resultMap.put("success", false);
resultMap.put("message", "데이터 조회 중 오류가 발생했습니다: " + e.getMessage());
}
return resultMap;
}
/**
* 거래명세서 저장 (차수 관리 없음)
*/
@RequestMapping(value = "/salesMgmt/saveTransactionStatement.do", method = RequestMethod.POST)
@ResponseBody
public Map<String, Object> saveTransactionStatement(HttpServletRequest request, @org.springframework.web.bind.annotation.RequestBody Map<String, Object> paramMap) {
Map<String, Object> resultMap = new HashMap<String, Object>();
try {
System.out.println("=== 거래명세서 저장 Controller ===");
System.out.println("프로젝트 번호: " + paramMap.get("projectNos"));
System.out.println("납품일: " + paramMap.get("deliveryDate"));
System.out.println("비고: " + paramMap.get("noteContent"));
System.out.println("품목 개수: " + ((List)paramMap.get("items")).size());
// Service 호출하여 DB에 저장
resultMap = salesNcollectMgmtService.saveTransactionStatement(paramMap);
System.out.println("저장 결과: " + resultMap.get("success"));
} catch (Exception e) {
e.printStackTrace();
resultMap.put("success", false);
resultMap.put("message", "저장 중 오류가 발생했습니다: " + e.getMessage());
}
return resultMap;
}
/**
* <pre>
* 계약관리 목록 조회
* </pre>
* @param request
* @param paramMap - 계약관리 검색 정보
* @return String
*
* <pre>
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* ---------------- --------------------- ----------------------------------------------------------
* 2021.11.05 민상익 최초작성
*
* </pre>
*/
@RequestMapping(value = "/salesNcollectMgmt/contractList.do", method = RequestMethod.GET)
public String salesContractList(HttpServletRequest request
, @RequestParam Map<String, Object> paramMap) {
String orderNo = request.getParameter("orderNo");
try {
List<Map<String,Object>> list = contractMgmtService.getContractMgmtAll(request, paramMap);
if (StringUtils.isBlank(orderNo) && list != null && !list.isEmpty()) {
Map<String,Object> dataMap = list.get(0);
orderNo = (String) dataMap.get("ORDERNO");
}
request.setAttribute("LIST", list);
request.setAttribute("orderNo", orderNo);
} catch(Exception e) {
e.printStackTrace();
}
return "/salesmgmt/salesNcollectMgmt/contractMgmtList";
}
/**
* <pre>
* 매출등록 목록 조회
* </pre>
* @param request
* @param paramMap - 계약관리 검색 정보
* @return String
*
* <pre>
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* ---------------- --------------------- ----------------------------------------------------------
* 2021.11.05 민상익 최초작성
*
* </pre>
*/
@RequestMapping(value = "/salesNcollectMgmt/sales.do", method = RequestMethod.GET)
public String sales(HttpServletRequest request
, @RequestParam Map<String, Object> paramMap) {
try {
List<Map<String,Object>> list = salesNcollectMgmtService.getSalseAllByOrderNo(request, paramMap);
request.setAttribute("LIST", list);
} catch(Exception e) {
e.printStackTrace();
}
return "/salesmgmt/salesNcollectMgmt/salesMgmt";
}
/**
* <pre>
* 매출등록 상세 조회
* </pre>
* @param request
* @param paramMap - 매출등록 검색 정보
* @return String
*
* <pre>
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* ---------------- --------------------- ----------------------------------------------------------
* 2021.11.05 민상익 최초작성
*
* </pre>
*/
@RequestMapping("/salesNcollectMgmt/salesMgmtFormPopup.do")
public String salesMgmt(HttpServletRequest request
, @RequestParam Map<String, Object> paramMap) {
String saleNo = CommonUtils.checkNull(paramMap.get("saleNo"));
Map<String, Object> info = null;
try {
if(StringUtils.isNotBlank(saleNo)) {
// 매출관리 조회
info = salesNcollectMgmtService.getSalesMgmt(paramMap);
} else {
info = new HashMap<String, Object>();
}
// 계약관리 조회
Map<String, Object> contractInfo = contractMgmtService.getContractMgmt(paramMap);
if (info == null || !info.containsKey("SALENO")) {
String custCd = (String) contractInfo.get("CUSTCD"); // 고객코드
String custNm = (String) contractInfo.get("CUSTNM"); // 고객명
int goodsQty = (Integer) contractInfo.get("GOODSQTY"); // 계약수량
long salePrice = Integer.parseInt(String.valueOf((BigDecimal) contractInfo.get("SALEPRICE"))); // 계약단가
long saleAmt = Integer.parseInt(String.valueOf((BigDecimal) contractInfo.get("SALEAMT"))); // 계약금액
long vatAmt = Integer.parseInt(String.valueOf((BigDecimal) contractInfo.get("VATAMT"))); // 부가세
info.put("CUSTCD", custCd); // 고객코드
info.put("CUSTNM", custNm); // 고객명
info.put("SUPPLYQTY", goodsQty); // 계약수량
info.put("SUPPLYPRICE", salePrice); // 계약단가
info.put("SUPPLYAMT", saleAmt); // 계약금액
info.put("SUPPLYVAT", vatAmt); // 부가세
}
// 코드정보
Map<String, Object> codeMap = new HashMap<String, Object>();
//과세 유형
codeMap.put("taxTypeList",
salesMgmtCommonService.bizMakeOptionList("DB", (String) info.get("TAXTYPE"), "salesMgmtCommon.getCodeList"));
request.setAttribute("info", info);
request.setAttribute("codeMap", codeMap);
request.setAttribute("contractInfo", contractInfo);
} catch(Exception e) {
e.printStackTrace();
}
return "/salesmgmt/salesNcollectMgmt/salesFormPopup";
}
/**
* 매출관리 저장
* @param request
* @param paramMap - 고객관리 정보
* @return
*/
@ResponseBody
@RequestMapping("/salesNcollectMgmt/saveSalesMgmt.do")
public Map<String, Object> saveSalesMgmt(HttpServletRequest request
, @RequestParam Map<String, Object> paramMap) {
Map<String, Object> resultMap = new HashMap<String, Object>();
try {
resultMap.put("RESULT", salesNcollectMgmtService.saveSalesMgmt(request, paramMap));
} catch(Exception e) {
e.printStackTrace();
}
return resultMap;
}
/**
* 매출관리 삭제
* @param request
* @param paramMap - 고객관리 정보
* @return
*/
@ResponseBody
@RequestMapping("/salesNcollectMgmt/deleteSalesMgmt.do")
public Map<String, Object> deleteSalesMgmt(HttpServletRequest request
, @RequestParam Map<String, Object> paramMap) {
Map<String, Object> resultMap = new HashMap<String, Object>();
try {
resultMap.put("RESULT", salesNcollectMgmtService.deleteSalesMgmt(request, paramMap));
} catch(Exception e) {
e.printStackTrace();
}
return resultMap;
}
/********************************************************************************************************************************
********************************************************************************************************************************
수금관리 시작
********************************************************************************************************************************
********************************************************************************************************************************/
/**
* <pre>
* 수금 목록 조회
* </pre>
* @param request
* @param paramMap -
* @return String
*
* <pre>
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* ---------------- --------------------- ----------------------------------------------------------
* 2021.11.05 민상익 최초작성
*
* </pre>
*/
@RequestMapping(value = "/salesNcollectMgmt/collect.do", method = RequestMethod.GET)
public String collect(HttpServletRequest request
, @RequestParam Map<String, Object> paramMap) {
try {
List<Map<String,Object>> list = salesNcollectMgmtService.getCollectAllByOrderNo(request, paramMap);
request.setAttribute("LIST", list);
} catch(Exception e) {
e.printStackTrace();
}
return "/salesmgmt/salesNcollectMgmt/collectMgmt";
}
/**
* <pre>
* 수금 상세 조회
* </pre>
* @param session
* @param request
* @param paramMap - 매출 검색 정보
* @return String
*
* <pre>
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* ---------------- --------------------- ----------------------------------------------------------
* 2021.11.05 민상익 최초작성
*
* </pre>
*/
@RequestMapping("/salesNcollectMgmt/collectMgmtFormPopup.do")
public String collectMgmt(HttpSession session
, HttpServletRequest request
, @RequestParam Map<String, Object> paramMap) {
String saleNo = CommonUtils.checkNull(paramMap.get("rcptNo"));
Map<String, Object> info = null;
try {
System.out.println("paramMap##################### " + paramMap);
if(StringUtils.isNotBlank(saleNo)) {
// 수금관리 조회
info = salesNcollectMgmtService.getCollectMgmt(paramMap);
} else {
info = new HashMap<String, Object>();
}
// 계약관리 조회
Map<String, Object> contractInfo = contractMgmtService.getContractMgmt(paramMap);
if (info == null || !info.containsKey("RCPTNO")) {
String custCd = (String) contractInfo.get("CUSTCD"); // 고객코드
long saleAmt = Integer.parseInt(String.valueOf((BigDecimal) contractInfo.get("SALEAMT"))); // 계약금액
info.put("CUSTCD", custCd); // 고객코드
info.put("RCPTAMT", saleAmt); // 수금금액
}
// 코드정보
Map<String, Object> codeMap = new HashMap<String, Object>();
System.out.println("info##################### " + info);
//고객
codeMap.put("customerList",
salesMgmtCommonService.bizMakeOptionList("", (String) info.get("CUSTCD"), "salesMgmtCommon.getCustomerList"));
//계정과목
codeMap.put("accountTypeList",
salesMgmtCommonService.bizMakeOptionList("AK", (String) info.get("ACCOUNTTYPE"), "salesMgmtCommon.getCodeList"));
//자금구분
codeMap.put("fundsTypeList",
salesMgmtCommonService.bizMakeOptionList("AM", (String) info.get("FUNDSTYPE"), "salesMgmtCommon.getCodeList"));
//자금 유형
codeMap.put("aoTypeList",
salesMgmtCommonService.bizMakeOptionList("AO", (String) info.get("AOTYPE"), "salesMgmtCommon.getCodeList"));
/* // 영업부서
codeMap.put("deptList",
salesMgmtCommonService.bizMakeOptionList("", (String) info.get("DEPTCD"), "salesMgmtCommon.getDeptList"));
// 영업담당자
codeMap.put("SalesmanList",
salesMgmtCommonService.bizMakeOptionList("", (String) info.get("SALESMAN"), "salesMgmtCommon.getSalesmanList"));
// 고객지역
codeMap.put("areaList",
salesMgmtCommonService.bizMakeOptionList("AR", (String) info.get("CUSTAREA"), "salesMgmtCommon.getCodeList"));
*/
//하단 그리드를 위한 수금 목록 조회
List<Map<String,Object>> list = salesNcollectMgmtService.getCollectAllByOrderNo(request, paramMap);
request.setAttribute("LIST", list);
request.setAttribute("info", info);
request.setAttribute("codeMap", codeMap);
} catch(Exception e) {
e.printStackTrace();
}
return "/salesmgmt/salesNcollectMgmt/collectFormPopup";
}
/**
* <pre>
* 수금관리 저장
* </pre>
* @param request
* @param paramMap -
* @return String
*
* <pre>
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* ---------------- --------------------- ----------------------------------------------------------
* 2021.11.05 민상익 최초작성
*
* </pre>
*/
@ResponseBody
@RequestMapping("/salesNcollectMgmt/saveCollectMgmt.do")
public Map<String, Object> saveCollectMgmt(HttpServletRequest request
, @RequestParam Map<String, Object> paramMap) {
Map<String, Object> resultMap = new HashMap<String, Object>();
System.out.println("ctr::paramMap##################### " + paramMap);
try {
resultMap.put("RESULT", salesNcollectMgmtService.saveCollectMgmt(request, paramMap));
} catch(Exception e) {
e.printStackTrace();
}
return resultMap;
}
/**
* 수금관리 삭제
* @param request
* @param paramMap - 고객관리 정보
* @return
*/
@ResponseBody
@RequestMapping("/salesNcollectMgmt/deleteCollectMgmt.do")
public Map<String, Object> deleteCollectMgmt(HttpServletRequest request
, @RequestParam Map<String, Object> paramMap) {
Map<String, Object> resultMap = new HashMap<String, Object>();
try {
resultMap.put("RESULT", salesNcollectMgmtService.deleteCollectMgmt(request, paramMap));
} catch(Exception e) {
e.printStackTrace();
}
return resultMap;
}
/**
* 매출마감 처리
* @param request
* @param paramMap
* @return
*/
@ResponseBody
@RequestMapping("/salesNcollectMgmt/salesDeadlineConfirm.do")
public Map salesDeadlineConfirm(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
Map resultMap = salesNcollectMgmtService.salesDeadlineConfirm(request, paramMap);
return resultMap;
}
@RequestMapping(value = "/salesMgmt/getAllSerialNumbers.do", method = RequestMethod.POST)
@ResponseBody
public Map<String, Object> getAllSerialNumbers(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
Map<String, Object> resultMap = new HashMap<String, Object>();
try {
List<String> serialNumbers = salesNcollectMgmtService.getAllSerialNumbers(paramMap);
resultMap.put("success", true);
resultMap.put("serialNumbers", serialNumbers);
} catch(Exception e) {
e.printStackTrace();
resultMap.put("success", false);
resultMap.put("message", e.getMessage());
}
return resultMap;
}
/**
* 마감정보 조회
*/
@ResponseBody
@RequestMapping(value = "/revenueMgmt/getDeadlineInfo.do", method = RequestMethod.POST)
public Map<String, Object> getDeadlineInfo(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
return salesNcollectMgmtService.getDeadlineInfo(paramMap);
}
/**
* 마감정보 저장
*/
@ResponseBody
@RequestMapping(value = "/revenueMgmt/saveDeadlineInfo.do", method = RequestMethod.POST)
public Map saveDeadlineInfo(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
return salesNcollectMgmtService.saveDeadlineInfo(request, paramMap);
}
@RequestMapping(value = "/salesMgmt/getSavedTransactionStatement.do", method = RequestMethod.POST)
@ResponseBody
public Map<String, Object> getSavedTransactionStatement(HttpServletRequest request, @RequestParam Map<String, Object> paramMap) {
Map<String, Object> resultMap = new HashMap<String, Object>();
try {
List<Map<String, Object>> savedData = salesNcollectMgmtService.getSavedTransactionStatement(paramMap);
resultMap.put("success", true);
resultMap.put("data", savedData);
} catch(Exception e) {
e.printStackTrace();
resultMap.put("success", false);
resultMap.put("message", e.getMessage());
}
return resultMap;
}
}