diff --git a/WebContent/WEB-INF/view/salesmgmt/salesMgmt/revenueMgmtList.jsp b/WebContent/WEB-INF/view/salesmgmt/salesMgmt/revenueMgmtList.jsp index 85f0e41..a291ed1 100644 --- a/WebContent/WEB-INF/view/salesmgmt/salesMgmt/revenueMgmtList.jsp +++ b/WebContent/WEB-INF/view/salesmgmt/salesMgmt/revenueMgmtList.jsp @@ -78,10 +78,10 @@ return false; } - // 선택된 OBJID 목록 - var objIdList = []; + // 선택된 LOG_ID 목록 + var logIdList = []; for(var i = 0; i < targetObj.length; i++){ - objIdList.push(fnc_checkNull(targetObj[i].OBJID)); + logIdList.push(fnc_checkNull(targetObj[i].LOG_ID)); } // 단건 선택 시 기존 마감정보 불러오기 @@ -164,7 +164,7 @@ url: "/revenueMgmt/saveDeadlineInfo.do", type: "POST", data: { - "objIdList": objIdList.join(','), + "logIdList": logIdList.join(','), "taxType": formData.taxType, "taxInvoiceDate": formData.taxInvoiceDate, "exportDeclNo": formData.exportDeclNo, @@ -286,17 +286,17 @@ }).then(function(result) { if (result.isConfirmed) { var deadlineDate = result.value; - var objIdList = []; + var logIdList = []; for(var i = 0; i < targetObj.length; i++){ - objIdList.push(fnc_checkNull(targetObj[i].OBJID)); + logIdList.push(fnc_checkNull(targetObj[i].LOG_ID)); } $.ajax({ url: "/salesNcollectMgmt/salesDeadlineConfirm.do", type: "POST", data: { - "objIdList": objIdList.join(','), + "logIdList": logIdList.join(','), "deadlineDate": deadlineDate }, dataType: "json", @@ -637,7 +637,7 @@ function fn_FileRegist(objId, docType, docTypeName){
- + + /* salesNcollectMgmt.getRevenueMgmtGridList - shipment_log 기반 매출관리 조회 */ + SELECT + T.OBJID, + T.PROJECT_NO, + T.CONTRACT_OBJID, + SL.log_id AS LOG_ID, + COALESCE(SL.sales_deadline_date, '') AS SALES_DEADLINE_DATE, + COALESCE(SL.tax_type, '') AS TAX_TYPE, + COALESCE(CODE_NAME(SL.tax_type), '') AS TAX_TYPE_NAME, + COALESCE(SL.tax_invoice_date, '') AS TAX_INVOICE_DATE, + COALESCE(SL.export_decl_no, '') AS EXPORT_DECL_NO, + COALESCE(SL.loading_date, '') AS LOADING_DATE, + CODE_NAME(T.CATEGORY_CD) AS ORDER_TYPE, + CODE_NAME(T.PRODUCT) AS PRODUCT_TYPE, + CODE_NAME(T.AREA_CD) AS NATION, + CASE + WHEN T.CUSTOMER_OBJID LIKE 'C_%' THEN + (SELECT CLIENT_NM FROM CLIENT_MNG AS C WHERE 'C_' || C.OBJID::VARCHAR = T.CUSTOMER_OBJID) + ELSE + (SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID::VARCHAR = T.CUSTOMER_OBJID::VARCHAR) + END AS CUSTOMER, + T.PART_NO AS PRODUCT_NO, + T.PART_NAME AS PRODUCT_NAME, + COALESCE(( + SELECT STRING_AGG(CIS.SERIAL_NO, ',' ORDER BY CIS.SEQ) + FROM CONTRACT_ITEM CI + JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID AND CIS.STATUS = 'ACTIVE' + WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID + AND CI.PART_OBJID = T.PART_OBJID AND CI.STATUS = 'ACTIVE' + ), '') AS SERIAL_NO, + COALESCE(T.QUANTITY::numeric, 0) AS ORDER_QUANTITY, + (SELECT CM.PO_NO FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID) AS PO_NO, + COALESCE(T.CONTRACT_DATE, (SELECT CM.order_date FROM CONTRACT_MGMT CM WHERE CM.OBJID = T.CONTRACT_OBJID)) AS ORDER_DATE, + COALESCE(SL.split_quantity, 0) AS SALES_QUANTITY, + COALESCE(SL.sales_unit_price, 0) AS SALES_UNIT_PRICE, + COALESCE(SL.sales_supply_price, 0) AS SALES_SUPPLY_PRICE, + COALESCE(SL.sales_vat, 0) AS SALES_VAT, + COALESCE(SL.sales_total_amount, 0) AS SALES_TOTAL_AMOUNT, + COALESCE(SL.sales_total_amount, 0) AS SALES_TOTAL_AMOUNT_KRW, + COALESCE(SL.sales_currency, T.CONTRACT_CURRENCY) AS SALES_CURRENCY, + CODE_NAME(COALESCE(SL.sales_currency, T.CONTRACT_CURRENCY)) AS SALES_CURRENCY_NAME, + COALESCE(SL.sales_exchange_rate, 0) AS SALES_EXCHANGE_RATE, + COALESCE(TO_CHAR(SL.shipping_date, 'YYYY-MM-DD'), '') AS SHIPPING_DATE, + COALESCE(SL.shipping_method, '') AS SHIPPING_METHOD, + COALESCE( + (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = SL.manager_user_id), + (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = T.PM_USER_ID) + ) AS MANAGER, + COALESCE(SL.incoterms, '') AS INCOTERMS, + CASE + WHEN SL.sales_deadline_date IS NOT NULL AND SL.sales_deadline_date != '' THEN '완료' + ELSE '' + END AS SALES_STATUS + FROM PROJECT_MGMT AS T + INNER JOIN shipment_log SL ON SL.target_objid = T.PROJECT_NO + WHERE 1 = 1 + AND T.PROJECT_NO IS NOT NULL + AND T.PROJECT_NO != '' + AND EXISTS ( + SELECT 1 FROM CONTRACT_MGMT CM + WHERE CM.OBJID = T.CONTRACT_OBJID + AND CODE_NAME(CM.CONTRACT_RESULT) IN ('수주(FCST)', '수주') + ) + + AND T.CATEGORY_CD = #{orderType} + + + AND T.PRODUCT = #{productType} + + + AND T.AREA_CD = #{nation} + + + AND T.CUSTOMER_OBJID = #{customer_objid} + + + AND ( + + T.PART_NO = #{search_partNo} + + + OR + + + T.PART_NAME = #{search_partName} + + ) + + + AND EXISTS ( + SELECT 1 FROM CONTRACT_ITEM CI + JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID + WHERE CI.CONTRACT_OBJID = T.CONTRACT_OBJID + AND CI.PART_OBJID = T.PART_OBJID + AND CI.STATUS = 'ACTIVE' + AND UPPER(CIS.SERIAL_NO) LIKE UPPER(CONCAT('%', #{serialNo}, '%')) + AND UPPER(CIS.STATUS) = 'ACTIVE' + ) + + + AND EXISTS ( + SELECT 1 FROM CONTRACT_MGMT CM + WHERE CM.OBJID = T.CONTRACT_OBJID + AND UPPER(CM.PO_NO) LIKE UPPER(CONCAT('%', #{poNo}, '%')) + ) + + + AND EXISTS ( + SELECT 1 FROM CONTRACT_MGMT CM + WHERE CM.OBJID = T.CONTRACT_OBJID + AND TO_DATE(CM.ORDER_DATE, 'YYYY-MM-DD') =]]> TO_DATE(#{orderDateFrom}, 'YYYY-MM-DD') + ) + + + AND EXISTS ( + SELECT 1 FROM CONTRACT_MGMT CM + WHERE CM.OBJID = T.CONTRACT_OBJID + AND TO_DATE(CM.ORDER_DATE, 'YYYY-MM-DD') TO_DATE(#{orderDateTo}, 'YYYY-MM-DD') + ) + + + AND SL.shipping_date =]]> TO_DATE(#{shippingDateFrom}, 'YYYY-MM-DD') + + + AND SL.shipping_date TO_DATE(#{shippingDateTo}, 'YYYY-MM-DD') + + + AND SL.sales_deadline_date IS NOT NULL + AND TO_DATE(SL.sales_deadline_date, 'YYYY-MM-DD') =]]> TO_DATE(#{salesDeadlineFrom}, 'YYYY-MM-DD') + + + AND SL.sales_deadline_date IS NOT NULL + AND TO_DATE(SL.sales_deadline_date, 'YYYY-MM-DD') TO_DATE(#{salesDeadlineTo}, 'YYYY-MM-DD') + + ORDER BY SL.shipping_date DESC, SL.log_id DESC + LIMIT #{COUNT_PER_PAGE} OFFSET (#{PAGE_INDEX} - 1) * #{COUNT_PER_PAGE} + + + + + + + + + + + + + + /* salesNcollectMgmt.saveShipmentLogDeadlineInfo - 출하건별 마감정보 저장 */ + UPDATE shipment_log SET + tax_type = #{taxType} + , tax_invoice_date = #{taxInvoiceDate} + , export_decl_no = #{exportDeclNo} + , loading_date = #{loadingDate} + WHERE log_id = #{logId}::integer + + + + + /* salesNcollectMgmt.updateShipmentLogSlipInfo - 출하건별 전표 연동 정보 저장 */ + UPDATE shipment_log SET + sales_deadline_date = #{deadlineDate}, + sales_slip_date = #{slipDate}, + sales_slip_menu_sq = #{slipMenuSq} + WHERE log_id = #{logId}::integer + + + + + + + + /* salesNcollectMgmt.updateProjectSalesStatus - 모든 출하건 마감 시 프로젝트 '완료' 처리 */ + UPDATE PROJECT_MGMT + SET SALES_STATUS = '완료', + SALES_DEADLINE_DATE = #{deadlineDate} + WHERE PROJECT_NO = #{projectNo} + + + diff --git a/src/com/pms/salesmgmt/service/SalesNcollectMgmtService.java b/src/com/pms/salesmgmt/service/SalesNcollectMgmtService.java index 6e35906..0ae5ab2 100644 --- a/src/com/pms/salesmgmt/service/SalesNcollectMgmtService.java +++ b/src/com/pms/salesmgmt/service/SalesNcollectMgmtService.java @@ -237,7 +237,38 @@ public class SalesNcollectMgmtService { return totalsMap; } - + + /** + * 매출관리 합계 조회 (shipment_log 기반) + */ + public Map getRevenueMgmtTotals(Map paramMap) { + SqlSession sqlSession = null; + Map totalsMap = new HashMap(); + + try { + sqlSession = SqlMapConfig.getInstance().getSqlSession(); + totalsMap = sqlSession.selectOne("salesNcollectMgmt.getRevenueMgmtTotals", paramMap); + + if(totalsMap == null) { + totalsMap = new HashMap(); + 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; + } + /** *
 	 * 판매 정보 조회
