diff --git a/src/main/java/cokr/xit/fims/levy/service/bean/Levy02Bean.java b/src/main/java/cokr/xit/fims/levy/service/bean/Levy02Bean.java index 555a0c1c..ba877071 100644 --- a/src/main/java/cokr/xit/fims/levy/service/bean/Levy02Bean.java +++ b/src/main/java/cokr/xit/fims/levy/service/bean/Levy02Bean.java @@ -110,7 +110,7 @@ public class Levy02Bean extends AbstractComponent { // 단속 ID로 단속, 감경 정보 조회 DataObject infoCrdnRduct = rductMapper.selectCrdnInfo(rduct.getCrdnId()); - // 부과제외 ID가 있다면 이미 부과제외 자료가 존재하므로 종료.. + // 감경 ID가 있다면 이미 부과제외 자료가 존재하므로 종료.. if (!infoCrdnRduct.string("RDUCT_ID").equals("")) { // 예외를 발생시켜서 오류메세지를 보내고 DB Rollback throw new RuntimeException("과태료 감경 정보가 이미 존재합니다."); @@ -153,36 +153,44 @@ public class Levy02Bean extends AbstractComponent { throw new RuntimeException("감경 등록 중 단속대장 금액 수정에 실패하였습니다."); } - // 부과(TB_LEVY) 대장을 수정 한다. - Levy levy = new Levy(); + // 부과 ID가 존재한다면 부과(TB_LEVY) 대장을 수정 한다. + if (!infoCrdnRduct.string("LEVY_ID").equals("")) { + // 가산금이 존재하는 확인 + if (infoCrdnRduct.number("LEVY_ADAMT").intValue() != 0 ) { + // 예외를 발생시켜서 오류메세지를 보내고 DB Rollback + throw new RuntimeException("감경 등록 중 부과 대장에 가산금이 발생하여 부과 대장 수정에 실패하였습니다."); + } + + Levy levy = new Levy(); - levy.setLevyId(infoCrdnRduct.string("LEVY_ID")); // 부과 ID - levy.setFfnlgAmt(ffnlgAmt); // 과태료 금액 + levy.setLevyId(infoCrdnRduct.string("LEVY_ID")); // 부과 ID + levy.setFfnlgAmt(ffnlgAmt); // 과태료 금액 - // 단속상태코드가 부과(51)면 과태료 금액, 부과 이전이라면 사전통지 금액으로.. - if (infoCrdnRduct.number("CRDN_STTS_CD").intValue() == 51) { - levy.setLevyPcptax(ffnlgAmt); // 부과 본세 = 과태료 금액 - } else { - // 주정차위반, 전용차로위반 과태료 - if (infoCrdnRduct.string("TASK_SE_CD").equals("BPV") || infoCrdnRduct.string("TASK_SE_CD").equals("PVS")) { - if (infoCrdnRduct.number("DUDT_YMD").intValue() >= infoCrdnRduct.number("TODAY").intValue()) { - levy.setLevyPcptax(advntceAmt); // 부과 본세 = 사전통지 금액 + // 단속상태코드가 부과(51)면 과태료 금액, 부과 이전이라면 사전통지 금액으로.. + if (infoCrdnRduct.number("CRDN_STTS_CD").intValue() == 51) { + levy.setLevyPcptax(ffnlgAmt); // 부과 본세 = 과태료 금액 + } else { + // 주정차위반, 전용차로위반 과태료 + if (infoCrdnRduct.string("TASK_SE_CD").equals("BPV") || infoCrdnRduct.string("TASK_SE_CD").equals("PVS")) { + // 납기 일자 확인 + if (infoCrdnRduct.number("DUDT_YMD").intValue() >= infoCrdnRduct.number("TODAY").intValue()) { + levy.setLevyPcptax(advntceAmt); // 부과 본세 = 사전통지 금액 + } else { + levy.setLevyPcptax(ffnlgAmt); // 부과 본세 = 과태료 금액 + } } else { - levy.setLevyPcptax(ffnlgAmt); // 부과 본세 = 과태료 금액 + levy.setLevyPcptax(advntceAmt); // 부과 본세 = 사전통지 금액 } - } else { - levy.setLevyPcptax(advntceAmt); // 부과 본세 = 사전통지 금액 } - } - - int sumAmt = levy.getLevyPcptax() - infoCrdnRduct.number("RCVMT_PCPTAX").intValue() - infoCrdnRduct.number("RDCAMT_PCPTAX").intValue(); - levy.setSumAmt(sumAmt); // 합계 금액 = 부과 본세 - 수납 본세 - 감액 본세 + int sumAmt = levy.getLevyPcptax() - infoCrdnRduct.number("RCVMT_PCPTAX").intValue() - infoCrdnRduct.number("RDCAMT_PCPTAX").intValue(); + levy.setSumAmt(sumAmt); // 합계 금액 = 부과 본세 - 수납 본세 - 감액 본세 - retSuccess = rductMapper.updateLevy(levy); - if (!retSuccess) { - // 예외를 발생시켜서 오류메세지를 보내고 DB Rollback - throw new RuntimeException("감경 등록 중 부과대장 금액 수정에 실패하였습니다."); + retSuccess = rductMapper.updateLevy(levy); + if (!retSuccess) { + // 예외를 발생시켜서 오류메세지를 보내고 DB Rollback + throw new RuntimeException("감경 등록 중 부과대장 금액 수정에 실패하였습니다."); + } } return true; @@ -207,7 +215,86 @@ public class Levy02Bean extends AbstractComponent { * */ public boolean removeRduct(Rduct rduct) { - return rductMapper.delete(rduct); + // 변수 선언 + boolean retSuccess = false; // DB 처리 결과 + + // 감경(TB_RDUCT) 자료 조회 + + + // 감경(TB_RDUCT) 대장을 삭제 한다. + retSuccess = rductMapper.delete(rduct); + if (!retSuccess) { + // 예외를 발생시켜서 오류메세지를 보내고 DB Rollback + throw new RuntimeException("감경 대장 삭제에 실패하였습니다."); + } + + // 단속 자료 조회 + DataObject infoCrdnRduct = rductMapper.selectCrdnInfo(rduct.getCrdnId()); + + // 과태료 금액 변경 + int ffnlgAmt = 0; // 과태료 금액 + int advntceAmt = 0; // 사전통지 금액 + + ffnlgAmt = infoCrdnRduct.number("FFNLG_CRDN_AMT").intValue(); // 과태료 단속 금액 - 감경 금액 + advntceAmt = ffnlgAmt - (ffnlgAmt * infoCrdnRduct.number("ADVNTCE_RDUCT_RT").intValue() / 100); // 과태료 금액 - (과태료 금액 * 사전통지 감경 율 / 100) + + // 단속(TB_CRDN) 대장을 수정 한다. + Crdn crdn = new Crdn(); + + crdn.setCrdnId(infoCrdnRduct.string("CRDN_ID")); // 단속 ID + crdn.setFfnlgRductRt("0"); // 과태료 감경 율 + crdn.setFfnlgAmt(ffnlgAmt); // 과태료 금액 + crdn.setAdvntceAmt(advntceAmt); // 사전통지 금액 + + retSuccess = rductMapper.updateCrdn(crdn); + if (!retSuccess) { + // 예외를 발생시켜서 오류메세지를 보내고 DB Rollback + throw new RuntimeException("감경 취소 중 단속대장 금액 수정에 실패하였습니다."); + } + + // 부과 ID가 존재한다면 부과(TB_LEVY) 대장을 수정 한다. + if (!infoCrdnRduct.string("LEVY_ID").equals("")) { + // 가산금이 존재하는 확인 + if (infoCrdnRduct.number("LEVY_ADAMT").intValue() != 0 ) { + // 예외를 발생시켜서 오류메세지를 보내고 DB Rollback + throw new RuntimeException("감경 취소 중 부과 대장에 가산금이 발생하여 부과 대장 수정에 실패하였습니다."); + } + + Levy levy = new Levy(); + + levy.setLevyId(infoCrdnRduct.string("LEVY_ID")); // 부과 ID + levy.setFfnlgAmt(ffnlgAmt); // 과태료 금액 + + // 단속상태코드가 부과(51)면 과태료 금액, 부과 이전이라면 사전통지 금액으로.. + if (infoCrdnRduct.number("CRDN_STTS_CD").intValue() == 51) { + levy.setLevyPcptax(ffnlgAmt); // 부과 본세 = 과태료 금액 + } else { + // 주정차위반, 전용차로위반 과태료 + if (infoCrdnRduct.string("TASK_SE_CD").equals("BPV") || infoCrdnRduct.string("TASK_SE_CD").equals("PVS")) { + // 납기 일자 확인 + if (infoCrdnRduct.number("DUDT_YMD").intValue() >= infoCrdnRduct.number("TODAY").intValue()) { + levy.setLevyPcptax(advntceAmt); // 부과 본세 = 사전통지 금액 + } else { + levy.setLevyPcptax(ffnlgAmt); // 부과 본세 = 과태료 금액 + } + } else { + levy.setLevyPcptax(advntceAmt); // 부과 본세 = 사전통지 금액 + } + } + + int sumAmt = levy.getLevyPcptax() + infoCrdnRduct.number("LEVY_ADAMT").intValue() + infoCrdnRduct.number("INSPY_INT").intValue() + - infoCrdnRduct.number("RCVMT_PCPTAX").intValue() - infoCrdnRduct.number("RCVMT_ADAMT").intValue() + - infoCrdnRduct.number("RDCAMT_PCPTAX").intValue() - infoCrdnRduct.number("RDCAMT_ADAMT").intValue(); + levy.setSumAmt(sumAmt); // 합계 금액 = 부과 본세 + 부과 가산금 + 분납 이자 - 수납 본세 - 수납 가산금 - 감액 본세 - 감액 가산금 + + retSuccess = rductMapper.updateLevy(levy); + if (!retSuccess) { + // 예외를 발생시켜서 오류메세지를 보내고 DB Rollback + throw new RuntimeException("감경 등록 중 부과대장 금액 수정에 실패하였습니다."); + } + } + + return true; } } diff --git a/src/main/resources/sql/mapper/fims/excl/opnnSbmsn-mapper.xml b/src/main/resources/sql/mapper/fims/excl/opnnSbmsn-mapper.xml index f2afe9f0..cf47746b 100644 --- a/src/main/resources/sql/mapper/fims/excl/opnnSbmsn-mapper.xml +++ b/src/main/resources/sql/mapper/fims/excl/opnnSbmsn-mapper.xml @@ -428,7 +428,7 @@ FROM TB_OPNN_SBMSN WHERE RCPT_NO LIKE CONCAT(DATE_FORMAT(CURRENT_DATE, '%Y'), '%') ) AS NEW_RCPT_NO /* 신규 접수 번호 */ , AS TODAY /* 오늘 일자 */ - FROM TB_CRDN C + FROM TB_CRDN C LEFT OUTER JOIN TB_PAYER P ON (C.RTPYR_ID = P.RTPYR_ID) LEFT OUTER JOIN TB_OPNN_SBMSN OS ON (C.CRDN_ID = OS.CRDN_ID AND OS.DEL_YN = 'N') WHERE C.CRDN_ID = #{crdnId} /* 단속 ID */ diff --git a/src/main/resources/sql/mapper/fims/levy/rduct-mapper.xml b/src/main/resources/sql/mapper/fims/levy/rduct-mapper.xml index 8653f10f..e0c75d3a 100644 --- a/src/main/resources/sql/mapper/fims/levy/rduct-mapper.xml +++ b/src/main/resources/sql/mapper/fims/levy/rduct-mapper.xml @@ -54,13 +54,15 @@ , C.MINUS_AMT , C.ADTN_AMT , C.RCVMT_AMT - , C.CRDN_STTS_CD /* 처리상태 */ + , C.CRDN_STTS_CD /* 단속 상태 코드 */ + , (SELECT FN_GET_CODE_NM('FIM010', C.CRDN_STTS_CD) FROM DUAL) AS CRDN_STTS_NM /* 단속 상태 명 */ , P.RTPYR_NO /* 납부자 번호 */ , P.RTPYR_NM /* 납부자 명 */ + , L.LEVY_ID /* 부과 ID */ FROM TB_RDUCT R INNER JOIN TB_CRDN C ON (R.CRDN_ID = C.CRDN_ID) - INNER JOIN TB_TASK_INFO TI ON (C.SGG_CD = TI.SGG_CD AND C.TASK_SE_CD = TI.TASK_SE_CD) LEFT OUTER JOIN TB_PAYER P ON (C.RTPYR_ID = P.RTPYR_ID) + LEFT OUTER JOIN TB_LEVY L ON (C.LEVY_ID = L.LEVY_ID) /* 단속 대장 과태료 감경 금액 수정(rductMapper.updateCrdnRduct) */ diff --git a/src/main/webapp/WEB-INF/jsp/fims/levy/levy02020-info.jsp b/src/main/webapp/WEB-INF/jsp/fims/levy/levy02020-info.jsp index a30b8c28..cdfb10c8 100644 --- a/src/main/webapp/WEB-INF/jsp/fims/levy/levy02020-info.jsp +++ b/src/main/webapp/WEB-INF/jsp/fims/levy/levy02020-info.jsp @@ -163,6 +163,14 @@ // validate 확인 if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return; + // 감경 사유 확인 + let rductRsn = $("#rductRsnCd--${pageName}").val(); + if (rductRsn == "00") { + dialog.alert("다른 감경 사유를 선택하여 주시기 바랍니다."); + + return; + } + dialog.alert({ content : "현재 " + ${pageName}Control.prefixName + " 정보를 저장하시겠습니까?" , onOK : () => {