/* * 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; /** *
 * 매출수금관리 Controller
 * 
* @since 2021.11.05 * @author min * @version 1.0 * *
 * << 개정 이력 >>
 * 
 * 수정일 					수정자							 수정내용
 * ----------------		---------------------			--------------------------------------------------------
 * 2021.11.05			민상익							최초작성
 * 
 * 
* */ @Controller public class SalesNcollectMgmtController { /** 계약관리 Service */ @Autowired private ContractMgmtService contractMgmtService; /** 매출수금 Service */ @Autowired private SalesNcollectMgmtService salesNcollectMgmtService; /** 영업관리 공통 Service */ @Autowired private SalesMgmtCommonService salesMgmtCommonService; @Autowired private CommonService commonService; /** *
	 * 매출관리 메인 페이지 (메뉴 진입점)
	 * 
* @param request * @param paramMap - 검색 정보 * @return String * *
	 * << 개정 이력 >>
	 * 
	 * 수정일					수정자							수정내용
	 * ----------------		---------------------			----------------------------------------------------------
	 * 2025.10.15			수정							메뉴 URL 매핑 추가
	 * 
	 * 
*/ @RequestMapping(value = "/salesMgmt/salesMgmtList.do", method = RequestMethod.GET) public String salesMgmtList(HttpServletRequest request , @RequestParam Map paramMap) { // /salesNcollectMgmt/contractList.do로 리다이렉트 return salesContractList(request, paramMap); } /** *
	 * 매출관리 목록 페이지
	 * 
* @param request * @param paramMap - 검색 정보 * @return String */ @RequestMapping(value = "/revenueMgmt/revenueList.do", method = RequestMethod.GET) public String showRevenueMgmtList(HttpServletRequest request, @RequestParam Map paramMap) { try { // 코드정보 Map codeMap = new HashMap(); // 주문유형 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(""); shippingStatusOptions.append(""); shippingStatusOptions.append(""); 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"; } /** *
	 * 신규 매출관리 목록 페이지
	 * 
* @param request * @param paramMap - 검색 정보 * @return String */ @RequestMapping(value = "/contractMgmt/salesMgmtList.do", method = RequestMethod.GET) public String showSalesMgmtList(HttpServletRequest request, @RequestParam Map paramMap) { try { // 코드정보 (기존 로직과 동일하게 설정 가능) Map codeMap = new HashMap(); // 주문유형 - 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(""); shippingStatusOptions.append(""); shippingStatusOptions.append(""); 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"; } /** *
	 * 매출관리 그리드 데이터 조회 (Tabulator용)
	 * 
* @param request * @param paramMap - 검색 정보 * @return Map */ @ResponseBody @RequestMapping(value = "/revenueMgmt/revenueGridList.do", method = RequestMethod.POST) public Map salesMgmtGridList(HttpServletRequest request, @RequestParam Map paramMap) { try { commonService.selectListPagingNew("salesNcollectMgmt.getRevenueMgmtGridList", request, paramMap); Map totals = salesNcollectMgmtService.getRevenueMgmtTotals(paramMap); paramMap.put("TOTALS", totals); } catch(Exception e) { e.printStackTrace(); paramMap.put("RESULTLIST", new java.util.ArrayList<>()); Map emptyTotals = new HashMap(); emptyTotals.put("TOTAL_SUPPLY_PRICE", 0); emptyTotals.put("TOTAL_VAT", 0); emptyTotals.put("TOTAL_AMOUNT", 0); paramMap.put("TOTALS", emptyTotals); } return paramMap; } /** *
	 * 판매등록 폼 팝업
	 * 
* @param request * @param paramMap * @return String */ @RequestMapping(value = "/salesMgmt/salesRegForm.do", method = RequestMethod.GET) public String showSalesRegForm(HttpServletRequest request, @RequestParam Map 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 codeMap = new HashMap(); // 담당자 codeMap.put("managerList", commonService.bizMakeOptionList("", "", "common.getUserselect")); // 기존 판매 정보 조회 후 환종(통화) 공통코드 세팅 Map 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 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 contractParam = new HashMap(); contractParam.put("objId", contractObjId); Map 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 approvalParam = new HashMap(); approvalParam.put("objId", contractObjId); List> 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 saleInfoParam = new HashMap(); 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 orderDataParam = new HashMap(); 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(); 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> 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 getSalesMgmtGridList(HttpServletRequest request, @RequestParam Map 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 salesStatusList = new ArrayList(); 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 saveSales(HttpServletRequest request, @RequestParam Map paramMap) { Map resultMap = new HashMap(); try { resultMap = salesNcollectMgmtService.saveSaleRegistration(request, paramMap); } catch (Exception e) { resultMap.put("result", false); resultMap.put("msg", "저장 중 오류가 발생했습니다."); e.printStackTrace(); } return resultMap; } /** *
	 * 분할출하 팝업 폼
	 * 
* @param request * @param paramMap * @return String */ @RequestMapping(value = "/salesMgmt/splitShipmentForm.do", method = RequestMethod.GET) public String showSplitShipmentForm(HttpServletRequest request, @RequestParam Map paramMap) { try { Map codeMap = new HashMap(); // 담당자 codeMap.put("managerList", salesMgmtCommonService.bizMakeOptionList("", "", "salesMgmtCommon.getSalesmanList")); // 프로젝트 정보 조회 String projectNo = CommonUtils.checkNull(paramMap.get("projectNo")); if(!"".equals(projectNo)) { Map projectInfo = salesNcollectMgmtService.getProjectInfoByProjectNo(projectNo); if(projectInfo != null) { request.setAttribute("info", projectInfo); } } request.setAttribute("codeMap", codeMap); } catch (Exception e) { e.printStackTrace(); } return "/salesmgmt/salesMgmt/splitShipmentForm"; } /** *
	 * 분할출하 저장 처리
	 * 
* @param request * @param paramMap - 분할출하 정보 * @return Map */ @RequestMapping(value = "/salesMgmt/saveSplitShipment.do", method = RequestMethod.POST) @ResponseBody public Map saveSplitShipment(HttpServletRequest request, @RequestParam Map paramMap) { Map resultMap = new HashMap(); try { resultMap = salesNcollectMgmtService.splitShipment(request, paramMap); } catch (Exception e) { resultMap.put("result", false); resultMap.put("msg", "분할출하 처리 중 오류가 발생했습니다."); e.printStackTrace(); } return resultMap; } /** *
	 * 출하일 상세 내역 팝업
	 * 
* @param request * @param paramMap - projectNo * @return String */ @RequestMapping(value = "/salesMgmt/shippingDetailPopup.do", method = RequestMethod.GET) public String showShippingDetailPopup(HttpServletRequest request, @RequestParam Map paramMap) { try { String projectNo = (String) paramMap.get("projectNo"); List> 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 paramMap) { return "/salesmgmt/salesMgmt/transactionStatementForm"; } /** * 거래명세서 데이터 조회 */ @RequestMapping(value = "/salesMgmt/getTransactionStatementData.do", method = RequestMethod.POST) @ResponseBody public Map getTransactionStatementData(HttpServletRequest request, @RequestParam Map paramMap) { Map resultMap = new HashMap(); try { String projectNos = (String) paramMap.get("projectNos"); if(projectNos == null || projectNos.isEmpty()) { resultMap.put("success", false); resultMap.put("message", "프로젝트 번호가 없습니다."); return resultMap; } // 거래명세서 데이터 조회 Map 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 saveTransactionStatement(HttpServletRequest request, @org.springframework.web.bind.annotation.RequestBody Map paramMap) { Map resultMap = new HashMap(); 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; } /** *
	 * 계약관리 목록 조회
	 * 
* @param request * @param paramMap - 계약관리 검색 정보 * @return String * *
	 * << 개정 이력 >>
	 * 
	 * 수정일					수정자							수정내용
	 * ----------------		---------------------			----------------------------------------------------------
	 * 2021.11.05			민상익							최초작성
	 * 
	 * 
*/ @RequestMapping(value = "/salesNcollectMgmt/contractList.do", method = RequestMethod.GET) public String salesContractList(HttpServletRequest request , @RequestParam Map paramMap) { String orderNo = request.getParameter("orderNo"); try { List> list = contractMgmtService.getContractMgmtAll(request, paramMap); if (StringUtils.isBlank(orderNo) && list != null && !list.isEmpty()) { Map 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"; } /** *
	 * 매출등록 목록 조회
	 * 
* @param request * @param paramMap - 계약관리 검색 정보 * @return String * *
	 * << 개정 이력 >>
	 * 
	 * 수정일					수정자							수정내용
	 * ----------------		---------------------			----------------------------------------------------------
	 * 2021.11.05			민상익							최초작성
	 * 
	 * 
*/ @RequestMapping(value = "/salesNcollectMgmt/sales.do", method = RequestMethod.GET) public String sales(HttpServletRequest request , @RequestParam Map paramMap) { try { List> list = salesNcollectMgmtService.getSalseAllByOrderNo(request, paramMap); request.setAttribute("LIST", list); } catch(Exception e) { e.printStackTrace(); } return "/salesmgmt/salesNcollectMgmt/salesMgmt"; } /** *
	 * 매출등록 상세 조회
	 * 
* @param request * @param paramMap - 매출등록 검색 정보 * @return String * *
	 * << 개정 이력 >>
	 * 
	 * 수정일					수정자							수정내용
	 * ----------------		---------------------			----------------------------------------------------------
	 * 2021.11.05			민상익							최초작성
	 * 
	 * 
*/ @RequestMapping("/salesNcollectMgmt/salesMgmtFormPopup.do") public String salesMgmt(HttpServletRequest request , @RequestParam Map paramMap) { String saleNo = CommonUtils.checkNull(paramMap.get("saleNo")); Map info = null; try { if(StringUtils.isNotBlank(saleNo)) { // 매출관리 조회 info = salesNcollectMgmtService.getSalesMgmt(paramMap); } else { info = new HashMap(); } // 계약관리 조회 Map 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 codeMap = new HashMap(); //과세 유형 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 saveSalesMgmt(HttpServletRequest request , @RequestParam Map paramMap) { Map resultMap = new HashMap(); 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 deleteSalesMgmt(HttpServletRequest request , @RequestParam Map paramMap) { Map resultMap = new HashMap(); try { resultMap.put("RESULT", salesNcollectMgmtService.deleteSalesMgmt(request, paramMap)); } catch(Exception e) { e.printStackTrace(); } return resultMap; } /******************************************************************************************************************************** ******************************************************************************************************************************** 수금관리 시작 ******************************************************************************************************************************** ********************************************************************************************************************************/ /** *
	 * 수금 목록 조회
	 * 
* @param request * @param paramMap - * @return String * *
	 * << 개정 이력 >>
	 * 
	 * 수정일					수정자							수정내용
	 * ----------------		---------------------			----------------------------------------------------------
	 * 2021.11.05			민상익							최초작성
	 * 
	 * 
*/ @RequestMapping(value = "/salesNcollectMgmt/collect.do", method = RequestMethod.GET) public String collect(HttpServletRequest request , @RequestParam Map paramMap) { try { List> list = salesNcollectMgmtService.getCollectAllByOrderNo(request, paramMap); request.setAttribute("LIST", list); } catch(Exception e) { e.printStackTrace(); } return "/salesmgmt/salesNcollectMgmt/collectMgmt"; } /** *
	 * 수금 상세 조회
	 * 
* @param session * @param request * @param paramMap - 매출 검색 정보 * @return String * *
	 * << 개정 이력 >>
	 * 
	 * 수정일					수정자							수정내용
	 * ----------------		---------------------			----------------------------------------------------------
	 * 2021.11.05			민상익							최초작성
	 * 
	 * 
*/ @RequestMapping("/salesNcollectMgmt/collectMgmtFormPopup.do") public String collectMgmt(HttpSession session , HttpServletRequest request , @RequestParam Map paramMap) { String saleNo = CommonUtils.checkNull(paramMap.get("rcptNo")); Map info = null; try { System.out.println("paramMap##################### " + paramMap); if(StringUtils.isNotBlank(saleNo)) { // 수금관리 조회 info = salesNcollectMgmtService.getCollectMgmt(paramMap); } else { info = new HashMap(); } // 계약관리 조회 Map 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 codeMap = new HashMap(); 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> 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"; } /** *
	 * 수금관리 저장
	 * 
* @param request * @param paramMap - * @return String * *
	 * << 개정 이력 >>
	 * 
	 * 수정일					수정자							수정내용
	 * ----------------		---------------------			----------------------------------------------------------
	 * 2021.11.05			민상익							최초작성
	 * 
	 * 
*/ @ResponseBody @RequestMapping("/salesNcollectMgmt/saveCollectMgmt.do") public Map saveCollectMgmt(HttpServletRequest request , @RequestParam Map paramMap) { Map resultMap = new HashMap(); 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 deleteCollectMgmt(HttpServletRequest request , @RequestParam Map paramMap) { Map resultMap = new HashMap(); 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 paramMap){ Map resultMap = salesNcollectMgmtService.salesDeadlineConfirm(request, paramMap); return resultMap; } @RequestMapping(value = "/salesMgmt/getAllSerialNumbers.do", method = RequestMethod.POST) @ResponseBody public Map getAllSerialNumbers(HttpServletRequest request, @RequestParam Map paramMap) { Map resultMap = new HashMap(); try { List 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 getDeadlineInfo(HttpServletRequest request, @RequestParam Map paramMap) { return salesNcollectMgmtService.getDeadlineInfo(paramMap); } /** * 마감정보 저장 */ @ResponseBody @RequestMapping(value = "/revenueMgmt/saveDeadlineInfo.do", method = RequestMethod.POST) public Map saveDeadlineInfo(HttpServletRequest request, @RequestParam Map paramMap) { return salesNcollectMgmtService.saveDeadlineInfo(request, paramMap); } @RequestMapping(value = "/salesMgmt/getSavedTransactionStatement.do", method = RequestMethod.POST) @ResponseBody public Map getSavedTransactionStatement(HttpServletRequest request, @RequestParam Map paramMap) { Map resultMap = new HashMap(); try { List> 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; } }