|
|
|
@ -8,6 +8,10 @@ import org.springframework.stereotype.Component;
|
|
|
|
|
|
|
|
|
|
import cokr.xit.foundation.AbstractComponent;
|
|
|
|
|
import cokr.xit.foundation.data.DataObject;
|
|
|
|
|
import cokr.xit.fims.cmmn.CrdnSttsHstry;
|
|
|
|
|
import cokr.xit.fims.cmmn.service.bean.CrdnSttsHstryBean;
|
|
|
|
|
import cokr.xit.fims.levy.Levy;
|
|
|
|
|
import cokr.xit.fims.levy.dao.LevyMapper;
|
|
|
|
|
import cokr.xit.fims.rcvm.Rcvmt;
|
|
|
|
|
import cokr.xit.fims.rcvm.RcvmtQuery;
|
|
|
|
|
import cokr.xit.fims.rcvm.dao.RcvmtMapper;
|
|
|
|
@ -29,6 +33,14 @@ public class RcvmtBean extends AbstractComponent {
|
|
|
|
|
@Resource(name = "rcvmtMapper")
|
|
|
|
|
private RcvmtMapper rcvmtMapper;
|
|
|
|
|
|
|
|
|
|
/** 부과 대장 정보 DAO */
|
|
|
|
|
@Resource(name = "levyMapper")
|
|
|
|
|
private LevyMapper levyMapper;
|
|
|
|
|
|
|
|
|
|
/** 단속 상태 이력 정보 Bean */
|
|
|
|
|
@Resource(name = "crdnSttsHstryBean")
|
|
|
|
|
private CrdnSttsHstryBean crdnSttsHstryBean;
|
|
|
|
|
|
|
|
|
|
/**지정한 조건에 따라 수납 대장 목록을 조회하여 반환한다.
|
|
|
|
|
* @param req 수납 대장 조회 조건
|
|
|
|
|
* @return 수납 대장 목록
|
|
|
|
@ -81,31 +93,29 @@ public class RcvmtBean extends AbstractComponent {
|
|
|
|
|
String retMessage = "[F] "; // 처리 결과 메시지
|
|
|
|
|
|
|
|
|
|
// 부과 ID로 단속, 부과 정보 조회
|
|
|
|
|
DataObject levyInfo = rcvmtMapper.selectLevyInfo(new RcvmtQuery().setLevyId(rcvmt.getLevyId())
|
|
|
|
|
.setDelYn("N"));
|
|
|
|
|
|
|
|
|
|
DataObject levyInfo = rcvmtMapper.selectLevyInfo(new RcvmtQuery().setLevyId(rcvmt.getLevyId()).setDelYn("N"));
|
|
|
|
|
String rcvmtSeCd = ""; // 수납 구분 코드(FIM041)
|
|
|
|
|
|
|
|
|
|
// 입력된 수납 금액으로 수납 본세, 수납 가산금 나누기
|
|
|
|
|
int pcptax = levyInfo.number("PCPTAX").intValue(); // 본세
|
|
|
|
|
int adamt = levyInfo.number("ADAMT").intValue(); // 가산금
|
|
|
|
|
rcvmt.setLastPcptax(levyInfo.number("LAST_PCPTAX").intValue()); // 최종 본세
|
|
|
|
|
rcvmt.setLastAdamt(levyInfo.number("LAST_ADAMT").intValue()); // 최종 가산금
|
|
|
|
|
|
|
|
|
|
if (pcptax + adamt == rcvmt.getRcvmtAmt()) {
|
|
|
|
|
rcvmt.setRcvmtPcptax(pcptax); // 수납 본세
|
|
|
|
|
rcvmt.setRcvmtAdamt(adamt); // 수납 가산금
|
|
|
|
|
rcvmtSeCd = "01"; // 수납 구분 코드 = 완납
|
|
|
|
|
} else if (pcptax + adamt == 0) { // 납부할 금액이 없다면..
|
|
|
|
|
// 입력된 수납 금액으로 수납 본세, 수납 가산금 나누기
|
|
|
|
|
if (rcvmt.getLastPcptax() + rcvmt.getLastAdamt() == 0) { // 최종 금액이 0원 이라면..
|
|
|
|
|
rcvmt.setRcvmtPcptax(0); // 수납 본세
|
|
|
|
|
rcvmt.setRcvmtAdamt(0); // 수납 가산금
|
|
|
|
|
rcvmtSeCd = "02"; // 수납 구분 코드 = 이중수납
|
|
|
|
|
} else if (pcptax + adamt < rcvmt.getRcvmtAmt()) {
|
|
|
|
|
rcvmt.setRcvmtPcptax(pcptax); // 수납 본세
|
|
|
|
|
rcvmt.setRcvmtAdamt(adamt); // 수납 가산금
|
|
|
|
|
} else if (rcvmt.getLastPcptax() + rcvmt.getLastAdamt() == rcvmt.getRcvmtAmt()) { // 최종 금액과 수납 금액이 일치한다면..
|
|
|
|
|
rcvmt.setRcvmtPcptax(rcvmt.getLastPcptax()); // 수납 본세
|
|
|
|
|
rcvmt.setRcvmtAdamt(rcvmt.getLastAdamt()); // 수납 가산금
|
|
|
|
|
rcvmtSeCd = "01"; // 수납 구분 코드 = 완납
|
|
|
|
|
} else if (rcvmt.getLastPcptax() + rcvmt.getLastAdamt() < rcvmt.getRcvmtAmt()) { // 최종 금액보다 수납 금액이 많다면..
|
|
|
|
|
rcvmt.setRcvmtPcptax(rcvmt.getLastPcptax()); // 수납 본세
|
|
|
|
|
rcvmt.setRcvmtAdamt(rcvmt.getLastAdamt()); // 수납 가산금
|
|
|
|
|
rcvmtSeCd = "04"; // 수납 구분 코드 = 과납
|
|
|
|
|
} else if (pcptax + adamt > rcvmt.getRcvmtAmt()) {
|
|
|
|
|
if (rcvmt.getRcvmtAmt() > pcptax) {
|
|
|
|
|
rcvmt.setRcvmtPcptax(pcptax); // 수납 본세
|
|
|
|
|
rcvmt.setRcvmtAdamt(rcvmt.getRcvmtAmt() - pcptax); // 수납 가산금
|
|
|
|
|
} else if (rcvmt.getLastPcptax() + rcvmt.getLastAdamt() > rcvmt.getRcvmtAmt()) { // 최종 금액보다 수납 금액이 적다면..
|
|
|
|
|
if (rcvmt.getRcvmtAmt() > rcvmt.getLastPcptax()) {
|
|
|
|
|
rcvmt.setRcvmtPcptax(rcvmt.getLastPcptax()); // 수납 본세
|
|
|
|
|
rcvmt.setRcvmtAdamt(rcvmt.getRcvmtAmt() - rcvmt.getLastPcptax()); // 수납 가산금
|
|
|
|
|
} else {
|
|
|
|
|
rcvmt.setRcvmtPcptax(rcvmt.getRcvmtAmt()); // 수납 본세
|
|
|
|
|
rcvmt.setRcvmtAdamt(0); // 수납 가산금
|
|
|
|
@ -120,56 +130,112 @@ public class RcvmtBean extends AbstractComponent {
|
|
|
|
|
rcvmt.setRcvmtSeCd(rcvmtSeCd);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
retSuccess = rcvmtMapper.insert(rcvmt);
|
|
|
|
|
retSuccess = rcvmtMapper.insert(rcvmt); // 수납 대장 등록
|
|
|
|
|
if (!retSuccess) {
|
|
|
|
|
throw new RuntimeException("수납 대장 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 부과 테이블 수정
|
|
|
|
|
// 부과(TB_LEVY) 대장을 수정한다.
|
|
|
|
|
if (!rcvmtSeCd.equals("02")) { // 이중 수납이 아니라면..
|
|
|
|
|
Levy levy = new Levy();
|
|
|
|
|
|
|
|
|
|
levy.setLevyId(levyInfo.string("LEVY_ID"));
|
|
|
|
|
|
|
|
|
|
levy.setRcvmtPcptax(rcvmt.getRcvmtPcptax()); // 수납 본세
|
|
|
|
|
levy.setRcvmtAdamt(rcvmt.getRcvmtAdamt()); // 수납 가산금
|
|
|
|
|
levy.setSumAmt(rcvmt.getLastPcptax() + rcvmt.getLastAdamt() - rcvmt.getRcvmtPcptax() - rcvmt.getRcvmtAdamt()); // 합계 금액
|
|
|
|
|
levy.setRcvmtYmd(rcvmt.getRcvmtYmd()); // 수납 일자
|
|
|
|
|
levy.setPayMthdSeCd(rcvmt.getPayMthdSeCd()); // 납부 방법 구분 코드
|
|
|
|
|
|
|
|
|
|
retSuccess = levyMapper.updateRcvmtAmt(levy); // 부과 대장 수정
|
|
|
|
|
if (!retSuccess) {
|
|
|
|
|
throw new RuntimeException("부과 대장에 수납금액 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 단속 상태 변경
|
|
|
|
|
// 합계 금액이 0이면서 완납(01) 또는 과납(04)이라면 단속 상태 코드를 변경한다.
|
|
|
|
|
if (levy.getSumAmt() == 0 && (rcvmtSeCd.equals("01") || rcvmtSeCd.equals("04"))) {
|
|
|
|
|
// 단속 상태 이력(TB_CRDN_STTS_HSTRY) 대장에 등록하고, 단속(TB_CRDN) 대장을 수정한다.
|
|
|
|
|
CrdnSttsHstry crdnSttsHstry = new CrdnSttsHstry();
|
|
|
|
|
String newCrdnSttsCd = "";
|
|
|
|
|
|
|
|
|
|
if (levyInfo.number("CRDN_STTS_CD").intValue() >= 11 && levyInfo.number("CRDN_STTS_CD").intValue() <= 45) {
|
|
|
|
|
newCrdnSttsCd = "71"; // 사전통보수납
|
|
|
|
|
} else if (levyInfo.string("CRDN_STTS_CD").equals("51")) {
|
|
|
|
|
newCrdnSttsCd = "72"; // 부과수납
|
|
|
|
|
} else if (levyInfo.string("CRDN_STTS_CD").equals("52")) {
|
|
|
|
|
newCrdnSttsCd = "73"; // 독촉수납
|
|
|
|
|
} else if (levyInfo.string("CRDN_STTS_CD").equals("53")) {
|
|
|
|
|
newCrdnSttsCd = "74"; // 압류예정수납
|
|
|
|
|
} else if (levyInfo.string("CRDN_STTS_CD").equals("54")) {
|
|
|
|
|
newCrdnSttsCd = "74"; // 압류예정수납
|
|
|
|
|
} else if (levyInfo.string("CRDN_STTS_CD").equals("55")) {
|
|
|
|
|
newCrdnSttsCd = "75"; // 압류수납
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
crdnSttsHstry.setCrdnId(levyInfo.string("CRDN_ID")); // 단속 ID
|
|
|
|
|
crdnSttsHstry.setBfrSttsCd(levyInfo.string("CRDN_STTS_CD")); // 단속 상태 코드
|
|
|
|
|
crdnSttsHstry.setBfrSttsChgDt(levyInfo.string("CRDN_STTS_CHG_DT")); // 단소 상태 변경 일시
|
|
|
|
|
crdnSttsHstry.setCrdnSttsCd(newCrdnSttsCd); // 단속상태코드(FIM010)
|
|
|
|
|
crdnSttsHstry.setTaskDtlId(rcvmt.getRcvmtId()); // 수납 ID
|
|
|
|
|
|
|
|
|
|
// 단속 상태 이력(TB_CRDN_STTS_HSTRY) 대장에 등록하고, 단속(TB_CRDN) 대장을 수정한다.
|
|
|
|
|
retSuccess = crdnSttsHstryBean.createHstryUpdateCrdnSttsCd(crdnSttsHstry);
|
|
|
|
|
if (!retSuccess) {
|
|
|
|
|
throw new RuntimeException("수납 등록 중 단속 대장의 단속상태 변경에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
retMessage = "[S] 작업이 정상 처리 되었습니다.";
|
|
|
|
|
|
|
|
|
|
return retMessage;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**수납 대장 정보를 삭제한다.
|
|
|
|
|
/**수납 취소 정보를 수정한다.
|
|
|
|
|
* @param rcvmt 수납 대장
|
|
|
|
|
* @return 저장 여부
|
|
|
|
|
* <ul><li>저장됐으면 true</li>
|
|
|
|
|
* <li>그렇지 않으면 false</li>
|
|
|
|
|
* </ul>
|
|
|
|
|
*/
|
|
|
|
|
public String removeRcvmt(Rcvmt rcvmt) {
|
|
|
|
|
public String updateRcvmtRtrcn(Rcvmt rcvmt) {
|
|
|
|
|
// 변수 선언
|
|
|
|
|
boolean retSuccess = false; // DB 처리 결과
|
|
|
|
|
String retMessage = "[F] "; // 처리 결과 메시지
|
|
|
|
|
|
|
|
|
|
// 수납 ID로 수납 정보 조회
|
|
|
|
|
DataObject rcvmtInfo = rcvmtMapper.selectRcvmtInfo(new RcvmtQuery().setRcvmtId(rcvmt.getRcvmtId())
|
|
|
|
|
.setDelYn("N"));
|
|
|
|
|
retSuccess = rcvmtMapper.updateRcvmtRtrcn(rcvmt);
|
|
|
|
|
if (!retSuccess) {
|
|
|
|
|
throw new RuntimeException("수납 대장 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 부과 대장 수정 ///////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 단속 대장 수정 ///////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
retMessage = "[S] 작업이 정상 처리 되었습니다.";
|
|
|
|
|
|
|
|
|
|
if (!rcvmtInfo.string("RCVMT_INPT_SE_CD").equals("03")) {
|
|
|
|
|
retMessage = "[F] 수납입력구분이 수기 입력이 아닙니다.";
|
|
|
|
|
return retMessage;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**수납 대장 정보를 삭제한다.
|
|
|
|
|
* @param rcvmt 수납 대장
|
|
|
|
|
* @return 저장 여부
|
|
|
|
|
* <ul><li>저장됐으면 true</li>
|
|
|
|
|
* <li>그렇지 않으면 false</li>
|
|
|
|
|
* </ul>
|
|
|
|
|
*/
|
|
|
|
|
public String removeRcvmt(Rcvmt rcvmt) {
|
|
|
|
|
// 변수 선언
|
|
|
|
|
boolean retSuccess = false; // DB 처리 결과
|
|
|
|
|
String retMessage = "[F] "; // 처리 결과 메시지
|
|
|
|
|
|
|
|
|
|
retSuccess = rcvmtMapper.delete(rcvmt);
|
|
|
|
|
if (!retSuccess) {
|
|
|
|
|
throw new RuntimeException("수납 대장 삭제에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 부과 테이블 수정
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 단속 상태 변경
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
retMessage = "[S] 작업이 정상 처리 되었습니다.";
|
|
|
|
|
|
|
|
|
|
return retMessage;
|
|
|
|
|