매출관리까지 한 작업 중간커밋
This commit is contained in:
@@ -258,9 +258,48 @@ public class SalesNcollectMgmtController {
|
||||
// 기존 판매 정보 조회 후 환종(통화) 공통코드 세팅
|
||||
Map<String, Object> saleInfo = null;
|
||||
String salesCurrency = "";
|
||||
if(paramMap.get("orderNo") != null && !paramMap.get("orderNo").equals("")) {
|
||||
|
||||
// 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("")) {
|
||||
saleInfo = salesNcollectMgmtService.getSaleInfo(paramMap);
|
||||
salesCurrency = CommonUtils.nullToEmpty((String)saleInfo.get("SALES_CURRENCY"));
|
||||
|
||||
// 판매 정보가 비어있거나 금액이 0이면 수주 데이터로 채우기
|
||||
if(saleInfo == null ||
|
||||
(saleInfo.get("SALES_SUPPLY_PRICE") == null ||
|
||||
"0".equals(String.valueOf(saleInfo.get("SALES_SUPPLY_PRICE"))) ||
|
||||
Integer.parseInt(String.valueOf(saleInfo.get("SALES_SUPPLY_PRICE"))) == 0)) {
|
||||
// orderNo로 contractObjId 조회 후 수주 데이터 가져오기
|
||||
Map<String, Object> orderDataParam = new HashMap<String, Object>();
|
||||
orderDataParam.put("orderNo", paramMap.get("orderNo"));
|
||||
Map<String, Object> orderData = salesNcollectMgmtService.getOrderDataByOrderNo(orderDataParam);
|
||||
|
||||
if(orderData != null && orderData.get("SALES_SUPPLY_PRICE") != null) {
|
||||
// 수주 데이터를 saleInfo에 병합 (기존 S/N 등은 유지)
|
||||
if(saleInfo == null) saleInfo = new HashMap<String, Object>();
|
||||
saleInfo.put("SALES_QUANTITY", orderData.get("SALES_QUANTITY"));
|
||||
saleInfo.put("SALES_UNIT_PRICE", orderData.get("SALES_UNIT_PRICE"));
|
||||
saleInfo.put("SALES_SUPPLY_PRICE", orderData.get("SALES_SUPPLY_PRICE"));
|
||||
saleInfo.put("SALES_VAT", orderData.get("SALES_VAT"));
|
||||
saleInfo.put("SALES_TOTAL_AMOUNT", orderData.get("SALES_TOTAL_AMOUNT"));
|
||||
saleInfo.put("SALES_CURRENCY", orderData.get("SALES_CURRENCY"));
|
||||
saleInfo.put("SALES_CURRENCY_NAME", orderData.get("SALES_CURRENCY_NAME"));
|
||||
saleInfo.put("SALES_EXCHANGE_RATE", orderData.get("SALES_EXCHANGE_RATE"));
|
||||
if(saleInfo.get("SHIPPING_DATE") == null || "".equals(saleInfo.get("SHIPPING_DATE"))) {
|
||||
saleInfo.put("SHIPPING_DATE", orderData.get("SHIPPING_DATE"));
|
||||
}
|
||||
salesCurrency = CommonUtils.nullToEmpty((String)orderData.get("SALES_CURRENCY"));
|
||||
}
|
||||
}
|
||||
|
||||
request.setAttribute("saleInfo", saleInfo);
|
||||
|
||||
// orderInfo로 견적 정보 전달 (saleInfo가 이미 모든 필요한 정보를 포함)
|
||||
|
||||
@@ -974,14 +974,24 @@
|
||||
<if test="shippingMethod != null and shippingMethod != ''">
|
||||
/* SHIPPING_METHOD 필드 없음 - 검색 조건 무시 */
|
||||
</if>
|
||||
<if test="manager != null and manager != ''">
|
||||
AND T.PM_USER_ID = #{manager}
|
||||
</if>
|
||||
<if test="incoterms != null and incoterms != ''">
|
||||
/* INCOTERMS 필드 없음 - 검색 조건 무시 */
|
||||
</if>
|
||||
-- 등록일 기준 최신순 정렬 (프로젝트 번호는 보조 정렬)
|
||||
ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC
|
||||
<if test="manager != null and manager != ''">
|
||||
AND T.PM_USER_ID = #{manager}
|
||||
</if>
|
||||
<if test="incoterms != null and incoterms != ''">
|
||||
/* INCOTERMS 필드 없음 - 검색 조건 무시 */
|
||||
</if>
|
||||
<if test="salesStatus != null and salesStatus != ''">
|
||||
<choose>
|
||||
<when test="salesStatus == 'NOT_CLOSED'">
|
||||
AND (T.SALES_STATUS IS NULL OR T.SALES_STATUS = '' OR T.SALES_STATUS != '완료')
|
||||
</when>
|
||||
<otherwise>
|
||||
AND T.SALES_STATUS = #{salesStatus}
|
||||
</otherwise>
|
||||
</choose>
|
||||
</if>
|
||||
-- 등록일 기준 최신순 정렬 (프로젝트 번호는 보조 정렬)
|
||||
ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC
|
||||
</select>
|
||||
|
||||
<!-- 매출관리 그리드 목록 개수 - project_mgmt 테이블 기반 -->
|
||||
@@ -1068,13 +1078,23 @@
|
||||
<if test="shippingMethod != null and shippingMethod != ''">
|
||||
/* SHIPPING_METHOD 필드 없음 - 검색 조건 무시 */
|
||||
</if>
|
||||
<if test="manager != null and manager != ''">
|
||||
AND T.PM_USER_ID = #{manager}
|
||||
</if>
|
||||
<if test="incoterms != null and incoterms != ''">
|
||||
/* INCOTERMS 필드 없음 - 검색 조건 무시 */
|
||||
</if>
|
||||
</select>
|
||||
<if test="manager != null and manager != ''">
|
||||
AND T.PM_USER_ID = #{manager}
|
||||
</if>
|
||||
<if test="incoterms != null and incoterms != ''">
|
||||
/* INCOTERMS 필드 없음 - 검색 조건 무시 */
|
||||
</if>
|
||||
<if test="salesStatus != null and salesStatus != ''">
|
||||
<choose>
|
||||
<when test="salesStatus == 'NOT_CLOSED'">
|
||||
AND (T.SALES_STATUS IS NULL OR T.SALES_STATUS = '' OR T.SALES_STATUS != '완료')
|
||||
</when>
|
||||
<otherwise>
|
||||
AND T.SALES_STATUS = #{salesStatus}
|
||||
</otherwise>
|
||||
</choose>
|
||||
</if>
|
||||
</select>
|
||||
|
||||
<!-- 매출관리 합계 조회 (Total 공급가액, 부가세, 총액) -->
|
||||
<select id="getSalesMgmtTotals" parameterType="map" resultType="map">
|
||||
@@ -1393,5 +1413,115 @@
|
||||
WHERE T.PROJECT_NO = #{orderNo}
|
||||
</select>
|
||||
|
||||
<!--
|
||||
/**
|
||||
* 주문서 관리에서 수주 데이터 조회 (판매등록용)
|
||||
* CONTRACT_ITEM 테이블에서 수주 정보를 가져와 판매등록 폼에 자동 채우기
|
||||
* @since 2025.11.10
|
||||
* @author assistant
|
||||
* @version 1.0
|
||||
**/
|
||||
-->
|
||||
<select id="getOrderDataForSale" parameterType="map" resultType="map">
|
||||
/* salesNcollectMgmt.getOrderDataForSale - 주문서 관리에서 판매등록용 수주 데이터 조회 */
|
||||
SELECT
|
||||
-- 기본 정보
|
||||
CM.CONTRACT_NO AS ORDER_NO,
|
||||
CM.OBJID AS CONTRACT_OBJID,
|
||||
|
||||
-- 수주 금액 정보 (CONTRACT_ITEM 테이블에서 합산) - VARCHAR 타입이므로 NUMERIC으로 캐스팅
|
||||
COALESCE(SUM(CI.ORDER_QUANTITY::NUMERIC), 0) AS SALES_QUANTITY,
|
||||
COALESCE(ROUND(AVG(CI.ORDER_UNIT_PRICE::NUMERIC), 2), 0) AS SALES_UNIT_PRICE,
|
||||
COALESCE(SUM(CI.ORDER_SUPPLY_PRICE::NUMERIC), 0) AS SALES_SUPPLY_PRICE,
|
||||
COALESCE(SUM(CI.ORDER_VAT::NUMERIC), 0) AS SALES_VAT,
|
||||
COALESCE(SUM(CI.ORDER_TOTAL_AMOUNT::NUMERIC), 0) AS SALES_TOTAL_AMOUNT,
|
||||
|
||||
-- 환종 정보
|
||||
CM.CONTRACT_CURRENCY AS SALES_CURRENCY,
|
||||
CODE_NAME(CM.CONTRACT_CURRENCY) AS SALES_CURRENCY_NAME,
|
||||
COALESCE(CM.EXCHANGE_RATE::NUMERIC, 0) AS SALES_EXCHANGE_RATE,
|
||||
|
||||
-- 수주 날짜 - VARCHAR 타입이므로 그대로 사용
|
||||
CM.ORDER_DATE AS SHIPPING_DATE,
|
||||
|
||||
-- 담당자
|
||||
CM.PM_USER_ID AS MANAGER
|
||||
|
||||
FROM CONTRACT_MGMT CM
|
||||
LEFT JOIN CONTRACT_ITEM CI ON CM.OBJID::VARCHAR = CI.CONTRACT_OBJID AND UPPER(CI.STATUS) = 'ACTIVE'
|
||||
WHERE CM.OBJID = #{contractObjId}::NUMERIC
|
||||
GROUP BY
|
||||
CM.CONTRACT_NO,
|
||||
CM.OBJID,
|
||||
CM.CONTRACT_CURRENCY,
|
||||
CM.EXCHANGE_RATE,
|
||||
CM.ORDER_DATE,
|
||||
CM.PM_USER_ID
|
||||
</select>
|
||||
|
||||
<!--
|
||||
/**
|
||||
* orderNo(PROJECT_NO)로 수주 데이터 조회 (판매등록용)
|
||||
* PROJECT_MGMT에서 CONTRACT_OBJID를 찾아서 수주 데이터 조회
|
||||
* @since 2025.11.10
|
||||
* @author assistant
|
||||
* @version 1.0
|
||||
**/
|
||||
-->
|
||||
<select id="getOrderDataByOrderNo" parameterType="map" resultType="map">
|
||||
/* salesNcollectMgmt.getOrderDataByOrderNo - orderNo로 판매등록용 수주 데이터 조회 */
|
||||
SELECT
|
||||
-- 기본 정보
|
||||
CM.CONTRACT_NO AS ORDER_NO,
|
||||
CM.OBJID AS CONTRACT_OBJID,
|
||||
|
||||
-- 수주 금액 정보 (CONTRACT_ITEM 테이블에서 합산) - VARCHAR 타입이므로 NUMERIC으로 캐스팅
|
||||
COALESCE(SUM(CI.ORDER_QUANTITY::NUMERIC), 0) AS SALES_QUANTITY,
|
||||
COALESCE(ROUND(AVG(CI.ORDER_UNIT_PRICE::NUMERIC), 2), 0) AS SALES_UNIT_PRICE,
|
||||
COALESCE(SUM(CI.ORDER_SUPPLY_PRICE::NUMERIC), 0) AS SALES_SUPPLY_PRICE,
|
||||
COALESCE(SUM(CI.ORDER_VAT::NUMERIC), 0) AS SALES_VAT,
|
||||
COALESCE(SUM(CI.ORDER_TOTAL_AMOUNT::NUMERIC), 0) AS SALES_TOTAL_AMOUNT,
|
||||
|
||||
-- 환종 정보
|
||||
CM.CONTRACT_CURRENCY AS SALES_CURRENCY,
|
||||
CODE_NAME(CM.CONTRACT_CURRENCY) AS SALES_CURRENCY_NAME,
|
||||
COALESCE(CM.EXCHANGE_RATE::NUMERIC, 0) AS SALES_EXCHANGE_RATE,
|
||||
|
||||
-- 수주 날짜 - VARCHAR 타입이므로 그대로 사용
|
||||
CM.ORDER_DATE AS SHIPPING_DATE,
|
||||
|
||||
-- 담당자
|
||||
CM.PM_USER_ID AS MANAGER
|
||||
|
||||
FROM PROJECT_MGMT PM
|
||||
INNER JOIN CONTRACT_MGMT CM ON PM.CONTRACT_OBJID = CM.OBJID
|
||||
LEFT JOIN CONTRACT_ITEM CI ON CM.OBJID::VARCHAR = CI.CONTRACT_OBJID AND UPPER(CI.STATUS) = 'ACTIVE'
|
||||
WHERE PM.PROJECT_NO = #{orderNo}
|
||||
GROUP BY
|
||||
CM.CONTRACT_NO,
|
||||
CM.OBJID,
|
||||
CM.CONTRACT_CURRENCY,
|
||||
CM.EXCHANGE_RATE,
|
||||
CM.ORDER_DATE,
|
||||
CM.PM_USER_ID
|
||||
</select>
|
||||
|
||||
<!--
|
||||
/**
|
||||
* 매출마감 처리
|
||||
* @since 2025.11.10
|
||||
* @author system
|
||||
* @version 1.0
|
||||
**/
|
||||
-->
|
||||
<update id="salesDeadlineConfirm" parameterType="map">
|
||||
/* salesNcollectMgmt.salesDeadlineConfirm - PROJECT_MGMT의 SALES_STATUS를 '완료'로 업데이트 및 매출마감일 저장 */
|
||||
UPDATE PROJECT_MGMT
|
||||
SET
|
||||
SALES_STATUS = '완료',
|
||||
SALES_DEADLINE_DATE = #{deadlineDate}
|
||||
WHERE OBJID::VARCHAR = #{OBJID}
|
||||
</update>
|
||||
|
||||
</mapper>
|
||||
|
||||
|
||||
@@ -259,6 +259,58 @@ public class SalesNcollectMgmtService {
|
||||
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;
|
||||
@@ -802,34 +854,65 @@ public class SalesNcollectMgmtService {
|
||||
Map resultMap = new HashMap();
|
||||
SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(false);
|
||||
try{
|
||||
System.out.println("===== 매출마감 처리 시작 =====");
|
||||
System.out.println("paramMap: " + paramMap);
|
||||
|
||||
/*String checkParam = CommonUtils.checkNull(paramMap.get("checkArr"));
|
||||
String[] targetObjIdList = checkParam.split(",");
|
||||
String objIdListStr = CommonUtils.checkNull(paramMap.get("objIdList"));
|
||||
String deadlineDate = CommonUtils.checkNull(paramMap.get("deadlineDate"));
|
||||
|
||||
if(null != targetObjIdList && 0 < targetObjIdList.length){*/
|
||||
|
||||
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]);
|
||||
//HashMap sqlParamMap = new HashMap();
|
||||
//sqlParamMap.put("OBJID", objId);
|
||||
//paramMap.put("PAYMENT_DATE", CommonUtils.getDateTime(new Date(), "yyyy-MM-dd"));
|
||||
sqlSession.update("salesNcollectMgmt.salesDeadlineConfirm",paramMap);
|
||||
/*}*/
|
||||
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", "확인되었습니다");
|
||||
/*}*/
|
||||
resultMap.put("msg", targetObjIdList.length + "건의 매출마감이 완료되었습니다.");
|
||||
}
|
||||
System.out.println("===== 매출마감 처리 완료 =====");
|
||||
}catch(Exception e){
|
||||
resultMap.put("result", false);
|
||||
resultMap.put("msg", "확인에 실패하였습니다");
|
||||
resultMap.put("msg", "매출마감 처리 중 오류가 발생했습니다.");
|
||||
sqlSession.rollback();
|
||||
throw e;
|
||||
System.out.println("===== 매출마감 처리 중 예외 발생 =====");
|
||||
e.printStackTrace();
|
||||
}finally{
|
||||
sqlSession.close();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user