/* * ContractMgmtController * * 1.0 * * 2021.10.01 * * Copyright ions */ package com.pms.salesmgmt.controller; import java.math.BigDecimal; 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")); // 출하대기 상태 codeMap.put("shippingStatusList", salesMgmtCommonService.bizMakeOptionList("SH", "", "salesMgmtCommon.getCodeList")); /* // 출고방법 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")); */ 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(); // 주문유형 codeMap.put("orderTypeList", salesMgmtCommonService.bizMakeOptionList("GE", "", "salesMgmtCommon.getCodeList")); // 제품구분 codeMap.put("productTypeList", salesMgmtCommonService.bizMakeOptionList("", "", "salesMgmtCommon.getGoodsList")); // 국내/해외 codeMap.put("nationList", salesMgmtCommonService.bizMakeOptionList("AR", "", "salesMgmtCommon.getCodeList")); // 수주상태 codeMap.put("orderStatusList", commonService.bizMakeOptionList("0000932", "", "common.getCodeselect")); // 출하대기 상태 codeMap.put("shippingStatusList", salesMgmtCommonService.bizMakeOptionList("SH", "", "salesMgmtCommon.getCodeList")); // 담당자 codeMap.put("managerList", salesMgmtCommonService.bizMakeOptionList("", "", "salesMgmtCommon.getSalesmanList")); 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) { Map resultMap = new HashMap(); try { System.out.println("===== revenueGridList.do 파라미터 ====="); System.out.println("paramMap: " + paramMap); List> list = salesNcollectMgmtService.getSalesMgmtGridList(request, paramMap); int totalCount = salesNcollectMgmtService.getSalesMgmtGridListCount(paramMap); Map totals = salesNcollectMgmtService.getSalesMgmtTotals(paramMap); System.out.println("list size: " + list.size()); System.out.println("totalCount: " + totalCount); System.out.println("totals: " + totals); resultMap.put("RESULTLIST", list); resultMap.put("last_page", (int) Math.ceil((double)totalCount / Integer.parseInt(CommonUtils.checkNull(request.getParameter("size"), "10")))); resultMap.put("TOTALS", totals); // Total 공급가액, 부가세, 총액 } catch(Exception e) { e.printStackTrace(); // Tabulator는 에러 발생 시 빈 배열을 기대합니다. resultMap.put("RESULTLIST", new java.util.ArrayList<>()); resultMap.put("last_page", 0); // Total 초기화 Map emptyTotals = new HashMap(); emptyTotals.put("TOTAL_SUPPLY_PRICE", 0); emptyTotals.put("TOTAL_VAT", 0); emptyTotals.put("TOTAL_AMOUNT", 0); resultMap.put("TOTALS", emptyTotals); } return resultMap; } /** *
	 * 판매등록 폼 팝업
	 * 
* @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", salesMgmtCommonService.bizMakeOptionList("", "", "salesMgmtCommon.getSalesmanList")); // 기존 판매 정보 조회 후 환종(통화) 공통코드 세팅 Map saleInfo = null; String salesCurrency = ""; if(paramMap.get("orderNo") != null && !paramMap.get("orderNo").equals("")) { saleInfo = salesNcollectMgmtService.getSaleInfo(paramMap); salesCurrency = CommonUtils.nullToEmpty((String)saleInfo.get("SALES_CURRENCY")); request.setAttribute("saleInfo", saleInfo); // orderInfo로 견적 정보 전달 (saleInfo가 이미 모든 필요한 정보를 포함) request.setAttribute("orderInfo", saleInfo); } // 환종(통화) - 공통코드 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) { Map resultMap = new HashMap(); try { List> list = salesNcollectMgmtService.getSalesMgmtGridList(request, paramMap); int totalCount = salesNcollectMgmtService.getSalesMgmtGridListCount(paramMap); resultMap.put("RESULTLIST", list); resultMap.put("last_page", (int) Math.ceil((double)totalCount / Integer.parseInt(CommonUtils.checkNull(request.getParameter("size"), "10")))); } catch(Exception e) { e.printStackTrace(); // Tabulator는 에러 발생 시 빈 배열을 기대합니다. resultMap.put("RESULTLIST", new java.util.ArrayList<>()); resultMap.put("last_page", 0); } return resultMap; } @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")); 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 - 계약관리 검색 정보 * @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; } }