diff --git a/WebContent/WEB-INF/classes/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml b/WebContent/WEB-INF/classes/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml index b6a1c49..6858911 100644 --- a/WebContent/WEB-INF/classes/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml +++ b/WebContent/WEB-INF/classes/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml @@ -812,367 +812,268 @@ ,editEmpNo = #{cretEmpNo} /* 수정자 */ - + - + @@ -1336,7 +1237,7 @@ * @version 1.1 **/ --> - + /* salesNcollectMgmt.insertSaleRegistration - sales_registration에 판매 데이터 저장 */ INSERT INTO sales_registration ( project_no, @@ -1402,7 +1303,6 @@ incoterms = EXCLUDED.incoterms, upd_date = NOW(), upd_user_id = EXCLUDED.reg_user_id - RETURNING sale_no - - /* salesNcollectMgmt.insertSplitShipment - 분할출하 데이터 저장 */ - INSERT INTO shipment_log ( - parent_sale_no, - target_objid, - log_type, - is_split_record, - split_quantity, - original_quantity, - serial_no, - shipping_date, - shipping_method, - shipping_status, - sales_unit_price, - sales_supply_price, - sales_vat, - sales_total_amount, - sales_currency, - sales_exchange_rate, - manager_user_id, - incoterms, - remark, - reg_user_id, - reg_date - ) VALUES ( - #{saleNo}::INTEGER, - #{projectNo}, - 'SPLIT_SHIPMENT', - TRUE, - #{splitQuantity}::INTEGER, - #{originalQuantity}::INTEGER, - #{serialNo}, - - - TO_DATE(#{shippingDate}, 'YYYY-MM-DD'), - - - NULL, - - - #{shippingMethod}, - 'PENDING', - #{salesUnitPrice}::NUMERIC, - #{salesSupplyPrice}::NUMERIC, - #{salesVat}::NUMERIC, - #{salesTotalAmount}::NUMERIC, - #{salesCurrency}, - #{salesExchangeRate}::NUMERIC, - #{managerUserId}, - #{incoterms}, - #{remark}, - #{regUserId}, - NOW() - ) - - - - - - - - /* salesNcollectMgmt.deleteSplitShipment - 분할출하 삭제 */ - DELETE FROM shipment_log - WHERE log_id = #{logId}::INTEGER - AND is_split_record = TRUE - - - - - /* salesNcollectMgmt.deleteAllSplitShipments - 모든 분할출하 삭제 */ - DELETE FROM shipment_log - WHERE parent_sale_no = ( - SELECT sale_no FROM sales_registration - WHERE project_no = #{orderNo} - ) - AND is_split_record = TRUE - - - - - /* salesNcollectMgmt.updateSplitFlag - 분할출하 플래그 업데이트 */ - UPDATE sales_registration - SET has_split_shipment = ( - SELECT COUNT(*) > 0 - FROM shipment_log - WHERE parent_sale_no = #{saleNo}::INTEGER - AND is_split_record = TRUE - ), - upd_date = NOW(), - upd_user_id = #{updUserId} - WHERE sale_no = #{saleNo}::INTEGER - - - - - diff --git a/WebContent/WEB-INF/view/salesmgmt/salesMgmt/revenueMgmtList.jsp b/WebContent/WEB-INF/view/salesmgmt/salesMgmt/revenueMgmtList.jsp index 3e3010e..5e8daae 100644 --- a/WebContent/WEB-INF/view/salesmgmt/salesMgmt/revenueMgmtList.jsp +++ b/WebContent/WEB-INF/view/salesmgmt/salesMgmt/revenueMgmtList.jsp @@ -201,7 +201,6 @@ function fn_search(){ // 그리드 초기화 _tabulGrid = new Tabulator("#mainGrid", { layout: _tabul_layout_fitColumns, - height: "auto", columns: columns, data: response.RESULTLIST || [] }); diff --git a/WebContent/WEB-INF/view/salesmgmt/salesMgmt/salesMgmtList.jsp b/WebContent/WEB-INF/view/salesmgmt/salesMgmt/salesMgmtList.jsp index c24b44f..dc151e7 100644 --- a/WebContent/WEB-INF/view/salesmgmt/salesMgmt/salesMgmtList.jsp +++ b/WebContent/WEB-INF/view/salesmgmt/salesMgmt/salesMgmtList.jsp @@ -13,44 +13,6 @@ <%=Constants.SYSTEM_NAME%> - - @@ -998,13 +580,10 @@ -
- 기본 정보 - - +
+ 기본 정보
- +
@@ -1018,7 +597,7 @@ - + - + - +
@@ -1030,7 +609,7 @@
@@ -1042,7 +621,7 @@
@@ -1068,11 +647,11 @@
- -
+ +
금액 정보
- +
@@ -1145,21 +724,6 @@
- - -
diff --git a/src/com/pms/salesmgmt/controller/SalesNcollectMgmtController.java b/src/com/pms/salesmgmt/controller/SalesNcollectMgmtController.java index d8d6468..91d78a1 100644 --- a/src/com/pms/salesmgmt/controller/SalesNcollectMgmtController.java +++ b/src/com/pms/salesmgmt/controller/SalesNcollectMgmtController.java @@ -281,11 +281,8 @@ public class SalesNcollectMgmtController { @RequestMapping(value = "/salesMgmt/salesMgmtGridList.do", method = RequestMethod.POST) @ResponseBody public Map getSalesMgmtGridList(HttpServletRequest request, @RequestParam Map paramMap) { - // 기본 쿼리 사용 (분할출하 VIEW는 나중에 필요시 활성화) - String queryId = "salesNcollectMgmt.getSalesMgmtGridList"; - // commonService.selectListPagingNew를 사용하여 페이지네이션 HTML 생성 - commonService.selectListPagingNew(queryId, request, paramMap); + commonService.selectListPagingNew("salesNcollectMgmt.getSalesMgmtGridList", request, paramMap); return paramMap; } @@ -729,49 +726,4 @@ public class SalesNcollectMgmtController { Map resultMap = salesNcollectMgmtService.salesDeadlineConfirm(request, paramMap); return resultMap; } - - /** - *
-	 * 분할출하 저장
-	 * 
- * @param request - * @param paramMap - 분할출하 정보 - * @return Map - */ - @RequestMapping(value = "/salesMgmt/saveSplitShipments.do", method = RequestMethod.POST) - @ResponseBody - public Map saveSplitShipments(HttpServletRequest request, - @RequestParam Map paramMap) { - return salesNcollectMgmtService.saveSplitShipments(request, paramMap); - } - - /** - *
-	 * 분할출하 목록 조회
-	 * 
- * @param paramMap - 조회 조건 (saleNo) - * @return Map - */ - @RequestMapping(value = "/salesMgmt/getSplitShipments.do", method = RequestMethod.POST) - @ResponseBody - public Map getSplitShipments(@RequestParam Map paramMap) { - List> list = salesNcollectMgmtService.getSplitShipmentList(paramMap); - Map resultMap = new HashMap<>(); - resultMap.put("data", list); - resultMap.put("result", true); - return resultMap; - } - - /** - *
-	 * 분할출하 삭제
-	 * 
- * @param paramMap - 삭제 조건 (logId) - * @return Map - */ - @RequestMapping(value = "/salesMgmt/deleteSplitShipment.do", method = RequestMethod.POST) - @ResponseBody - public Map deleteSplitShipment(@RequestParam Map paramMap) { - return salesNcollectMgmtService.deleteSplitShipment(paramMap); - } -} +} \ No newline at end of file diff --git a/src/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml b/src/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml index b6a1c49..6858911 100644 --- a/src/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml +++ b/src/com/pms/salesmgmt/mapper/salesNcollectMgmt.xml @@ -812,367 +812,268 @@ ,editEmpNo = #{cretEmpNo} /* 수정자 */ - + - + @@ -1336,7 +1237,7 @@ * @version 1.1 **/ --> - + /* salesNcollectMgmt.insertSaleRegistration - sales_registration에 판매 데이터 저장 */ INSERT INTO sales_registration ( project_no, @@ -1402,7 +1303,6 @@ incoterms = EXCLUDED.incoterms, upd_date = NOW(), upd_user_id = EXCLUDED.reg_user_id - RETURNING sale_no - - /* salesNcollectMgmt.insertSplitShipment - 분할출하 데이터 저장 */ - INSERT INTO shipment_log ( - parent_sale_no, - target_objid, - log_type, - is_split_record, - split_quantity, - original_quantity, - serial_no, - shipping_date, - shipping_method, - shipping_status, - sales_unit_price, - sales_supply_price, - sales_vat, - sales_total_amount, - sales_currency, - sales_exchange_rate, - manager_user_id, - incoterms, - remark, - reg_user_id, - reg_date - ) VALUES ( - #{saleNo}::INTEGER, - #{projectNo}, - 'SPLIT_SHIPMENT', - TRUE, - #{splitQuantity}::INTEGER, - #{originalQuantity}::INTEGER, - #{serialNo}, - - - TO_DATE(#{shippingDate}, 'YYYY-MM-DD'), - - - NULL, - - - #{shippingMethod}, - 'PENDING', - #{salesUnitPrice}::NUMERIC, - #{salesSupplyPrice}::NUMERIC, - #{salesVat}::NUMERIC, - #{salesTotalAmount}::NUMERIC, - #{salesCurrency}, - #{salesExchangeRate}::NUMERIC, - #{managerUserId}, - #{incoterms}, - #{remark}, - #{regUserId}, - NOW() - ) - - - - - - - - /* salesNcollectMgmt.deleteSplitShipment - 분할출하 삭제 */ - DELETE FROM shipment_log - WHERE log_id = #{logId}::INTEGER - AND is_split_record = TRUE - - - - - /* salesNcollectMgmt.deleteAllSplitShipments - 모든 분할출하 삭제 */ - DELETE FROM shipment_log - WHERE parent_sale_no = ( - SELECT sale_no FROM sales_registration - WHERE project_no = #{orderNo} - ) - AND is_split_record = TRUE - - - - - /* salesNcollectMgmt.updateSplitFlag - 분할출하 플래그 업데이트 */ - UPDATE sales_registration - SET has_split_shipment = ( - SELECT COUNT(*) > 0 - FROM shipment_log - WHERE parent_sale_no = #{saleNo}::INTEGER - AND is_split_record = TRUE - ), - upd_date = NOW(), - upd_user_id = #{updUserId} - WHERE sale_no = #{saleNo}::INTEGER - - - - - diff --git a/src/com/pms/salesmgmt/service/SalesNcollectMgmtService.java b/src/com/pms/salesmgmt/service/SalesNcollectMgmtService.java index a47a8fc..2d68291 100644 --- a/src/com/pms/salesmgmt/service/SalesNcollectMgmtService.java +++ b/src/com/pms/salesmgmt/service/SalesNcollectMgmtService.java @@ -835,267 +835,4 @@ public class SalesNcollectMgmtService { } return resultMap; } - - /** - *
-	 * 분할출하 저장 (여러 건)
-	 * 
- * @param request - * @param paramMap - 분할출하 정보 (JSON 배열) - * @return Map - */ - public Map saveSplitShipments(HttpServletRequest request, Map paramMap) { - Map resultMap = new HashMap(); - SqlSession sqlSession = null; - - try { - sqlSession = SqlMapConfig.getInstance().getSqlSession(false); - PersonBean person = (PersonBean) request.getSession().getAttribute(Constants.PERSON_BEAN); - String userId = person.getUserId(); - - // 분할출하 데이터 JSON 파싱 - String splitDataJson = CommonUtils.checkNull(paramMap.get("splitShipments")); - if (StringUtils.isBlank(splitDataJson) || "[]".equals(splitDataJson)) { - // 분할출하 데이터가 없으면 일반 저장만 수행 - return saveSaleRegistration(request, paramMap); - } - - // JSON 파싱 (간단한 파싱 - 실제로는 Jackson 등 사용 권장) - List> splitList = parseSplitShipments(splitDataJson); - - // 원본 sales_registration 데이터 조회 또는 생성 - String projectNo = CommonUtils.checkNull(paramMap.get("orderNo")); - Map saleInfo = sqlSession.selectOne("salesNcollectMgmt.getSaleInfo", paramMap); - - Integer saleNo = null; - int originalQuantity = 0; - BigDecimal salesUnitPrice = BigDecimal.ZERO; - String salesCurrency = ""; - BigDecimal salesExchangeRate = BigDecimal.ONE; - String incoterms = ""; - - if (saleInfo != null && saleInfo.get("SALE_NO") != null) { - // 기존 판매 정보가 있는 경우 - saleNo = Integer.parseInt(saleInfo.get("SALE_NO").toString()); - originalQuantity = Integer.parseInt(CommonUtils.checkNull(saleInfo.get("SALES_QUANTITY"), "0")); - salesUnitPrice = new BigDecimal(CommonUtils.checkNull(saleInfo.get("SALES_UNIT_PRICE"), "0")); - salesCurrency = CommonUtils.checkNull(saleInfo.get("SALES_CURRENCY")); - salesExchangeRate = new BigDecimal(CommonUtils.checkNull(saleInfo.get("SALES_EXCHANGE_RATE"), "1")); - incoterms = CommonUtils.checkNull(saleInfo.get("INCOTERMS")); - } else { - // 신규 판매 정보 생성 - sqlSession.insert("salesNcollectMgmt.insertSaleRegistration", paramMap); - - // INSERT 후 반환된 saleNo 사용 (useGeneratedKeys로 자동 설정됨) - if (paramMap.get("saleNo") == null) { - resultMap.put("result", false); - resultMap.put("msg", "판매 정보 저장 후 sale_no 생성 실패"); - return resultMap; - } - - saleNo = Integer.parseInt(paramMap.get("saleNo").toString()); - originalQuantity = Integer.parseInt(CommonUtils.checkNull(paramMap.get("salesQuantity"), "0")); - salesUnitPrice = new BigDecimal(CommonUtils.checkNull(paramMap.get("salesUnitPrice"), "0")); - salesCurrency = CommonUtils.checkNull(paramMap.get("salesCurrency")); - salesExchangeRate = new BigDecimal(CommonUtils.checkNull(paramMap.get("salesExchangeRate"), "1")); - incoterms = CommonUtils.checkNull(paramMap.get("incoterms")); - } - - // 분할 수량 합계 검증 - int totalSplitQty = 0; - for (Map split : splitList) { - String qtyStr = CommonUtils.checkNull(split.get("splitQuantity"), "0"); - totalSplitQty += Integer.parseInt(qtyStr); - } - - if (totalSplitQty > originalQuantity) { - resultMap.put("result", false); - resultMap.put("msg", "분할 수량 합계(" + totalSplitQty + ")가 원본 수량(" + originalQuantity + ")을 초과했습니다."); - return resultMap; - } - - // 기존 분할출하 삭제 (재저장 방식) - sqlSession.delete("salesNcollectMgmt.deleteAllSplitShipments", paramMap); - - // 분할출하 데이터 저장 - for (Map split : splitList) { - split.put("saleNo", saleNo); - split.put("projectNo", projectNo); - split.put("originalQuantity", originalQuantity); - split.put("regUserId", userId); - - // 금액 계산 - int splitQty = Integer.parseInt(CommonUtils.checkNull(split.get("splitQuantity"), "0")); - BigDecimal supplyPrice = salesUnitPrice.multiply(new BigDecimal(splitQty)); - BigDecimal vat = supplyPrice.multiply(new BigDecimal("0.1")); - BigDecimal totalAmount = supplyPrice.add(vat); - - split.put("salesUnitPrice", salesUnitPrice); - split.put("salesSupplyPrice", supplyPrice); - split.put("salesVat", vat); - split.put("salesTotalAmount", totalAmount); - split.put("salesCurrency", salesCurrency); - split.put("salesExchangeRate", salesExchangeRate); - - // incoterms가 없으면 원본 값 사용 - if (StringUtils.isBlank(CommonUtils.checkNull(split.get("incoterms")))) { - split.put("incoterms", incoterms); - } - - // managerUserId가 없으면 현재 사용자 - if (StringUtils.isBlank(CommonUtils.checkNull(split.get("managerUserId")))) { - split.put("managerUserId", userId); - } - - sqlSession.insert("salesNcollectMgmt.insertSplitShipment", split); - } - - // sales_registration의 has_split_shipment 플래그 업데이트 - paramMap.put("saleNo", saleNo); - paramMap.put("updUserId", userId); - sqlSession.update("salesNcollectMgmt.updateSplitFlag", 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; - } - - /** - *
-	 * 분할출하 목록 조회
-	 * 
- * @param paramMap - 조회 조건 - * @return List - */ - @SuppressWarnings({ "rawtypes", "unchecked" }) - public List> getSplitShipmentList(Map paramMap) { - List> resultList = new ArrayList>(); - SqlSession sqlSession = null; - - try { - sqlSession = SqlMapConfig.getInstance().getSqlSession(); - resultList = (ArrayList) sqlSession.selectList("salesNcollectMgmt.getSplitShipmentList", paramMap); - } catch (Exception e) { - e.printStackTrace(); - } finally { - if (sqlSession != null) { - sqlSession.close(); - } - } - - return CommonUtils.toUpperCaseMapKey(resultList); - } - - /** - *
-	 * 분할출하 삭제
-	 * 
- * @param paramMap - 삭제 조건 - * @return Map - */ - public Map deleteSplitShipment(Map paramMap) { - Map resultMap = new HashMap(); - SqlSession sqlSession = null; - - try { - sqlSession = SqlMapConfig.getInstance().getSqlSession(false); - - int cnt = sqlSession.delete("salesNcollectMgmt.deleteSplitShipment", paramMap); - - if (cnt > 0) { - // has_split_shipment 플래그 업데이트 - sqlSession.update("salesNcollectMgmt.updateSplitFlag", paramMap); - - sqlSession.commit(); - resultMap.put("result", true); - resultMap.put("msg", "삭제되었습니다."); - } else { - resultMap.put("result", false); - 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; - } - - /** - *
-	 * 분할출하 JSON 문자열 파싱
-	 * 
- * @param jsonStr - JSON 문자열 - * @return List - */ - private List> parseSplitShipments(String jsonStr) { - List> result = new ArrayList>(); - - try { - // 간단한 JSON 파싱 (실제로는 Jackson 또는 Gson 사용 권장) - // 형식: [{"shippingDate":"2024-01-01","splitQuantity":"10",...},...] - jsonStr = jsonStr.trim(); - if (jsonStr.startsWith("[")) { - jsonStr = jsonStr.substring(1); - } - if (jsonStr.endsWith("]")) { - jsonStr = jsonStr.substring(0, jsonStr.length() - 1); - } - - // 각 객체를 분리 - String[] objects = jsonStr.split("\\},\\{"); - - for (String obj : objects) { - obj = obj.replace("{", "").replace("}", "").trim(); - if (obj.isEmpty()) continue; - - Map map = new HashMap(); - - // 각 속성을 파싱 - String[] pairs = obj.split("\",\""); - for (String pair : pairs) { - pair = pair.replace("\"", "").trim(); - String[] keyValue = pair.split(":"); - if (keyValue.length == 2) { - String key = keyValue[0].trim(); - String value = keyValue[1].trim(); - map.put(key, value); - } - } - - if (!map.isEmpty()) { - result.add(map); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - - return result; - } -} +} \ No newline at end of file