1412 lines
47 KiB
Java
1412 lines
47 KiB
Java
/*
|
|
* ContractMgmtService
|
|
*
|
|
* 1.0
|
|
*
|
|
* 2021.10.01
|
|
*
|
|
* Copyright ions
|
|
*/
|
|
package com.pms.salesmgmt.service;
|
|
|
|
import java.math.BigDecimal;
|
|
import java.text.SimpleDateFormat;
|
|
import java.util.ArrayList;
|
|
import java.util.Date;
|
|
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 List<Map<String, Object>> getProjectItems(Map<String, Object> paramMap) {
|
|
List<Map<String, Object>> resultList = new ArrayList<Map<String, Object>>();
|
|
SqlSession sqlSession = null;
|
|
|
|
try {
|
|
sqlSession = SqlMapConfig.getInstance().getSqlSession();
|
|
resultList = sqlSession.selectList("salesNcollectMgmt.getProjectItems", paramMap);
|
|
} catch(Exception e) {
|
|
e.printStackTrace();
|
|
} finally {
|
|
if(sqlSession != null) {
|
|
sqlSession.close();
|
|
}
|
|
}
|
|
|
|
// 대문자 키로 변환
|
|
List<Map<String, Object>> upperCaseList = new ArrayList<Map<String, Object>>();
|
|
for(Map<String, Object> item : resultList) {
|
|
upperCaseList.add(CommonUtils.toUpperCaseMapKey(item));
|
|
}
|
|
|
|
return upperCaseList;
|
|
}
|
|
*/
|
|
|
|
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());
|
|
|
|
String projectNo = (String) paramMap.get("orderNo");
|
|
String saleNo = (String) paramMap.get("saleNo");
|
|
|
|
System.out.println("=== saveSaleRegistration 시작 ===");
|
|
System.out.println("projectNo: " + projectNo);
|
|
System.out.println("saleNo (파라미터): " + saleNo);
|
|
System.out.println("salesQuantity: " + paramMap.get("salesQuantity"));
|
|
|
|
// 모든 판매를 shipment_log에 기록 (분할 출하 방식 통일)
|
|
// 1. 해당 프로젝트의 sales_registration 레코드 확인
|
|
Map<String, Object> checkParam = new HashMap<String, Object>();
|
|
checkParam.put("orderNo", projectNo);
|
|
Map<String, Object> existingSale = sqlSession.selectOne("salesNcollectMgmt.getSaleInfo", checkParam);
|
|
|
|
Object saleNoObj = null;
|
|
if(existingSale != null) {
|
|
saleNoObj = existingSale.get("SALE_NO");
|
|
if(saleNoObj == null) saleNoObj = existingSale.get("sale_no");
|
|
}
|
|
|
|
System.out.println("existingSale: " + (existingSale != null ? "있음" : "없음"));
|
|
System.out.println("SALE_NO: " + saleNoObj);
|
|
|
|
// 2. sales_registration 레코드가 없으면 먼저 생성
|
|
if(saleNoObj == null) {
|
|
System.out.println("sales_registration 레코드 생성 (첫 판매)");
|
|
|
|
// sales_registration에 기본 레코드 INSERT (수량은 0으로)
|
|
Map<String, Object> baseRecord = new HashMap<String, Object>();
|
|
baseRecord.put("orderNo", projectNo);
|
|
baseRecord.put("salesQuantity", 0); // 기본 레코드는 수량 0
|
|
baseRecord.put("salesUnitPrice", paramMap.get("salesUnitPrice"));
|
|
baseRecord.put("salesSupplyPrice", 0);
|
|
baseRecord.put("salesVat", 0);
|
|
baseRecord.put("salesTotalAmount", 0);
|
|
baseRecord.put("salesCurrency", paramMap.get("salesCurrency"));
|
|
baseRecord.put("salesExchangeRate", paramMap.get("salesExchangeRate"));
|
|
baseRecord.put("shippingDate", paramMap.get("shippingDate"));
|
|
baseRecord.put("shippingMethod", paramMap.get("shippingMethod"));
|
|
baseRecord.put("managerUserId", paramMap.get("managerUserId"));
|
|
baseRecord.put("incoterms", paramMap.get("incoterms"));
|
|
baseRecord.put("serialNo", paramMap.get("serialNo"));
|
|
baseRecord.put("cretEmpNo", paramMap.get("cretEmpNo"));
|
|
|
|
sqlSession.insert("salesNcollectMgmt.insertSaleRegistration", baseRecord);
|
|
|
|
// 생성된 sale_no 조회
|
|
existingSale = sqlSession.selectOne("salesNcollectMgmt.getSaleInfo", checkParam);
|
|
saleNoObj = existingSale.get("SALE_NO");
|
|
if(saleNoObj == null) saleNoObj = existingSale.get("sale_no");
|
|
|
|
System.out.println("생성된 SALE_NO: " + saleNoObj);
|
|
}
|
|
|
|
// 3. shipment_log에 판매 기록 INSERT
|
|
System.out.println("shipment_log에 판매 기록 INSERT");
|
|
|
|
Object orderQtyObj = existingSale.get("ORDER_QUANTITY");
|
|
if(orderQtyObj == null) orderQtyObj = existingSale.get("order_quantity");
|
|
|
|
System.out.println("ORDER_QUANTITY: " + orderQtyObj);
|
|
|
|
if(orderQtyObj == null || saleNoObj == null) {
|
|
System.out.println("=== existingSale 전체 내용 ===");
|
|
for(Object key : existingSale.keySet()) {
|
|
System.out.println(key + ": " + existingSale.get(key));
|
|
}
|
|
throw new RuntimeException("ORDER_QUANTITY 또는 SALE_NO가 null입니다");
|
|
}
|
|
|
|
paramMap.put("targetObjid", projectNo);
|
|
paramMap.put("originalQuantity", orderQtyObj);
|
|
|
|
// 잔량 계산
|
|
int orderQuantity = Integer.parseInt(String.valueOf(orderQtyObj).split("\\.")[0]);
|
|
int salesQuantity = Integer.parseInt(String.valueOf(paramMap.get("salesQuantity")));
|
|
int remainingQuantity = orderQuantity - salesQuantity;
|
|
|
|
System.out.println("orderQuantity: " + orderQuantity);
|
|
System.out.println("salesQuantity: " + salesQuantity);
|
|
System.out.println("remainingQuantity: " + remainingQuantity);
|
|
|
|
paramMap.put("remainingQuantity", remainingQuantity);
|
|
paramMap.put("parentSaleNo", saleNoObj);
|
|
|
|
System.out.println("shipment_log INSERT 직전 파라미터:");
|
|
System.out.println(" targetObjid: " + paramMap.get("targetObjid"));
|
|
System.out.println(" parentSaleNo: " + paramMap.get("parentSaleNo"));
|
|
System.out.println(" cretEmpNo: " + paramMap.get("cretEmpNo"));
|
|
|
|
sqlSession.insert("salesNcollectMgmt.insertShipmentLog", paramMap);
|
|
|
|
// 4. sales_registration의 sales_quantity를 shipment_log 합계로 업데이트
|
|
System.out.println("sales_registration 업데이트 - shipment_log 합계 반영");
|
|
Map<String, Object> updateParam = new HashMap<String, Object>();
|
|
updateParam.put("projectNo", projectNo);
|
|
updateParam.put("saleNo", saleNoObj);
|
|
sqlSession.update("salesNcollectMgmt.updateSalesQuantityFromShipmentLog", updateParam);
|
|
|
|
sqlSession.commit();
|
|
resultMap.put("result", true);
|
|
resultMap.put("msg", "저장되었습니다.");
|
|
System.out.println("=== 저장 성공 ===");
|
|
} catch(Exception e) {
|
|
if(sqlSession != null) {
|
|
sqlSession.rollback();
|
|
}
|
|
resultMap.put("result", false);
|
|
resultMap.put("msg", "저장 중 오류가 발생했습니다.");
|
|
System.out.println("=== 저장 실패 ===");
|
|
System.out.println("에러 메시지: " + e.getMessage());
|
|
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;
|
|
}
|
|
|
|
/**
|
|
* 모든 분할 출하의 총 판매 수량 조회
|
|
* @param paramMap
|
|
* @return Map
|
|
*/
|
|
public Map<String, Object> getTotalSalesQuantity(Map<String, Object> paramMap) {
|
|
SqlSession sqlSession = null;
|
|
Map<String, Object> result = null;
|
|
|
|
try {
|
|
sqlSession = SqlMapConfig.getInstance().getSqlSession();
|
|
result = sqlSession.selectOne("salesNcollectMgmt.getTotalSalesQuantity", paramMap);
|
|
} catch(Exception e) {
|
|
e.printStackTrace();
|
|
} finally {
|
|
if(sqlSession != null) {
|
|
sqlSession.close();
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
/**
|
|
* <pre>
|
|
* shipment_log에서 총 출하 수량 조회
|
|
* </pre>
|
|
* @param paramMap
|
|
* @return Integer
|
|
*/
|
|
public Integer getTotalShippedQuantity(Map<String, Object> paramMap) {
|
|
SqlSession sqlSession = null;
|
|
Integer result = 0;
|
|
|
|
try {
|
|
sqlSession = SqlMapConfig.getInstance().getSqlSession();
|
|
result = sqlSession.selectOne("salesNcollectMgmt.getTotalShippedQuantity", paramMap);
|
|
if(result == null) result = 0;
|
|
} catch(Exception e) {
|
|
e.printStackTrace();
|
|
result = 0;
|
|
} finally {
|
|
if(sqlSession != null) {
|
|
sqlSession.close();
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
/**
|
|
* <pre>
|
|
* 프로젝트 기본 정보 조회 (CONTRACT_OBJID 포함)
|
|
* </pre>
|
|
* @param paramMap
|
|
* @return Map
|
|
*/
|
|
public Map<String, Object> getProjectInfo(Map<String, Object> paramMap) {
|
|
SqlSession sqlSession = null;
|
|
Map<String, Object> result = null;
|
|
|
|
try {
|
|
sqlSession = SqlMapConfig.getInstance().getSqlSession();
|
|
result = sqlSession.selectOne("salesNcollectMgmt.getProjectInfo", paramMap);
|
|
} catch(Exception e) {
|
|
e.printStackTrace();
|
|
} finally {
|
|
if(sqlSession != null) {
|
|
sqlSession.close();
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
/**
|
|
* 출하일 상세 내역 조회
|
|
* @param projectNo
|
|
* @return List
|
|
*/
|
|
public List<Map<String, Object>> getShippingDetailList(String projectNo) {
|
|
SqlSession sqlSession = null;
|
|
List<Map<String, Object>> resultList = new ArrayList<Map<String, Object>>();
|
|
try {
|
|
sqlSession = SqlMapConfig.getInstance().getSqlSession();
|
|
Map<String, Object> paramMap = new HashMap<String, Object>();
|
|
paramMap.put("projectNo", projectNo);
|
|
resultList = sqlSession.selectList("salesNcollectMgmt.getShippingDetailList", paramMap);
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
} finally {
|
|
if (sqlSession != null) {
|
|
sqlSession.close();
|
|
}
|
|
}
|
|
return resultList;
|
|
}
|
|
|
|
/**
|
|
* 거래명세서 데이터 조회
|
|
* @param paramMap - projectNos (쉼표로 구분된 프로젝트 번호들)
|
|
* @return Map
|
|
*/
|
|
public Map<String, Object> getTransactionStatementData(Map<String, Object> paramMap) {
|
|
SqlSession sqlSession = null;
|
|
Map<String, Object> resultMap = new HashMap<String, Object>();
|
|
|
|
try {
|
|
sqlSession = SqlMapConfig.getInstance().getSqlSession();
|
|
|
|
String projectNos = (String) paramMap.get("projectNos");
|
|
System.out.println("=== getTransactionStatementData 시작 ===");
|
|
System.out.println("projectNos: " + projectNos);
|
|
|
|
String[] projectNoArray = projectNos.split(",");
|
|
|
|
// 첫 번째 프로젝트의 고객 정보 조회
|
|
Map<String, Object> firstProjectParam = new HashMap<String, Object>();
|
|
firstProjectParam.put("projectNo", projectNoArray[0].trim());
|
|
System.out.println("고객 정보 조회 - projectNo: " + projectNoArray[0].trim());
|
|
|
|
Map<String, Object> customerInfo = sqlSession.selectOne("salesNcollectMgmt.getCustomerInfoByProjectNo", firstProjectParam);
|
|
System.out.println("고객 정보 조회 결과: " + customerInfo);
|
|
|
|
if(customerInfo != null) {
|
|
resultMap.put("customerName", customerInfo.get("CUSTOMER_NAME"));
|
|
resultMap.put("customerRegNo", customerInfo.get("CUSTOMER_REG_NO"));
|
|
resultMap.put("customerAddress", customerInfo.get("CUSTOMER_ADDRESS"));
|
|
resultMap.put("customerBusiness", customerInfo.get("CUSTOMER_BUSINESS"));
|
|
resultMap.put("customerType", customerInfo.get("CUSTOMER_TYPE"));
|
|
resultMap.put("customerContact", customerInfo.get("CUSTOMER_CONTACT"));
|
|
System.out.println("고객명: " + customerInfo.get("CUSTOMER_NAME"));
|
|
} else {
|
|
System.out.println("고객 정보가 null입니다!");
|
|
}
|
|
|
|
// 공급자 정보 (회사 정보)
|
|
resultMap.put("supplierName", "㈜압피에스");
|
|
resultMap.put("supplierRegNo", "314-81-75146");
|
|
resultMap.put("supplierAddress", "대전광역시 유성구 국제과학10로 8");
|
|
resultMap.put("supplierBusiness", "제조");
|
|
resultMap.put("supplierType", "금속절삭가공기계의");
|
|
resultMap.put("supplierContact", "TEL:042-602-3300/FAX:042-672");
|
|
|
|
// 품목 정보 조회
|
|
List<Map<String, Object>> items = new ArrayList<Map<String, Object>>();
|
|
for(String projectNo : projectNoArray) {
|
|
Map<String, Object> itemParam = new HashMap<String, Object>();
|
|
itemParam.put("projectNo", projectNo.trim());
|
|
System.out.println("품목 정보 조회 - projectNo: " + projectNo.trim());
|
|
|
|
Map<String, Object> item = sqlSession.selectOne("salesNcollectMgmt.getTransactionStatementItem", itemParam);
|
|
System.out.println("품목 정보 조회 결과: " + item);
|
|
|
|
if(item != null) {
|
|
items.add(item);
|
|
}
|
|
}
|
|
resultMap.put("items", items);
|
|
System.out.println("총 품목 개수: " + items.size());
|
|
|
|
// 비고
|
|
resultMap.put("note", "아래와 같이 공급합니다.");
|
|
|
|
System.out.println("=== resultMap 최종 ===");
|
|
System.out.println("customerName: " + resultMap.get("customerName"));
|
|
System.out.println("items size: " + ((List)resultMap.get("items")).size());
|
|
System.out.println("supplierName: " + resultMap.get("supplierName"));
|
|
|
|
} catch (Exception e) {
|
|
System.out.println("=== 에러 발생 ===");
|
|
e.printStackTrace();
|
|
} finally {
|
|
if (sqlSession != null) {
|
|
sqlSession.close();
|
|
}
|
|
}
|
|
|
|
return resultMap;
|
|
}
|
|
|
|
/**
|
|
* 거래명세서 저장 (NSWOS100_TBL)
|
|
*/
|
|
public Map<String, Object> saveTransactionStatement(Map<String, Object> paramMap) {
|
|
SqlSession sqlSession = null;
|
|
Map<String, Object> resultMap = new HashMap<String, Object>();
|
|
|
|
try {
|
|
sqlSession = SqlMapConfig.getInstance().getSqlSession();
|
|
|
|
System.out.println("=== 거래명세서 저장 시작 ===");
|
|
System.out.println("paramMap: " + paramMap);
|
|
|
|
// 업체코드 (고객 정보에서 추출 필요 - 임시로 '0001' 사용)
|
|
String suVndCd = "0001";
|
|
|
|
// 작성일자 (오늘 날짜)
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
|
|
String issueDt = sdf.format(new Date());
|
|
|
|
// 납품일자 포맷 변환 (한글 날짜 또는 YYYY-MM-DD → YYYYMMDD)
|
|
String deliveryDate = "";
|
|
if(paramMap.get("deliveryDate") != null && !paramMap.get("deliveryDate").equals("")) {
|
|
String deliveryDateStr = String.valueOf(paramMap.get("deliveryDate"));
|
|
|
|
// 한글 날짜 형식인 경우 (예: "목요일, 11월 13, 2025")
|
|
// 오늘 날짜로 대체
|
|
if(deliveryDateStr.contains("월") || deliveryDateStr.contains("일")) {
|
|
deliveryDate = issueDt; // 작성일자와 동일하게 설정
|
|
System.out.println("납품일자 변환 (한글): " + deliveryDateStr + " → " + deliveryDate + " (오늘 날짜 사용)");
|
|
}
|
|
// YYYY-MM-DD 형식인 경우
|
|
else if(deliveryDateStr.contains("-")) {
|
|
deliveryDate = deliveryDateStr.replaceAll("-", ""); // "2025-11-13" → "20251113"
|
|
System.out.println("납품일자 변환 (하이픈): " + deliveryDateStr + " → " + deliveryDate);
|
|
}
|
|
// 이미 YYYYMMDD 형식인 경우
|
|
else if(deliveryDateStr.length() == 8) {
|
|
deliveryDate = deliveryDateStr;
|
|
System.out.println("납품일자 변환 (8자리): " + deliveryDateStr + " → " + deliveryDate);
|
|
}
|
|
// 그 외의 경우 오늘 날짜 사용
|
|
else {
|
|
deliveryDate = issueDt;
|
|
System.out.println("납품일자 변환 (기타): " + deliveryDateStr + " → " + deliveryDate + " (오늘 날짜 사용)");
|
|
}
|
|
}
|
|
|
|
// 거래명세서 번호 생성
|
|
Map<String, Object> noParam = new HashMap<String, Object>();
|
|
noParam.put("suVndCd", suVndCd);
|
|
noParam.put("issueDt", issueDt);
|
|
Integer issueNo = sqlSession.selectOne("salesNcollectMgmt.getNextTransactionStatementNo", noParam);
|
|
|
|
System.out.println("업체코드: " + suVndCd);
|
|
System.out.println("작성일자: " + issueDt);
|
|
System.out.println("거래명세서번호: " + issueNo);
|
|
|
|
// 품목 정보 저장
|
|
List<Map<String, Object>> items = (List<Map<String, Object>>) paramMap.get("items");
|
|
if(items != null && items.size() > 0) {
|
|
int seqNo = 1;
|
|
for(Map<String, Object> item : items) {
|
|
Map<String, Object> insertParam = new HashMap<String, Object>();
|
|
insertParam.put("suVndCd", suVndCd);
|
|
insertParam.put("issueDt", issueDt);
|
|
insertParam.put("issueNo", issueNo);
|
|
insertParam.put("isNo", seqNo);
|
|
|
|
// 품목 정보
|
|
insertParam.put("prodCd", ""); // 기종코드
|
|
|
|
// 발주번호 (프로젝트번호) - VARCHAR(15) 제한
|
|
String projectNos = String.valueOf(paramMap.get("projectNos"));
|
|
if(projectNos.length() > 15) {
|
|
projectNos = projectNos.substring(0, 15); // 15자로 자르기
|
|
}
|
|
insertParam.put("odOrderNo", projectNos);
|
|
|
|
// 품번 - VARCHAR(15) 제한
|
|
String spec = String.valueOf(item.get("spec"));
|
|
if(spec != null && spec.length() > 15) {
|
|
spec = spec.substring(0, 15); // 15자로 자르기
|
|
}
|
|
insertParam.put("imItemId", spec);
|
|
|
|
insertParam.put("rmDueDt", ""); // 납기일자
|
|
|
|
// 수량 정보
|
|
String quantityStr = String.valueOf(item.get("quantity"));
|
|
quantityStr = quantityStr.replaceAll(",", "").replaceAll("[^0-9]", "");
|
|
int quantity = 0;
|
|
try {
|
|
quantity = Integer.parseInt(quantityStr);
|
|
} catch(Exception e) {
|
|
quantity = 0;
|
|
}
|
|
insertParam.put("rmOrderQty", quantity); // 발주수량
|
|
insertParam.put("rmRcptQty", 0); // 입고처리수량
|
|
insertParam.put("rmRemQty", 0); // 잔량
|
|
insertParam.put("isDt", deliveryDate); // 납기일자 (포맷 변환된 값)
|
|
insertParam.put("isQty", quantity); // 납품수량
|
|
|
|
// 금액 정보
|
|
String unitPriceStr = String.valueOf(item.get("unitPrice"));
|
|
unitPriceStr = unitPriceStr.replaceAll(",", "").replaceAll("[^0-9.]", "");
|
|
double unitPrice = 0;
|
|
try {
|
|
unitPrice = Double.parseDouble(unitPriceStr);
|
|
} catch(Exception e) {
|
|
unitPrice = 0;
|
|
}
|
|
|
|
String supplyPriceStr = String.valueOf(item.get("supplyPrice"));
|
|
supplyPriceStr = supplyPriceStr.replaceAll(",", "").replaceAll("[^0-9.]", "");
|
|
double supplyPrice = 0;
|
|
try {
|
|
supplyPrice = Double.parseDouble(supplyPriceStr);
|
|
} catch(Exception e) {
|
|
supplyPrice = 0;
|
|
}
|
|
|
|
insertParam.put("isPrice", unitPrice); // 납품단가
|
|
insertParam.put("isAmount", supplyPrice); // 납품금액
|
|
|
|
System.out.println("품목 " + seqNo + " 저장: " + item.get("productName"));
|
|
System.out.println(" - 품번: " + item.get("spec"));
|
|
System.out.println(" - 수량: " + quantity);
|
|
System.out.println(" - 단가: " + unitPrice);
|
|
System.out.println(" - 금액: " + supplyPrice);
|
|
|
|
sqlSession.insert("salesNcollectMgmt.saveTransactionStatement", insertParam);
|
|
seqNo++;
|
|
}
|
|
}
|
|
|
|
sqlSession.commit();
|
|
|
|
resultMap.put("success", true);
|
|
resultMap.put("message", "거래명세서가 저장되었습니다.");
|
|
resultMap.put("issueNo", issueNo);
|
|
|
|
System.out.println("=== 거래명세서 저장 완료 ===");
|
|
|
|
} catch (Exception e) {
|
|
if(sqlSession != null) {
|
|
sqlSession.rollback();
|
|
}
|
|
System.out.println("=== 거래명세서 저장 실패 ===");
|
|
e.printStackTrace();
|
|
resultMap.put("success", false);
|
|
resultMap.put("message", "저장 중 오류가 발생했습니다: " + e.getMessage());
|
|
} finally {
|
|
if (sqlSession != null) {
|
|
sqlSession.close();
|
|
}
|
|
}
|
|
|
|
return resultMap;
|
|
}
|
|
|
|
public List<String> getAllSerialNumbers(Map<String, Object> paramMap) {
|
|
SqlSession sqlSession = null;
|
|
List<String> result = new ArrayList<String>();
|
|
|
|
try {
|
|
sqlSession = SqlMapConfig.getInstance().getSqlSession();
|
|
result = sqlSession.selectList("salesNcollectMgmt.getAllSerialNumbers", paramMap);
|
|
} catch(Exception e) {
|
|
e.printStackTrace();
|
|
} finally {
|
|
if(sqlSession != null) {
|
|
sqlSession.close();
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
}
|