diff --git a/pom.xml b/pom.xml index d4b5b33c..03267c2b 100644 --- a/pom.xml +++ b/pom.xml @@ -169,12 +169,6 @@ xit-epost 23.04.01-SNAPSHOT - - - cokr.xit.interfaces - xit-postplus - 23.04.01-SNAPSHOT - diff --git a/src/main/java/cokr/xit/fims/crdn/web/Crdn06Controller.java b/src/main/java/cokr/xit/fims/crdn/web/Crdn06Controller.java index 158dcf2e..e6ce98ab 100644 --- a/src/main/java/cokr/xit/fims/crdn/web/Crdn06Controller.java +++ b/src/main/java/cokr/xit/fims/crdn/web/Crdn06Controller.java @@ -184,6 +184,42 @@ public class Crdn06Controller extends ApplicationController { return setPagingInfo(new ModelAndView("jsonView"), crdnService.getCrackdownList(query),""); } + @RequestMapping(name="차적조회조건", value="/010/vehicleReqs.do") + public ModelAndView downloadVehicleReqs(String... crdnIds) { + List list = crdnService.getCrackdownList(new CrdnQuery().setCrdnIds(crdnIds)).stream() + .map(row -> { + Object vhrno = row.remove("VHRNO"); + Object crdnYmd = row.remove("CRDN_YMD"); + row.clear(); + row.set("VHRNO", vhrno) + .set("CRDN_YMD", crdnYmd); + return row; + }) + .toList(); + XLSWriter xlsx = new XLSWriter().worksheet(0).cell(0, 0).values(list); + + return new ModelAndView("downloadView") + .addObject("download", xlsx.getDownloadable().setFilename("차적조회조건-" + dateFormats.format("yyyyMMdd-HHmmss", System.currentTimeMillis()) + ".xlsx")); + } + + @PostMapping(name="차적정보 업데이트", value="/010/uploadVehicles.do") + public ModelAndView uploadVehicles(MultipartFile upload, String... crdnIds) { + List list = crdnService.getCrackdownList(new CrdnQuery().setCrdnIds(crdnIds)).stream() + .map(row -> { + Object vhrno = row.remove("VHRNO"); + Object crdnYmd = row.remove("CRDN_YMD"); + row.clear(); + row.set("VHRNO", vhrno) + .set("CRDN_YMD", crdnYmd); + return row; + }) + .toList(); + XLSWriter xlsx = new XLSWriter().worksheet(0).cell(0, 0).values(list); + + return new ModelAndView("jsonView") + .addObject("download", xlsx.getDownloadable().setFilename("차적조회조건-" + dateFormats.format("yyyyMMdd-HHmmss", System.currentTimeMillis()) + ".xlsx")); + } + /**지정한 단속 ID에 해당하는 단속 대장를 제거한다. * @param crdnID 단속 ID * @return jsonView diff --git a/src/main/java/cokr/xit/fims/mngt/service/bean/TaskProcessor.java b/src/main/java/cokr/xit/fims/mngt/service/bean/TaskProcessor.java index f1790906..d54301d1 100644 --- a/src/main/java/cokr/xit/fims/mngt/service/bean/TaskProcessor.java +++ b/src/main/java/cokr/xit/fims/mngt/service/bean/TaskProcessor.java @@ -437,4 +437,12 @@ public class TaskProcessor extends AbstractBean { public String getNtrisInterface(String taskSeCd) { return "lntris"; } + + /**주어진 업무의 우편발송 서비스 이름을 반환한다. + * @param taskSeCd 업무구분 코드 + * @return 우편발송 서비스 이름(디폴트는 eGreen) + */ + public String getNoticeDelivery(String taskSeCd) { + return "eGreen"; + } } \ No newline at end of file diff --git a/src/main/java/cokr/xit/fims/nxrp/service/bean/NisIndivBean.java b/src/main/java/cokr/xit/fims/nxrp/service/bean/NisIndivBean.java index cbcb9ee0..72274a0a 100644 --- a/src/main/java/cokr/xit/fims/nxrp/service/bean/NisIndivBean.java +++ b/src/main/java/cokr/xit/fims/nxrp/service/bean/NisIndivBean.java @@ -139,31 +139,33 @@ public class NisIndivBean extends AbstractBean { // 2. 부서 정보 DataObject deptInfo = ogdpBean.getDeptStngInfo(new OgdpQuery().setDeptCd(userInfo.string("DEPT_CD"))); // 3. 세외수입 과태료대장에 연계할 단속정보를 조회 - DataObject selectCrdnInfo = nisA01Mapper.selectCrdnInfo(req.getCrdnId()); + DataObject crdnInfo = nisA01Mapper.selectCrdnInfo(req.getCrdnId()); LocalDateTime now = LocalDateTime.now(); // 현재 날짜/시간 - String sggCd = selectCrdnInfo.string("SGG_CD"); - String taskSeCd = selectCrdnInfo.string("TASK_SE_CD"); - String linkMngKey = sggCd + selectCrdnInfo.string("CRDN_ID") + '_' + now.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); -// String linkMngKey = selectCrdnInfo.string("SGG_CD") + selectCrdnInfo.string("CRDN_ID"); + String sggCd = crdnInfo.string("SGG_CD"); + String taskSeCd = crdnInfo.string("TASK_SE_CD"); + String crdnId = crdnInfo.string("CRDN_ID"); + String linkMngKey = sggCd + crdnId + '_' + now.format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); +// String linkMngKey = sggCd + crdnId; + String nsttCd = userInfo.string("NSTT_CD"); A01 a01 = new A01(); a01.setTaskSeCd(taskSeCd); // 업무 구분 코드 - a01.setSgbCd(userInfo.string("NSTT_CD")); // 자치단체코드 - a01.setLinkTrgtCd(userInfo.string("NSTT_CD") + taskSeCd + "01001"); // 연계대상코드 + a01.setSgbCd(nsttCd); // 자치단체코드 + a01.setLinkTrgtCd(nsttCd + taskSeCd + "01001"); // 연계대상코드 a01.setLinkMngKey(linkMngKey); // 연계관리키 시군구코드 + 단속 ID + 년월일시분초 a01.setDptCd(userInfo.string("DEPT_CD")); // 부서코드 a01.setRcptYr(req.getSndngYmd().substring(0, 4)); // 접수연도 - a01.setSpacBizCd(selectCrdnInfo.string("SPCL_BIZ_CD")); // 특별회계사업코드 (밤샘주차 0159:주차장특별회계) - a01.setActSeCd(selectCrdnInfo.string("ACNTG_SE_CD")); // 회계구분코드 - a01.setRprsTxmCd(selectCrdnInfo.string("TXITM_CD")); // 대표세입과목코드 - a01.setOperItemCd(selectCrdnInfo.string("OPER_ITEM_CD")); // 운영항목코드 + a01.setSpacBizCd(crdnInfo.string("SPCL_BIZ_CD")); // 특별회계사업코드 (밤샘주차 0159:주차장특별회계) + a01.setActSeCd(crdnInfo.string("ACNTG_SE_CD")); // 회계구분코드 + a01.setRprsTxmCd(crdnInfo.string("TXITM_CD")); // 대표세입과목코드 + a01.setOperItemCd(crdnInfo.string("OPER_ITEM_CD")); // 운영항목코드 TaskProcessor taskProcessor = TaskProcessor.get(); a01.setFinScrgSeCd(taskProcessor.getFinScrgSeCd(taskSeCd)); // 납부자구분코드(FIM011) 01:주민 02:외국인 03:법인 04:사업자 05:기타 -> 01:개인 02:법인 03:단체 05:외국인 a01.setPyrSeCd( - switch (selectCrdnInfo.string("RTPYR_SE_CD")) { + switch (crdnInfo.string("RTPYR_SE_CD")) { case "01" -> "01"; // 주민(01) -> 개인(01) case "02" -> "05"; // 외국인(02) -> 외국인(05) case "03" -> "02"; // 법인(03) -> 법인(02) @@ -171,46 +173,48 @@ public class NisIndivBean extends AbstractBean { default -> "03"; // 기타(05) -> 단체(03) } ); - a01.setPyrNo(selectCrdnInfo.string("RTPYR_NO")); // 납부자번호 - a01.setPyrNm(selectCrdnInfo.string("RTPYR_NM")); // 납부자명 - a01.setRprsPyrNo(selectCrdnInfo.string("RTPYR_NO")); // 대표납부자번호 / 법인의 경우 대표 납부자번호 필수 - a01.setRprsPyrNm(selectCrdnInfo.string("RTPYR_NM")); // 대표납부자명 / 법인의 경우 대표 납부자명 필수 - a01.setPyrTelno(selectCrdnInfo.string("RTPYR_TELNO")); // 납부자전화번호 - a01.setPyrMblTelno(selectCrdnInfo.string("RTPYR_MBL_TELNO")); // 납부자휴대전화번호 - a01.setPyrEmlAddr(selectCrdnInfo.string("RTPYR_EML")); // 납부자이메일주소 + String rtpyrNo = crdnInfo.string("RTPYR_NO"); + a01.setPyrNo(rtpyrNo); // 납부자번호 + String rtpyrNm = crdnInfo.string("RTPYR_NM"); + a01.setPyrNm(rtpyrNm); // 납부자명 + a01.setRprsPyrNo(rtpyrNo); // 대표납부자번호 / 법인의 경우 대표 납부자번호 필수 + a01.setRprsPyrNm(rtpyrNm); // 대표납부자명 / 법인의 경우 대표 납부자명 필수 + a01.setPyrTelno(crdnInfo.string("RTPYR_TELNO")); // 납부자전화번호 + a01.setPyrMblTelno(crdnInfo.string("RTPYR_MBL_TELNO")); // 납부자휴대전화번호 + a01.setPyrEmlAddr(crdnInfo.string("RTPYR_EML")); // 납부자이메일주소 a01.setPyrSttCd("10"); // 납부자상태코드('10') - a01.setPyrLotnoRoadAddrSeCd(selectCrdnInfo.string("ADDR_SE_CD")); // 납부자지번도로주소구분코드 01:지번주소, 02:도로명주소 - a01.setPyrZip(selectCrdnInfo.string("ZIP")); // 납부자우편번호 - a01.setPyrRoadNmCd(selectCrdnInfo.string("ROAD_NM_CD")); // 납부자도로명코드 + a01.setPyrLotnoRoadAddrSeCd(crdnInfo.string("ADDR_SE_CD")); // 납부자지번도로주소구분코드 01:지번주소, 02:도로명주소 + a01.setPyrZip(crdnInfo.string("ZIP")); // 납부자우편번호 + a01.setPyrRoadNmCd(crdnInfo.string("ROAD_NM_CD")); // 납부자도로명코드 // 납부자주소지하여부(FIM036) 0:지상 1: 지하 -> Y:지하, N:지상 - a01.setPyrAddrUdgdYn("1".equals(selectCrdnInfo.get("ROAD_NM_CD")) ? "Y" : "N"); // 지하(1) -> 지하(Y) - a01.setPyrBmno(selectCrdnInfo.string("BMNO")); // 납부자건물본번 - a01.setPyrBsno(selectCrdnInfo.string("BSNO")); // 납부자건물부번 - a01.setPyrStdgCd(selectCrdnInfo.string("STDG_CD")); // 납부자법정동코드 - a01.setPyrDongCd(selectCrdnInfo.string("DONG_CD")); // 납부자행정동코드 + a01.setPyrAddrUdgdYn("1".equals(crdnInfo.get("ROAD_NM_CD")) ? "Y" : "N"); // 지하(1) -> 지하(Y) + a01.setPyrBmno(crdnInfo.string("BMNO")); // 납부자건물본번 + a01.setPyrBsno(crdnInfo.string("BSNO")); // 납부자건물부번 + a01.setPyrStdgCd(crdnInfo.string("STDG_CD")); // 납부자법정동코드 + a01.setPyrDongCd(crdnInfo.string("DONG_CD")); // 납부자행정동코드 // 산 구분 코드(FIM037) 0: 1:산 -> 납부자산구분코드 01:일반번지, 02:산번지 - a01.setPyrMtnSeCd(selectCrdnInfo.string("MTN_SE_CD").equals("1") ? "02" : "01"); // 산(1) -> 산번지(02) , 01:일반번지 - a01.setPyrBldgMngNo(selectCrdnInfo.string("BLDG_MNG_NO")); // 납부자건물관리번호 + a01.setPyrMtnSeCd(crdnInfo.string("MTN_SE_CD").equals("1") ? "02" : "01"); // 산(1) -> 산번지(02) , 01:일반번지 + a01.setPyrBldgMngNo(crdnInfo.string("BLDG_MNG_NO")); // 납부자건물관리번호 a01.setPyrBldgNm(""); // 납부자건물명 - a01.setPyrMno(selectCrdnInfo.string("MNO")); // 납부자본번 / 번지. 지번주소인 경우 필수 - a01.setPyrSno(selectCrdnInfo.string("SNO")); // 납부자부번 / 호 - a01.setPyrSpclDg(selectCrdnInfo.string("SPCL_DONG")); // 납부자특수동 / 상세주소 동 - a01.setPyrSpclHo(selectCrdnInfo.string("SPCL_HO")); // 납부자특수호 / 상세주소 호 + a01.setPyrMno(crdnInfo.string("MNO")); // 납부자본번 / 번지. 지번주소인 경우 필수 + a01.setPyrSno(crdnInfo.string("SNO")); // 납부자부번 / 호 + a01.setPyrSpclDg(crdnInfo.string("SPCL_DONG")); // 납부자특수동 / 상세주소 동 + a01.setPyrSpclHo(crdnInfo.string("SPCL_HO")); // 납부자특수호 / 상세주소 호 a01.setPyrTong(""); // 납부자통 a01.setPyrBan(""); // 납부자반 - a01.setPyrSpclAddr(selectCrdnInfo.string("SPCL_ADDR")); // 납부자특수주소 - a01.setPyrRoadNmAddr(selectCrdnInfo.string("ADDR")); // 납부자도로명주소 - a01.setPyrRoadNmDaddr(selectCrdnInfo.string("DTL_ADDR")); // 납부자도로명상세주소 - a01.setPyrRoadNmAlAddr(selectCrdnInfo.string("WHOL_ADDR")); // 납부자도로명전체주소 - a01.setGlNm(selectCrdnInfo.string("VHRNO")); // 물건지명 + a01.setPyrSpclAddr(crdnInfo.string("SPCL_ADDR")); // 납부자특수주소 + a01.setPyrRoadNmAddr(crdnInfo.string("ADDR")); // 납부자도로명주소 + a01.setPyrRoadNmDaddr(crdnInfo.string("DTL_ADDR")); // 납부자도로명상세주소 + a01.setPyrRoadNmAlAddr(crdnInfo.string("WHOL_ADDR")); // 납부자도로명전체주소 + a01.setGlNm(crdnInfo.string("VHRNO")); // 물건지명 a01.setLvyTrgtSeCd("01"); // 부과대상구분코드 01:차량 - a01.setRegYmd(selectCrdnInfo.string("CRDN_YMD")); // 등록일자 / 위반일자 - a01.setFinScrgAmt(selectCrdnInfo.string("FFNLG_AMT")); // 과태료과징금금액 + a01.setRegYmd(crdnInfo.string("CRDN_YMD")); // 등록일자 / 위반일자 + a01.setFinScrgAmt(crdnInfo.string("FFNLG_AMT")); // 과태료과징금금액 a01.setFcltSeCd(""); // 시설구분코드 / 금연구역흡연위반 과태료인 경우 활용 a01.setRegSeCd(""); // 등록구분코드 / 폐기물관리법위반 과태료인 경우 01투기, 02소각, 99기타 // 감경 사유 코드(FIM019) -> 감경사유구분코드 a01.setRdtRsnSeCd( - switch (selectCrdnInfo.string("RDCT_RSN_CD")) { + switch (crdnInfo.string("RDCT_RSN_CD")) { case "01" -> "0101"; // 국민기초생활수급자 case "02" -> "0102"; // 한부모가족보호대상자 case "03" -> "0103"; // 장애인(장애의 정도가 심한 장애인) @@ -222,9 +226,9 @@ public class NisIndivBean extends AbstractBean { default -> "0100"; // 해당없음 } ); - a01.setVhrno(selectCrdnInfo.string("VHRNO")); // 자동차등록번호 + a01.setVhrno(crdnInfo.string("VHRNO")); // 자동차등록번호 - DataObject mngItemCn = taskProcessor.getMngItemCn(selectCrdnInfo); + DataObject mngItemCn = taskProcessor.getMngItemCn(crdnInfo); Map> setMngItemCn = Map.of( "item1", a01::setMngItemCn1, "item2", a01::setMngItemCn2, @@ -234,8 +238,8 @@ public class NisIndivBean extends AbstractBean { ); mngItemCn.entrySet().forEach(entry -> setMngItemCn.get(entry.getKey()).accept((String)entry.getValue())); - a01.setMngItemCn6(sggCd + selectCrdnInfo.string("CRDN_ID")); // 관리6항목 - a01.setRmCn(selectCrdnInfo.string("ETC_CN")); // 비고내용 + a01.setMngItemCn6(sggCd + crdnId); // 관리6항목 + a01.setRmCn(crdnInfo.string("ETC_CN")); // 비고내용 a01.setCreatedBy(userInfo.string("USER_ID")); a01.setModifiedBy(userInfo.string("USER_ID")); @@ -331,7 +335,6 @@ public class NisIndivBean extends AbstractBean { DataObject selectCrdnInfo = nisA01Mapper.selectCrdnInfo(req.getCrdnId()); A03Rqst a03Rqst = new A03Rqst(); - a03Rqst.setTaskSeCd(selectCrdnInfo.string("TASK_SE_CD")); // 업무 구분 코드 a03Rqst.setSgbCd(userInfo.string("NSTT_CD")); // 자치단체코드 a03Rqst.setLinkTrgtCd(req.getLinkTrgtCd()); // 연계대상코드 @@ -375,23 +378,18 @@ public class NisIndivBean extends AbstractBean { // SSL 무시 ///////////////////////////////////////////////////////////////// public void ignoreSsl() throws Exception { - HostnameVerifier hv = new HostnameVerifier() { + trustAllHttpsCertificates(); + HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() { @Override public boolean verify(String urlHostName, SSLSession session) { return true; } - }; - - trustAllHttpsCertificates(); - HttpsURLConnection.setDefaultHostnameVerifier(hv); + }); } public void trustAllHttpsCertificates() throws Exception { - TrustManager[] trustAllCerts = new TrustManager[1]; - TrustManager tm = new miTM(); - trustAllCerts[0] = tm; SSLContext sc = SSLContext.getInstance("SSL"); - sc.init(null, trustAllCerts, null); + sc.init(null, new TrustManager[] {new miTM()}, null); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); } diff --git a/src/main/java/cokr/xit/fims/nxrp/service/bean/SnisBean.java b/src/main/java/cokr/xit/fims/nxrp/service/bean/SnisBean.java index 28eb4edc..cc581967 100644 --- a/src/main/java/cokr/xit/fims/nxrp/service/bean/SnisBean.java +++ b/src/main/java/cokr/xit/fims/nxrp/service/bean/SnisBean.java @@ -13,6 +13,7 @@ import javax.annotation.Resource; import org.springframework.stereotype.Component; import cokr.xit.base.user.service.bean.UserBean; +import cokr.xit.fims.FimsConf; import cokr.xit.fims.crdn.Crdn; import cokr.xit.fims.crdn.dao.CrdnUpdtMapper; import cokr.xit.fims.levy.Levy; @@ -67,19 +68,20 @@ public class SnisBean extends AbstractBean { /**발송대상 사전통보를 서울 세외수입 시스템의 과태료대장에 등록한다. * @param req 발송대상 사전통보 조회조건 */ - public void registerPreNotices(SndbQuery req) { - // 과태료대장 등록을 위한 사전통보 추출 - Map prenotices = getPreNotices(req); - // 발송대상 사전통보를 과태료대장에 등록 + public String registerPreNotices(SndbQuery req) { + // 발송대상 사전통보 과태료대장 등록 + Map prenotices = getPreNotices(req); // 과태료대장 등록을 위한 사전통보 추출 Map results = sntrisBean.registerPreNotices(prenotices); // 발송대상 ID별 과태료 등록 응답 // 로컬 발송대상 상세 업데이트 Set ids = results.keySet(); // 발송대상 상세ID List details = sndngDtlMapper.selectSndngDetails(req.setSndngDtlIds(ids.toArray(new String[ids.size()]))).stream() - .map(detail -> { - Bu18WebReturnInfoDTO returned = results.get(detail.getSndngDtlId()); - return update(returned, detail); - }) + .map(detail -> update( + results.get( + detail.getSndngDtlId()), + detail + ) + ) .filter(detail -> detail != null) .toList(); sndngDtlMapper.updateSndngDtls(details); @@ -92,9 +94,10 @@ public class SnisBean extends AbstractBean { return results.get(sndngDtlId); } )); - // 업데이트를 위한 부과정보 가져오기 - ids = details.stream().map(SndngDtl::getCrdnId).collect(Collectors.toSet()); // 발송대상의 단속 ID - List levies = levyMapper.selectLevys(new LevyQuery().setCrdnIds(ids.toArray(new String[ids.size()]))).stream() + ids = details.stream() // 발송대상의 단속 ID + .map(SndngDtl::getCrdnId) + .collect(Collectors.toSet()); + List levies = levyMapper.selectLevys(new LevyQuery().setCrdnIds(ids.toArray(new String[ids.size()]))).stream() // 업데이트를 위한 부과정보 가져오기 .map(levy -> { Bu18WebReturnInfoDTO returned = byCrdnIds.get(levy.getCrdnId()); return update(returned, levy); @@ -102,6 +105,18 @@ public class SnisBean extends AbstractBean { .filter(levy -> levy != null) .toList(); levyMapper.updateLevies(levies); + + // 단속정보 업데이트 + byCrdnIds.forEach((crdnId, returned) -> { + Crdn crdn = new Crdn(); + crdn.setCrdnId(crdnId); + crdn.setNxrpAcbKey(returned.getNoticeAk()); + + crdnUpdtMapper.updateNxrpCrdnLinkYn(crdn); // 연계상태 + sndngDtlMapper.updateCrdnNxrpAcbKey(crdn); // 과태료대장키 + }); + + return "[S] 작업이 정상 처리 되었습니다."; } private SndngDtl update(Bu18WebReturnInfoDTO returned, SndngDtl sndngDtl) { @@ -126,7 +141,7 @@ public class SnisBean extends AbstractBean { private Levy update(Bu18WebReturnInfoDTO returned, Levy levy) { if (returned == null) return null; - levy.setNxrpLevyKey(returned.getNoticeAk()); // 세외수입부과 키 <- 과태료대장 키 + levy.setNxrpLevyKey(returned.getBuAfk()); // 세외수입부과 키 <- 세외수입시스템 일련번호 levy.setEpayno(returned.getEnapbuNo()); // 전자납부번호 setBankAccounts(returned.accountGetters(), levy.bankAccountSetters()); // 은행 / 계좌번호 @@ -210,7 +225,7 @@ public class SnisBean extends AbstractBean { prenotice.setBookNo(linkMngKey); // 자료키 prenotice.setSidoCd("11"); // 시도코드 prenotice.setSiguCd(sggCd); // 시구코드 - prenotice.setBuseoCd(currentUser.getDeptCode()); // 부서코드 +// prenotice.setBuseoCd(currentUser.getDeptCode()); // 서울 세외수입 시스템에서 시도, 시구, 작업자ID로 조회해서 설정 prenotice.setDisposalContent("부과"); // 처분내용 prenotice.setRawBasis(Vltn.legalBasis(crdnInfo)); // 부과근거 @@ -225,7 +240,7 @@ public class SnisBean extends AbstractBean { prenotice.setJukbalTelNo(userInfo.string("TEL_NO")); // 적발담당자 전화번호 String crdnYmdhms = crdnInfo.string("CRDN_YMD") + crdnInfo.string("CRDN_TM"); prenotice.setJukbalYm(crdnYmdhms.substring(0, 6)); // 적발년월 - prenotice.setJukbalYmdHs(crdnYmdhms); // 위반일시 + prenotice.setJukbalYmdHs(crdnYmdhms.substring(0, 12)); // 위반일시 prenotice.setNapId(crdnInfo.string("RTPYR_NO")); // 납세자 주민번호 prenotice.setNapNm(crdnInfo.string("RTPYR_NM")); // 납세자 이름 @@ -245,8 +260,8 @@ public class SnisBean extends AbstractBean { prenotice.setSendYmd(crdnInfo.string("ADVNTCE_BGNG_YMD")); // 사전통지일 prenotice.setSubmitYmd(crdnInfo.string("ADVNTCE_DUDT_YMD")); // 의견제출기한 - prenotice.setSysGubun("PZMS"); // 시스템 구분 - prenotice.setLastWorkId(currentUser.getAccount()); // 작업자 ID + prenotice.setSysGubun(FimsConf.get().getSystemGubun()); // 시스템 구분 + prenotice.setLastWorkId(userInfo.string("NTRIS_KEY")); // 작업자 ID <- 세외수입 사용자키 prenotice.setLastWorkNm(currentUser.getName()); // 작업자 이름 prenotice.setWorkYmd(now); // 작업일자 @@ -283,6 +298,7 @@ public class SnisBean extends AbstractBean { levy.setLevyNo(notice.getTaxNo()); // 부과번호 levy.setLevyYmd(notice.getTaxYmd()); // 부과일자 levy.setDudtYmd(notice.getNapgiYmd()); // 납기일자 + levy.setRcvmtYmd(notice.getNapbuYmd()); // 수납일자 levy.setLevyPcptax((int)notice.getTaxAmt()); // 부과본세 <- 과세금액 levy.setLevyAdamt((int)notice.getGasanAmt()); // 부과가산금 @@ -294,6 +310,7 @@ public class SnisBean extends AbstractBean { levy.setSzrYmd(notice.getApYmd()); // 압류일자 levy.setEpayno(notice.getEnapbuNo()); // 전자납부번호 + levy.setNxrpLevyKey(Long.toString(notice.getBuAk())); // 세외수입 부과키 setBankAccounts(notice.accountGetters(), levy.bankAccountSetters()); // 은행 / 계좌번호 }); @@ -305,10 +322,11 @@ public class SnisBean extends AbstractBean { if (notice == null) return; detail.setSggCd(notice.getSiguCd()); // 시군구 코드 + detail.setTaxNo(notice.getNapseNo()); // 납세번호 detail.setEpayno(notice.getEnapbuNo()); // 전자납부번호 detail.setVhrno(notice.getMulNm()); // 차량번호 - detail.setLevyNo(notice.getTaxNo()); // 부과번호 +// detail.setLevyNo(notice.getTaxNo()); // 부과번호 detail.setLevyYmd(notice.getTaxYmd()); // 부과일자 detail.setDudtYmd(notice.getNapgiYmd()); // 납기일자 @@ -320,6 +338,9 @@ public class SnisBean extends AbstractBean { detail.setDudtAftrAmt(null); // 납기후 금액 setBankAccounts(notice.accountGetters(), detail.bankAccountSetters()); // 은행 / 계좌번호 + if (toInt(detail.getSndngDtlSttsCd()) < 2) + detail.setSndngDtlSttsCd("02"); // 발송 상태 코드(FIM050) 02:가상계좌취득 + }); for (SndngDtl detail: details) { affected += sndngDtlMapper.updateSndngDtl(detail); diff --git a/src/main/java/cokr/xit/fims/sndb/service/bean/SndngBean.java b/src/main/java/cokr/xit/fims/sndb/service/bean/SndngBean.java index c624efb8..3546429d 100644 --- a/src/main/java/cokr/xit/fims/sndb/service/bean/SndngBean.java +++ b/src/main/java/cokr/xit/fims/sndb/service/bean/SndngBean.java @@ -728,137 +728,7 @@ public class SndngBean extends AbstractBean { * */ public String createEPost(Sndng sndng) { -/* - // 전자우편 발송 등록 전 오류 자료가 존재하는지 체크 - //사진파일 체크 - while not eof do - begin - if FieldByName('MM_CARNO').AsString = '' then - begin - sm('차량번호가 공란인 내역이 있습니다.' + #13 + '차량번호를 입력해주세요.'); - exit; - end; - - if FieldByName('GP_ACCOUNT_NO').AsString = '' then - begin - sm('가상계좌가 공란인 내역이 있습니다.' + #13 + '가상계좌를 입력해주세요.'); - exit; - end; - - if FieldByName('GP_ERC_NO').AsString = '' then - begin - sm('전자납부번호가 공란인 내역이 있습니다.' + #13 + '전자납부번호를 입력해주세요.'); - exit; - end; - - if FieldByName('GP_JUSO').AsString = '' then - begin - sm('주소가 공란인 내역이 있습니다.' + #13 + '주소를 입력해주세요.'); - exit; - end; - - if (FieldByName('GP_TAXNO').AsString = '') and - ((copy(CPSystem_Info.Sido_Code,1,2) = '11') or (debug_level = 4)) then - begin - sm('과세번호가 공란인 내역이 있습니다.' + #13 + '과세번호를 입력해주세요.'); - exit; - end; - - img_chk := 0; - imcode := fieldbyname('MM_code').AsString; -// sm(fieldbyname('MM_code').AsString+#13+fieldbyname('MM_imagecnt').AsString); - sgg_code := Copy(imcode, 1, 5); //시군구 - YearPath := Copy(imcode, 6, 4); //년도 - if fieldbyname('MM_imagecnt').Asinteger = 1 then - begin - if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'A.jpg') then - inc(img_chk); - end - else if fieldbyname('MM_imagecnt').Asinteger = 2 then - begin - if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'A.jpg') then - inc(img_chk); - if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'B.jpg') then - inc(img_chk); - end else if fieldbyname('MM_imagecnt').Asinteger = 3 then - begin - if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'A.jpg') then - inc(img_chk); - if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'B.jpg') then - inc(img_chk); - if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'C.jpg') then - inc(img_chk); - end else if fieldbyname('MM_imagecnt').Asinteger = 4 then - begin - if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'A.jpg') then - inc(img_chk); - if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'B.jpg') then - inc(img_chk); - if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'C.jpg') then - inc(img_chk); - if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'D.jpg') then - inc(img_chk); - end; - - //sm(FindField('MM_imagecnt').Asstring+#13+inttostr(img_chk)); - //sm(sFtp.FtpRootDir); - - if img_chk <> fieldbyname('MM_imagecnt').Asinteger then - begin - sm('사진파일 검사 중'+#13+ '차량번호 : '+ fieldbyname('MM_carno').AsString +'('+ fieldbyname('MM_code').AsString+')'+ - '의 사진이 서버에 저장되지 않았습니다.'+#13+ - '서버로 사진을 재전송 처리후 발송하시기 바랍니다.'); - //sm(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString); - exit; - end; - next; - end; - end; - //사진파일 체크 - with cdDetail do begin - - IndexDefs.Clear; - IndexDefs.Add('IDX_GP_MM_CARNO_ASC' , 'GP_MM_CARNO;MM_CODE' , []); - IndexName := 'IDX_GP_MM_CARNO_ASC'; - //IndexFieldNames := 'MM_CODE'; - lblSort.Caption := '정렬 : 차량번호'; - lblSeek.Caption := '차량번호 검색'; - - First; - DisableControls; - - LVY_NO_Cnt := 0; - ERC_NO_Cnt := 0; - ACCOUNT_NO_Cnt := 0; - while not eof do begin - if FieldByName('MC_LVY_NO').AsString = '' then Inc(LVY_NO_Cnt); - if FieldByName('MC_ERC_NO').AsString = '' then Inc(ERC_NO_Cnt); - if FieldByName('MC_ACCOUNT_NO').AsString = '' then Inc(ACCOUNT_NO_Cnt); - Next; - end; - EnableControls; - if LVY_NO_Cnt > 0 then - begin - Msg_Warning('출력불가' + #13 + - '부과번호가 발취 안된 자료가 ' + IntToStr(LVY_NO_Cnt) + ' 건 있습니다.'); - Exit; - end; - if ERC_NO_Cnt > 0 then - begin - Msg_Warning('출력불가' + #13 + - '전자납부번호가 발취 안된 자료가 ' + IntToStr(ERC_NO_Cnt) + ' 건 있습니다.'); - Exit; - end; - - if ACCOUNT_NO_Cnt > 0 then - begin - Msg_Warning('출력불가' + #13 + - '가상계좌가 발취 안된 자료가 ' + IntToStr(ACCOUNT_NO_Cnt) + ' 건 있습니다.'); - Exit; - end; - - end; - */ + //test/resources/우편통합 cs소스.txt 참고 // 1. 발송 대장 조회 DataObject sndngInfo = sndngMapper.selectSndngInfo(new SndbQuery().setSndngId(sndng.getSndngId())); // 2. 사용자 정보를 조회한다. @@ -882,12 +752,12 @@ public class SndngBean extends AbstractBean { String sndngSeCd = sndngInfo.string("SNDNG_SE_CD"); String sealCd3 = taskProcessor.getSealCd3(taskSeCd, sndngSeCd); if (isEmpty(sealCd3)) - return "[F] 작업중 지정되지 않았습니다."; + return "[F] 작업중 지정되지 않았습니다."; // 발송 구분 String vltnCd = vltnInfo.string("VLTN_CD"); String jobCd = switch (sndngSeCd) { - case "01" -> vltnCd + "01"; // 계고장 + case "01", "11" -> vltnCd + "01"; // 계고장 case "02" -> vltnCd + "02"; // 사전통지 case "03" -> vltnCd + "03"; // 부과 case "04" -> vltnCd + "04"; // 독촉 @@ -902,9 +772,8 @@ public class SndngBean extends AbstractBean { String epostSenderRegSeq = epostRcptRegBean.getEpostSenderRegSeq(sndngInfo.string("TODAY"), sndngInfo.string("DEPT_CD")); int seqNo = 0; String postSndngSeCd = sndng.getPostSndngSeCd(); - if ("0".equals(postSndngSeCd)) { + if ("0".equals(postSndngSeCd)) seqNo = epostRcptDtlBean.getEpostSenderDetailSeq(sndngInfo.string("TODAY")); - } // 포맷: 등록일(REG_YMD)-발송기관코드(RECEV_SENDER_ORG_CODE)-업무코드(WORK_ID)-우편물구분(POST_SE)일련번호(RECEV_SEQ_NO) // 예시: 20170719-40504370000-003-1001 String conKey = sndngInfo.string("TODAY") + "-" + sndngInfo.string("DEPT_CD") + "0000" + "-" + epostSenderRegSeq; @@ -995,8 +864,8 @@ public class SndngBean extends AbstractBean { epostRcptReg.setSndngId(sndngInfo.string("SNDNG_ID")); // 발송 ID // 6. 전자우편 접수 등록 - boolean rtnScs = epostRcptRegBean.create(epostRcptReg); - if (!rtnScs) + boolean success = epostRcptRegBean.create(epostRcptReg); + if (!success) throw new RuntimeException("우편통합 발송 작업중 전자우편 접수 등록에 실패하였습니다."); // 7. 발송 내역을 수정한다. @@ -1007,8 +876,8 @@ public class SndngBean extends AbstractBean { updtSndng.setSndngSttsCd("01"); // 발송 상태 코드(FIM049) - 01 발송 대기 updtSndng.setSndngId(sndng.getSndngId()); // 발송 ID - int rtnNocs = sndngMapper.updateEPostSndng(updtSndng); // 전자우편 발송 내역 수정 - if (rtnNocs != 1) + int affected = sndngMapper.updateEPostSndng(updtSndng); // 전자우편 발송 내역 수정 + if (affected != 1) throw new RuntimeException("우편통합 발송 작업중 발송 내역 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback // 8. 전자우편 접수 상세 내역을 등록한다. @@ -1256,8 +1125,8 @@ public class SndngBean extends AbstractBean { } // 10. 전자우편 접수 상세 - rtnScs = epostRcptDtlBean.create(epostRcptDtl); - if (!rtnScs) + success = epostRcptDtlBean.create(epostRcptDtl); + if (!success) throw new RuntimeException("우편통합 발송 작업중 전자우편 상세 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback // 11. 발송상세 내역을 수정한다. @@ -1267,8 +1136,8 @@ public class SndngBean extends AbstractBean { sndngDtl.setSndngDtlSttsCd("03"); // 발송 상세 상태 코드(FIM050) - 03 발송 sndngDtl.setSndngDtlId(sndngDtlInfo.string("SNDNG_DTL_ID")); - rtnNocs = sndngDtlMapper.updateSndngDtlEPost(sndngDtl); // 전자우편 발송상세 내역 수정 - if (rtnNocs != 1) + affected = sndngDtlMapper.updateSndngDtlEPost(sndngDtl); // 전자우편 발송상세 내역 수정 + if (affected != 1) throw new RuntimeException("우편통합 발송 작업중 전자우편 상세 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback } diff --git a/src/main/java/cokr/xit/fims/sndb/service/bean/SndngDtlBean.java b/src/main/java/cokr/xit/fims/sndb/service/bean/SndngDtlBean.java index 8c9829ae..c213ceb5 100644 --- a/src/main/java/cokr/xit/fims/sndb/service/bean/SndngDtlBean.java +++ b/src/main/java/cokr/xit/fims/sndb/service/bean/SndngDtlBean.java @@ -344,7 +344,7 @@ public class SndngDtlBean extends AbstractBean { int affected = sndngDtlMapper.updateSndngDtlNxrpA03(uptSndngDtl); if (affected != 1) - throw new RuntimeException("세외수입 연계 정보를 발송 상세에 수정하지 못했습니다."); // 예외를 발생시켜서 DB Rollback + throw new RuntimeException("세외수입 연계 정보를 발송 상세에 수정하지 못했습니다."); // 단속, 부과 대장 조회 DataObject crdnLevyInfo = sndngDtlMapper.selectCrdnLevy(sndngDtl.getCrdnId()); @@ -356,7 +356,7 @@ public class SndngDtlBean extends AbstractBean { affected = sndngDtlMapper.updateCrdnNxrpAcbKey(crdn); if (affected != 1) { - throw new RuntimeException("단속 대장에 세외수입 대장키 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback + throw new RuntimeException("단속 대장에 세외수입 대장키 수정에 실패하였습니다."); } // 부과 대장에 등록 및 수정 @@ -373,15 +373,15 @@ public class SndngDtlBean extends AbstractBean { levy.setOperItemCd(a03.getOperItemCd()); // 운영 항목 코드 levy.setLevyNo(a03.getRsveItem1().substring(23, 29)); // 부과 번호 levy.setIspySn(a03.getRsveItem1().substring(29, 31)); // 분납 번호 - levy.setLevySeCd("02"); // 부과 구분 코드 FIM040 - levy.setUntySeCd("02"); // 통합 구분 코드 FIM072 - levy.setRdctSeCd("01"); // 감경 구분 코드 FIM046 - 01 감경 + levy.setLevySeCd("02"); // 부과 구분 코드 FIM040 + levy.setUntySeCd("02"); // 통합 구분 코드 FIM072 + levy.setRdctSeCd("01"); // 감경 구분 코드 FIM046 - 01 감경 levy.setLevyYmd(a03.getOpnSbmsnTermBgngYmd()); // 부과 일자 levy.setFrstDudtYmd(a03.getOpnSbmsnTermEndYmd()); // 최초 납기 일자 levy.setDudtYmd(a03.getOpnSbmsnTermEndYmd()); // 납기 일자 levy.setFfnlgAmt(toInt(a03.getFinScrgAmt())); // 과태료 금액 levy.setLevyPcptax(toInt(a03.getFinScrgAmt()) - toInt(a03.getBfRdtAmt())); // 부과 본세 - levy.setLevyAdamt(0); // 부과 가산금 + levy.setLevyAdamt(0); // 부과 가산금 levy.setIspyInt(0); // 분납 이자 levy.setRcvmtPcptax(0); // 수납 본세 levy.setRcvmtAdamt(0); // 수납 가산금 @@ -442,9 +442,8 @@ public class SndngDtlBean extends AbstractBean { if (isEmpty(crdnLevyInfo.get("LEVY_ID"))) { // 부과 ID가 없다면 // 부과(TB_LEVY) 대장을 등록한다. affected = levyMapper.insertLevy(levy); - if (affected != 1) { - throw new RuntimeException("부과대장 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback - } + if (affected != 1) + throw new RuntimeException("부과대장 등록에 실패하였습니다."); // 단속상태이력(TB_CRDN_STTS_HSTRY) CrdnSttsHstry crdnSttsHstry = new CrdnSttsHstry(); @@ -458,12 +457,12 @@ public class SndngDtlBean extends AbstractBean { // 단속 상태 이력(TB_CRDN_STTS_HSTRY) 대장에 등록하고, 단속(TB_CRDN) 대장을 수정한다. rtnScs = crdnSttsHstryBean.createHstryUpdateCrdnSttsCd(crdnSttsHstry); if (!rtnScs) - throw new RuntimeException("감경부과 등록 중 단속 대장의 단속상태 변경에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback + throw new RuntimeException("감경부과 등록 중 단속 대장의 단속상태 변경에 실패하였습니다."); } else { // 단속상태이력(TB_CRDN_STTS_HSTRY) 대장을 등록한다. rtnScs = crdnSttsHstryBean.create(crdnSttsHstry); if (!rtnScs) - throw new RuntimeException("감경부과 등록 중 단속 대장의 단속상태 변경에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback + throw new RuntimeException("감경부과 등록 중 단속 대장의 단속상태 변경에 실패하였습니다."); } } else { levy.setLevyId(crdnLevyInfo.string("LEVY_ID")); @@ -471,7 +470,7 @@ public class SndngDtlBean extends AbstractBean { // 부과(TB_LEVY) 대장을 수정한다. affected = levyMapper.updateLevy(levy); if (affected != 1) - throw new RuntimeException("부과대장 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback + throw new RuntimeException("부과대장 수정에 실패하였습니다."); } // 수납 정보 확인하여 발송(TB_SNDNG) - 발송 상태 코드(SNDNG_DTL_STTS_CD) 수정 @@ -481,13 +480,12 @@ public class SndngDtlBean extends AbstractBean { // 발송(TB_SNDNG) 대장을 수정한다. affected = sndngDtlMapper.updateSndngDtlSttsCd(uptSndngDtl); - if (affected != 1) { - throw new RuntimeException("세외수입 연계 정보를 발송 상세에 수정하지 못했습니다."); // 예외를 발생시켜서 DB Rollback - } + if (affected != 1) + throw new RuntimeException("세외수입 연계 정보를 발송 상세에 수정하지 못했습니다."); } } } catch (IOException e) { - throw new RuntimeException("세외수입 과태료대장 연계 작업중 오류가 발생하였습니다."); // 예외를 발생시켜서 DB Rollback + throw new RuntimeException("세외수입 과태료대장 연계 작업중 오류가 발생하였습니다."); } } @@ -573,7 +571,7 @@ public class SndngDtlBean extends AbstractBean { String rtnMsg = createSndbk(sndngDtl); // 메시지 확인 if (!rtnMsg.contains("[S]")) { - throw new RuntimeException(rtnMsg); // 예외를 발생시켜서 DB Rollback + throw new RuntimeException(rtnMsg); } } @@ -591,7 +589,7 @@ public class SndngDtlBean extends AbstractBean { // 발송상세(TB_SNDNG_DTL)에 반송 정보를 등록한다. int rtnNocs = sndngDtlMapper.createSndbk(sndngDtl); if (rtnNocs < 1) - throw new RuntimeException("발송상세의 반송 정보 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback + throw new RuntimeException("발송상세의 반송 정보 등록에 실패하였습니다."); return "[S] 작업이 정상 처리 되었습니다."; } @@ -607,7 +605,7 @@ public class SndngDtlBean extends AbstractBean { // 발송상세(TB_SNDNG_DTL)에 반송 정보를 등록한다. int rtnNocs = sndngDtlMapper.updateSndbk(sndngDtl); if (rtnNocs != 1) - throw new RuntimeException("발송상세의 반송 정보 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback + throw new RuntimeException("발송상세의 반송 정보 수정에 실패하였습니다."); return "[S] 작업이 정상 처리 되었습니다."; } @@ -638,7 +636,7 @@ public class SndngDtlBean extends AbstractBean { // 발송 상세(TB_SNDNG_DTL) 대장에 반송 정보를 삭제한다. int rtnNocs = sndngDtlMapper.deleteSndbk(sndngDtl); if (rtnNocs < 1) - throw new RuntimeException("발송상세의 반송 정보 삭제에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback + throw new RuntimeException("발송상세의 반송 정보 삭제에 실패하였습니다."); return "[S] 작업이 정상 처리 되었습니다."; } @@ -662,7 +660,7 @@ public class SndngDtlBean extends AbstractBean { // 발송 상세(TB_SNDNG_DTL) 대장에 공시송달 정보를 삭제한다. int rtnNocs = sndngDtlMapper.deleteSndngDtlSvbtc(sndngDtl); if (rtnNocs != 1) - throw new RuntimeException("발송상세의 공시송달 정보 삭제에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback + throw new RuntimeException("발송상세의 공시송달 정보 삭제에 실패하였습니다."); return "[S] 작업이 정상 처리 되었습니다."; } diff --git a/src/main/java/cokr/xit/fims/sndb/service/bean/SndngDtlServiceBean.java b/src/main/java/cokr/xit/fims/sndb/service/bean/SndngDtlServiceBean.java index b306e859..10aebc26 100644 --- a/src/main/java/cokr/xit/fims/sndb/service/bean/SndngDtlServiceBean.java +++ b/src/main/java/cokr/xit/fims/sndb/service/bean/SndngDtlServiceBean.java @@ -63,8 +63,7 @@ public class SndngDtlServiceBean extends AbstractServiceBean implements SndngDtl @Override public String registerPreNotice(SndbQuery req) { - snisBean.registerPreNotices(req); - return null; + return snisBean.registerPreNotices(req); } @Override diff --git a/src/main/java/cokr/xit/fims/sndb/service/bean/SndngServiceBean.java b/src/main/java/cokr/xit/fims/sndb/service/bean/SndngServiceBean.java index 49d83e37..35427ae8 100644 --- a/src/main/java/cokr/xit/fims/sndb/service/bean/SndngServiceBean.java +++ b/src/main/java/cokr/xit/fims/sndb/service/bean/SndngServiceBean.java @@ -6,6 +6,7 @@ import javax.annotation.Resource; import org.springframework.stereotype.Service; +import cokr.xit.fims.mngt.service.bean.TaskProcessor; import cokr.xit.fims.sndb.SndbQuery; import cokr.xit.fims.sndb.Sndng; import cokr.xit.fims.sndb.service.SndngService; @@ -24,11 +25,9 @@ import cokr.xit.foundation.data.DataObject; */ @Service("sndngService") public class SndngServiceBean extends AbstractServiceBean implements SndngService { - /** 발송 대장 정보 Bean */ @Resource(name = "sndngBean") private SndngBean sndngBean; - /** 발송 상세 정보 Bean */ @Resource(name = "sndngDtlBean") private SndngDtlBean sndngDtlBean; @@ -115,12 +114,17 @@ public class SndngServiceBean extends AbstractServiceBean implements SndngServic @Override public String createSndngLink(Sndng sndng) { - return sndngBean.createEPost(sndng); + String delivery = TaskProcessor.get().getNoticeDelivery(sndng.getTaskSeCd()); + return switch (delivery) { + case "eGreen" -> sndngBean.createEPost(sndng); + case "postplus" -> sndngBean.createEPost(sndng); +// case "postplus" -> postplusBean.requestProduction(sndng); + default -> "[F] Unknown notice delivery: " + delivery; + }; } @Override public String removeSndng(Sndng sndng) { return sndngBean.removeSndng(sndng); } - -} +} \ No newline at end of file diff --git a/src/main/java/cokr/xit/fims/sndb/web/Sndb01Controller.java b/src/main/java/cokr/xit/fims/sndb/web/Sndb01Controller.java index bb83a89b..9f5c6375 100644 --- a/src/main/java/cokr/xit/fims/sndb/web/Sndb01Controller.java +++ b/src/main/java/cokr/xit/fims/sndb/web/Sndb01Controller.java @@ -2181,20 +2181,25 @@ public class Sndb01Controller extends ApplicationController { public ModelAndView getNonTaxReceiptIndividualA03List(SndbQuery req) { boolean saved = false; String rtnMsg = ""; + List dtlIds = sndngDtlService.getSndngTrgtDtlIds(req); - // 발송상세 Ids 만큼 반복.. - for (DataObject dtl: sndngDtlService.getSndngTrgtDtlIds(req)) { - SndngDtl sndngDtl = new SndngDtl(); - sndngDtl.setSndngDtlId(dtl.string("SNDNG_DTL_ID")); - sndngDtl.setCrdnId(dtl.string("CRDN_ID")); - sndngDtl.setLinkTrgtCd(dtl.string("LINK_TRGT_CD")); - sndngDtl.setLinkMngKey(dtl.string("LINK_MNG_KEY")); - sndngDtl.setSndngDtlSttsCd(dtl.string("SNDNG_DTL_STTS_CD")); - sndngDtl.setDelYn("N"); + if ("lntris".equals(TaskProcessor.get().getNtrisInterface(req.getTaskSeCd()))) { // 지방 세외수입 + // 발송상세 Ids 만큼 반복.. + for (DataObject dtl: dtlIds) { + SndngDtl sndngDtl = new SndngDtl(); + sndngDtl.setSndngDtlId(dtl.string("SNDNG_DTL_ID")); + sndngDtl.setCrdnId(dtl.string("CRDN_ID")); + sndngDtl.setLinkTrgtCd(dtl.string("LINK_TRGT_CD")); + sndngDtl.setLinkMngKey(dtl.string("LINK_MNG_KEY")); + sndngDtl.setSndngDtlSttsCd(dtl.string("SNDNG_DTL_STTS_CD")); + sndngDtl.setDelYn("N"); + + rtnMsg = sndngDtlService.getNxrpIndivA03List(sndngDtl); + saved = rtnMsg.contains("[S]"); + } + } else { // 서울 세외수입 - rtnMsg = sndngDtlService.getNxrpIndivA03List(sndngDtl); - saved = rtnMsg.contains("[S]"); - } + } return new ModelAndView("jsonView") .addObject("saved", saved) diff --git a/src/test/resources/우편통합 cs소스.txt b/src/test/resources/우편통합 cs소스.txt new file mode 100644 index 00000000..7285052f --- /dev/null +++ b/src/test/resources/우편통합 cs소스.txt @@ -0,0 +1,129 @@ + // 전자우편 발송 등록 전 오류 자료가 존재하는지 체크 + //사진파일 체크 + while not eof do + begin + if FieldByName('MM_CARNO').AsString = '' then + begin + sm('차량번호가 공란인 내역이 있습니다.' + #13 + '차량번호를 입력해주세요.'); + exit; + end; + + if FieldByName('GP_ACCOUNT_NO').AsString = '' then + begin + sm('가상계좌가 공란인 내역이 있습니다.' + #13 + '가상계좌를 입력해주세요.'); + exit; + end; + + if FieldByName('GP_ERC_NO').AsString = '' then + begin + sm('전자납부번호가 공란인 내역이 있습니다.' + #13 + '전자납부번호를 입력해주세요.'); + exit; + end; + + if FieldByName('GP_JUSO').AsString = '' then + begin + sm('주소가 공란인 내역이 있습니다.' + #13 + '주소를 입력해주세요.'); + exit; + end; + + if (FieldByName('GP_TAXNO').AsString = '') and + ((copy(CPSystem_Info.Sido_Code,1,2) = '11') or (debug_level = 4)) then + begin + sm('과세번호가 공란인 내역이 있습니다.' + #13 + '과세번호를 입력해주세요.'); + exit; + end; + + img_chk := 0; + imcode := fieldbyname('MM_code').AsString; +// sm(fieldbyname('MM_code').AsString+#13+fieldbyname('MM_imagecnt').AsString); + sgg_code := Copy(imcode, 1, 5); //시군구 + YearPath := Copy(imcode, 6, 4); //년도 + if fieldbyname('MM_imagecnt').Asinteger = 1 then + begin + if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'A.jpg') then + inc(img_chk); + end + else if fieldbyname('MM_imagecnt').Asinteger = 2 then + begin + if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'A.jpg') then + inc(img_chk); + if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'B.jpg') then + inc(img_chk); + end else if fieldbyname('MM_imagecnt').Asinteger = 3 then + begin + if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'A.jpg') then + inc(img_chk); + if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'B.jpg') then + inc(img_chk); + if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'C.jpg') then + inc(img_chk); + end else if fieldbyname('MM_imagecnt').Asinteger = 4 then + begin + if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'A.jpg') then + inc(img_chk); + if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'B.jpg') then + inc(img_chk); + if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'C.jpg') then + inc(img_chk); + if sFtp.isFileExists(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString+'D.jpg') then + inc(img_chk); + end; + + //sm(FindField('MM_imagecnt').Asstring+#13+inttostr(img_chk)); + //sm(sFtp.FtpRootDir); + + if img_chk <> fieldbyname('MM_imagecnt').Asinteger then + begin + sm('사진파일 검사 중'+#13+ '차량번호 : '+ fieldbyname('MM_carno').AsString +'('+ fieldbyname('MM_code').AsString+')'+ + '의 사진이 서버에 저장되지 않았습니다.'+#13+ + '서버로 사진을 재전송 처리후 발송하시기 바랍니다.'); + //sm(sFtp.FtpRootDir + sgg_code + '/' + YearPath + '/' + fieldbyname('MM_code').AsString); + exit; + end; + next; + end; + end; + //사진파일 체크 + with cdDetail do begin + + IndexDefs.Clear; + IndexDefs.Add('IDX_GP_MM_CARNO_ASC' , 'GP_MM_CARNO;MM_CODE' , []); + IndexName := 'IDX_GP_MM_CARNO_ASC'; + //IndexFieldNames := 'MM_CODE'; + lblSort.Caption := '정렬 : 차량번호'; + lblSeek.Caption := '차량번호 검색'; + + First; + DisableControls; + + LVY_NO_Cnt := 0; + ERC_NO_Cnt := 0; + ACCOUNT_NO_Cnt := 0; + while not eof do begin + if FieldByName('MC_LVY_NO').AsString = '' then Inc(LVY_NO_Cnt); + if FieldByName('MC_ERC_NO').AsString = '' then Inc(ERC_NO_Cnt); + if FieldByName('MC_ACCOUNT_NO').AsString = '' then Inc(ACCOUNT_NO_Cnt); + Next; + end; + EnableControls; + if LVY_NO_Cnt > 0 then + begin + Msg_Warning('출력불가' + #13 + + '부과번호가 발취 안된 자료가 ' + IntToStr(LVY_NO_Cnt) + ' 건 있습니다.'); + Exit; + end; + if ERC_NO_Cnt > 0 then + begin + Msg_Warning('출력불가' + #13 + + '전자납부번호가 발취 안된 자료가 ' + IntToStr(ERC_NO_Cnt) + ' 건 있습니다.'); + Exit; + end; + + if ACCOUNT_NO_Cnt > 0 then + begin + Msg_Warning('출력불가' + #13 + + '가상계좌가 발취 안된 자료가 ' + IntToStr(ACCOUNT_NO_Cnt) + ' 건 있습니다.'); + Exit; + end; + + end;