@@ -991,12 +1022,12 @@ public Map saveSaleRegistration(HttpServletRequest request, Map<
 		Map resultMap = new HashMap();
 		SqlSession sqlSession = null;
 		try {
-			System.out.println("===== 매출마감 + 아마란스 전표연동 시작 =====");
+			System.out.println("===== 매출마감 + 아마란스 전표연동 시작 (shipment_log 기반) =====");
 
-			String objIdListStr = CommonUtils.checkNull(paramMap.get("objIdList"));
+			String logIdListStr = CommonUtils.checkNull(paramMap.get("logIdList"));
 			String deadlineDate = CommonUtils.checkNull(paramMap.get("deadlineDate"));
 
-			if (objIdListStr == null || objIdListStr.isEmpty()) {
+			if (logIdListStr == null || logIdListStr.isEmpty()) {
 				resultMap.put("result", false);
 				resultMap.put("msg", "선택된 항목이 없습니다.");
 				return resultMap;
@@ -1007,8 +1038,8 @@ public Map saveSaleRegistration(HttpServletRequest request, Map<
 				return resultMap;
 			}
 
-			String[] targetObjIdList = objIdListStr.split(",");
-			if (targetObjIdList == null || targetObjIdList.length == 0) {
+			String[] targetLogIdList = logIdListStr.split(",");
+			if (targetLogIdList == null || targetLogIdList.length == 0) {
 				resultMap.put("result", false);
 				resultMap.put("msg", "선택된 항목이 없습니다.");
 				return resultMap;
@@ -1016,39 +1047,36 @@ public Map saveSaleRegistration(HttpServletRequest request, Map<
 
 			sqlSession = SqlMapConfig.getInstance().getSqlSession(false);
 
-			// 1) 선택된 항목들의 전표 데이터 조회
+			// 1) 선택된 shipment_log 항목들의 전표 데이터 조회
 			List> slipDataList = new ArrayList>();
-			for (int i = 0; i < targetObjIdList.length; i++) {
-				String objId = CommonUtils.checkNull(targetObjIdList[i]);
-				if (objId.isEmpty()) continue;
+			for (int i = 0; i < targetLogIdList.length; i++) {
+				String logId = CommonUtils.checkNull(targetLogIdList[i]);
+				if (logId.isEmpty()) continue;
 
 				HashMap queryParam = new HashMap();
-				queryParam.put("OBJID", objId);
-				Map slipData = sqlSession.selectOne("salesNcollectMgmt.getSlipDataForDeadline", queryParam);
+				queryParam.put("logId", logId);
+				Map slipData = sqlSession.selectOne("salesNcollectMgmt.getSlipDataForDeadlineByLogId", queryParam);
 
 				if (slipData == null) {
 					resultMap.put("result", false);
-					resultMap.put("msg", "프로젝트 정보를 찾을 수 없습니다. (OBJID: " + objId + ")");
+					resultMap.put("msg", "출하 정보를 찾을 수 없습니다. (LOG_ID: " + logId + ")");
 					return resultMap;
 				}
 
-				// 이미 마감 완료된 건 체크
 				String salesStatus = CommonUtils.checkNull(slipData.get("SALES_STATUS"));
-				if ("완료".equals(salesStatus)) {
+				if (salesStatus != null && !salesStatus.isEmpty()) {
 					resultMap.put("result", false);
-					resultMap.put("msg", "이미 매출마감 완료된 건이 포함되어 있습니다. (" + slipData.get("PROJECT_NO") + ")");
+					resultMap.put("msg", "이미 매출마감 완료된 건이 포함되어 있습니다. (" + slipData.get("PROJECT_NO") + " / LOG_ID: " + logId + ")");
 					return resultMap;
 				}
 
-				// 마감정보 등록 여부 체크
 				String taxType = CommonUtils.checkNull(slipData.get("TAX_TYPE"));
 				if (taxType.isEmpty()) {
 					resultMap.put("result", false);
-					resultMap.put("msg", "마감정보를 먼저 등록해주세요. (" + slipData.get("PROJECT_NO") + ")");
+					resultMap.put("msg", "마감정보를 먼저 등록해주세요. (" + slipData.get("PROJECT_NO") + " / LOG_ID: " + logId + ")");
 					return resultMap;
 				}
 
-				// ERP 거래처코드 체크
 				String erpClientCd = CommonUtils.checkNull(slipData.get("ERP_CLIENT_CD"));
 				if (erpClientCd.isEmpty()) {
 					resultMap.put("result", false);
@@ -1075,7 +1103,7 @@ public Map saveSaleRegistration(HttpServletRequest request, Map<
 				groupByCustomer.get(customerKey).add(data);
 			}
 
-			// 3) DB에서 계정과목 코드 조회 (erp_acct_code → api11A02로 동기화된 값)
+			// 3) DB에서 계정과목 코드 조회
 			SalesSlipApiClient slipApiClient = new SalesSlipApiClient();
 			String erpBaseUrl = "https://erp.rps-korea.com";
 
@@ -1096,6 +1124,7 @@ public Map saveSaleRegistration(HttpServletRequest request, Map<
 			);
 
 			int successCount = 0;
+			java.util.Set processedProjects = new java.util.HashSet();
 
 			for (Map.Entry>> entry : groupByCustomer.entrySet()) {
 				List> customerItems = entry.getValue();
@@ -1105,10 +1134,8 @@ public Map saveSaleRegistration(HttpServletRequest request, Map<
 				String customerName = CommonUtils.checkNull(firstItem.get("CUSTOMER_NAME"));
 				String areaCd = CommonUtils.checkNull(firstItem.get("AREA_CD"));
 				String taxType = CommonUtils.checkNull(firstItem.get("TAX_TYPE"));
-				// 국내/해외는 프로젝트의 AREA_CD로 판단, 세무구분(taxFg)은 과세구분(TAX_TYPE)으로 전달
 				boolean isDomestic = "0001220".equals(areaCd);
 
-				// 금액 합산
 				long totalSupplyPrice = 0;
 				long totalVat = 0;
 				long totalAmount = 0;
@@ -1123,9 +1150,10 @@ public Map saveSaleRegistration(HttpServletRequest request, Map<
 
 					if (itemNames.length() > 0) itemNames.append(", ");
 					itemNames.append(CommonUtils.checkNull(item.get("PART_NAME")));
+
+					processedProjects.add(CommonUtils.checkNull(item.get("PROJECT_NO")));
 				}
 
-				// 적요: 다건이면 "품명 외 N건"
 				String itemSummary;
 				if (customerItems.size() == 1) {
 					itemSummary = CommonUtils.checkNull(firstItem.get("PART_NAME"));
@@ -1133,13 +1161,11 @@ public Map saveSaleRegistration(HttpServletRequest request, Map<
 					itemSummary = CommonUtils.checkNull(firstItem.get("PART_NAME")) + " 외 " + (customerItems.size() - 1) + "건";
 				}
 
-				// 전표 JSON 생성
 				String slipJson;
 				String slipDate;
 				String taxFg = SalesSlipApiClient.convertTaxType(taxType);
 
 				if (isDomestic) {
-					// 국내: 세금계산서발행일 기준
 					String taxInvoiceDate = CommonUtils.checkNull(firstItem.get("TAX_INVOICE_DATE"));
 					slipDate = taxInvoiceDate.replace("-", "");
 					if (slipDate.isEmpty()) {
@@ -1149,8 +1175,6 @@ public Map saveSaleRegistration(HttpServletRequest request, Map<
 					}
 
 					String slipTitle = customerName + "_" + itemSummary;
-
-					// 작성번호는 타임스탬프 기반으로 유니크하게 생성
 					int menuSq = generateMenuSq();
 
 					slipJson = slipApiClient.buildDomesticSlipJson(
@@ -1160,25 +1184,20 @@ public Map saveSaleRegistration(HttpServletRequest request, Map<
 						itemSummary, taxFg, slipDate
 					);
 
-					// API 호출
 					String apiResponse = slipApiClient.registerSalesSlip(erpBaseUrl, slipJson);
 					System.out.println("[매출마감] 국내 전표 API 응답: " + apiResponse);
-
-					// 응답 검증
 					validateApiResponse(apiResponse, customerName);
 
-					// DB 업데이트: 각 항목에 전표 정보 저장
 					for (Map item : customerItems) {
 						HashMap updateParam = new HashMap();
-						updateParam.put("OBJID", CommonUtils.checkNull(item.get("OBJID")));
+						updateParam.put("logId", CommonUtils.checkNull(item.get("LOG_ID")));
 						updateParam.put("deadlineDate", deadlineDate);
 						updateParam.put("slipDate", slipDate);
 						updateParam.put("slipMenuSq", menuSq);
-						sqlSession.update("salesNcollectMgmt.updateSlipInfo", updateParam);
+						sqlSession.update("salesNcollectMgmt.updateShipmentLogSlipInfo", updateParam);
 					}
 
 				} else {
-					// 해외: 선적일자 기준
 					String loadingDate = CommonUtils.checkNull(firstItem.get("LOADING_DATE"));
 					slipDate = loadingDate.replace("-", "");
 					if (slipDate.isEmpty()) {
@@ -1192,7 +1211,7 @@ public Map saveSaleRegistration(HttpServletRequest request, Map<
 					String exportDeclNo = CommonUtils.checkNull(firstItem.get("EXPORT_DECL_NO"));
 					String exchCd = SalesSlipApiClient.convertCurrencyCode(salesCurrency);
 
-					String slipTitle = customerName + "_" + itemSummary 
+					String slipTitle = customerName + "_" + itemSummary
 						+ "_" + String.format("%.2f", totalForeignAmount)
 						+ "_@" + String.format("%.2f", exchangeRate);
 
@@ -1210,22 +1229,35 @@ public Map saveSaleRegistration(HttpServletRequest request, Map<
 
 					String apiResponse = slipApiClient.registerSalesSlip(erpBaseUrl, slipJson);
 					System.out.println("[매출마감] 해외 전표 API 응답: " + apiResponse);
-
 					validateApiResponse(apiResponse, customerName);
 
 					for (Map item : customerItems) {
 						HashMap updateParam = new HashMap();
-						updateParam.put("OBJID", CommonUtils.checkNull(item.get("OBJID")));
+						updateParam.put("logId", CommonUtils.checkNull(item.get("LOG_ID")));
 						updateParam.put("deadlineDate", deadlineDate);
 						updateParam.put("slipDate", slipDate);
 						updateParam.put("slipMenuSq", menuSq);
-						sqlSession.update("salesNcollectMgmt.updateSlipInfo", updateParam);
+						sqlSession.update("salesNcollectMgmt.updateShipmentLogSlipInfo", updateParam);
 					}
 				}
 
 				successCount += customerItems.size();
 			}
 
+			// 프로젝트별 전체 마감 여부 확인 → 모든 출하건 마감 시 PROJECT_MGMT도 '완료' 처리
+			for (String projectNo : processedProjects) {
+				HashMap checkParam = new HashMap();
+				checkParam.put("projectNo", projectNo);
+				int unclosedCount = (Integer) sqlSession.selectOne("salesNcollectMgmt.checkAllShipmentLogClosed", checkParam);
+				if (unclosedCount == 0) {
+					HashMap pmUpdateParam = new HashMap();
+					pmUpdateParam.put("projectNo", projectNo);
+					pmUpdateParam.put("deadlineDate", deadlineDate);
+					sqlSession.update("salesNcollectMgmt.updateProjectSalesStatus", pmUpdateParam);
+					System.out.println("[매출마감] 프로젝트 전체 마감 완료: " + projectNo);
+				}
+			}
+
 			sqlSession.commit();
 			resultMap.put("result", true);
 			resultMap.put("msg", successCount + "건의 매출마감이 완료되었습니다. (전표 " + groupByCustomer.size() + "건 등록)");
@@ -1774,43 +1806,43 @@ public Map saveSaleRegistration(HttpServletRequest request, Map<
 	 */
 	public Map saveDeadlineInfo(HttpServletRequest request, Map paramMap) {
 		Map resultMap = new HashMap();
-		SqlSession sqlSession = SqlMapConfig.getInstance().getSqlSession(false);
+		SqlSession sqlSession = null;
 		try {
-			String objIdListStr = CommonUtils.checkNull(paramMap.get("objIdList"));
+			String logIdListStr = CommonUtils.checkNull(paramMap.get("logIdList"));
 			String taxType = CommonUtils.checkNull(paramMap.get("taxType"));
 			String taxInvoiceDate = CommonUtils.checkNull(paramMap.get("taxInvoiceDate"));
 			String exportDeclNo = CommonUtils.checkNull(paramMap.get("exportDeclNo"));
 			String loadingDate = CommonUtils.checkNull(paramMap.get("loadingDate"));
 
-			if (objIdListStr == null || objIdListStr.isEmpty()) {
+			if (logIdListStr == null || logIdListStr.isEmpty()) {
 				resultMap.put("result", false);
 				resultMap.put("msg", "선택된 항목이 없습니다.");
 				return resultMap;
 			}
 
-			String[] targetObjIdList = objIdListStr.split(",");
-			sqlSession = SqlMapConfig.getInstance().getSqlSession();
+			String[] targetLogIdList = logIdListStr.split(",");
+			sqlSession = SqlMapConfig.getInstance().getSqlSession(false);
 
-			for (int i = 0; i < targetObjIdList.length; i++) {
+			for (int i = 0; i < targetLogIdList.length; i++) {
 				HashMap sqlParamMap = new HashMap();
-				sqlParamMap.put("OBJID", CommonUtils.checkNull(targetObjIdList[i]));
+				sqlParamMap.put("logId", CommonUtils.checkNull(targetLogIdList[i]));
 				sqlParamMap.put("taxType", taxType);
 				sqlParamMap.put("taxInvoiceDate", taxInvoiceDate);
 				sqlParamMap.put("exportDeclNo", exportDeclNo);
 				sqlParamMap.put("loadingDate", loadingDate);
 
-				sqlSession.update("salesNcollectMgmt.saveDeadlineInfo", sqlParamMap);
+				sqlSession.update("salesNcollectMgmt.saveShipmentLogDeadlineInfo", sqlParamMap);
 			}
 			sqlSession.commit();
 			resultMap.put("result", true);
-			resultMap.put("msg", targetObjIdList.length + "건의 마감정보가 저장되었습니다.");
+			resultMap.put("msg", targetLogIdList.length + "건의 마감정보가 저장되었습니다.");
 		} catch (Exception e) {
 			resultMap.put("result", false);
 			resultMap.put("msg", "마감정보 저장 중 오류가 발생했습니다.");
-			sqlSession.rollback();
+			if (sqlSession != null) sqlSession.rollback();
 			e.printStackTrace();
 		} finally {
-			sqlSession.close();
+			if (sqlSession != null) sqlSession.close();
 		}
 		return resultMap;
 	}