From 95be726013efbcc35900e5d6941246483c58a105 Mon Sep 17 00:00:00 2001 From: mjkhan21 Date: Tue, 30 Sep 2025 11:29:56 +0900 Subject: [PATCH] =?UTF-8?q?=EC=84=9C=EC=9A=B8=20=EC=84=B8=EC=99=B8?= =?UTF-8?q?=EC=88=98=EC=9E=85=20=EC=97=B0=EA=B3=84=20=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/cokr/xit/fims/levy/Levy.java | 17 +++- .../xit/fims/nxrp/service/bean/SnisBean.java | 88 +++++++------------ src/main/java/cokr/xit/fims/rcvm/Rcvmt.java | 7 +- .../xit/fims/rcvm/service/bean/RcvmtBean.java | 2 - 4 files changed, 52 insertions(+), 62 deletions(-) diff --git a/src/main/java/cokr/xit/fims/levy/Levy.java b/src/main/java/cokr/xit/fims/levy/Levy.java index 97eeef62..fec26099 100644 --- a/src/main/java/cokr/xit/fims/levy/Levy.java +++ b/src/main/java/cokr/xit/fims/levy/Levy.java @@ -199,14 +199,27 @@ public class Levy extends AbstractEntity { /** 단속 Ids */ private String[] crdnIds; - public int finalPcptax() { + /**최종본세(부과본세 - 수납본세 - 감액본세)를 반환한다. + * @return 최종본세 + */ + public int lastPcptax() { return toInt(levyPcptax) - toInt(rcvmtPcptax) - toInt(rdamtPcptax); } - public int finalAdamt() { + /**최종가산금(부과가산금 - 수납가산금 - 감액가산금)을 반환한다. + * @return 최종가산금 + */ + public int lastAdamt() { return toInt(levyAdamt) - toInt(rcvmtAdamt) - toInt(rdamtAdamt); } + /**합계금액((부과본세 + 부과가산금) - (수납본세 + 수납가산금) - (감액본세 + 감액가산금))을 반환한다. + * @return 합계금액 + */ + public int lastAmt() { + return lastPcptax() + lastAdamt(); + } + public List> bankAccountSetters() { ArrayList> setters = new ArrayList<>(); setters.add((bankNm, accountNo) -> {setBankNm(bankNm); setVrActno(accountNo);}); 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 8a640c3d..83395fef 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 @@ -229,9 +229,8 @@ public class SnisBean extends AbstractBean { prenotice.setDisposalContent("부과"); // 처분내용 prenotice.setRawBasis(Vltn.legalBasis(crdnInfo)); // 부과근거 prenotice.setSemokCd(crdnInfo.string("ACNTG_SE_CD") + crdnInfo.string("TXITM_CD")); // 세목코드 - long taxAmt = toLong(crdnInfo.get("FFNLG_AMT")); - prenotice.setTaxAmt(taxAmt); // 과세금액 - prenotice.setPreTaxAmt(toLong(taxAmt * 0.8)); // + prenotice.setTaxAmt(toLong(crdnInfo.get("FFNLG_AMT"))); // 부과예정금액(감경전) + prenotice.setPreTaxAmt(toLong(crdnInfo.get("ADVNTCE_AMT"))); // 자진납부금액(감경후) prenotice.setJukbalDtlAddr(Crdn.location(crdnInfo)); // 위반장소 prenotice.setJukbalMgrNm(currentUser.getName()); // 적발담당자 @@ -318,18 +317,20 @@ 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.gasanAmt()); // 부과가산금 - levy.setLastAmt((int)notice.totalAmt()); // 최종금액 + int taxAmt = (int)notice.getTaxAmt(); + levy.setLevyPcptax(taxAmt); // 부과본세 <- 과세금액 + int gasanAmt = (int)notice.gasanAmt(); + levy.setLevyAdamt(gasanAmt); // 부과가산금 levy.setDudtAftrAmt(null); - +/* if ("1".equals(notice.getBuStatusCd())) { // 완납일경우 - levy.setRcvmtPcptax((int)notice.getTaxAmt()); - levy.setRcvmtAdamt((int)notice.gasanAmt()); + levy.setRcvmtPcptax(taxAmt); + levy.setRcvmtAdamt(gasanAmt); + levy.setRcvmtYmd(notice.getNapbuYmd()); // 수납일자 } - + levy.setLastAmt(levy.lastAmt()); // 최종금액 +*/ levy.setDudtAftrYmd(notice.getNapgiAftYmd()); // 납기후일자 levy.setTxtnThing(notice.getMulNm()); // 물건이름 @@ -365,7 +366,11 @@ public class SnisBean extends AbstractBean { } private void update(List notices) { - log().debug("{} Ye22NoticeInfoDTO(s) received", !isEmpty(notices) ? notices.size() : 0); + log().debug("Ye22NoticeInfoDTO(s) received: {}", !isEmpty(notices) ? notices.size() : 0); + // 상태가 부과,완납,감면,전액감액,신고종료인 것들만 처리 + notices = !isEmpty(notices) ? + notices.stream().filter(notice -> "부과,완납,감면,전액감액,신고종료".contains(notice.getBuStatusNm())).toList() : + Collections.emptyList(); if (isEmpty(notices)) return; // 세외수입 연계키별 부과정보 @@ -380,14 +385,8 @@ public class SnisBean extends AbstractBean { Crdn::getCrdnId, crdn -> crdn )); - // '부과'상태 사전통보 포함여부 - boolean bugwa = notices.stream() - .filter(notice -> "0".equals(notice.getBuStatusCd())) - .count() > 0; // 단속ID별 발송상세 정보 - List sndngDtls = !bugwa ? - Collections.emptyList() : - sndngDtlMapper.selectSndngDetails(new SndbQuery().setCrdnIds(crdnIDs.toArray(new String[crdnIDs.size()]))); + List sndngDtls = sndngDtlMapper.selectSndngDetails(new SndbQuery().setCrdnIds(crdnIDs.toArray(new String[crdnIDs.size()]))); Map sndngDetails = sndngDtls.stream().collect(Collectors.toMap( SndngDtl::getCrdnId, sndngDtl -> sndngDtl @@ -405,17 +404,17 @@ public class SnisBean extends AbstractBean { String statusCode = notice.getBuStatusCd(), // 과태료 상태 status = notice.getBuStatusNm(); // 상태이름 - boolean paid = "1,2,3,4,5".contains(statusCode); // 수납(완납,이중납,일부납,과납,오납) + boolean paid = "완납".equals(status); int rcvmtAmt = (int)notice.totalAmt(); log().debug("세외수입 연계키: {}, 상태: {}({})", linkMngKey, status, statusCode); update(notice, levy); // 부과정보에 적용 + levyMapper.updateLevy(levy); if (paid) { Rcvmt rcvmt = Rcvmt.create(levy); // 수납등록 rcvmt.setRcvmtAmt(rcvmtAmt); // 수납금액 rcvmt.setRcvmtYmd(notice.getNapbuYmd()); // 수납일자 - rcvmt.calcAmts(); if ("1".equals(statusCode)) { // 완납 String rcvmtSttsCd = switch (crdn.getCrdnSttsCd()) { case "23", "31", "42", "43", "44", "45" -> "1"; // 사전부과, 의견제출, 사전통보발송, 사전통보완료 -> 사전통보수납 @@ -427,51 +426,30 @@ public class SnisBean extends AbstractBean { rcvmt.setRcvmtSttsCd(rcvmtSttsCd); } rcvmtBean.createRcvmt(rcvmt); + + crdn.setRcvmtAmt(rcvmtAmt); // 수납금액 + crdnUpdtMapper.updateEditCrdn(crdn); } - if (bugwa) { - SndngDtl sndngDtl = sndngDetails.get(crdnId); - update(notice, sndngDtl); // 발송상세에 적용 - if (sndngDtl != null) - sndngDtlMapper.updateSndngDtl(sndngDtl); + SndngDtl sndngDtl = sndngDetails.get(crdnId); + update(notice, sndngDtl); // 발송상세에 적용 + if (sndngDtl != null) { + sndngDtl.setLastAmt(levy.getLastAmt()); + sndngDtlMapper.updateSndngDtl(sndngDtl); } - boolean reduced = "30".equals(statusCode); + boolean reduced = "감면".equals(status); if (reduced) { // 감면 -> 감액 등록 Rdamt rdamt = Rdamt.create(levy); rdamtBean.createRdamt(rdamt); } - if (!paid && !reduced) - levyMapper.updateLevy(levy); - -// String crdnStatus = crdn.getCrdnSttsCd(); - // 단속정보에 적용 - if ("0".equals(statusCode)) { // '부과'상태 - - } else if (paid) { - crdn.setRcvmtAmt(rcvmtAmt); // 수납금액 - // notice.getNapbuYmd(); // 납부일자 - crdnUpdtMapper.updateEditCrdn(crdn); -/* - crdnStatus = switch (crdn.getCrdnSttsCd()) { - case "23", "31", "42", "43", "44", "45" -> "71"; // 사전부과, 의견제출, 사전통보발송, 사전통보완료 -> 사전통보수납 - case "51" -> "72"; // 부과 -> 부과수납 - case "52" -> "73"; // 독촉 -> 독촉수납 - case "53", "54" -> "74"; // 압류예고, 압류대상 -> 압류예정수납 - case "55" -> "75"; // 압류 -> 압류수납 - default -> null; - }; - if (crdnStatus != null) { - CrdnSttsHstry history = CrdnSttsHstry.create(crdnStatus, null, crdn); - crdnSttsHstryBean.createHstryUpdateCrdnSttsCd(history); - } -*/ - } else if ("전액감액".equals(status)) { // 전액감액 -> 부과취소 + if ("전액감액,신고종료".contains(status)) { // 전액감액, -> 부과취소 LevyExcl levyExcl = new LevyExcl(); levyExcl.setCrdnId(crdnId); - levyExcl.setLevyExclSeCd("3"); - levyExcl.setLevyExclYmd(ifEmpty(notice.getNapbuYmd(), dateFormats::today)); + levyExcl.setLevyExclSeCd("3"); // 구분: 부과취소 + levyExcl.setLevyExclRsnCd("150"); // 사유: 부과취소 + levyExcl.setLevyExclYmd(dateFormats.today()); levyExclBean.createLevyExcl(levyExcl); } } diff --git a/src/main/java/cokr/xit/fims/rcvm/Rcvmt.java b/src/main/java/cokr/xit/fims/rcvm/Rcvmt.java index 60e90f58..1db48077 100644 --- a/src/main/java/cokr/xit/fims/rcvm/Rcvmt.java +++ b/src/main/java/cokr/xit/fims/rcvm/Rcvmt.java @@ -30,8 +30,9 @@ public class Rcvmt extends AbstractEntity { rcvmt.setPayMthdSeCd("10"); // 납부방법구분: 기타 (FIM045) rcvmt.setEpayno(levy.getEpayno()); // 전자납부번호 - rcvmt.setLastPcptax(levy.finalPcptax()); // 최종본세 - rcvmt.setLastAdamt(levy.finalAdamt()); // 최종가산금 + rcvmt.setLastPcptax(levy.lastPcptax()); // 최종본세 + rcvmt.setLastAdamt(levy.lastAdamt()); // 최종가산금 + return rcvmt; } @@ -202,7 +203,6 @@ public class Rcvmt extends AbstractEntity { /**수납본세와 가산금을 계산하고, 수납상태를 설정한다. * 수납금액을 설정된 후 호출해야 한다. - */ public void calcAmts() { if (lastPcptax == null || lastAdamt == null) return; @@ -229,4 +229,5 @@ public class Rcvmt extends AbstractEntity { } } } + */ } \ No newline at end of file diff --git a/src/main/java/cokr/xit/fims/rcvm/service/bean/RcvmtBean.java b/src/main/java/cokr/xit/fims/rcvm/service/bean/RcvmtBean.java index bc98e8f5..a09bd1f5 100644 --- a/src/main/java/cokr/xit/fims/rcvm/service/bean/RcvmtBean.java +++ b/src/main/java/cokr/xit/fims/rcvm/service/bean/RcvmtBean.java @@ -99,9 +99,7 @@ public class RcvmtBean extends AbstractBean { * */ public String createRcvmt(Rcvmt rcvmt) { - // 부과 ID로 부과 정보 조회 DataObject levyInfo = levyMapper.selectLevyAmt(new LevyQuery().setLevyId(rcvmt.getLevyId())); - rcvmt.setDeptCd(levyInfo.string("DEPT_CD")); // 부서 코드 rcvmt.setSpclBizCd(levyInfo.string("SPCL_BIZ_CD")); // 특별회계 사업 코드 rcvmt.setLastPcptax(toInt(levyInfo.get("LAST_PCPTAX")));// 최종 본세