Files
wace_plm/src/com/pms/salesmgmt/service/SalesNcollectMgmtService.java
2025-11-10 14:40:34 +09:00

922 lines
30 KiB
Java

/*
* ContractMgmtService
*
* 1.0
*
* 2021.10.01
*
* Copyright ions
*/
package com.pms.salesmgmt.service;
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.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Service;
import com.pms.common.Message;
import com.pms.common.SqlMapConfig;
import com.pms.common.bean.PersonBean;
import com.pms.common.utils.CommonUtils;
import com.pms.common.utils.Constants;
/**
* <pre>
* 매출및수금관리 Service
* </pre>
* @since 2021.11.04
* @author min
* @version 1.0
*
* <pre>
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* ---------------- --------------------- --------------------------------------------------------
* 2021.11.04 민상익 최초작성
*
* </pre>
*
*/
@Service
public class SalesNcollectMgmtService {
/**
* <pre>
* 매출 목록 조회
* </pre>
* @param request
* @param paramMap - 매출및수금관리 검색 정보
* @return List<Map<String,Object>>
*
* <pre>
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* ---------------- --------------------- ----------------------------------------------------------
* 2021.11.04 민상익 최초작성
*
* </pre>
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public List<Map<String,Object>> getSalseAllByOrderNo(HttpServletRequest request
, Map<String, Object> paramMap) {
List<Map<String,Object>> resultList = new ArrayList<Map<String,Object>>();
SqlSession sqlSession = null;
try {
sqlSession = SqlMapConfig.getInstance().getSqlSession();
String countPerPage = CommonUtils.checkNull(request.getParameter("countPerPage"), Constants.ADMIN_COUNT_PER_PAGE+"");
paramMap.put("COUNT_PER_PAGE", Integer.parseInt(countPerPage));
Map pageMap = (HashMap) sqlSession.selectOne("salesNcollectMgmt.getSalesListCnt", paramMap);
pageMap = (HashMap) CommonUtils.setPagingInfo(request, pageMap);
paramMap.put("PAGE_END", CommonUtils.checkNull(pageMap.get("PAGE_END")));
paramMap.put("PAGE_START", CommonUtils.checkNull(pageMap.get("PAGE_START")));
resultList = (ArrayList) sqlSession.selectList("salesNcollectMgmt.getSalesList", paramMap);
} catch(Exception e) {
e.printStackTrace();
} finally {
sqlSession.close();
}
return CommonUtils.toUpperCaseMapKey(resultList);
}
/**
* <pre>
* 매출관리 조회
* </pre>
* @param paramMap - 매출및수금관리 검색 정보
* @return Map<String, Object>
*
* <pre>
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* ---------------- --------------------- ----------------------------------------------------------
* 2021.11.04 민상익 최초작성
*
* </pre>
*/
public Map<String, Object> getSalesMgmt(Map<String, Object> paramMap) {
Map<String, Object> resultMap = new HashMap<String, Object>();
SqlSession sqlSession = null;
try {
sqlSession = SqlMapConfig.getInstance().getSqlSession();
resultMap = sqlSession.selectOne("salesNcollectMgmt.getSalesMgmt", paramMap);
} catch(Exception e) {
e.printStackTrace();
} finally {
sqlSession.close();
}
return CommonUtils.toUpperCaseMapKey(resultMap);
}
/**
* <pre>
* 매출 목록 조회 (Tabulator Grid)
* </pre>
* @param request
* @param paramMap - 매출관리 검색 정보
* @return List<Map<String,Object>>
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public List<Map<String,Object>> getSalesMgmtGridList(HttpServletRequest request
, Map<String, Object> paramMap) {
List<Map<String,Object>> resultList = new ArrayList<Map<String,Object>>();
SqlSession sqlSession = null;
try {
sqlSession = SqlMapConfig.getInstance().getSqlSession();
// 페이징 HTML 생성을 위해 DB에서 총 카운트 조회
String countPerPage = CommonUtils.checkNull(request.getParameter("size"), Constants.ADMIN_COUNT_PER_PAGE+"");
paramMap.put("COUNT_PER_PAGE", Integer.parseInt(countPerPage));
Map pageMap = (HashMap) sqlSession.selectOne("salesNcollectMgmt.getSalesMgmtGridListCount", paramMap);
pageMap = (HashMap) CommonUtils.setPagingInfo(request, pageMap);
paramMap.put("PAGE_HTML", CommonUtils.checkNull(pageMap.get("PAGE_HTML")));
// 실제 쿼리에 사용할 LIMIT, OFFSET 값 계산 (정수 타입으로)
String page = CommonUtils.checkNull(request.getParameter("page"), "1");
int pageNum = Integer.parseInt(page);
int sizeNum = Integer.parseInt(countPerPage);
paramMap.put("PAGE_START", (pageNum - 1) * sizeNum);
resultList = (ArrayList) sqlSession.selectList("salesNcollectMgmt.getSalesMgmtGridList", paramMap);
} catch(Exception e) {
e.printStackTrace();
} finally {
if(sqlSession != null) {
sqlSession.close();
}
}
return CommonUtils.toUpperCaseMapKey(resultList);
}
/**
* <pre>
* 매출 목록 카운트 조회 (Tabulator Grid)
* </pre>
* @param paramMap
* @return int
*/
public int getSalesMgmtGridListCount(Map<String, Object> paramMap) {
int totalCount = 0;
SqlSession sqlSession = null;
try {
sqlSession = SqlMapConfig.getInstance().getSqlSession();
Map<String, Object> resultMap = sqlSession.selectOne("salesNcollectMgmt.getSalesMgmtGridListCount", paramMap);
if(resultMap != null && resultMap.get("TOTAL_CNT") != null) {
totalCount = Integer.parseInt(resultMap.get("TOTAL_CNT").toString());
}
} catch(Exception e) {
e.printStackTrace();
} finally {
if(sqlSession != null) {
sqlSession.close();
}
}
return totalCount;
}
/**
* 매출관리 합계 조회 (Total 공급가액, 부가세, 총액)
* @param paramMap - 검색 조건
* @return Map - TOTAL_SUPPLY_PRICE, TOTAL_VAT, TOTAL_AMOUNT
*/
public Map<String, Object> getSalesMgmtTotals(Map<String, Object> paramMap) {
SqlSession sqlSession = null;
Map<String, Object> totalsMap = new HashMap<String, Object>();
try {
sqlSession = SqlMapConfig.getInstance().getSqlSession();
totalsMap = sqlSession.selectOne("salesNcollectMgmt.getSalesMgmtTotals", paramMap);
if(totalsMap == null) {
totalsMap = new HashMap<String, Object>();
totalsMap.put("TOTAL_SUPPLY_PRICE", 0);
totalsMap.put("TOTAL_VAT", 0);
totalsMap.put("TOTAL_AMOUNT", 0);
}
} catch(Exception e) {
e.printStackTrace();
totalsMap.put("TOTAL_SUPPLY_PRICE", 0);
totalsMap.put("TOTAL_VAT", 0);
totalsMap.put("TOTAL_AMOUNT", 0);
} finally {
if(sqlSession != null) {
sqlSession.close();
}
}
return totalsMap;
}
/**
* <pre>
* 판매 정보 조회
* </pre>
* @param paramMap
* @return Map<String, Object>
*/
public Map<String, Object> getSaleInfo(Map<String, Object> paramMap) {
Map<String, Object> resultMap = new HashMap<String, Object>();
SqlSession sqlSession = null;
try {
sqlSession = SqlMapConfig.getInstance().getSqlSession();
resultMap = sqlSession.selectOne("salesNcollectMgmt.getSaleInfo", paramMap);
} catch(Exception e) {
e.printStackTrace();
} finally {
if(sqlSession != null) {
sqlSession.close();
}
}
return CommonUtils.toUpperCaseMapKey(resultMap);
}
/**
* <pre>
* 주문서 관리에서 수주 데이터 조회 (판매등록용)
* CONTRACT_ITEM 테이블에서 수주 정보를 가져와 판매등록 폼에 자동 채우기
* </pre>
* @param paramMap - contractObjId
* @return Map<String, Object>
*/
public Map<String, Object> getOrderDataForSale(Map<String, Object> paramMap) {
Map<String, Object> resultMap = new HashMap<String, Object>();
SqlSession sqlSession = null;
try {
sqlSession = SqlMapConfig.getInstance().getSqlSession();
resultMap = sqlSession.selectOne("salesNcollectMgmt.getOrderDataForSale", paramMap);
} catch(Exception e) {
e.printStackTrace();
} finally {
if(sqlSession != null) {
sqlSession.close();
}
}
return CommonUtils.toUpperCaseMapKey(resultMap);
}
/**
* <pre>
* orderNo(PROJECT_NO)로 수주 데이터 조회 (판매등록용)
* PROJECT_MGMT에서 CONTRACT_OBJID를 찾아서 수주 데이터 조회
* </pre>
* @param paramMap - orderNo
* @return Map<String, Object>
*/
public Map<String, Object> getOrderDataByOrderNo(Map<String, Object> paramMap) {
Map<String, Object> resultMap = new HashMap<String, Object>();
SqlSession sqlSession = null;
try {
sqlSession = SqlMapConfig.getInstance().getSqlSession();
resultMap = sqlSession.selectOne("salesNcollectMgmt.getOrderDataByOrderNo", paramMap);
} catch(Exception e) {
e.printStackTrace();
} finally {
if(sqlSession != null) {
sqlSession.close();
}
}
return CommonUtils.toUpperCaseMapKey(resultMap);
}
public Map<String, Object> saveSaleRegistration(HttpServletRequest request, Map<String, Object> paramMap) {
Map<String, Object> resultMap = new HashMap<String, Object>();
SqlSession sqlSession = null;
try {
sqlSession = SqlMapConfig.getInstance().getSqlSession(false);
PersonBean person = (PersonBean) request.getSession().getAttribute(Constants.PERSON_BEAN);
paramMap.put("cretEmpNo", person.getUserId());
// sales_registration 테이블에 판매 데이터 저장 (ON CONFLICT로 자동 UPDATE)
sqlSession.insert("salesNcollectMgmt.insertSaleRegistration", paramMap);
sqlSession.commit();
resultMap.put("result", true);
resultMap.put("msg", "저장되었습니다.");
} catch(Exception e) {
if(sqlSession != null) {
sqlSession.rollback();
}
resultMap.put("result", false);
resultMap.put("msg", "저장 중 오류가 발생했습니다.");
e.printStackTrace();
} finally {
if(sqlSession != null) {
sqlSession.close();
}
}
return resultMap;
}
/**
* <pre>
* 분할출하 처리 (로그 기반)
* - 원본 데이터는 그대로 유지
* - 분할출하 로그만 shipment_log에 저장
* - 화면에서는 VIEW를 통해 원본 + 로그를 합쳐서 표시
* </pre>
* @param request
* @param paramMap - 분할출하 정보
* @return Map
*/
public Map<String, Object> splitShipment(HttpServletRequest request, Map<String, Object> paramMap) {
Map<String, Object> resultMap = new HashMap<String, Object>();
SqlSession sqlSession = null;
try {
sqlSession = SqlMapConfig.getInstance().getSqlSession(false);
PersonBean person = (PersonBean) request.getSession().getAttribute(Constants.PERSON_BEAN);
String userId = person.getUserId();
// 원본 데이터 조회
Map<String, Object> originalData = sqlSession.selectOne("salesNcollectMgmt.getContractByObjid", paramMap);
if(originalData == null) {
resultMap.put("result", false);
resultMap.put("msg", "원본 데이터를 찾을 수 없습니다.");
return resultMap;
}
// 분할 수량
int splitQuantity = Integer.parseInt(paramMap.get("splitQuantity").toString());
int originalQuantity = Integer.parseInt(paramMap.get("originalQuantity").toString());
// 원본 데이터의 단가 정보 가져오기
BigDecimal unitPrice = new BigDecimal(originalData.get("order_unit_price").toString());
BigDecimal exchangeRate = new BigDecimal(originalData.get("exchange_rate").toString());
// 분할 금액 계산
BigDecimal splitSupplyPrice = unitPrice.multiply(new BigDecimal(splitQuantity));
BigDecimal splitVat = splitSupplyPrice.multiply(new BigDecimal("0.1"));
BigDecimal splitTotalAmount = splitSupplyPrice.add(splitVat);
// 분할출하 로그 저장
paramMap.put("logType", "SPLIT_SHIPMENT");
paramMap.put("logMessage", "분할출하 - 원본수량: " + originalQuantity + ", 분할수량: " + splitQuantity);
paramMap.put("userId", userId);
paramMap.put("splitQuantity", splitQuantity);
paramMap.put("originalQuantity", originalQuantity);
paramMap.put("salesUnitPrice", unitPrice);
paramMap.put("salesSupplyPrice", splitSupplyPrice);
paramMap.put("salesVat", splitVat);
paramMap.put("salesTotalAmount", splitTotalAmount);
paramMap.put("salesCurrency", originalData.get("contract_currency"));
paramMap.put("salesExchangeRate", exchangeRate);
// 팝업에서 입력한 데이터 우선, 없으면 원본 데이터 사용
paramMap.put("shippingMethod",
StringUtils.isNotBlank((String)paramMap.get("shippingMethod")) ?
paramMap.get("shippingMethod") : originalData.get("shipping_method"));
paramMap.put("incoterms",
StringUtils.isNotBlank((String)paramMap.get("incoterms")) ?
paramMap.get("incoterms") : originalData.get("incoterms"));
paramMap.put("managerUserId",
StringUtils.isNotBlank((String)paramMap.get("manager")) ?
paramMap.get("manager") : originalData.get("pm_user_id"));
// 팝업에서 입력한 추가 정보
// serialNo, shippingDate, remark는 팝업에서만 입력 가능
sqlSession.insert("salesNcollectMgmt.insertSplitShipmentLog", paramMap);
sqlSession.commit();
resultMap.put("result", true);
resultMap.put("msg", "분할출하가 완료되었습니다.");
} catch(Exception e) {
if(sqlSession != null) {
sqlSession.rollback();
}
resultMap.put("result", false);
resultMap.put("msg", "분할출하 처리 중 오류가 발생했습니다: " + e.getMessage());
e.printStackTrace();
} finally {
if(sqlSession != null) {
sqlSession.close();
}
}
return resultMap;
}
/**
* <pre>
* 매출관리 등록
* </pre>
* @param paramMap - 매출및수금관리 정보
*
* <pre>
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* ---------------- --------------------- ----------------------------------------------------------
* 2021.11.04 민상익 최초작성
*
* </pre>
*/
public Map<String, Object> saveSalesMgmt(HttpServletRequest request
, Map<String, Object> paramMap) {
Map<String, Object> resultMap = new HashMap<String, Object>();
SqlSession sqlSession = null;
try {
sqlSession = SqlMapConfig.getInstance().getSqlSession(false);
// 계약관리 조회
Map<String, Object> contractMap = sqlSession.selectOne("contractMgmt.getContractMgmt", paramMap);
String acntUnit = (String) contractMap.get("acntunit"); // 사업부
int goodsQty = (Integer) contractMap.get("goodsqty"); // 계약수량
// 주어진 계약번호의 전체 매출수량 조회
int totalSupplyQty = sqlSession.selectOne("salesNcollectMgmt.getSalesMgmtTotalSupplyQty", paramMap);
// 화면에서 입력한 매출수량
int supplyQty = Integer.parseInt((String) paramMap.get("supplyQty"));
totalSupplyQty += supplyQty;
// 화면에서 입력한 공급가
BigDecimal supplyAmt = new BigDecimal(Integer.parseInt((String) paramMap.get("supplyAmt")));
// 매출수량이 계약관리의 계약수량보다 많을 수 없음
if (totalSupplyQty > goodsQty) {
resultMap.put("result", false);
resultMap.put("msg", "매출수량이 계약 수량을 초과하였습니다.");
return resultMap;
}
String wrtYmd = (String) paramMap.get("wrtYmd"); // 매출일
wrtYmd = wrtYmd.replaceAll("[^0-9]", "");
paramMap.put("wrtYmd", wrtYmd);
String pubYyyyMm = wrtYmd.substring(0, 6); // 매출연월
paramMap.put("pubYyyyMm", pubYyyyMm);
paramMap.put("acntUnit", acntUnit);
int salesSupplyQty = 0; // 매출수량
BigDecimal salesSupplyAmt = new BigDecimal(0); // 매출단가
boolean isReg = true;
if (StringUtils.isBlank((String) paramMap.get("saleNo"))) { // 매출번호 없으면
int pubSer = sqlSession.selectOne("salesNcollectMgmt.getSalesMgmtSalseNo", paramMap); // 일련번호 채번
paramMap.put("pubSer", pubSer);
// 매출번호 생성
String saleNo = acntUnit + pubYyyyMm + StringUtils.leftPad(String.valueOf(pubSer), 3, "0");
paramMap.put("saleNo", saleNo);
} else {
Map<String, Object> salesMap = sqlSession.selectOne("salesNcollectMgmt.getSalesMgmt", paramMap);
salesSupplyQty = (Integer) salesMap.get("supplyqty"); // 매출수량
salesSupplyAmt = (BigDecimal) salesMap.get("supplyamt"); // 공급가
isReg = false;
}
salesSupplyQty = supplyQty - salesSupplyQty;
salesSupplyAmt = supplyAmt.subtract(salesSupplyAmt);
paramMap.put("salesSupplyQty", salesSupplyQty);
paramMap.put("salesSupplyAmt", salesSupplyAmt);
// 작성자
PersonBean person = (PersonBean) request.getSession().getAttribute(Constants.PERSON_BEAN);
paramMap.put("cretEmpNo", person.getUserId());
int cnt = sqlSession.update("salesNcollectMgmt.inserSalesMgmt", paramMap);
if (cnt > 0) {
// 매출관리 저장 후 계약관리 UPDATE
sqlSession.update("salesNcollectMgmt.afterSaveUpdateContract", paramMap);
if (isReg) { // 매출번호 없으면
int fromSerial = sqlSession.selectOne("salesNcollectMgmt.getSalesMgmtAccountSerial", paramMap);
if (fromSerial > 0) {
int toSerial = fromSerial;
for (int idx = 1; idx < supplyQty; idx += 1) {
toSerial += 1;
}
paramMap.put("fromSerial", fromSerial);
paramMap.put("toSerial", toSerial);
sqlSession.update("salesNcollectMgmt.afterSaveUpdateAccount", paramMap);
}
}
resultMap.put("result", true);
resultMap.put("msg", Message.SAVE_SUCCESS);
}
sqlSession.commit();
} catch(Exception e) {
sqlSession.rollback();
resultMap.put("result", false);
resultMap.put("msg", Message.SAVE_FAILED);
e.printStackTrace();
} finally {
sqlSession.close();
}
return resultMap;
}
/**
* <pre>
* 매출및수금관리 삭제
* </pre>
* @param paramMap - 매출및수금관리 정보
*
* <pre>
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* ---------------- --------------------- ----------------------------------------------------------
* 2021.11.04 민상익 최초작성
*
* </pre>
*/
public Map<String, Object> deleteSalesMgmt(HttpServletRequest request
, Map<String, Object> paramMap){
Map<String, Object> resultMap = new HashMap<String, Object>();
SqlSession sqlSession = null;
try {
sqlSession = SqlMapConfig.getInstance().getSqlSession(false);
// 계약관리 조회
Map<String, Object> contractMap = sqlSession.selectOne("contractMgmt.getContractMgmt", paramMap);
int supplyQty = (Integer) contractMap.get("supplyqty"); // 계약수량
BigDecimal supplyAmt = (BigDecimal) contractMap.get("supplyamt"); // 공급가
// 매출관리 조회
Map<String, Object> salesMap = sqlSession.selectOne("salesNcollectMgmt.getSalesMgmt", paramMap);
int salesSupplyQty = (Integer) salesMap.get("supplyqty"); // 매출수량
BigDecimal salesSupplyAmt = (BigDecimal) salesMap.get("supplyamt"); // 공급가
salesSupplyQty = supplyQty - salesSupplyQty;
salesSupplyAmt = supplyAmt.subtract(salesSupplyAmt);
paramMap.put("salesSupplyQty", salesSupplyQty);
paramMap.put("salesSupplyAmt", salesSupplyAmt);
// 매출관리 저장 후 계약관리 UPDATE
sqlSession.update("salesNcollectMgmt.afterDeleteUpdateContract", paramMap);
int cnt = sqlSession.delete("salesNcollectMgmt.deleteSalesMgmt", paramMap);
if(cnt > 0){
resultMap.put("result", true);
resultMap.put("msg", Message.DELETE_SUCCESS);
}
sqlSession.commit();
} catch(Exception e) {
sqlSession.rollback();
resultMap.put("result", false);
resultMap.put("msg", Message.DELETE_FAILED);
e.printStackTrace();
} finally {
sqlSession.close();
}
return resultMap;
}
/********************************************************************************************************************************
********************************************************************************************************************************
수금관리 시작
********************************************************************************************************************************
********************************************************************************************************************************/
/**
* <pre>
* 수금 목록 조회
* </pre>
* @param request
* @param paramMap - 매출및수금관리 검색 정보
* @return List<Map<String,Object>>
*
* <pre>
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* ---------------- --------------------- ----------------------------------------------------------
* 2021.11.04 민상익 최초작성
*
* </pre>
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public List<Map<String,Object>> getCollectAllByOrderNo(HttpServletRequest request
, Map<String, Object> paramMap) {
List<Map<String,Object>> resultList = new ArrayList<Map<String,Object>>();
SqlSession sqlSession = null;
try {
sqlSession = SqlMapConfig.getInstance().getSqlSession();
String countPerPage = CommonUtils.checkNull(request.getParameter("countPerPage"), Constants.ADMIN_COUNT_PER_PAGE+"");
paramMap.put("COUNT_PER_PAGE", Integer.parseInt(countPerPage));
Map pageMap = (HashMap) sqlSession.selectOne("salesNcollectMgmt.getCollectListCnt", paramMap);
pageMap = (HashMap) CommonUtils.setPagingInfo(request, pageMap);
paramMap.put("PAGE_END", CommonUtils.checkNull(pageMap.get("PAGE_END")));
paramMap.put("PAGE_START", CommonUtils.checkNull(pageMap.get("PAGE_START")));
resultList = (ArrayList) sqlSession.selectList("salesNcollectMgmt.getCollectList", paramMap);
} catch(Exception e) {
e.printStackTrace();
} finally {
sqlSession.close();
}
return CommonUtils.toUpperCaseMapKey(resultList);
}
/**
* <pre>
* 수금관리 조회
* </pre>
* @param paramMap - 수금관리 검색 정보
* @return Map<String, Object>
*
* <pre>
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* ---------------- --------------------- ----------------------------------------------------------
* 2021.11.04 민상익 최초작성
*
* </pre>
*/
public Map<String, Object> getCollectMgmt(Map<String, Object> paramMap) {
Map<String, Object> resultMap = new HashMap<String, Object>();
SqlSession sqlSession = null;
try {
sqlSession = SqlMapConfig.getInstance().getSqlSession();
resultMap = sqlSession.selectOne("salesNcollectMgmt.getCollectMgmt", paramMap);
} catch(Exception e) {
e.printStackTrace();
} finally {
sqlSession.close();
}
return CommonUtils.toUpperCaseMapKey(resultMap);
}
/**
* <pre>
* 수금관리 등록
* </pre>
* @param paramMap - 매출및수금관리 정보
*
* <pre>
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* ---------------- --------------------- ----------------------------------------------------------
* 2021.11.04 민상익 최초작성
*
* </pre>
*/
public Map<String, Object> saveCollectMgmt(HttpServletRequest request
, Map<String, Object> paramMap){
Map<String, Object> resultMap = new HashMap<String, Object>();
SqlSession sqlSession = null;
try {
sqlSession = SqlMapConfig.getInstance().getSqlSession(false);
String rcptYmd = (String) paramMap.get("rcptYmd"); // 수금일자
rcptYmd = rcptYmd.replaceAll("[^0-9]", "");
paramMap.put("rcptYmd", rcptYmd);
// 계약관리 조회
Map<String, Object> contractMap = sqlSession.selectOne("contractMgmt.getContractMgmt", paramMap);
String acntUnit = (String) contractMap.get("acntunit"); // 사업부
paramMap.put("acntUnit", acntUnit);
// 화면에서 입력한 수금금액
BigDecimal rcptAmt = new BigDecimal(Integer.parseInt((String) paramMap.get("rcptAmt")));
BigDecimal collectRcptAmt = new BigDecimal(0); // 수금금액
if (StringUtils.isBlank((String) paramMap.get("rcptNo"))) { //매출번호 없으면
int ser = sqlSession.selectOne("salesNcollectMgmt.getcollectMgmtRcpNo", paramMap); // 일련번호 채번
paramMap.put("ser", ser);
// 수금번호 생성
String rcptNo = acntUnit + rcptYmd + StringUtils.leftPad(String.valueOf(ser), 3, "0");
paramMap.put("rcptNo", rcptNo);
} else {
Map<String, Object> collectMap = sqlSession.selectOne("salesNcollectMgmt.getCollectMgmt", paramMap);
collectRcptAmt = (BigDecimal) collectMap.get("rcptamt"); // 수금금액
}
collectRcptAmt = rcptAmt.subtract(collectRcptAmt);
paramMap.put("collectRcptAmt", collectRcptAmt);
// 작성자
PersonBean person = (PersonBean) request.getSession().getAttribute(Constants.PERSON_BEAN);
paramMap.put("cretEmpNo", person.getUserId());
int cnt = sqlSession.update("salesNcollectMgmt.inserCollectMgmt", paramMap);
if(cnt > 0){
paramMap.put("typeNo", "1"); // 구분
// 수금관리 저장 후 계약관리 UPDATE
sqlSession.update("salesNcollectMgmt.afterCollectUpdateContract", paramMap);
sqlSession.update("salesNcollectMgmt.afterCollectInsertAccount", paramMap);
resultMap.put("result", true);
resultMap.put("msg", Message.SAVE_SUCCESS);
}
sqlSession.commit();
} catch(Exception e) {
sqlSession.rollback();
resultMap.put("result", false);
resultMap.put("msg", Message.SAVE_FAILED);
e.printStackTrace();
} finally {
sqlSession.close();
}
return resultMap;
}
/**
* <pre>
* 매출및수금관리 삭제
* </pre>
* @param paramMap - 매출및수금관리 정보
*
* <pre>
* << 개정 이력 >>
*
* 수정일 수정자 수정내용
* ---------------- --------------------- ----------------------------------------------------------
* 2021.11.04 민상익 최초작성
*
* </pre>
*/
public Map<String, Object> deleteCollectMgmt(HttpServletRequest request
, Map<String, Object> paramMap){
Map<String, Object> resultMap = new HashMap<String, Object>();
SqlSession sqlSession = null;
try {
sqlSession = SqlMapConfig.getInstance().getSqlSession(false);
// 계약관리 조회
Map<String, Object> contractMap = sqlSession.selectOne("contractMgmt.getContractMgmt", paramMap);
BigDecimal rcptAmt = (BigDecimal) contractMap.get("rcptamt"); // 수금금액
Map<String, Object> collectMap = sqlSession.selectOne("salesNcollectMgmt.getCollectMgmt", paramMap);
BigDecimal collectRcptAmt = (BigDecimal) collectMap.get("rcptamt"); // 수금금액
collectRcptAmt = rcptAmt.subtract(collectRcptAmt);
paramMap.put("collectRcptAmt", collectRcptAmt);
// 수금관리 저장 후 계약관리 UPDATE
sqlSession.update("salesNcollectMgmt.afterDeleteCollectUpdateContract", paramMap);
int cnt = sqlSession.delete("salesNcollectMgmt.deleteCollectMgmt", paramMap);
if(cnt > 0){
resultMap.put("result", true);
resultMap.put("msg", Message.DELETE_SUCCESS);
}
sqlSession.commit();
} catch(Exception e) {
sqlSession.rollback();
resultMap.put("result", false);
resultMap.put("msg", Message.DELETE_FAILED);
e.printStackTrace();
} finally {
sqlSession.close();
}
return resultMap;
}
/**
* 매출마감 처리
* @param request
* @param paramMap
* @return
*/
public Map salesDeadlineConfirm(HttpServletRequest request,Map paramMap){
Map resultMap = new HashMap();
SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(false);
try{
System.out.println("===== 매출마감 처리 시작 =====");
System.out.println("paramMap: " + paramMap);
String objIdListStr = CommonUtils.checkNull(paramMap.get("objIdList"));
String deadlineDate = CommonUtils.checkNull(paramMap.get("deadlineDate"));
System.out.println("objIdListStr: " + objIdListStr);
System.out.println("deadlineDate: " + deadlineDate);
if(objIdListStr == null || objIdListStr.isEmpty()){
resultMap.put("result", false);
resultMap.put("msg", "선택된 항목이 없습니다.");
System.out.println("에러: 선택된 항목 없음");
return resultMap;
}
if(deadlineDate == null || deadlineDate.isEmpty()){
resultMap.put("result", false);
resultMap.put("msg", "매출마감일을 입력해주세요.");
System.out.println("에러: 매출마감일 없음");
return resultMap;
}
String[] targetObjIdList = objIdListStr.split(",");
System.out.println("targetObjIdList 길이: " + targetObjIdList.length);
if(null != targetObjIdList && 0 < targetObjIdList.length){
HttpSession session = request.getSession();
sqlSession = SqlMapConfig.getInstance().getSqlSession();
PersonBean person = (PersonBean)session.getAttribute(Constants.PERSON_BEAN);
String userId = person.getUserId();
System.out.println("userId: " + userId);
for(int i=0; i<targetObjIdList.length; i++){
String objId = CommonUtils.checkNull(targetObjIdList[i]);
System.out.println("처리 중 OBJID[" + i + "]: " + objId);
HashMap sqlParamMap = new HashMap();
sqlParamMap.put("OBJID", objId);
sqlParamMap.put("userId", userId);
sqlParamMap.put("deadlineDate", deadlineDate);
System.out.println("SQL 실행 전 - sqlParamMap: " + sqlParamMap);
int updateCount = sqlSession.update("salesNcollectMgmt.salesDeadlineConfirm", sqlParamMap);
System.out.println("SQL 실행 결과 - 업데이트된 행 수: " + updateCount);
}
sqlSession.commit();
System.out.println("커밋 완료");
resultMap.put("result", true);
resultMap.put("msg", targetObjIdList.length + "건의 매출마감이 완료되었습니다.");
}
System.out.println("===== 매출마감 처리 완료 =====");
}catch(Exception e){
resultMap.put("result", false);
resultMap.put("msg", "매출마감 처리 중 오류가 발생했습니다.");
sqlSession.rollback();
System.out.println("===== 매출마감 처리 중 예외 발생 =====");
e.printStackTrace();
}finally{
sqlSession.close();
}
return resultMap;
}
}