서울 세외수입 연계 관련 수정

main
mjkhan21 3 months ago
parent 351521e3ce
commit 95be726013

@ -199,14 +199,27 @@ public class Levy extends AbstractEntity {
/** 단속 Ids */ /** 단속 Ids */
private String[] crdnIds; private String[] crdnIds;
public int finalPcptax() { /**( - - ) .
* @return
*/
public int lastPcptax() {
return toInt(levyPcptax) - toInt(rcvmtPcptax) - toInt(rdamtPcptax); return toInt(levyPcptax) - toInt(rcvmtPcptax) - toInt(rdamtPcptax);
} }
public int finalAdamt() { /**( - - ) .
* @return
*/
public int lastAdamt() {
return toInt(levyAdamt) - toInt(rcvmtAdamt) - toInt(rdamtAdamt); return toInt(levyAdamt) - toInt(rcvmtAdamt) - toInt(rdamtAdamt);
} }
/**(( + ) - ( + ) - ( + )) .
* @return
*/
public int lastAmt() {
return lastPcptax() + lastAdamt();
}
public List<BiConsumer<String, String>> bankAccountSetters() { public List<BiConsumer<String, String>> bankAccountSetters() {
ArrayList<BiConsumer<String, String>> setters = new ArrayList<>(); ArrayList<BiConsumer<String, String>> setters = new ArrayList<>();
setters.add((bankNm, accountNo) -> {setBankNm(bankNm); setVrActno(accountNo);}); setters.add((bankNm, accountNo) -> {setBankNm(bankNm); setVrActno(accountNo);});

@ -229,9 +229,8 @@ public class SnisBean extends AbstractBean {
prenotice.setDisposalContent("부과"); // 처분내용 prenotice.setDisposalContent("부과"); // 처분내용
prenotice.setRawBasis(Vltn.legalBasis(crdnInfo)); // 부과근거 prenotice.setRawBasis(Vltn.legalBasis(crdnInfo)); // 부과근거
prenotice.setSemokCd(crdnInfo.string("ACNTG_SE_CD") + crdnInfo.string("TXITM_CD")); // 세목코드 prenotice.setSemokCd(crdnInfo.string("ACNTG_SE_CD") + crdnInfo.string("TXITM_CD")); // 세목코드
long taxAmt = toLong(crdnInfo.get("FFNLG_AMT")); prenotice.setTaxAmt(toLong(crdnInfo.get("FFNLG_AMT"))); // 부과예정금액(감경전)
prenotice.setTaxAmt(taxAmt); // 과세금액 prenotice.setPreTaxAmt(toLong(crdnInfo.get("ADVNTCE_AMT"))); // 자진납부금액(감경후)
prenotice.setPreTaxAmt(toLong(taxAmt * 0.8)); //
prenotice.setJukbalDtlAddr(Crdn.location(crdnInfo)); // 위반장소 prenotice.setJukbalDtlAddr(Crdn.location(crdnInfo)); // 위반장소
prenotice.setJukbalMgrNm(currentUser.getName()); // 적발담당자 prenotice.setJukbalMgrNm(currentUser.getName()); // 적발담당자
@ -318,18 +317,20 @@ public class SnisBean extends AbstractBean {
levy.setLevyNo(notice.getTaxNo()); // 부과번호 levy.setLevyNo(notice.getTaxNo()); // 부과번호
levy.setLevyYmd(notice.getTaxYmd()); // 부과일자 levy.setLevyYmd(notice.getTaxYmd()); // 부과일자
levy.setDudtYmd(notice.getNapgiYmd()); // 납기일자 levy.setDudtYmd(notice.getNapgiYmd()); // 납기일자
levy.setRcvmtYmd(notice.getNapbuYmd()); // 수납일자
levy.setLevyPcptax((int)notice.getTaxAmt()); // 부과본세 <- 과세금액 int taxAmt = (int)notice.getTaxAmt();
levy.setLevyAdamt((int)notice.gasanAmt()); // 부과가산금 levy.setLevyPcptax(taxAmt); // 부과본세 <- 과세금액
levy.setLastAmt((int)notice.totalAmt()); // 최종금액 int gasanAmt = (int)notice.gasanAmt();
levy.setLevyAdamt(gasanAmt); // 부과가산금
levy.setDudtAftrAmt(null); levy.setDudtAftrAmt(null);
/*
if ("1".equals(notice.getBuStatusCd())) { // 완납일경우 if ("1".equals(notice.getBuStatusCd())) { // 완납일경우
levy.setRcvmtPcptax((int)notice.getTaxAmt()); levy.setRcvmtPcptax(taxAmt);
levy.setRcvmtAdamt((int)notice.gasanAmt()); levy.setRcvmtAdamt(gasanAmt);
levy.setRcvmtYmd(notice.getNapbuYmd()); // 수납일자
} }
levy.setLastAmt(levy.lastAmt()); // 최종금액
*/
levy.setDudtAftrYmd(notice.getNapgiAftYmd()); // 납기후일자 levy.setDudtAftrYmd(notice.getNapgiAftYmd()); // 납기후일자
levy.setTxtnThing(notice.getMulNm()); // 물건이름 levy.setTxtnThing(notice.getMulNm()); // 물건이름
@ -365,7 +366,11 @@ public class SnisBean extends AbstractBean {
} }
private void update(List<Ye22NoticeInfoDTO> notices) { private void update(List<Ye22NoticeInfoDTO> 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; if (isEmpty(notices)) return;
// 세외수입 연계키별 부과정보 // 세외수입 연계키별 부과정보
@ -380,14 +385,8 @@ public class SnisBean extends AbstractBean {
Crdn::getCrdnId, Crdn::getCrdnId,
crdn -> crdn crdn -> crdn
)); ));
// '부과'상태 사전통보 포함여부
boolean bugwa = notices.stream()
.filter(notice -> "0".equals(notice.getBuStatusCd()))
.count() > 0;
// 단속ID별 발송상세 정보 // 단속ID별 발송상세 정보
List<SndngDtl> sndngDtls = !bugwa ? List<SndngDtl> sndngDtls = sndngDtlMapper.selectSndngDetails(new SndbQuery().setCrdnIds(crdnIDs.toArray(new String[crdnIDs.size()])));
Collections.emptyList() :
sndngDtlMapper.selectSndngDetails(new SndbQuery().setCrdnIds(crdnIDs.toArray(new String[crdnIDs.size()])));
Map<String, SndngDtl> sndngDetails = sndngDtls.stream().collect(Collectors.toMap( Map<String, SndngDtl> sndngDetails = sndngDtls.stream().collect(Collectors.toMap(
SndngDtl::getCrdnId, SndngDtl::getCrdnId,
sndngDtl -> sndngDtl sndngDtl -> sndngDtl
@ -405,17 +404,17 @@ public class SnisBean extends AbstractBean {
String statusCode = notice.getBuStatusCd(), // 과태료 상태 String statusCode = notice.getBuStatusCd(), // 과태료 상태
status = notice.getBuStatusNm(); // 상태이름 status = notice.getBuStatusNm(); // 상태이름
boolean paid = "1,2,3,4,5".contains(statusCode); // 수납(완납,이중납,일부납,과납,오납) boolean paid = "완납".equals(status);
int rcvmtAmt = (int)notice.totalAmt(); int rcvmtAmt = (int)notice.totalAmt();
log().debug("세외수입 연계키: {}, 상태: {}({})", linkMngKey, status, statusCode); log().debug("세외수입 연계키: {}, 상태: {}({})", linkMngKey, status, statusCode);
update(notice, levy); // 부과정보에 적용 update(notice, levy); // 부과정보에 적용
levyMapper.updateLevy(levy);
if (paid) { if (paid) {
Rcvmt rcvmt = Rcvmt.create(levy); // 수납등록 Rcvmt rcvmt = Rcvmt.create(levy); // 수납등록
rcvmt.setRcvmtAmt(rcvmtAmt); // 수납금액 rcvmt.setRcvmtAmt(rcvmtAmt); // 수납금액
rcvmt.setRcvmtYmd(notice.getNapbuYmd()); // 수납일자 rcvmt.setRcvmtYmd(notice.getNapbuYmd()); // 수납일자
rcvmt.calcAmts();
if ("1".equals(statusCode)) { // 완납 if ("1".equals(statusCode)) { // 완납
String rcvmtSttsCd = switch (crdn.getCrdnSttsCd()) { String rcvmtSttsCd = switch (crdn.getCrdnSttsCd()) {
case "23", "31", "42", "43", "44", "45" -> "1"; // 사전부과, 의견제출, 사전통보발송, 사전통보완료 -> 사전통보수납 case "23", "31", "42", "43", "44", "45" -> "1"; // 사전부과, 의견제출, 사전통보발송, 사전통보완료 -> 사전통보수납
@ -427,51 +426,30 @@ public class SnisBean extends AbstractBean {
rcvmt.setRcvmtSttsCd(rcvmtSttsCd); rcvmt.setRcvmtSttsCd(rcvmtSttsCd);
} }
rcvmtBean.createRcvmt(rcvmt); rcvmtBean.createRcvmt(rcvmt);
crdn.setRcvmtAmt(rcvmtAmt); // 수납금액
crdnUpdtMapper.updateEditCrdn(crdn);
} }
if (bugwa) { SndngDtl sndngDtl = sndngDetails.get(crdnId);
SndngDtl sndngDtl = sndngDetails.get(crdnId); update(notice, sndngDtl); // 발송상세에 적용
update(notice, sndngDtl); // 발송상세에 적용 if (sndngDtl != null) {
if (sndngDtl != null) sndngDtl.setLastAmt(levy.getLastAmt());
sndngDtlMapper.updateSndngDtl(sndngDtl); sndngDtlMapper.updateSndngDtl(sndngDtl);
} }
boolean reduced = "30".equals(statusCode); boolean reduced = "감면".equals(status);
if (reduced) { // 감면 -> 감액 등록 if (reduced) { // 감면 -> 감액 등록
Rdamt rdamt = Rdamt.create(levy); Rdamt rdamt = Rdamt.create(levy);
rdamtBean.createRdamt(rdamt); rdamtBean.createRdamt(rdamt);
} }
if (!paid && !reduced) if ("전액감액,신고종료".contains(status)) { // 전액감액, -> 부과취소
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)) { // 전액감액 -> 부과취소
LevyExcl levyExcl = new LevyExcl(); LevyExcl levyExcl = new LevyExcl();
levyExcl.setCrdnId(crdnId); levyExcl.setCrdnId(crdnId);
levyExcl.setLevyExclSeCd("3"); levyExcl.setLevyExclSeCd("3"); // 구분: 부과취소
levyExcl.setLevyExclYmd(ifEmpty(notice.getNapbuYmd(), dateFormats::today)); levyExcl.setLevyExclRsnCd("150"); // 사유: 부과취소
levyExcl.setLevyExclYmd(dateFormats.today());
levyExclBean.createLevyExcl(levyExcl); levyExclBean.createLevyExcl(levyExcl);
} }
} }

@ -30,8 +30,9 @@ public class Rcvmt extends AbstractEntity {
rcvmt.setPayMthdSeCd("10"); // 납부방법구분: 기타 (FIM045) rcvmt.setPayMthdSeCd("10"); // 납부방법구분: 기타 (FIM045)
rcvmt.setEpayno(levy.getEpayno()); // 전자납부번호 rcvmt.setEpayno(levy.getEpayno()); // 전자납부번호
rcvmt.setLastPcptax(levy.finalPcptax()); // 최종본세 rcvmt.setLastPcptax(levy.lastPcptax()); // 최종본세
rcvmt.setLastAdamt(levy.finalAdamt()); // 최종가산금 rcvmt.setLastAdamt(levy.lastAdamt()); // 최종가산금
return rcvmt; return rcvmt;
} }
@ -202,7 +203,6 @@ public class Rcvmt extends AbstractEntity {
/** , . /** , .
* . * .
*/
public void calcAmts() { public void calcAmts() {
if (lastPcptax == null || lastAdamt == null) return; if (lastPcptax == null || lastAdamt == null) return;
@ -229,4 +229,5 @@ public class Rcvmt extends AbstractEntity {
} }
} }
} }
*/
} }

@ -99,9 +99,7 @@ public class RcvmtBean extends AbstractBean {
* </ul> * </ul>
*/ */
public String createRcvmt(Rcvmt rcvmt) { public String createRcvmt(Rcvmt rcvmt) {
// 부과 ID로 부과 정보 조회
DataObject levyInfo = levyMapper.selectLevyAmt(new LevyQuery().setLevyId(rcvmt.getLevyId())); DataObject levyInfo = levyMapper.selectLevyAmt(new LevyQuery().setLevyId(rcvmt.getLevyId()));
rcvmt.setDeptCd(levyInfo.string("DEPT_CD")); // 부서 코드 rcvmt.setDeptCd(levyInfo.string("DEPT_CD")); // 부서 코드
rcvmt.setSpclBizCd(levyInfo.string("SPCL_BIZ_CD")); // 특별회계 사업 코드 rcvmt.setSpclBizCd(levyInfo.string("SPCL_BIZ_CD")); // 특별회계 사업 코드
rcvmt.setLastPcptax(toInt(levyInfo.get("LAST_PCPTAX")));// 최종 본세 rcvmt.setLastPcptax(toInt(levyInfo.get("LAST_PCPTAX")));// 최종 본세

Loading…
Cancel
Save