1. 컬럼명 수정.

- 합계금액(SUM_AMT) -> 최종금액(LAST_AMT)
2. 수납 관리 수정.
3. 수납 등록 수정.
4. 수납 삭제 수정.
main
JoJH 1 year ago
parent 33c92176d9
commit 1117bc3960

@ -302,7 +302,7 @@ public class OutsourcingFileMaker {
predefinedSetList.add(new PredefinedSet("CRDN_SE_NM", "단속구분명"));
predefinedSetList.add(new PredefinedSet("ATCH_FILE_CNT", "첨부파일갯수"));
predefinedSetList.add(new PredefinedSet("FFNLG_CRDN_AMT", "과태료단속금액"));
predefinedSetList.add(new PredefinedSet("SUM_AMT", "합계금액"));
predefinedSetList.add(new PredefinedSet("LAST_AMT", "최종금액"));
predefinedSetList.add(new PredefinedSet("RG_NO", "등기번호"));
predefinedSetList.add(new PredefinedSet("OCR0", "OCR0").offLog());
predefinedSetList.add(new PredefinedSet("OCR0_1", "OCR0_1").offLog());

@ -74,7 +74,7 @@ public class ReportOnClaims extends HWPFormat {
writer.setValue("체납자성명", EgovStringUtil.null2void(globalVariable.get("rtpyrNm")));
writer.setValue("체납자번호", EgovStringUtil.null2void(globalVariable.get("rtpyrNo")));
writer.setValue("체납자주소", EgovStringUtil.null2void(globalVariable.get("rtpyrFullAddr")));
int sumOfList = data.stream().mapToInt(item -> item.number("SUM_AMT").intValue()).sum();
int sumOfList = data.stream().mapToInt(item -> item.number("LAST_AMT").intValue()).sum();
writer.setValue("채권청구액", DataFormat.n_nn0(sumOfList));
writer.setValue("합계금액", DataFormat.n_nn0(sumOfList));
writer.setValue("합계금액한글", CmmnUtil.convertNumberToHangul(sumOfList));
@ -100,7 +100,7 @@ public class ReportOnClaims extends HWPFormat {
.set("세목", one.string("TXITM_NM"))
.set("세액", DataFormat.n_nn0(one.string("LEVY_PCPTAX")))
.set("가산금", DataFormat.n_nn0(one.string("LEVY_ADAMT")))
.set("합계", DataFormat.n_nn0(one.string("SUM_AMT")));
.set("합계", DataFormat.n_nn0(one.string("LAST_AMT")));
return newObj;
}).toList();
writer.table(0, 9, 2).setValues(list);

@ -74,7 +74,7 @@ public class RequestForDelivery extends HWPFormat {
writer.setValue("차량번호", EgovStringUtil.null2void(globalVariable.get("vhrno")));
writer.setValue("주소", EgovStringUtil.null2void(globalVariable.get("rtpyrFullAddr")));
int sumOfList = data.stream().mapToInt(item -> item.number("SUM_AMT").intValue()).sum();
int sumOfList = data.stream().mapToInt(item -> item.number("LAST_AMT").intValue()).sum();
writer.setValue("합계금액", DataFormat.n_nn0(sumOfList));
writer.setValue("교부청구금액", DataFormat.n_nn0(sumOfList));
writer.setValue("교부청구금액한글", CmmnUtil.convertNumberToHangul(sumOfList));
@ -101,7 +101,7 @@ public class RequestForDelivery extends HWPFormat {
DataObject newObj = (DataObject) new DataObject()
.set("징수과목", one.string("TXITM_NM"))
.set("고지번호", one.string("GOJI_NO"))
.set("과태료계", DataFormat.n_nn0(one.string("SUM_AMT")))
.set("과태료계", DataFormat.n_nn0(one.string("LAST_AMT")))
.set("법정기일", DataFormat.yyyy_mm_dd(one.string("DUDT_YMD")))
;
return newObj;

@ -57,7 +57,7 @@ public class Nht extends PDFPrintFormat {
text("pcptax","본세",""),
text("adamt","가산금",""),
text("sumAmt","납기금액",""),
text("lastAmt","납기금액",""),
text("dudtYmd","납기일자",""),
text("dudtAftrPcptax","납기후본세",""),
text("dudtAftrAdamt","납기후가산금",""),
@ -180,8 +180,8 @@ public class Nht extends PDFPrintFormat {
case "adamt" -> { //가산금
result = dataObject.string("ADAMT");
}
case "sumAmt" -> { //납기금액
result = dataObject.string("SUM_AMT");
case "lastAmt" -> { //납기금액
result = dataObject.string("LAST_AMT");
}
case "dudtYmd" -> { //납기일자
result = dataObject.string("DUDT_YMD");
@ -257,9 +257,9 @@ public class Nht extends PDFPrintFormat {
String ocrBand1 = CmmnUtil.getOcrband1(deptCode, spclBizCd, fyr, acntgSeCd, txitmCd, levyNo, ispySn);
String levySeCd = dataObject.string("LEVY_SE_CD");
int sumAmt = dataObject.number("SUM_AMT").intValue(); // 합계 금액
int lastAmt = dataObject.number("LAST_AMT").intValue(); // 최종 금액
String dudtYmd = dataObject.string("DUDT_YMD");
result = CmmnUtil.getOcrband2(ocrBand1, levySeCd, sumAmt, dudtYmd);
result = CmmnUtil.getOcrband2(ocrBand1, levySeCd, lastAmt, dudtYmd);
}
case "ocr3" -> {
String deptCode = dataObject.string("DEPT_CD");
@ -272,12 +272,12 @@ public class Nht extends PDFPrintFormat {
String ocrBand1 = CmmnUtil.getOcrband1(deptCode, spclBizCd, fyr, acntgSeCd, txitmCd, levyNo, ispySn);
String levySeCd = dataObject.string("LEVY_SE_CD");
int sumAmt = dataObject.number("SUM_AMT").intValue(); // 합계 금액
int lastAmt = dataObject.number("LAST_AMT").intValue(); // 최종 금액
String dudtYmd = dataObject.string("DUDT_YMD");
String ocrBand2 = CmmnUtil.getOcrband2(ocrBand1, levySeCd, sumAmt, dudtYmd);
String ocrBand2 = CmmnUtil.getOcrband2(ocrBand1, levySeCd, lastAmt, dudtYmd);
int afterSumAmt = dataObject.number("DUDT_AFTR_AMT").intValue(); // 납기후 금액
result = CmmnUtil.getOcrband3(ocrBand2, sumAmt, dudtYmd, afterSumAmt);
result = CmmnUtil.getOcrband3(ocrBand2, lastAmt, dudtYmd, afterSumAmt);
}
case "otptYmd" -> {
@ -428,7 +428,7 @@ public class Nht extends PDFPrintFormat {
dataObject.put("PCPTAX", "80000"); //본세
dataObject.put("ADAMT", "0"); //가산금
dataObject.put("SUM_AMT", "80000"); //합계금액
dataObject.put("LAST_AMT", "80000"); //최종금액
dataObject.put("DUDT_YMD", "20231215"); //납기일자
dataObject.put("DUDT_AFTR_AMT", "100000"); //납기후 금액
dataObject.put("DUDT_AFTR_YMD", "20231231"); //납기후 일자

@ -100,9 +100,4 @@ public interface RdctMapper extends AbstractMapper {
*/
int updateCrdnRdct(Crdn crdn);
/**(TB_LEVY) .
* @param levy
* @return
*/
int updateLevyRdct(Levy levy);
}

@ -215,7 +215,7 @@ public class LevyBean extends AbstractBean {
}
levy.setFfnlgAmt(crdnInfo.number("FFNLG_AMT").intValue()); // 과태료 금액
levy.setLevyPcptax(crdnInfo.number("ADVNTCE_AMT").intValue()); // 부과 본세
levy.setSumAmt(crdnInfo.number("ADVNTCE_AMT").intValue()); // 합계 금액
levy.setLastAmt(crdnInfo.number("ADVNTCE_AMT").intValue()); // 최종 금액
levy.setLevyAdamt(0); // 부과 가산금
levy.setIspyInt(0); // 분납 이자
levy.setRcvmtPcptax(0); // 수납 본세
@ -284,8 +284,8 @@ public class LevyBean extends AbstractBean {
* <li> false</li>
* </ul>
*/
public String updateRcvmt(Levy levy) {
int rtnNocs = levyMapper.updateRcvmt(levy);
public String updateLevyRcvmt(Levy levy) {
int rtnNocs = levyMapper.updateLevyRcvmt(levy);
if (rtnNocs != 1) {
throw new RuntimeException("부과 대장에 수납금액 정보 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
@ -300,8 +300,8 @@ public class LevyBean extends AbstractBean {
* <li> false</li>
* </ul>
*/
public String updateRdcamt(Levy levy) {
int rtnNocs = levyMapper.updateRdamt(levy);
public String updateLevyRdcamt(Levy levy) {
int rtnNocs = levyMapper.updateLevyRdamt(levy);
if (rtnNocs != 1) {
throw new RuntimeException("부과 대장에 수납금액 정보 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}

@ -11,6 +11,7 @@ import cokr.xit.fims.crdn.service.bean.CrdnStngBean;
import cokr.xit.fims.levy.Levy;
import cokr.xit.fims.levy.LevyQuery;
import cokr.xit.fims.levy.Rdct;
import cokr.xit.fims.levy.dao.LevyMapper;
import cokr.xit.fims.levy.dao.RdctMapper;
import cokr.xit.foundation.component.AbstractBean;
import cokr.xit.foundation.data.DataObject;
@ -21,281 +22,285 @@ import cokr.xit.foundation.data.DataObject;
*
* <pre>
* ============ ============
* 2023-08-30 JoJH
* 2023-08-30 JoJH
* ================================
* </pre>
*/
@Component("rdctBean")
public class RdctBean extends AbstractBean {
/** 과태료 감경 대장 정보 DAO */
@Resource(name = "rdctMapper")
private RdctMapper rdctMapper;
@Resource(name = "crdnStngBean")
private CrdnStngBean crdnStngBean;
/** .
* @param req
* @return
*/
public List<DataObject> getRdctList(LevyQuery req) {
if (req.getDelYn() == null) {
req.setDelYn("N");
}
if (req.getOrderBy() == null) {
req.setOrderBy("REG_DT");
}
return rdctMapper.selectRdctList(req);
}
/** .
* @param req
* @return
*/
public List<DataObject> getRdcts(LevyQuery req) {
if (req.getOrderBy() == null) {
req.setOrderBy("R.RDCT_ID DESC");
}
return rdctMapper.selectRdcts(req);
}
/** ID .<br />
* @param req
* @return
*/
public DataObject getRdctInfo(LevyQuery req) {
return rdctMapper.selectRdctInfo(req);
}
/** ID .<br />
* @param req
* @return
*/
public DataObject getCrdnInfo(LevyQuery req) {
DataObject dataCrdn = rdctMapper.selectCrdn(req);
if (req.getCallPurpose().equals("create")) {
dataCrdn.set("RDCT_YMD", dataCrdn.get("TODAY")); // 감경 일자
dataCrdn.set("RDCT_AMT", dataCrdn.get("CALC_RDCT_AMT")); // 감경 금액
}
return dataCrdn;
}
/** .
* @param rdct
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String createRdct(Rdct rdct) {
// 변수 선언
int rtnNocs = -1; // 처리 결과 건수
String rtnMsg = "[F] "; // 처리 결과 메시지
// 단속 ID로 단속, 감경 정보 조회
DataObject crdnRdctInfo = rdctMapper.selectCrdnInfo(rdct.getCrdnId());
// 감경 ID가 있다면 이미 부과제외 자료가 존재하므로 종료..
if (!crdnRdctInfo.string("RDCT_ID").equals("")) {
rtnMsg = "[F] 작업 중 이미 등록된 자료가 존재합니다.";
return rtnMsg;
}
// 단속 상태 코드(CRDN_STTS_CD) 확인하여 부과(51) 이후라면..
if (crdnRdctInfo.number("CRDN_STTS_CD").intValue() > 51) {
rtnMsg = "[F] 작업 중 오류가 발생하였습니다.<br>현재 자료의 단속 상태가 " + crdnRdctInfo.string("CRDN_STTS_NM") + " 상태 입니다.";
return rtnMsg;
}
// 부과 가산금(LEVY_ADAMT)이 있다면..
if (crdnRdctInfo.number("LEVY_ADAMT").intValue() > 0) {
rtnMsg = "[F] 작업 중 오류가 발생하였습니다.<br>부과 가산금이 존재합니다.";
return rtnMsg;
}
// 과태료 감경(TB_RDCT) 대장을 등록한다.
rtnNocs = rdctMapper.insertRdct(rdct);
if (rtnNocs != 1) {
throw new RuntimeException("과태료 감경 대장 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
int ffnlgAmt = 0; // 과태료 금액
int advntceAmt = 0; // 사전통지 금액
ffnlgAmt = crdnRdctInfo.number("FFNLG_CRDN_AMT").intValue() - rdct.getRdctAmt(); // 과태료 단속 금액 - 감경 금액
advntceAmt = ffnlgAmt - (ffnlgAmt * crdnRdctInfo.number("ADVNTCE_RDCRT").intValue() / 100); // 과태료 금액 - (과태료 금액 * 사전통지 감경 율 / 100)
// 단속(TB_CRDN) 대장을 수정한다.
Crdn crdn = new Crdn();
crdn.setCrdnId(rdct.getCrdnId()); // 단속 ID
crdn.setFfnlgRdcrt(crdnRdctInfo.string("WKSN_RDCRT")); // 과태료 감경 율
crdn.setFfnlgAmt(ffnlgAmt); // 과태료 금액
crdn.setAdvntceAmt(advntceAmt); // 사전통지 금액
rtnNocs = rdctMapper.updateCrdnRdct(crdn);
if (rtnNocs != 1) {
throw new RuntimeException("감경 등록 중 단속대장 금액 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
// 부과 ID가 존재한다면 부과(TB_LEVY) 대장을 수정한다.
if (!crdnRdctInfo.string("LEVY_ID").equals("")) {
// 가산금이 존재하는 확인
if (crdnRdctInfo.number("LEVY_ADAMT").intValue() != 0 ) {
throw new RuntimeException("감경 등록 중 부과 대장에 가산금이 발생하여 부과 대장 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
Levy levy = new Levy();
levy.setLevyId(crdnRdctInfo.string("LEVY_ID")); // 부과 ID
levy.setFfnlgAmt(ffnlgAmt); // 과태료 금액
// 단속상태코드가 부과(51)면 과태료 금액, 부과 이전이라면 사전통지 금액으로..
if (crdnRdctInfo.number("CRDN_STTS_CD").intValue() == 51) {
levy.setLevyPcptax(ffnlgAmt); // 부과 본세 = 과태료 금액
} else {
// 주정차위반, 전용차로위반 과태료
if (crdnRdctInfo.string("TASK_SE_CD").equals("BPV") || crdnRdctInfo.string("TASK_SE_CD").equals("PVS")) {
// 납기 일자 확인
if (crdnRdctInfo.number("DUDT_YMD").intValue() >= crdnRdctInfo.number("TODAY").intValue()) {
levy.setLevyPcptax(advntceAmt); // 부과 본세 = 사전통지 금액
} else {
levy.setLevyPcptax(ffnlgAmt); // 부과 본세 = 과태료 금액
}
} else {
levy.setLevyPcptax(advntceAmt); // 부과 본세 = 사전통지 금액
}
}
int sumAmt = levy.getLevyPcptax() - crdnRdctInfo.number("RCVMT_PCPTAX").intValue() - crdnRdctInfo.number("RDAMT_PCPTAX").intValue();
levy.setSumAmt(sumAmt); // 합계 금액 = 부과 본세 - 수납 본세 - 감액 본세
rtnNocs = rdctMapper.updateLevyRdct(levy);
if (rtnNocs != 1) {
throw new RuntimeException("감경 등록 중 부과대장 금액 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
}
return "[S] 작업이 정상 처리 되었습니다.";
}
/** .
* @param rdct
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String updateRdct(Rdct rdct) {
// 과태료 감경(TB_RDCT) 대장을 수정한다.
int rtnNocs = rdctMapper.updateRdct(rdct);
if (rtnNocs != 1) {
throw new RuntimeException("과태료 감경 대장 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
return "[S] 작업이 정상 처리 되었습니다.";
}
/** .
* @param rdct
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String removeRdct(Rdct rdct) {
// 변수 선언
int rtnNocs = -1; // 처리 결과 건수
String rtnMsg = "[F] "; // 처리 결과 메시지
// 단속 ID로 단속, 감경 정보 조회
LevyQuery req = new LevyQuery();
req.setRdctId(rdct.getRdctId());
req.setDelYn("N");
DataObject crdnRdctInfo = rdctMapper.selectCrdn(req);
// 감경 ID가 조회되지 않았다면 종료..
if (crdnRdctInfo.string("RDCT_ID").equals("")) {
rtnMsg = "[F] 작업 중 자료가 존재하지 않습니다.";
return rtnMsg;
}
// 단속 상태 코드(CRDN_STTS_CD) 확인하여 부과(51) 이후라면..
if (crdnRdctInfo.number("CRDN_STTS_CD").intValue() > 51) {
rtnMsg = "[F] 작업 중 오류가 발생하였습니다.<br>현재 자료의 단속 상태가 " + crdnRdctInfo.string("CRDN_STTS_NM") + " 상태 입니다.";
return rtnMsg;
}
// 부과 가산금(LEVY_ADAMT)이 있다면..
if (crdnRdctInfo.number("LEVY_ADAMT").intValue() > 0) {
rtnMsg = "[F] 작업 중 오류가 발생하였습니다.<br>부과 가산금이 존재합니다.";
return rtnMsg;
}
// 감경(TB_RDCT) 대장을 삭제한다.
rtnNocs = rdctMapper.deleteRdct(rdct);
if (rtnNocs != 1) {
// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
throw new RuntimeException("감경 대장 삭제에 실패하였습니다.");
}
// 과태료 금액
int ffnlgAmt = crdnRdctInfo.number("FFNLG_CRDN_AMT").intValue(); // 과태료 단속 금액 - 감경 금액
int advntceAmt = ffnlgAmt - (ffnlgAmt * crdnRdctInfo.number("ADVNTCE_RDCRT").intValue() / 100); // 과태료 금액 - (과태료 금액 * 사전통지 감경 율 / 100)
// 단속(TB_CRDN) 대장을 수정한다.
Crdn crdn = new Crdn();
crdn.setCrdnId(crdnRdctInfo.string("CRDN_ID")); // 단속 ID
crdn.setFfnlgRdcrt("0"); // 과태료 감경 율
crdn.setFfnlgAmt(ffnlgAmt); // 과태료 금액
crdn.setAdvntceAmt(advntceAmt); // 사전통지 금액
rtnNocs = rdctMapper.updateCrdnRdct(crdn);
if (rtnNocs != 1) {
throw new RuntimeException("감경 취소 중 단속대장 금액 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
// 부과 ID가 존재한다면 부과(TB_LEVY) 대장을 수정한다.
if (!crdnRdctInfo.string("LEVY_ID").equals("")) {
// 가산금이 존재하는 확인
if (crdnRdctInfo.number("LEVY_ADAMT").intValue() != 0 ) {
throw new RuntimeException("감경 취소 중 부과 대장에 가산금이 발생하여 부과 대장 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
Levy levy = new Levy();
levy.setLevyId(crdnRdctInfo.string("LEVY_ID")); // 부과 ID
levy.setFfnlgAmt(ffnlgAmt); // 과태료 금액
// 단속상태코드가 부과(51)면 과태료 금액, 부과 이전이라면 사전통지 금액으로..
if (crdnRdctInfo.number("CRDN_STTS_CD").intValue() == 51) {
levy.setLevyPcptax(ffnlgAmt); // 부과 본세 = 과태료 금액
} else {
// 주정차위반, 전용차로위반 과태료
if (crdnRdctInfo.string("TASK_SE_CD").equals("BPV") || crdnRdctInfo.string("TASK_SE_CD").equals("PVS")) {
// 납기 일자 확인
if (crdnRdctInfo.number("DUDT_YMD").intValue() >= crdnRdctInfo.number("TODAY").intValue()) {
levy.setLevyPcptax(advntceAmt); // 부과 본세 = 사전통지 금액
} else {
levy.setLevyPcptax(ffnlgAmt); // 부과 본세 = 과태료 금액
}
} else {
levy.setLevyPcptax(advntceAmt); // 부과 본세 = 사전통지 금액
}
}
int sumAmt = levy.getLevyPcptax() + crdnRdctInfo.number("LEVY_ADAMT").intValue()
- crdnRdctInfo.number("RCVMT_PCPTAX").intValue() - crdnRdctInfo.number("RCVMT_ADAMT").intValue()
- crdnRdctInfo.number("RDAMT_PCPTAX").intValue() - crdnRdctInfo.number("RDAMT_ADAMT").intValue();
levy.setSumAmt(sumAmt); // 합계 금액 = 부과 본세 + 부과 가산금 + 분납 이자 - 수납 본세 - 수납 가산금 - 감액 본세 - 감액 가산금
rtnNocs = rdctMapper.updateLevyRdct(levy);
if (rtnNocs != 1) {
throw new RuntimeException("감경 등록 중 부과대장 금액 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
}
return "[S] 작업이 정상 처리 되었습니다.";
}
/** 과태료 감경 대장 정보 DAO */
@Resource(name = "rdctMapper")
private RdctMapper rdctMapper;
/** 부과 대장 정보 DAO */
@Resource(name = "levyMapper")
private LevyMapper levyMapper;
@Resource(name = "crdnStngBean")
private CrdnStngBean crdnStngBean;
/** .
* @param req
* @return
*/
public List<DataObject> getRdctList(LevyQuery req) {
if (req.getDelYn() == null) {
req.setDelYn("N");
}
if (req.getOrderBy() == null) {
req.setOrderBy("REG_DT");
}
return rdctMapper.selectRdctList(req);
}
/** .
* @param req
* @return
*/
public List<DataObject> getRdcts(LevyQuery req) {
if (req.getOrderBy() == null) {
req.setOrderBy("R.RDCT_ID DESC");
}
return rdctMapper.selectRdcts(req);
}
/** ID .<br />
* @param req
* @return
*/
public DataObject getRdctInfo(LevyQuery req) {
return rdctMapper.selectRdctInfo(req);
}
/** ID .<br />
* @param req
* @return
*/
public DataObject getCrdnInfo(LevyQuery req) {
DataObject dataCrdn = rdctMapper.selectCrdn(req);
if (req.getCallPurpose().equals("create")) {
dataCrdn.set("RDCT_YMD", dataCrdn.get("TODAY")); // 감경 일자
dataCrdn.set("RDCT_AMT", dataCrdn.get("CALC_RDCT_AMT")); // 감경 금액
}
return dataCrdn;
}
/** .
* @param rdct
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String createRdct(Rdct rdct) {
// 변수 선언
int rtnNocs = -1; // 처리 결과 건수
String rtnMsg = "[F] "; // 처리 결과 메시지
// 단속 ID로 단속, 감경 정보 조회
DataObject crdnRdctInfo = rdctMapper.selectCrdnInfo(rdct.getCrdnId());
// 감경 ID가 있다면 이미 부과제외 자료가 존재하므로 종료..
if (!crdnRdctInfo.string("RDCT_ID").equals("")) {
rtnMsg = "[F] 작업 중 이미 등록된 자료가 존재합니다.";
return rtnMsg;
}
// 단속 상태 코드(CRDN_STTS_CD) 확인하여 부과(51) 이후라면..
if (crdnRdctInfo.number("CRDN_STTS_CD").intValue() > 51) {
rtnMsg = "[F] 작업 중 오류가 발생하였습니다.<br>현재 자료의 단속 상태가 " + crdnRdctInfo.string("CRDN_STTS_NM") + " 상태 입니다.";
return rtnMsg;
}
// 부과 가산금(LEVY_ADAMT)이 있다면..
if (crdnRdctInfo.number("LEVY_ADAMT").intValue() > 0) {
rtnMsg = "[F] 작업 중 오류가 발생하였습니다.<br>부과 가산금이 존재합니다.";
return rtnMsg;
}
// 과태료 감경(TB_RDCT) 대장을 등록한다.
rtnNocs = rdctMapper.insertRdct(rdct);
if (rtnNocs != 1) {
throw new RuntimeException("과태료 감경 대장 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
int ffnlgAmt = 0; // 과태료 금액
int advntceAmt = 0; // 사전통지 금액
ffnlgAmt = crdnRdctInfo.number("FFNLG_CRDN_AMT").intValue() - rdct.getRdctAmt(); // 과태료 단속 금액 - 감경 금액
advntceAmt = ffnlgAmt - (ffnlgAmt * crdnRdctInfo.number("ADVNTCE_RDCRT").intValue() / 100); // 과태료 금액 - (과태료 금액 * 사전통지 감경 율 / 100)
// 단속(TB_CRDN) 대장을 수정한다.
Crdn crdn = new Crdn();
crdn.setCrdnId(rdct.getCrdnId()); // 단속 ID
crdn.setFfnlgRdcrt(crdnRdctInfo.string("WKSN_RDCRT")); // 과태료 감경 율
crdn.setFfnlgAmt(ffnlgAmt); // 과태료 금액
crdn.setAdvntceAmt(advntceAmt); // 사전통지 금액
rtnNocs = rdctMapper.updateCrdnRdct(crdn);
if (rtnNocs != 1) {
throw new RuntimeException("감경 등록 중 단속대장 금액 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
// 부과 ID가 존재한다면 부과(TB_LEVY) 대장을 수정한다.
if (!crdnRdctInfo.string("LEVY_ID").equals("")) {
// 가산금이 존재하는 확인
if (crdnRdctInfo.number("LEVY_ADAMT").intValue() != 0 ) {
throw new RuntimeException("감경 등록 중 부과 대장에 가산금이 발생하여 부과 대장 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
Levy levy = new Levy();
levy.setLevyId(crdnRdctInfo.string("LEVY_ID")); // 부과 ID
levy.setFfnlgAmt(ffnlgAmt); // 과태료 금액
// 단속상태코드가 부과(51)면 과태료 금액, 부과 이전이라면 사전통지 금액으로..
if (crdnRdctInfo.number("CRDN_STTS_CD").intValue() == 51) {
levy.setLevyPcptax(ffnlgAmt); // 부과 본세 = 과태료 금액
} else {
// 주정차위반, 전용차로위반 과태료
if (crdnRdctInfo.string("TASK_SE_CD").equals("BPV") || crdnRdctInfo.string("TASK_SE_CD").equals("PVS")) {
// 납기 일자 확인
if (crdnRdctInfo.number("DUDT_YMD").intValue() >= crdnRdctInfo.number("TODAY").intValue()) {
levy.setLevyPcptax(advntceAmt); // 부과 본세 = 사전통지 금액
} else {
levy.setLevyPcptax(ffnlgAmt); // 부과 본세 = 과태료 금액
}
} else {
levy.setLevyPcptax(advntceAmt); // 부과 본세 = 사전통지 금액
}
}
int lastAmt = levy.getLevyPcptax() - crdnRdctInfo.number("RCVMT_PCPTAX").intValue() - crdnRdctInfo.number("RDAMT_PCPTAX").intValue();
levy.setLastAmt(lastAmt); // 합계 금액 = 부과 본세 - 수납 본세 - 감액 본세
rtnNocs = levyMapper.updateLevyRdct(levy);
if (rtnNocs != 1) {
throw new RuntimeException("감경 등록 중 부과대장 금액 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
}
return "[S] 작업이 정상 처리 되었습니다.";
}
/** .
* @param rdct
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String updateRdct(Rdct rdct) {
// 과태료 감경(TB_RDCT) 대장을 수정한다.
int rtnNocs = rdctMapper.updateRdct(rdct);
if (rtnNocs != 1) {
throw new RuntimeException("과태료 감경 대장 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
return "[S] 작업이 정상 처리 되었습니다.";
}
/** .
* @param rdct
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String removeRdct(Rdct rdct) {
// 변수 선언
int rtnNocs = -1; // 처리 결과 건수
String rtnMsg = "[F] "; // 처리 결과 메시지
// 단속 ID로 단속, 감경 정보 조회
LevyQuery req = new LevyQuery();
req.setRdctId(rdct.getRdctId());
req.setDelYn("N");
DataObject crdnRdctInfo = rdctMapper.selectCrdn(req);
// 감경 ID가 조회되지 않았다면 종료..
if (crdnRdctInfo.string("RDCT_ID").equals("")) {
rtnMsg = "[F] 작업 중 자료가 존재하지 않습니다.";
return rtnMsg;
}
// 단속 상태 코드(CRDN_STTS_CD) 확인하여 부과(51) 이후라면..
if (crdnRdctInfo.number("CRDN_STTS_CD").intValue() > 51) {
rtnMsg = "[F] 작업 중 오류가 발생하였습니다.<br>현재 자료의 단속 상태가 " + crdnRdctInfo.string("CRDN_STTS_NM") + " 상태 입니다.";
return rtnMsg;
}
// 부과 가산금(LEVY_ADAMT)이 있다면..
if (crdnRdctInfo.number("LEVY_ADAMT").intValue() > 0) {
rtnMsg = "[F] 작업 중 오류가 발생하였습니다.<br>부과 가산금이 존재합니다.";
return rtnMsg;
}
// 감경(TB_RDCT) 대장을 삭제한다.
rtnNocs = rdctMapper.deleteRdct(rdct);
if (rtnNocs != 1) {
// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
throw new RuntimeException("감경 대장 삭제에 실패하였습니다.");
}
// 과태료 금액
int ffnlgAmt = crdnRdctInfo.number("FFNLG_CRDN_AMT").intValue(); // 과태료 단속 금액 - 감경 금액
int advntceAmt = ffnlgAmt - (ffnlgAmt * crdnRdctInfo.number("ADVNTCE_RDCRT").intValue() / 100); // 과태료 금액 - (과태료 금액 * 사전통지 감경 율 / 100)
// 단속(TB_CRDN) 대장을 수정한다.
Crdn crdn = new Crdn();
crdn.setCrdnId(crdnRdctInfo.string("CRDN_ID")); // 단속 ID
crdn.setFfnlgRdcrt("0"); // 과태료 감경 율
crdn.setFfnlgAmt(ffnlgAmt); // 과태료 금액
crdn.setAdvntceAmt(advntceAmt); // 사전통지 금액
rtnNocs = rdctMapper.updateCrdnRdct(crdn);
if (rtnNocs != 1) {
throw new RuntimeException("감경 취소 중 단속대장 금액 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
// 부과 ID가 존재한다면 부과(TB_LEVY) 대장을 수정한다.
if (!crdnRdctInfo.string("LEVY_ID").equals("")) {
// 가산금이 존재하는 확인
if (crdnRdctInfo.number("LEVY_ADAMT").intValue() != 0 ) {
throw new RuntimeException("감경 취소 중 부과 대장에 가산금이 발생하여 부과 대장 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
Levy levy = new Levy();
levy.setLevyId(crdnRdctInfo.string("LEVY_ID")); // 부과 ID
levy.setFfnlgAmt(ffnlgAmt); // 과태료 금액
// 단속상태코드가 부과(51)면 과태료 금액, 부과 이전이라면 사전통지 금액으로..
if (crdnRdctInfo.number("CRDN_STTS_CD").intValue() == 51) {
levy.setLevyPcptax(ffnlgAmt); // 부과 본세 = 과태료 금액
} else {
// 주정차위반, 전용차로위반 과태료
if (crdnRdctInfo.string("TASK_SE_CD").equals("BPV") || crdnRdctInfo.string("TASK_SE_CD").equals("PVS")) {
// 납기 일자 확인
if (crdnRdctInfo.number("DUDT_YMD").intValue() >= crdnRdctInfo.number("TODAY").intValue()) {
levy.setLevyPcptax(advntceAmt); // 부과 본세 = 사전통지 금액
} else {
levy.setLevyPcptax(ffnlgAmt); // 부과 본세 = 과태료 금액
}
} else {
levy.setLevyPcptax(advntceAmt); // 부과 본세 = 사전통지 금액
}
}
int lastAmt = levy.getLevyPcptax() + crdnRdctInfo.number("LEVY_ADAMT").intValue()
- crdnRdctInfo.number("RCVMT_PCPTAX").intValue() - crdnRdctInfo.number("RCVMT_ADAMT").intValue()
- crdnRdctInfo.number("RDAMT_PCPTAX").intValue() - crdnRdctInfo.number("RDAMT_ADAMT").intValue();
levy.setLastAmt(lastAmt); // 합계 금액 = 부과 본세 + 부과 가산금 + 분납 이자 - 수납 본세 - 수납 가산금 - 감액 본세 - 감액 가산금
rtnNocs = levyMapper.updateLevyRdct(levy);
if (rtnNocs != 1) {
throw new RuntimeException("감경 등록 중 부과대장 금액 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
}
return "[S] 작업이 정상 처리 되었습니다.";
}
}

@ -295,7 +295,7 @@ public class Levy01Controller extends ApplicationController {
valueMap.put("수납가산금", format.of("RCVMT_ADAMT").style(numeric));
valueMap.put("감액본세", format.of("RDAMT_PCPTAX").style(numeric));
valueMap.put("감액가산금", format.of("RDAMT_ADAMT").style(numeric));
valueMap.put("미납금액", format.of("SUM_AMT").style(numeric));
valueMap.put("최종금액", format.of("LAST_AMT").style(numeric));
valueMap.put("과세물건", format.of("TXTN_THING"));
valueMap.put("체납사유", format.of("NPMNT_RSN_NM"));
valueMap.put("수납일자", FormatMaker.yyyy_mm_dd(format, "RCVMT_YMD").style(dateYMD));

@ -139,7 +139,7 @@ public class Levy02Controller extends ApplicationController {
valueMap.put("단속원금", format.of("FFNLG_CRDN_AMT").style(numeric));
valueMap.put("감경금액", format.of("RDCT_AMT").style(numeric));
valueMap.put("과태료금액", format.of("FFNLG_AMT").style(numeric));
valueMap.put("미납금액", format.of("SUM_AMT").style(numeric));
valueMap.put("최종금액", format.of("LAST_AMT").style(numeric));
valueMap.put("처리상태", format.of("CRDN_STTS_NM"));
valueMap.put("단속특별구역", format.of("CRDN_SPAREA_NM").style(center));
valueMap.put("사용연료", format.of("USE_FUEL_NM").style(center));

@ -24,317 +24,353 @@ import cokr.xit.foundation.data.DataObject;
*
* <pre>
* ============ ============
* 2023-08-31 JoJH
* 2023-08-31 JoJH
* ================================
* </pre>
*/
@Component("rcvmtBean")
public class RcvmtBean extends AbstractBean {
/** 수납 대장 정보 DAO */
@Resource(name = "rcvmtMapper")
private RcvmtMapper rcvmtMapper;
/** 부과 대장 정보 DAO */
@Resource(name = "levyMapper")
private LevyMapper levyMapper;
/** 단속 상태 이력 정보 Bean */
@Resource(name = "crdnSttsHstryBean")
private CrdnSttsHstryBean crdnSttsHstryBean;
/** .
* @param req
* @return
*/
public List<DataObject> getRcvmtList(RcvmtQuery req) {
if (req.getDelYn() == null) {
req.setDelYn("N");
}
// 정렬 확인
if (req.getOrderBy() == null) {
if (req.getBy() == null) {
req.setOrderBy("REG_DT");
} else {
req.setOrderBy(CmmnUtil.convertCamelCaseToSnakeCase(req.getBy()));
}
}
return rcvmtMapper.selectRcvmtList(req);
}
/** .
* @param req
* @return
*/
public List<DataObject> getRcvmts(RcvmtQuery req) {
if (req.getDelYn() == null) {
req.setDelYn("N");
}
if (req.getOrderBy() == null) {
req.setOrderBy("R.RCVMT_ID DESC");
}
return rcvmtMapper.selectRcvmts(req);
}
/** ID .<br />
* @param req
* @return
*/
public DataObject getRcvmtInfo(RcvmtQuery req) {
return rcvmtMapper.selectRcvmtInfo(req);
}
/** ID .<br />
* @param req
* @return
*/
public DataObject getLevyInfo(RcvmtQuery req) {
return rcvmtMapper.selectLevyInfo(req);
}
/** .
* @param rcvmt
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String createRcvmt(Rcvmt rcvmt) {
// 변수 선언
int rtnNocs = -1; // 처리 결과 건수
String rtnMsg = ""; // 처리 결과 메시지
// 부과 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(levyInfo.number("LAST_PCPTAX").intValue()); // 최종 본세
rcvmt.setLastAdamt(levyInfo.number("LAST_ADAMT").intValue()); // 최종 가산금
// 입력된 수납 금액으로 수납 본세, 수납 가산금 나누기
String rcvmtSeCd = ""; // 수납 구분 코드(FIM041)
if (rcvmt.getLastPcptax() + rcvmt.getLastAdamt() == 0) { // 최종 금액이 0원 이라면..
rcvmt.setRcvmtPcptax(0); // 수납 본세
rcvmt.setRcvmtAdamt(0); // 수납 가산금
rcvmtSeCd = "02"; // 수납 구분 코드 = 이중수납
} 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 (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); // 수납 가산금
}
rcvmtSeCd = "06"; // 수납 구분 코드 = 일부수납
} else {
rtnMsg = "[F] 수납 등록 중 수납금액 계산에 실패하였습니다."; // 예외를 발생시켜서 DB Rollback
return rtnMsg;
}
// 수납 구분 코드가 입력 되지 않았다면..
if (rcvmt.getRcvmtSeCd() == null) {
rcvmt.setRcvmtSeCd(rcvmtSeCd);
}
// 수납(TB_RCVMT) 대장을 등록한다.
rtnNocs = rcvmtMapper.insertRcvmt(rcvmt);
if (rtnNocs != 1) {
throw new RuntimeException("수납 대장 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
if (!rcvmtSeCd.equals("02")) { // 이중 수납이 아니라면..
Levy levy = new Levy();
levy.setLevyId(levyInfo.string("LEVY_ID")); // 부과 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()); // 납부 방법 구분 코드
// 부과(TB_LEVY) 대장에 수납금액을 수정한다.
rtnNocs = levyMapper.updateRcvmt(levy);
if (rtnNocs != 1) {
throw new RuntimeException("부과 대장에 수납금액 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
// 합계 금액이 0이면서 완납(01) 또는 과납(04)이라면 단속 상태 코드를 수정한다.
if (levy.getSumAmt() == 0 && (rcvmtSeCd.equals("01") || rcvmtSeCd.equals("04"))) {
// 단속 상태 이력(TB_CRDN_STTS_HSTRY) 대장에 등록하고, 단속(TB_CRDN) 대장을 수정한다.
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 crdnSttsHstry = new CrdnSttsHstry();
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) 대장을 수정한다.
boolean rtnScs = crdnSttsHstryBean.createHstryUpdateCrdnSttsCd(crdnSttsHstry);
if (!rtnScs) {
throw new RuntimeException("수납 등록 중 단속 대장의 단속상태 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
}
}
return "[S] 작업이 정상 처리 되었습니다.";
}
/** , .
* @param rcvmt
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String updateRcvmtRtrcn(Rcvmt rcvmt) {
// 변수 선언
String rtnMsg = "";
// 수납 취소
rtnMsg = updateRcvmtCancle(rcvmt);
if (!rtnMsg.contains("[S]")) {
throw new RuntimeException(rtnMsg); // 예외를 발생시켜서 DB Rollback
}
// 과오납 등록
return "[S] 작업이 정상 처리 되었습니다.";
}
/** .
* @param rcvmt
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String updateRcvmtCancle(Rcvmt rcvmt) {
// 변수 선언
int rtnNocs = -1; // 처리 결과 건수
// 수납 ID로 수납 정보 조회
DataObject rcvmtInfo = rcvmtMapper.selectRcvmtInfo(new RcvmtQuery().setRcvmtId(rcvmt.getRcvmtId()).setDelYn("N"));
// 수납(TB_RCVMT) 대장에 수납취소 정보를 수정한다.
rtnNocs = rcvmtMapper.updateRcvmtRtrcn(rcvmt);
if (rtnNocs != 1) {
throw new RuntimeException("수납 대장에 수납취소 정보 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
// 수납구분코드(RCVMT_SE_CD)가 이중 수납이 아니라면..
if (!rcvmtInfo.string("RCVMT_SE_CD").equals("02")) {
// 부과 ID로 단속, 부과 정보 조회
DataObject levyInfo = levyMapper.selectLevyAmt(new LevyQuery().setLevyId(rcvmtInfo.string("LEVY_ID")));
int rcvmtPcptax = levyInfo.number("RCVMT_PCPTAX").intValue() - rcvmtInfo.number("RCVMT_PCPTAX").intValue(); // 부과 수납본세 - 수납 수납본세
int rcvmtAdamt = levyInfo.number("RCVMT_ADAMT").intValue() - rcvmtInfo.number("RCVMT_ADAMT").intValue(); // 부과 수납가산금 - 수납 수납가산금
int sumAmt = levyInfo.number("SUM_AMT").intValue()
+ rcvmtInfo.number("RCVMT_PCPTAX").intValue() + rcvmtInfo.number("RCVMT_ADAMT").intValue(); // 합계 금액
Levy levy = new Levy();
levy.setLevyId(levyInfo.string("LEVY_ID")); // 부과 ID
levy.setRcvmtPcptax(rcvmtPcptax); // 수납 본세
levy.setRcvmtAdamt(rcvmtAdamt); // 수납 가산금
levy.setSumAmt(sumAmt); // 합계 금액
// 수납 금액이 0이면서.. 완납(01) 또는 과납(04)이라면 수납 일자를 NULL로 수정한다.
if (rcvmtPcptax + rcvmtAdamt == 0 && "01,04".contains(rcvmtInfo.string("RCVMT_SE_CD"))) {
levy.setRcvmtYmd(null); // 수납 일자
levy.setPayMthdSeCd(null); // 납부 방법 구분 코드
} else {
levy.setRcvmtYmd(levyInfo.string("RCVMT_YMD")); // 수납 일자
levy.setPayMthdSeCd(levyInfo.string("PAY_MTHD_SE_CD")); // 납부 방법 구분 코드
}
// 부과(TB_LEVY) 대장에 수납금액 정보를 수정한다.
rtnNocs = levyMapper.updateRcvmt(levy);
if (rtnNocs != 1) {
throw new RuntimeException("부과 대장에 수납금액 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
// 단속 대장 수정 ///////////////////////////////////////////////////////////
// 합계 금액이 0보다 크면서 완납(01) 또는 과납(04)이라면 단속 상태 코드를 수정한다.
if (levy.getSumAmt() > 0 && "01,04".contains(rcvmtInfo.string("RCVMT_SE_CD"))) {
// 단속 상태 이력(TB_CRDN_STTS_HSTRY) 대장에 등록하고, 단속(TB_CRDN) 대장을 수정한다.
CrdnSttsHstry crdnSttsHstry = new CrdnSttsHstry();
String newCrdnSttsCd = "";
if (levyInfo.string("CRDN_STTS_CD").equals("71")) {
newCrdnSttsCd = "42"; // 사전통보 발송
} else if (levyInfo.string("CRDN_STTS_CD").equals("72")) {
newCrdnSttsCd = "51"; // 부과
} else if (levyInfo.string("CRDN_STTS_CD").equals("73")) {
newCrdnSttsCd = "52"; // 독촉
} else if (levyInfo.string("CRDN_STTS_CD").equals("74")) {
newCrdnSttsCd = "54"; // 압류대상
} else if (levyInfo.string("CRDN_STTS_CD").equals("75")) {
newCrdnSttsCd = "55"; // 압류
}
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) 대장을 수정한다.
boolean rtnScs = crdnSttsHstryBean.createHstryUpdateCrdnSttsCd(crdnSttsHstry);
if (!rtnScs) {
throw new RuntimeException("수납 등록 중 단속 대장의 단속상태 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
}
}
return "[S] 작업이 정상 처리 되었습니다.";
}
/** .
* @param rcvmt
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String removeRcvmt(Rcvmt rcvmt) {
// 수납 ID로 수납 정보 조회
DataObject rcvmtInfo = rcvmtMapper.selectRcvmtInfo(new RcvmtQuery().setRcvmtId(rcvmt.getRcvmtId()));
if (rcvmtInfo.string("RCVMT_INPT_SE_CD").equals("03")) {
throw new RuntimeException("수납입력구분이 수기등록 자료만 삭제가 가능합니다."); // 예외를 발생시켜서 DB Rollback
}
// 수납(TB_RCVMT) 대장을 삭제한다.
int rtnNocs = rcvmtMapper.deleteRcvmt(rcvmt);
if (rtnNocs != 1) {
throw new RuntimeException("수납 대장 삭제에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
return "[S] 작업이 정상 처리 되었습니다.";
}
/** 수납 대장 정보 DAO */
@Resource(name = "rcvmtMapper")
private RcvmtMapper rcvmtMapper;
/** 부과 대장 정보 DAO */
@Resource(name = "levyMapper")
private LevyMapper levyMapper;
/** 단속 상태 이력 정보 Bean */
@Resource(name = "crdnSttsHstryBean")
private CrdnSttsHstryBean crdnSttsHstryBean;
/** .
* @param req
* @return
*/
public List<DataObject> getRcvmtList(RcvmtQuery req) {
if (req.getDelYn() == null) {
req.setDelYn("N");
}
// 정렬 확인
if (req.getOrderBy() == null) {
if (req.getBy() == null) {
req.setOrderBy("REG_DT");
} else {
req.setOrderBy(CmmnUtil.convertCamelCaseToSnakeCase(req.getBy()));
}
}
return rcvmtMapper.selectRcvmtList(req);
}
/** .
* @param req
* @return
*/
public List<DataObject> getRcvmts(RcvmtQuery req) {
if (req.getDelYn() == null) {
req.setDelYn("N");
}
if (req.getOrderBy() == null) {
req.setOrderBy("R.RCVMT_ID DESC");
}
return rcvmtMapper.selectRcvmts(req);
}
/** ID .<br />
* @param req
* @return
*/
public DataObject getRcvmtInfo(RcvmtQuery req) {
return rcvmtMapper.selectRcvmtInfo(req);
}
/** ID .<br />
* @param req
* @return
*/
public DataObject getLevyInfo(RcvmtQuery req) {
return rcvmtMapper.selectLevyInfo(req);
}
/** .
* @param rcvmt
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String createRcvmt(Rcvmt rcvmt) {
// 변수 선언
int rtnNocs = -1; // 처리 결과 건수
String rtnMsg = ""; // 처리 결과 메시지
// 부과 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(levyInfo.number("LAST_PCPTAX").intValue()); // 최종 본세
rcvmt.setLastAdamt(levyInfo.number("LAST_ADAMT").intValue()); // 최종 가산금
// 입력된 수납 금액으로 수납 본세, 수납 가산금 나누기
String rcvmtSeCd = ""; // 수납 구분 코드(FIM041)
if (rcvmt.getLastPcptax() + rcvmt.getLastAdamt() == 0) { // 최종 금액이 0원 이라면..
rcvmt.setRcvmtPcptax(0); // 수납 본세
rcvmt.setRcvmtAdamt(0); // 수납 가산금
rcvmtSeCd = "02"; // 수납 구분 코드 = 이중수납
} 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 (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); // 수납 가산금
}
rcvmtSeCd = "06"; // 수납 구분 코드 = 일부수납
} else {
rtnMsg = "[F] 수납 등록 중 수납금액 계산에 실패하였습니다."; // 예외를 발생시켜서 DB Rollback
return rtnMsg;
}
// 수납 구분 코드가 입력 되지 않았다면..
if (rcvmt.getRcvmtSeCd() == null) {
rcvmt.setRcvmtSeCd(rcvmtSeCd);
}
// 수납(TB_RCVMT) 대장을 등록한다.
rtnNocs = rcvmtMapper.insertRcvmt(rcvmt);
if (rtnNocs != 1) {
throw new RuntimeException("수납 대장 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
if (!rcvmtSeCd.equals("02")) { // 이중 수납이 아니라면..
Levy levy = new Levy();
levy.setLevyId(levyInfo.string("LEVY_ID")); // 부과 ID
levy.setRcvmtPcptax(rcvmt.getRcvmtPcptax()); // 수납 본세
levy.setRcvmtAdamt(rcvmt.getRcvmtAdamt()); // 수납 가산금
levy.setLastAmt(rcvmt.getLastPcptax() + rcvmt.getLastAdamt() - rcvmt.getRcvmtPcptax() - rcvmt.getRcvmtAdamt()); // 최종 금액
levy.setRcvmtYmd(rcvmt.getRcvmtYmd()); // 수납 일자
levy.setPayMthdSeCd(rcvmt.getPayMthdSeCd()); // 납부 방법 구분 코드
// 부과(TB_LEVY) 대장에 수납금액을 수정한다.
rtnNocs = levyMapper.updateLevyRcvmt(levy);
if (rtnNocs != 1) {
throw new RuntimeException("부과 대장에 수납금액 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
// 합계 금액이 0이면서 완납(01) 또는 과납(04)이라면 단속 상태 코드를 수정한다.
if (levy.getLastAmt() == 0 && (rcvmtSeCd.equals("01") || rcvmtSeCd.equals("04"))) {
// 단속 상태 이력(TB_CRDN_STTS_HSTRY) 대장에 등록하고, 단속(TB_CRDN) 대장을 수정한다.
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 crdnSttsHstry = new CrdnSttsHstry();
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) 대장을 수정한다.
boolean rtnScs = crdnSttsHstryBean.createHstryUpdateCrdnSttsCd(crdnSttsHstry);
if (!rtnScs) {
throw new RuntimeException("수납 등록 중 단속 대장의 단속상태 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
}
}
return "[S] 작업이 정상 처리 되었습니다.";
}
/** , .
* @param rcvmt
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String updateRcvmtRtrcn(Rcvmt rcvmt) {
// 변수 선언
String rtnMsg = "";
// 수납 취소
rtnMsg = updateRcvmtCancle(rcvmt);
if (!rtnMsg.contains("[S]")) {
throw new RuntimeException(rtnMsg); // 예외를 발생시켜서 DB Rollback
}
// 과오납 등록
return "[S] 작업이 정상 처리 되었습니다.";
}
/** .
* @param rcvmt
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String updateRcvmtCancle(Rcvmt rcvmt) {
// 변수 선언
int rtnNocs = -1; // 처리 결과 건수
// 수납 ID로 수납 정보 조회
DataObject rcvmtInfo = rcvmtMapper.selectRcvmtInfo(new RcvmtQuery().setRcvmtId(rcvmt.getRcvmtId()).setDelYn("N"));
// 수납(TB_RCVMT) 대장에 수납취소 정보를 수정한다.
rtnNocs = rcvmtMapper.updateRcvmtRtrcn(rcvmt);
if (rtnNocs != 1) {
throw new RuntimeException("수납 대장에 수납취소 정보 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
// 수납구분코드(RCVMT_SE_CD)가 이중 수납이 아니라면..
if (!rcvmtInfo.string("RCVMT_SE_CD").equals("02")) {
// 부과 ID로 단속, 부과 정보 조회
DataObject levyInfo = levyMapper.selectLevyAmt(new LevyQuery().setLevyId(rcvmtInfo.string("LEVY_ID")));
int rcvmtPcptax = levyInfo.number("RCVMT_PCPTAX").intValue() - rcvmtInfo.number("RCVMT_PCPTAX").intValue(); // 부과 수납본세 - 수납 수납본세
int rcvmtAdamt = levyInfo.number("RCVMT_ADAMT").intValue() - rcvmtInfo.number("RCVMT_ADAMT").intValue(); // 부과 수납가산금 - 수납 수납가산금
int lastAmt = levyInfo.number("LAST_AMT").intValue()
+ rcvmtInfo.number("RCVMT_PCPTAX").intValue() + rcvmtInfo.number("RCVMT_ADAMT").intValue(); // 최종 금액
Levy levy = new Levy();
levy.setLevyId(levyInfo.string("LEVY_ID")); // 부과 ID
levy.setRcvmtPcptax(rcvmtPcptax); // 수납 본세
levy.setRcvmtAdamt(rcvmtAdamt); // 수납 가산금
levy.setLastAmt(lastAmt); // 최종 금액
// 수납 금액이 0이면서.. 완납(01) 또는 과납(04)이라면 수납 일자를 NULL로 수정한다.
if (rcvmtPcptax + rcvmtAdamt == 0 && "01,04".contains(rcvmtInfo.string("RCVMT_SE_CD"))) {
levy.setRcvmtYmd(null); // 수납 일자
levy.setPayMthdSeCd(null); // 납부 방법 구분 코드
} else {
levy.setRcvmtYmd(levyInfo.string("RCVMT_YMD")); // 수납 일자
levy.setPayMthdSeCd(levyInfo.string("PAY_MTHD_SE_CD")); // 납부 방법 구분 코드
}
// 부과(TB_LEVY) 대장에 수납금액 정보를 수정한다.
rtnNocs = levyMapper.updateLevyRcvmt(levy);
if (rtnNocs != 1) {
throw new RuntimeException("부과 대장에 수납금액 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
// 단속 대장 수정 ///////////////////////////////////////////////////////////
// 합계 금액이 0보다 크면서 완납(01) 또는 과납(04)이라면 단속 상태 코드를 수정한다.
if (levy.getLastAmt() > 0 && "01,04".contains(rcvmtInfo.string("RCVMT_SE_CD"))) {
// 단속 상태 이력(TB_CRDN_STTS_HSTRY) 대장에 등록하고, 단속(TB_CRDN) 대장을 수정한다.
CrdnSttsHstry crdnSttsHstry = new CrdnSttsHstry();
String newCrdnSttsCd = "";
if (levyInfo.string("CRDN_STTS_CD").equals("71")) {
newCrdnSttsCd = "42"; // 사전통보 발송
} else if (levyInfo.string("CRDN_STTS_CD").equals("72")) {
newCrdnSttsCd = "51"; // 부과
} else if (levyInfo.string("CRDN_STTS_CD").equals("73")) {
newCrdnSttsCd = "52"; // 독촉
} else if (levyInfo.string("CRDN_STTS_CD").equals("74")) {
newCrdnSttsCd = "54"; // 압류대상
} else if (levyInfo.string("CRDN_STTS_CD").equals("75")) {
newCrdnSttsCd = "55"; // 압류
}
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) 대장을 수정한다.
boolean rtnScs = crdnSttsHstryBean.createHstryUpdateCrdnSttsCd(crdnSttsHstry);
if (!rtnScs) {
throw new RuntimeException("수납 등록 중 단속 대장의 단속상태 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
}
}
return "[S] 작업이 정상 처리 되었습니다.";
}
/** .
* @param rcvmt
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String removeRcvmt(Rcvmt rcvmt) {
//
boolean rtnScs = false; // 처리 결과 여부
// 수납 ID로 수납 정보 조회
DataObject rcvmtInfo = rcvmtMapper.selectRcvmtInfo(new RcvmtQuery().setRcvmtId(rcvmt.getRcvmtId()));
if (!rcvmtInfo.string("RCVMT_INPT_SE_CD").equals("03")) {
throw new RuntimeException("수납입력구분이 수기등록 자료만 삭제가 가능합니다."); // 예외를 발생시켜서 DB Rollback
}
// 수납(TB_RCVMT) 대장을 삭제한다.
int rtnNocs = rcvmtMapper.deleteRcvmt(rcvmt);
if (rtnNocs != 1) {
throw new RuntimeException("수납 대장 삭제에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
// 부과(TB_LEVY) 대장 수납 금액 수정한다.
int rcvmtPcptax = rcvmtInfo.number("L_RCVMT_PCPTAX").intValue() - rcvmtInfo.number("RCVMT_PCPTAX").intValue();
int rcvmtAdamt = rcvmtInfo.number("L_RCVMT_ADAMT").intValue() - rcvmtInfo.number("RCVMT_ADAMT").intValue();
Levy levy = new Levy();
levy.setLevyId(rcvmtInfo.string("LEVY_ID")); // 부과 ID
levy.setRcvmtPcptax(rcvmtPcptax); // 수납 본세
levy.setRcvmtAdamt(rcvmtAdamt); // 수납 가산금
levy.setLastAmt(rcvmtInfo.number("L_LEVY_PCPTAX").intValue() + rcvmtInfo.number("L_LEVY_ADAMT").intValue()
- rcvmtPcptax - rcvmtAdamt
- rcvmtInfo.number("L_RDAMT_PCPTAX").intValue() - rcvmtInfo.number("L_RDAMT_ADAMT").intValue()); // 최종 금액
// 부과(TB_LEVY) 대장에 수납금액을 수정한다.
rtnNocs = levyMapper.updateLevyRcvmt(levy);
if (rtnNocs != 1) {
throw new RuntimeException("부과 대장에 수납금액 수정에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
// 최종 금액이 0보다 크다면 이전 처리상태로 변경한다.
if (levy.getLastAmt() > 0) {
CrdnSttsHstry crdnSttsHstry = new CrdnSttsHstry();
crdnSttsHstry.setCrdnId(rcvmtInfo.string("CRDN_ID")); // 단속 ID
crdnSttsHstry.setCrdnSttsCd(rcvmtInfo.string("CRDN_STTS_CD")); // 단속 상태 코드
crdnSttsHstry.setEtcCn(rcvmt.getDelRsn()); // 기타 내용 - 삭제 사유
crdnSttsHstry.setUseYn("N"); // 사용 여부
// 단속 상태 이력(TB_CRDN_STTS_HSTRY) 대장의 사용 여부를 "N"으로 처리하고, 단속(TB_CRDN) 대장의 단속 상태 코드를 수정한다.
rtnScs = crdnSttsHstryBean.removeHstryUpdateCrdnSttsCd(crdnSttsHstry);
if (!rtnScs) {
throw new RuntimeException("[F] 발송상세 삭제 작업중 단속 대장의 단속상태 변경에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback
}
}
return "[S] 작업이 정상 처리 되었습니다.";
}
}

@ -35,7 +35,7 @@ import cokr.xit.foundation.data.DataObject;
*
* <pre>
* ============ ============
* 2023-08-31 JoJH
* 2023-08-31 JoJH
* ================================
* </pre>
*/
@ -43,243 +43,239 @@ import cokr.xit.foundation.data.DataObject;
@RequestMapping(name = "수납 관리", value = Rcvm01Controller.CLASS_URL)
public class Rcvm01Controller extends ApplicationController {
public static final String CLASS_URL = "/rcvm/rcvm01";
public class METHOD_URL {
public static final String
receivingMoneyMain = "/010/main.do" // 수납 관리 메인 화면
, getReceivingMoneyList = "/010/list.do" // 수납 대장 목록 조회
, getReceivingMoneyInfo = "/020/info.do" // 수납 정보 조회
, createReceivingMoney = "/020/create.do" // 수납 대장 등록
, updateReceivingMoney = "/020/update.do" // 수납 대장 수정
, removeReceivingMoney = "/010/remove.do" // 수납 대장 삭제
, updateReceivingMoneyRetraction = "/010/updateRcvmtRtrcn.do" // 수납취소 등록
;
}
/**수납 대장 서비스*/
@Resource(name="rcvmtService")
private RcvmtService rcvmtService;
@Resource(name="stngBean")
private StngBean stngBean;
/** (rcvmt/rcvmt-main) .
* {@link #getRcvmtList(RcvmtQuery) } .
* @return /rcvmt/rcvmt-main
*/
@RequestMapping(name = "수납 관리 메인", value = METHOD_URL.receivingMoneyMain)
public ModelAndView receivingMoneyMain() {
// View(jsp)
ModelAndView mav = new ModelAndView("fims/rcvm/rcvm01010-main");
// 사용자 정보
FimsUser fimsUser = (FimsUser)currentUser().getUser();
// View(jsp)에서 사용할 공통코드를 조회
Map<String, List<CommonCode>> commonCodes = getCodesOf("FIM041", "FIM045", "FIM054");
return mav
.addObject("pageName", "rcvm01010") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
.addObject("infoPrefix", "rcvmt") // prefix
.addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
.addObject("sggCd", fimsUser.getOrgID()) // 시군구 코드(SGG_CD)
.addObject("taskListForSgg", stngBean.filterTaskSectionCodeForSgg(commonCodes.get("FIM054")))
.addObject("FIM041List", commonCodes.get("FIM041")) // 수납 구분 코드(RCVMT_SE_CD)
.addObject("FIM045List", commonCodes.get("FIM045")) // 납부 방법 구분 코드(PAY_MTHD_SE_CD)
;
}
/** .<br />
* {@link RcvmtService#getRcvmtList(RcvmtQuery)}
* @param req
* @return jsonView
* <pre><code> {
* "rcvmtList": [ ]
* "rcvmtStart":
* "rcvmtFetch":
* "rcvmtTotal":
* }</code></pre>
*/
@Task
@RequestMapping(name="수납 대장 목록 조회", value=METHOD_URL.getReceivingMoneyList)
public ModelAndView getReceivingMoneyList(RcvmtQuery req) {
if (!"xls".equals(req.getDownload())) {
List<?> result = rcvmtService.getRcvmtList(setFetchSize(req));
return setCollectionInfo(new ModelAndView("jsonView"), result, "rcvmt");
} else {
// 현재 날짜 구하기
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
String dateTime = dateFormat.format(System.currentTimeMillis());
List<CellDef> cellDefs = fromJson(req.getCellDefs(), CellDef.listType());
XLSWriter xlsx = new XLSWriter().worksheet(0);
Format format = new Format(xlsx);
CellStyle center = format.cellStyle(Style.CENTER);
CellStyle numeric = format.n_nn0();
CellStyle dateYMD = format.yyyy_mm_dd();
CellStyle dateDT = format.yyyy_mm_dd_hh_mm_ss();
List<DataObject> list = rcvmtService.getRcvmtList(req.setFetchSize(0));
Map<String,Object> valueMap = new HashMap<String,Object>();
valueMap.put("업무구분", format.of("TASK_SE_NM").style(center));
valueMap.put("수납입력구분", format.of("RCVMT_INPT_SE_NM").style(center));
valueMap.put("수납취소", format.of("RCVMT_RTRCN_NM").style(center));
valueMap.put("회계연도", format.of("FYR").style(center));
valueMap.put("회계구분", format.of("ACNTG_SE_CD").style(center));
valueMap.put("세목코드", format.of("TXITM_CD").style(center));
valueMap.put("세목명", format.of("TXITM_NM"));
valueMap.put("부과번호", format.of("LEVY_NO").style(center));
valueMap.put("분납일련번호", format.of("ISPY_SN").style(center));
valueMap.put("최종본세", format.of("LAST_PCPTAX").style(numeric));
valueMap.put("최종가산금", format.of("LAST_ADAMT").style(numeric));
valueMap.put("수납일련번호", format.of("RCVMT_SN").style(center));
valueMap.put("수납구분", format.of("RCVMT_SE_NM").style(center));
valueMap.put("수납일자", FormatMaker.yyyy_mm_dd(format, "RCVMT_YMD").style(dateYMD));
valueMap.put("회계일자", FormatMaker.yyyy_mm_dd(format, "ACNTG_YMD").style(dateYMD));
valueMap.put("이체일자", FormatMaker.yyyy_mm_dd(format, "TSF_YMD").style(dateYMD));
valueMap.put("수납금액", format.of("RCVMT_AMT").style(numeric));
valueMap.put("수납본세", format.of("RCVMT_PCPTAX").style(numeric));
valueMap.put("수납가산금", format.of("RCVMT_ADAMT").style(numeric));
valueMap.put("수납이자", format.of("RCVMT_INT").style(numeric));
valueMap.put("수납은행", format.of("RCVMT_BANK_NM"));
valueMap.put("납부방법", format.of("PAY_MTHD_SE_NM"));
valueMap.put("수납상태", format.of("RCVMT_STTS_NM").style(center));
valueMap.put("부과일자", FormatMaker.yyyy_mm_dd(format, "LEVY_YMD").style(dateYMD));
valueMap.put("최초납기일자", FormatMaker.yyyy_mm_dd(format, "FRST_DUDT_YMD").style(dateYMD));
valueMap.put("납기일자", FormatMaker.yyyy_mm_dd(format, "DUDT_YMD").style(dateYMD));
valueMap.put("압류일자", FormatMaker.yyyy_mm_dd(format, "SZR_YMD").style(dateYMD));
valueMap.put("압류물건", format.of("SZR_THING"));
valueMap.put("대체압류차량", format.of("RPM_SZR_VHRNO"));
valueMap.put("압류해제일자", FormatMaker.yyyy_mm_dd(format, "SZR_RMV_YMD").style(dateYMD));
valueMap.put("단속일시", FormatMaker.yyyy_mm_dd_hh_mm_ss(format, "CRDN_YMD_TM").style(dateDT));
valueMap.put("차량번호", format.of("VHRNO"));
valueMap.put("납부자구분", format.of("RTPYR_SE_NM").style(center));
valueMap.put("납부자번호", format.of("RTPYR_NO").style(center));
valueMap.put("납부자명", format.of("RTPYR_NM"));
valueMap.put("단속법정동", format.of("CRDN_STDG_NM"));
valueMap.put("단속장소", format.of("CRDN_PLC"));
valueMap.put("처리상태", format.of("CRDN_STTS_NM"));
valueMap.put("등록일시", FormatMaker.yyyy_mm_dd_hh_mm_ss(format, "REG_DT").style(dateDT));
valueMap.put("등록사용자", format.of("RGTR_NM").style(center));
valueMap.put("수정일시", FormatMaker.yyyy_mm_dd_hh_mm_ss(format, "MDFCN_DT").style(dateDT));
valueMap.put("수정사용자", format.of("MDFR_NM").style(center));
CellDef.setValues(cellDefs, valueMap);
xlsx.cell(0, 0).value("수납").value(center).merge(0, cellDefs.size() - 1)
.cell(3, 0).rowValues(CellDef.header(cellDefs, () -> StyleMaker.headerStyle(xlsx)))
.cell(4, 0).values(list, CellDef.values(cellDefs.stream().map(i -> {if(i.getValue() instanceof Format) {i.setField(null);}; return i;}).toList()));
return new ModelAndView("downloadView")
.addObject("download", xlsx.getDownloadable().setFilename("수납" + "_목록_" + dateTime + ".xlsx"));
}
}
/** ID .
* @param levyId ID
* @return fims/rcvm/rcvm01020-info jsonView
* <pre>{
* "rcvmtInfo":
* }</pre>
*/
@Task
@RequestMapping(name="수납 정보 조회", value=METHOD_URL.getReceivingMoneyInfo)
public ModelAndView getReceivingMoneyInfo(HttpServletRequest hReq, RcvmtQuery req) {
DataObject info = rcvmtService.getRcvmtInfo(req);
boolean json = jsonResponse();
ModelAndView mav = new ModelAndView(json ? "jsonView" : "fims/rcvm/rcvm01020-info");
// View(jsp)에서 사용할 공통코드를 조회
Map<String, List<CommonCode>> commonCodes = getCodesOf("FIM041", "FIM045", "FIM054");
return mav
.addObject("openerPageName", hReq.getParameter("openerPageName")) // 호출한 Jsp PageName
.addObject("callPurpose", req.getCallPurpose()) // 호출 용도
.addObject("pageName", "rcvm01020") // jsp pageName
.addObject("infoPrefix", "rcvmt") // prefix
.addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
.addObject("FIM041List", commonCodes.get("FIM041")) // 수납 구분 코드(RCVMT_SE_CD)
.addObject("FIM045List", commonCodes.get("FIM045")) // 납부 방법 구분 코드(PAY_MTHD_SE_CD)
.addObject("FIM054List", commonCodes.get("FIM054")) // 업무 구분 코드(TASK_SE_CD)
.addObject("rcvmtInfo", json ? info : toJson(info)) // 수납 정보
;
}
/** .
* @param rcvmt
* @return jsonView
* <pre><code> {
* "saved": true, false
* }</code></pre>
*/
@Task
@RequestMapping(name="수납 대장 등록", value=METHOD_URL.createReceivingMoney)
public ModelAndView createReceivingMoney(Rcvmt rcvmt) {
boolean saved = false;
String rtnMsg = rcvmtService.createRcvmt(rcvmt);
if (rtnMsg.contains("[S]")) {
saved = true;
} else {
saved = false;
}
return new ModelAndView("jsonView")
.addObject("saved", saved)
.addObject("rtnMsg", rtnMsg);
}
/** .
* @param rcvmt
* @return jsonView
* <pre><code> {
* "saved": true, false
* }</code></pre>
*/
@Task
@RequestMapping(name="수납 대장에 수납취소 수정", value=METHOD_URL.updateReceivingMoneyRetraction)
public ModelAndView updateReceivingMoneyRetraction(Rcvmt rcvmt) {
boolean saved = false;
String rtnMsg = rcvmtService.updateRcvmtRtrcn(rcvmt);
if (rtnMsg.contains("[S]")) {
saved = true;
} else {
saved = false;
}
return new ModelAndView("jsonView")
.addObject("saved", saved)
.addObject("rtnMsg", rtnMsg);
}
/** .
* @param rcvmt
* @return jsonView
* <pre><code> {
* "saved": true, false
* }</code></pre>
*/
@Task
@RequestMapping(name="수납 대장 삭제", value=METHOD_URL.removeReceivingMoney)
public ModelAndView removeReceivingMoney(Rcvmt rcvmt) {
boolean saved = false;
String rtnMsg = rcvmtService.removeRcvmt(rcvmt);
if (rtnMsg.contains("[S]")) {
saved = true;
} else {
saved = false;
}
return new ModelAndView("jsonView")
.addObject("saved", saved)
.addObject("rtnMsg", rtnMsg);
}
public static final String CLASS_URL = "/rcvm/rcvm01";
public class METHOD_URL {
public static final String
receivingMoneyMain = "/010/main.do" // 수납 관리 메인 화면
, getReceivingMoneyList = "/010/list.do" // 수납 대장 목록 조회
, getReceivingMoneyInfo = "/020/info.do" // 수납 정보 조회
, createReceivingMoney = "/020/create.do" // 수납 대장 등록
, updateReceivingMoney = "/020/update.do" // 수납 대장 수정
, removeReceivingMoney = "/010/remove.do" // 수납 대장 삭제
, updateReceivingMoneyRetraction = "/010/updateRcvmtRtrcn.do" // 수납취소 등록
;
}
/**수납 대장 서비스*/
@Resource(name="rcvmtService")
private RcvmtService rcvmtService;
@Resource(name="stngBean")
private StngBean stngBean;
/** (rcvmt/rcvmt-main) .
* {@link #getRcvmtList(RcvmtQuery) } .
* @return /rcvmt/rcvmt-main
*/
@RequestMapping(name = "수납 관리 메인", value = METHOD_URL.receivingMoneyMain)
public ModelAndView receivingMoneyMain() {
// View(jsp)
ModelAndView mav = new ModelAndView("fims/rcvm/rcvm01010-main");
// 사용자 정보
FimsUser fimsUser = (FimsUser)currentUser().getUser();
// View(jsp)에서 사용할 공통코드를 조회
Map<String, List<CommonCode>> commonCodes = getCodesOf("FIM041", "FIM045", "FIM054");
return mav
.addObject("pageName", "rcvm01010") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
.addObject("prefixUrl", CLASS_URL) // prefixUrl
.addObject("sggCd", fimsUser.getOrgID()) // 시군구 코드(SGG_CD)
.addObject("taskListForSgg", stngBean.filterTaskSectionCodeForSgg(commonCodes.get("FIM054")))
.addObject("FIM041List", commonCodes.get("FIM041")) // 수납 구분 코드(RCVMT_SE_CD)
.addObject("FIM045List", commonCodes.get("FIM045")) // 납부 방법 구분 코드(PAY_MTHD_SE_CD)
;
}
/** .<br />
* {@link RcvmtService#getRcvmtList(RcvmtQuery)}
* @param req
* @return jsonView
* <pre><code> {
* "rcvmtList": [ ]
* "rcvmtStart":
* "rcvmtFetch":
* "rcvmtTotal":
* }</code></pre>
*/
@Task
@RequestMapping(name="수납 대장 목록 조회", value=METHOD_URL.getReceivingMoneyList)
public ModelAndView getReceivingMoneyList(RcvmtQuery req) {
if (!"xls".equals(req.getDownload())) {
List<?> result = rcvmtService.getRcvmtList(setFetchSize(req));
return setPagingInfo(new ModelAndView("jsonView"), result, "");
} else {
// 현재 날짜 구하기
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
String dateTime = dateFormat.format(System.currentTimeMillis());
List<CellDef> cellDefs = fromJson(req.getCellDefs(), CellDef.listType());
XLSWriter xlsx = new XLSWriter().worksheet(0);
Format format = new Format(xlsx);
CellStyle center = format.cellStyle(Style.CENTER);
CellStyle numeric = format.n_nn0();
CellStyle dateYMD = format.yyyy_mm_dd();
CellStyle dateDT = format.yyyy_mm_dd_hh_mm_ss();
List<DataObject> list = rcvmtService.getRcvmtList(req.setFetchSize(0));
Map<String,Object> valueMap = new HashMap<String,Object>();
valueMap.put("업무구분", format.of("TASK_SE_NM").style(center));
valueMap.put("수납입력구분", format.of("RCVMT_INPT_SE_NM").style(center));
valueMap.put("수납취소", format.of("RCVMT_RTRCN_NM").style(center));
valueMap.put("회계연도", format.of("FYR").style(center));
valueMap.put("회계구분", format.of("ACNTG_SE_CD").style(center));
valueMap.put("세목코드", format.of("TXITM_CD").style(center));
valueMap.put("세목명", format.of("TXITM_NM"));
valueMap.put("부과번호", format.of("LEVY_NO").style(center));
valueMap.put("분납일련번호", format.of("ISPY_SN").style(center));
valueMap.put("최종본세", format.of("LAST_PCPTAX").style(numeric));
valueMap.put("최종가산금", format.of("LAST_ADAMT").style(numeric));
valueMap.put("수납일련번호", format.of("RCVMT_SN").style(center));
valueMap.put("수납구분", format.of("RCVMT_SE_NM").style(center));
valueMap.put("수납일자", FormatMaker.yyyy_mm_dd(format, "RCVMT_YMD").style(dateYMD));
valueMap.put("회계일자", FormatMaker.yyyy_mm_dd(format, "ACNTG_YMD").style(dateYMD));
valueMap.put("이체일자", FormatMaker.yyyy_mm_dd(format, "TSF_YMD").style(dateYMD));
valueMap.put("수납금액", format.of("RCVMT_AMT").style(numeric));
valueMap.put("수납본세", format.of("RCVMT_PCPTAX").style(numeric));
valueMap.put("수납가산금", format.of("RCVMT_ADAMT").style(numeric));
valueMap.put("수납이자", format.of("RCVMT_INT").style(numeric));
valueMap.put("수납은행", format.of("RCVMT_BANK_NM"));
valueMap.put("납부방법", format.of("PAY_MTHD_SE_NM"));
valueMap.put("수납상태", format.of("RCVMT_STTS_NM").style(center));
valueMap.put("부과일자", FormatMaker.yyyy_mm_dd(format, "LEVY_YMD").style(dateYMD));
valueMap.put("최초납기일자", FormatMaker.yyyy_mm_dd(format, "FRST_DUDT_YMD").style(dateYMD));
valueMap.put("납기일자", FormatMaker.yyyy_mm_dd(format, "DUDT_YMD").style(dateYMD));
valueMap.put("압류일자", FormatMaker.yyyy_mm_dd(format, "SZR_YMD").style(dateYMD));
valueMap.put("압류물건", format.of("SZR_THING"));
valueMap.put("대체압류차량", format.of("RPM_SZR_VHRNO"));
valueMap.put("압류해제일자", FormatMaker.yyyy_mm_dd(format, "SZR_RMV_YMD").style(dateYMD));
valueMap.put("단속일시", FormatMaker.yyyy_mm_dd_hh_mm_ss(format, "CRDN_YMD_TM").style(dateDT));
valueMap.put("차량번호", format.of("VHRNO"));
valueMap.put("납부자구분", format.of("RTPYR_SE_NM").style(center));
valueMap.put("납부자번호", format.of("RTPYR_NO").style(center));
valueMap.put("납부자명", format.of("RTPYR_NM"));
valueMap.put("단속법정동", format.of("CRDN_STDG_NM"));
valueMap.put("단속장소", format.of("CRDN_PLC"));
valueMap.put("처리상태", format.of("CRDN_STTS_NM"));
valueMap.put("등록일시", FormatMaker.yyyy_mm_dd_hh_mm_ss(format, "REG_DT").style(dateDT));
valueMap.put("등록사용자", format.of("RGTR_NM").style(center));
valueMap.put("수정일시", FormatMaker.yyyy_mm_dd_hh_mm_ss(format, "MDFCN_DT").style(dateDT));
valueMap.put("수정사용자", format.of("MDFR_NM").style(center));
CellDef.setValues(cellDefs, valueMap);
xlsx.cell(0, 0).value("수납").value(center).merge(0, cellDefs.size() - 1)
.cell(3, 0).rowValues(CellDef.header(cellDefs, () -> StyleMaker.headerStyle(xlsx)))
.cell(4, 0).values(list, CellDef.values(cellDefs.stream().map(i -> {if(i.getValue() instanceof Format) {i.setField(null);}; return i;}).toList()));
return new ModelAndView("downloadView")
.addObject("download", xlsx.getDownloadable().setFilename("수납" + "_목록_" + dateTime + ".xlsx"));
}
}
/** ID .
* @param levyId ID
* @return fims/rcvm/rcvm01020-info jsonView
* <pre>{
* "rcvmtInfo":
* }</pre>
*/
@Task
@RequestMapping(name="수납 정보 조회", value=METHOD_URL.getReceivingMoneyInfo)
public ModelAndView getReceivingMoneyInfo(HttpServletRequest hReq, RcvmtQuery req) {
//
DataObject rcvmtInfo = rcvmtService.getRcvmtInfo(req);
boolean json = jsonResponse();
ModelAndView mav = new ModelAndView(json ? "jsonView" : "fims/rcvm/rcvm01020-info");
// View(jsp)에서 사용할 공통코드를 조회
Map<String, List<CommonCode>> commonCodes = getCodesOf("FIM041", "FIM045");
return mav
.addObject("callPurpose", req.getCallPurpose()) // 호출 용도
.addObject("pageName", "rcvm01020") // jsp pageName
.addObject("prefixUrl", CLASS_URL) // prefixUrl
.addObject("FIM041List", commonCodes.get("FIM041")) // 수납 구분 코드(RCVMT_SE_CD)
.addObject("FIM045List", commonCodes.get("FIM045")) // 납부 방법 구분 코드(PAY_MTHD_SE_CD)
.addObject("Info", json ? rcvmtInfo : toJson(rcvmtInfo)) // 수납 정보
;
}
/** .
* @param rcvmt
* @return jsonView
* <pre><code> {
* "saved": true, false
* }</code></pre>
*/
@Task
@RequestMapping(name="수납 대장 등록", value=METHOD_URL.createReceivingMoney)
public ModelAndView createReceivingMoney(Rcvmt rcvmt) {
boolean saved = false;
String rtnMsg = rcvmtService.createRcvmt(rcvmt);
if (rtnMsg.contains("[S]")) {
saved = true;
} else {
saved = false;
}
return new ModelAndView("jsonView")
.addObject("saved", saved)
.addObject("rtnMsg", rtnMsg);
}
/** .
* @param rcvmt
* @return jsonView
* <pre><code> {
* "saved": true, false
* }</code></pre>
*/
@Task
@RequestMapping(name="수납 대장에 수납취소 수정", value=METHOD_URL.updateReceivingMoneyRetraction)
public ModelAndView updateReceivingMoneyRetraction(Rcvmt rcvmt) {
boolean saved = false;
String rtnMsg = rcvmtService.updateRcvmtRtrcn(rcvmt);
if (rtnMsg.contains("[S]")) {
saved = true;
} else {
saved = false;
}
return new ModelAndView("jsonView")
.addObject("saved", saved)
.addObject("rtnMsg", rtnMsg);
}
/** .
* @param rcvmt
* @return jsonView
* <pre><code> {
* "saved": true, false
* }</code></pre>
*/
@Task
@RequestMapping(name="수납 대장 삭제", value=METHOD_URL.removeReceivingMoney)
public ModelAndView removeReceivingMoney(Rcvmt rcvmt) {
boolean saved = false;
String rtnMsg = rcvmtService.removeRcvmt(rcvmt);
if (rtnMsg.contains("[S]")) {
saved = true;
} else {
saved = false;
}
return new ModelAndView("jsonView")
.addObject("saved", saved)
.addObject("rtnMsg", rtnMsg);
}
}

@ -138,9 +138,9 @@ public class SndngDtl extends AbstractEntity {
private String bfrDlvrYmd;
/**
*
*
*/
private String bfrDlvrHr;
private String bfrDlvrTm;
/**
*
@ -213,9 +213,9 @@ public class SndngDtl extends AbstractEntity {
private Integer adamt;
/**
*
*
*/
private Integer sumAmt;
private Integer lastAmt;
/**
*

@ -175,7 +175,7 @@ public class SndngBean extends AbstractBean {
sndngDtl.setFfnlgAmt(crdnPayerInfo.number("FFNLG_CRDN_AMT").intValue());// 과태료 금액
sndngDtl.setPcptax(crdnPayerInfo.number("FFNLG_CRDN_AMT").intValue()); // 본세
sndngDtl.setAdamt(0); // 가산금
sndngDtl.setSumAmt(0); // 합계 금액
sndngDtl.setLastAmt(0); // 최종 금액
sndngDtl.setDudtAftrAmt(0); // 납기 후 금액
sndngDtl.setDelYn("N"); // 삭제 여부
@ -505,13 +505,13 @@ public class SndngBean extends AbstractBean {
return rtnMsg;
}
// 부과 본세와 합계 금액이 같은지 확인
if (crdnPayerInfo.number("LEVY_PCPTAX").intValue() != crdnPayerInfo.number("SUM_AMT").intValue()) {
rtnMsg = "[F] 발송상세 등록 작업중 본세금액과 합계금액이 다릅니다."
if (crdnPayerInfo.number("LEVY_PCPTAX").intValue() != crdnPayerInfo.number("LAST_AMT").intValue()) {
rtnMsg = "[F] 발송상세 등록 작업중 본세금액과 최종금액이 다릅니다."
+ "<p>" + "단속ID : " + crdnPayerInfo.string("CRDN_ID")
+ "<br>" + "단속일시 : " + crdnPayerInfo.string("CRDN_YMD_TM_MASK")
+ "<br>" + "차량번호 : " + crdnPayerInfo.string("VHRNO")
+ "<br>" + "본세금액 : " + crdnPayerInfo.string("LEVY_PCPTAX")
+ "<br>" + "합계금액 : " + crdnPayerInfo.string("SUM_AMT")
+ "<br>" + "최종금액 : " + crdnPayerInfo.string("LAST_AMT")
+ "</p>";
return rtnMsg;
}
@ -523,7 +523,7 @@ public class SndngBean extends AbstractBean {
levy.setDudtYmd(sndng.getSndngEndYmd()); // 납기 일자
levy.setFfnlgAmt(crdnPayerInfo.number("FFNLG_AMT").intValue()); // 과태료 금액
levy.setLevyPcptax(crdnPayerInfo.number("ADVNTCE_AMT").intValue()); // 본세 금액
levy.setSumAmt(crdnPayerInfo.number("ADVNTCE_AMT").intValue()); // 합계 금액
levy.setLastAmt(crdnPayerInfo.number("ADVNTCE_AMT").intValue()); // 최종 금액
// 부과(TB_LEVY) 대장에 부과일자, 최초납기일자, 납기일자를 수정한다.
rtnMsg = levyBean.updateRdctLevyYmd(levy);
@ -562,10 +562,10 @@ public class SndngBean extends AbstractBean {
sndngDtl.setPcptax(crdnPayerInfo.number("PCPTAX").intValue()); // 본세
}
sndngDtl.setAdamt(0); // 가산금 = 0
if (crdnPayerInfo.string("SUM_AMT").equals("")) {
sndngDtl.setSumAmt(crdnPayerInfo.number("ADVNTCE_AMT").intValue()); // 합계 금액 = 사전통지 금액
if (crdnPayerInfo.string("LAST_AMT").equals("")) {
sndngDtl.setLastAmt(crdnPayerInfo.number("ADVNTCE_AMT").intValue()); // 최종 금액 = 사전통지 금액
} else {
sndngDtl.setSumAmt(crdnPayerInfo.number("SUM_AMT").intValue()); // 합계 금액
sndngDtl.setLastAmt(crdnPayerInfo.number("LAST_AMT").intValue()); // 최종 금액
}
sndngDtl.setDudtAftrAmt(0); // 납기 후 금액
sndngDtl.setEpayno(crdnPayerInfo.string("TAX_NO")); // 납세 번호
@ -871,7 +871,7 @@ public class SndngBean extends AbstractBean {
sndngDtl.setFfnlgAmt(crdnPayerInfo.number("FFNLG_AMT").intValue()); // 과태료 금액
sndngDtl.setPcptax(crdnPayerInfo.number("PCPTAX").intValue()); // 본세 : 부과본세 - 수납본세 - 감액본세
sndngDtl.setAdamt(crdnPayerInfo.number("ADAMT").intValue()); // 가산금 : 부과가산금 - 수납가산금 - 감액가산금
sndngDtl.setSumAmt(crdnPayerInfo.number("SUM_AMT").intValue()); // 합계 금액
sndngDtl.setLastAmt(crdnPayerInfo.number("LAST_AMT").intValue()); // 최종 금액
sndngDtl.setDudtAftrAmt(crdnPayerInfo.number("DUDT_AFTR_AMT").intValue()); // 납기 후 금액
sndngDtl.setEpayno(crdnPayerInfo.string("TAX_NO")); // 납세 번호
sndngDtl.setEpayno(crdnPayerInfo.string("EPAYNO")); // 전자납부번호
@ -1430,42 +1430,42 @@ public class SndngBean extends AbstractBean {
// 금액
int pcptax = 0; // 본세
int adamt = 0; // 가산금
int sumAmt = 0; // 합계 금액
int afterPcptax = 0; // 납기후 본세
int afterAdamt = 0; // 납기후 가산금
int afterSumAmt = 0; // 납기후 합계 금액
int lastAmt = 0; // 최종 금액
int dudtAftrPcptax = 0; // 납기후 본세
int dudtAftrAdamt = 0; // 납기후 가산금
int dudtAftrAmt = 0; // 납기후 합계 금액
// 계고장에는 최초 과태료 금액을 출력한다.
if (sndngDtlInfo.string("SNDNG_SE_CD").equals("11") || sndngDtlInfo.string("SNDNG_SE_CD").equals("12")) {
pcptax = sndngDtlInfo.number("FFNLG_AMT").intValue(); // 본세 = 과태료 단속 금액
adamt = 0; // 가산금 = 0
sumAmt = sndngDtlInfo.number("FFNLG_AMT").intValue(); // 합계 금액 = 과태료 단속 금액
afterPcptax = 0; // 납기후 본세
afterAdamt = 0; // 납기후 가산금
afterSumAmt = 0; // 납기후 합계 금액
lastAmt = sndngDtlInfo.number("FFNLG_AMT").intValue(); // 합계 금액 = 과태료 단속 금액
dudtAftrPcptax = 0; // 납기후 본세
dudtAftrAdamt = 0; // 납기후 가산금
dudtAftrAmt = 0; // 납기후 합계 금액
} else {
pcptax = sndngDtlInfo.number("PCPTAX").intValue(); // 본세
adamt = sndngDtlInfo.number("ADAMT").intValue(); // 가산금
sumAmt = sndngDtlInfo.number("SUM_AMT").intValue(); // 합계 금액
lastAmt = sndngDtlInfo.number("LAST_AMT").intValue(); // 최종 금액
if (sndngDtlInfo.string("SGG_CD").equals("50110")) {
afterPcptax = 0; // 납기후 본세
afterAdamt = 0; // 납기후 가산금
afterSumAmt = 0; // 납기후 합계 금액
dudtAftrPcptax = 0; // 납기후 본세
dudtAftrAdamt = 0; // 납기후 가산금
dudtAftrAmt = 0; // 납기후 합계 금액
} else {
afterSumAmt = sndngDtlInfo.number("DUDT_AFTR_AMT").intValue(); // 납기후 금액
if (afterSumAmt == 0) { // 납기후 금액이 0 이라면..
afterPcptax = 0;
afterAdamt = 0;
afterSumAmt = 0;
dudtAftrAmt = sndngDtlInfo.number("DUDT_AFTR_AMT").intValue(); // 납기후 금액
if (dudtAftrAmt == 0) { // 납기후 금액이 0 이라면..
dudtAftrPcptax = 0; // 납기후 본세
dudtAftrAdamt = 0; // 납기후 가산금
dudtAftrAmt = 0; // 납기후 금액
} else {
afterPcptax = sndngDtlInfo.number("PCPTAX").intValue(); // 납기후 본세
if (afterSumAmt > afterPcptax) { // 납기후 금액이 본세보다 크다면..
afterAdamt = sndngDtlInfo.number("DUDT_AFTR_AMT").intValue() - sndngDtlInfo.number("PCPTAX").intValue();
} else if (afterSumAmt < afterPcptax) { // 납기후 금액이 본세보다 작다면 오류..
dudtAftrPcptax = sndngDtlInfo.number("PCPTAX").intValue(); // 납기후 본세
if (dudtAftrAmt > dudtAftrPcptax) { // 납기후 금액이 본세보다 크다면..
dudtAftrAdamt = sndngDtlInfo.number("DUDT_AFTR_AMT").intValue() - sndngDtlInfo.number("PCPTAX").intValue();
} else if (dudtAftrAmt < dudtAftrPcptax) { // 납기후 금액이 본세보다 작다면 오류..
throw new RuntimeException("우편통합 발송 작업중 납기후 금액이 본세보다 작은 자료가 발견되었습니다."); // 예외를 발생시켜서 DB Rollback
} else {
afterAdamt = 0;
dudtAftrAdamt = 0;
}
}
}
@ -1486,8 +1486,8 @@ public class SndngBean extends AbstractBean {
} else {
// TAX_NO = 부서코드(7) + 특별회계사업코드(4) + 회계연도(4) + 회계구분(2) + 세목코드(6) + 고지번호(6) + 분납순번(2)
ocr0 = sndngDtlInfo.string("TAX_NO") + CmmnUtil.getOcrVrfcCode("12357", sndngDtlInfo.string("TAX_NO"), 31);
ocr1 = CmmnUtil.getOcrband2(ocr0, sndngDtlInfo.string("LEVY_SE_CD"), sumAmt, sndngDtlInfo.string("DUDT_YMD"));
ocr2 = CmmnUtil.getOcrband3(ocr1, sumAmt, sndngDtlInfo.string("DUDT_YMD"), afterSumAmt);
ocr1 = CmmnUtil.getOcrband2(ocr0, sndngDtlInfo.string("LEVY_SE_CD"), lastAmt, sndngDtlInfo.string("DUDT_YMD"));
ocr2 = CmmnUtil.getOcrband3(ocr1, lastAmt, sndngDtlInfo.string("DUDT_YMD"), dudtAftrAmt);
}
// 전자우편 접수 상세 /////////////////////////////////////////////////////
@ -1580,25 +1580,25 @@ public class SndngBean extends AbstractBean {
// 과태료금액
epostRcptDtl.setRecevFinePrice(sndngDtlInfo.string("FFNLG_AMT"));
// 납부금액
epostRcptDtl.setRecevPayPrice(String.valueOf(sumAmt));
epostRcptDtl.setRecevPayPrice(String.valueOf(lastAmt));
// 납부기한
epostRcptDtl.setRecevPayDt(sndngDtlInfo.string("DUDT_YMD_MASK_KOR"));
// 납기내기한
epostRcptDtl.setRecevPayInDate(sndngDtlInfo.string("DUDT_YMD_MASK"));
// 납기내금액
// 납기내본세
epostRcptDtl.setRecevPayInPrice(String.valueOf(pcptax));
// 납기내가산금
epostRcptDtl.setRecevPayInAddPrice(String.valueOf(adamt));
// 납기내합계금액
epostRcptDtl.setRecevPayInDefaultPrice(String.valueOf(sumAmt));
// 납기내금액
epostRcptDtl.setRecevPayInDefaultPrice(String.valueOf(lastAmt));
// 납기후기한
epostRcptDtl.setRecevPayOutDate(sndngDtlInfo.string("DUDT_AFTR_YMD_MASK"));
// 납기후금액
epostRcptDtl.setRecevPayOutPrice(String.valueOf(afterPcptax));
// 납기후본세
epostRcptDtl.setRecevPayOutPrice(String.valueOf(dudtAftrPcptax));
// 납기후가산금
epostRcptDtl.setRecevPayOutAddPrice(String.valueOf(afterAdamt));
// 납기후합계금액
epostRcptDtl.setRecevPayOutDefaultPrice(String.valueOf(afterSumAmt));
epostRcptDtl.setRecevPayOutAddPrice(String.valueOf(dudtAftrAdamt));
// 납기후금액
epostRcptDtl.setRecevPayOutDefaultPrice(String.valueOf(dudtAftrAmt));
// 차량번호
epostRcptDtl.setRecevCarNumber(sndngDtlInfo.string("VHRNO"));
// 우편번호

@ -324,9 +324,9 @@ public class SndngDtlBean extends AbstractBean {
uptSndngDtl.setLevyYmd(a03.getOpnSbmsnTermBgngYmd()); // 부과 일자
uptSndngDtl.setDudtYmd(a03.getOpnSbmsnTermEndYmd()); // 납기 일자
uptSndngDtl.setFfnlgAmt(Integer.parseInt(a03.getFinScrgAmt())); // 과태료 금액
uptSndngDtl.setPcptax(Integer.parseInt(a03.getFinScrgAmt()) - Integer.parseInt(a03.getBfRdtAmt())); // 본세
uptSndngDtl.setPcptax(Integer.parseInt(a03.getFinScrgAmt()) - Integer.parseInt(a03.getBfRdtAmt())); // 본세
uptSndngDtl.setAdamt(0); // 가산금
uptSndngDtl.setSumAmt(Integer.parseInt(a03.getFinScrgAmt()) - Integer.parseInt(a03.getBfRdtAmt())); // 합계 금액
uptSndngDtl.setLastAmt(Integer.parseInt(a03.getFinScrgAmt()) - Integer.parseInt(a03.getBfRdtAmt())); // 최종 금액
uptSndngDtl.setDudtAftrAmt(0); // 납기 후 금액
uptSndngDtl.setTaxNo(a03.getRsveItem1()); // 납세 번호
uptSndngDtl.setEpayno(a03.getEpayNo()); // 전자납부번호
@ -417,7 +417,7 @@ public class SndngDtlBean extends AbstractBean {
levy.setRcvmtAdamt(0); // 수납 가산금
levy.setRdamtPcptax(0); // 감액 본세
levy.setRdamtAdamt(0); // 감액 가산금
levy.setSumAmt(Integer.parseInt(a03.getFinScrgAmt()) - Integer.parseInt(a03.getBfRdtAmt())); // 합계 금액
levy.setLastAmt(Integer.parseInt(a03.getFinScrgAmt()) - Integer.parseInt(a03.getBfRdtAmt())); // 최종 금액
levy.setDudtAftrAmt(0); // 납기 후 금액
// levy.setTxtnThing(a03.getVhrno()); // 과세 물건 -> 값이 넘어오지 않는다.. 차세대 연계 확인 요청이 필요하다.
levy.setTxtnThing(crdnLevyInfo.string("VHRNO")); // 과세 물건
@ -693,7 +693,7 @@ public class SndngDtlBean extends AbstractBean {
}
sndngDtl.setDlvrYmd(sndbkInfo.string("BFR_DLVR_YMD"));
sndngDtl.setDlvrTm(sndbkInfo.string("BFR_DLVR_HR"));
sndngDtl.setDlvrTm(sndbkInfo.string("BFR_DLVR_TM"));
sndngDtl.setSndngDtlSttsCd(sndbkInfo.string("BFR_SNDNG_DTL_STTS_CD"));
// 발송 상세(TB_SNDNG_DTL) 대장에 반송 정보를 삭제한다.

@ -942,7 +942,7 @@ public class Sndb01Controller extends ApplicationController {
valueMap.put("과태료금액", format.of("FFNLG_AMT").style(numeric));
valueMap.put("본세", format.of("PCPTAX").style(numeric));
valueMap.put("가산금", format.of("ADAMT").style(numeric));
valueMap.put("미납금액", format.of("SUM_AMT").style(numeric));
valueMap.put("최종금액", format.of("LAST_AMT").style(numeric));
valueMap.put("등록일시", FormatMaker.yyyy_mm_dd_hh_mm_ss(format, "REG_DT").style(dateDT));
valueMap.put("등록사용자", format.of("RGTR_NM").style(center));
valueMap.put("수정일시", FormatMaker.yyyy_mm_dd_hh_mm_ss(format, "MDFCN_DT").style(dateDT));
@ -1329,7 +1329,7 @@ public class Sndb01Controller extends ApplicationController {
valueMap.put("과태료금액", format.of("FFNLG_AMT").style(numeric));
valueMap.put("본세", format.of("PCPTAX").style(numeric));
valueMap.put("가산금", format.of("ADAMT").style(numeric));
valueMap.put("미납금액", format.of("SUM_AMT").style(numeric));
valueMap.put("최종금액", format.of("LAST_AMT").style(numeric));
valueMap.put("등록일시", FormatMaker.yyyy_mm_dd_hh_mm_ss(format, "REG_DT").style(dateDT));
valueMap.put("등록사용자", format.of("RGTR_NM").style(center));
valueMap.put("수정일시", FormatMaker.yyyy_mm_dd_hh_mm_ss(format, "MDFCN_DT").style(dateDT));
@ -1451,7 +1451,7 @@ public class Sndb01Controller extends ApplicationController {
valueMap.put("과태료금액", format.of("FFNLG_AMT").style(numeric));
valueMap.put("본세", format.of("PCPTAX").style(numeric));
valueMap.put("가산금", format.of("ADAMT").style(numeric));
valueMap.put("미납금액", format.of("SUM_AMT").style(numeric));
valueMap.put("최종금액", format.of("LAST_AMT").style(numeric));
valueMap.put("등록일시", FormatMaker.yyyy_mm_dd_hh_mm_ss(format, "REG_DT").style(dateDT));
valueMap.put("등록사용자", format.of("RGTR_NM").style(center));
valueMap.put("수정일시", FormatMaker.yyyy_mm_dd_hh_mm_ss(format, "MDFCN_DT").style(dateDT));

@ -78,7 +78,7 @@
, L.RCVMT_ADAMT <!-- 수납 가산금 -->
, L.RDAMT_PCPTAX <!-- 감액 본세 -->
, L.RDAMT_ADAMT <!-- 감액 가산금 -->
, L.SUM_AMT <!-- 합계 금액 -->
, L.LAST_AMT <!-- 최종 금액 -->
, L.LEVY_PCPTAX + L.LEVY_ADAMT AS LEVY_AMT <!-- 부과 금액 -->
, L.RCVMT_PCPTAX + L.RCVMT_ADAMT AS RCVMT_AMT <!-- 수납 금액 -->
, L.RDAMT_PCPTAX + L.RDAMT_ADAMT AS RDAMT_AMT <!-- 감액 금액 -->
@ -205,31 +205,31 @@
, C.FFNLG_AMT <!-- 과태료 금액 -->
, C.ADVNTCE_AMT <!-- 사전통지금액 -->
, C.CRDN_STTS_CD <!-- 단속 상태 코드 -->
, (CONCAT(C.CRDN_YMD,C.CRDN_TM)) AS CRDN_YMD_TM <!-- 단속 일시 -->
, (SELECT GET_CODE_NM('FIM010', C.CRDN_STTS_CD) FROM DUAL) AS CRDN_STTS_NM <!-- 단속 상태 명 -->
, (CONCAT(C.CRDN_YMD,C.CRDN_TM)) AS CRDN_YMD_TM <!-- 단속 일시 -->
, (GET_CODE_NM('FIM010', C.CRDN_STTS_CD)) AS CRDN_STTS_NM <!-- 단속 상태 명 -->
, L.LEVY_ID <!-- 부과 ID -->
, L.SUM_AMT <!-- 합계 금액 -->
, L.LEVY_PCPTAX + LEVY_ADAMT AS LEVY_AMT <!-- 부과 금액 -->
, L.RCVMT_PCPTAX + RCVMT_ADAMT AS RCVMT_AMT <!-- 수납 금액 -->
, L.RDAMT_PCPTAX + RDAMT_ADAMT AS RDAMT_AMT <!-- 감액 금액 -->
, L.LAST_AMT <!-- 최종 금액 -->
, L.LEVY_PCPTAX + LEVY_ADAMT AS LEVY_AMT <!-- 부과 금액 -->
, L.RCVMT_PCPTAX + RCVMT_ADAMT AS RCVMT_AMT <!-- 수납 금액 -->
, L.RDAMT_PCPTAX + RDAMT_ADAMT AS RDAMT_AMT <!-- 감액 금액 -->
, P.RTPYR_ID <!-- 납부자 ID -->
, P.RTPYR_NO <!-- 납부자 번호 -->
, P.RTPYR_NM <!-- 납부자 명 -->
, R.RDCT_ID <!-- 감경 ID -->
, R.RDCT_YMD <!-- 감경 일자 -->
, R.RDCT_RSN_CD <!-- 감경 사유 코드 -->
, (GET_CODE_NM('FIM019', R.RDCT_RSN_CD)) AS RDCT_RSN_NM <!-- 감경 사유 명 -->
, R.RDCT_AMT <!-- 감경 금액 -->
, R.ETC_CN <!-- 감액 기타 내용 -->
, R.DEL_YN <!-- 삭제 여부 -->
, R.REG_DT <!-- 등록 일시 -->
, R.RGTR <!-- 등록자 -->
, (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = R.RGTR) AS RGTR_NM <!-- 등록자 명 -->
, R.MDFCN_DT <!-- 수정 일시 -->
, R.MDFR <!-- 수정자 -->
, (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = R.MDFR) AS MDFR_NM <!-- 수정자 명 -->
, R.DEL_DT <!-- 삭제 일시 -->
, R.DLTR <!-- 삭제자 -->
, (SELECT GET_CODE_NM('FIM019', R.RDCT_RSN_CD) FROM DUAL) AS RDCT_RSN_NM <!-- 감경 사유 명 -->
, (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = R.RGTR) AS RGTR_NM <!-- 등록자 명 -->
, (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = R.MDFR) AS MDFR_NM <!-- 수정자 명 -->
, (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = R.DLTR) AS DLTR_NM <!-- 삭제자 명 -->
FROM TB_CRDN C
INNER JOIN TB_PAYER P ON (C.RTPYR_ID = P.RTPYR_ID)
@ -372,15 +372,4 @@
AND DEL_YN = 'N' <!-- 삭제 여부 -->
</update>
<update id="updateLevyRdct" parameterType="cokr.xit.fims.levy.Levy">/* 부과 대장 과태료 감경 금액 수정(rdctMapper.updateLevyRdct) */
UPDATE TB_LEVY
SET FFNLG_AMT = #{ffnlgAmt} <!-- 과태료 금액 -->
, LEVY_PCPTAX = #{levyPcptax} <!-- 부과 본세 -->
, SUM_AMT = #{sumAmt} <!-- 합계 금액 -->
, MDFCN_DT = <include refid="utility.now" /> <!-- 수정 일시 -->
, MDFR = #{modifiedBy} <!-- 수정자 -->
WHERE LEVY_ID = #{levyId} <!-- 단속 ID -->
AND DEL_YN = 'N' <!-- 삭제 여부 -->
</update>
</mapper>

@ -53,23 +53,23 @@
SELECT R.RCVMT_ID <!-- 수납 ID -->
, R.SGG_CD <!-- 시군구 코드 -->
, R.TASK_SE_CD <!-- 업무 구분 코드 -->
, (SELECT GET_CODE_NM('FIM054', R.TASK_SE_CD) FROM DUAL) AS TASK_SE_NM <!-- 업무 구분 명 -->
, (GET_CODE_NM('FIM054', R.TASK_SE_CD)) AS TASK_SE_NM <!-- 업무 구분 명 -->
, R.RCVMT_INPT_SE_CD <!-- 수납 입력 구분 코드 -->
, (SELECT GET_CODE_NM('FIM044', R.RCVMT_INPT_SE_CD) FROM DUAL) AS RCVMT_INPT_SE_NM <!-- 수납 입력 구분 명 -->
, (GET_CODE_NM('FIM044', R.RCVMT_INPT_SE_CD)) AS RCVMT_INPT_SE_NM <!-- 수납 입력 구분 명 -->
, R.DEPT_CD <!-- 부서 코드 -->
, R.SPCL_BIZ_CD <!-- 특별회계 사업 코드 -->
, R.FYR <!-- 회계연도 -->
, R.ACNTG_SE_CD <!-- 회계 구분 코드 -->
, (SELECT GET_CODE_NM('FIM074', R.ACNTG_SE_CD) FROM DUAL) AS ACNTG_SE_NM <!-- 회계 구분 명 -->
, (GET_CODE_NM('FIM074', R.ACNTG_SE_CD)) AS ACNTG_SE_NM <!-- 회계 구분 명 -->
, R.TXITM_CD <!-- 세목 코드 -->
, (SELECT GET_CODE_NM('FIM075', R.TXITM_CD) FROM DUAL) AS TXITM_NM <!-- 세목 코드 명 -->
, (GET_CODE_NM('FIM075', R.TXITM_CD)) AS TXITM_NM <!-- 세목 코드 명 -->
, R.LEVY_NO <!-- 부과 번호 -->
, R.ISPY_SN <!-- 분납 일련번호 -->
, R.LAST_PCPTAX <!-- 최종 본세 -->
, R.LAST_ADAMT <!-- 최종 가산금 -->
, R.RCVMT_SN <!-- 수납 일련번호 -->
, R.RCVMT_SE_CD <!-- 수납 구분 코드 -->
, (SELECT GET_CODE_NM('FIM041', R.RCVMT_SE_CD) FROM DUAL) AS RCVMT_SE_NM <!-- 수납 구분 명 -->
, (GET_CODE_NM('FIM041', R.RCVMT_SE_CD)) AS RCVMT_SE_NM <!-- 수납 구분 명 -->
, R.RCVMT_YMD <!-- 수납 일자 -->
, R.ACNTG_YMD <!-- 회계 일자 -->
, R.TSF_YMD <!-- 이체 일자 -->
@ -79,15 +79,15 @@
, R.RCVMT_INT <!-- 수납 이자 -->
, R.RCVMT_BANK_NM <!-- 수납 은행 명 -->
, R.PAY_MTHD_SE_CD <!-- 납부 방법 구분 코드 -->
, (SELECT GET_CODE_NM('FIM045', R.PAY_MTHD_SE_CD) FROM DUAL) AS PAY_MTHD_SE_NM <!-- 납부 방법 구분 명 -->
, (GET_CODE_NM('FIM045', R.PAY_MTHD_SE_CD)) AS PAY_MTHD_SE_NM <!-- 납부 방법 구분 명 -->
, R.EPAYNO <!-- 전자납부번호 -->
, R.VR_ACTNO <!-- 가상계좌번호 -->
, R.RCVMT_RTRCN_YN <!-- 수납 취소 여부 -->
, (SELECT GET_CODE_NM('CMN005', R.RCVMT_RTRCN_YN) FROM DUAL) AS RCVMT_RTRCN_NM <!-- 수납 취소 여부 명 -->
, (GET_CODE_NM('CMN005', R.RCVMT_RTRCN_YN)) AS RCVMT_RTRCN_NM <!-- 수납 취소 여부 명 -->
, R.RCVMT_RTRCN_DT <!-- 수납 취소 일시 -->
, R.RCVMT_RTRCN_RSN <!-- 수납 취소 사유 -->
, R.RCVMT_STTS_CD <!-- 수납 상태 코드 -->
, (SELECT GET_CODE_NM('FIM020', R.RCVMT_STTS_CD) FROM DUAL) AS RCVMT_STTS_NM <!-- 수납 상태 명 -->
, (GET_CODE_NM('FIM020', R.RCVMT_STTS_CD)) AS RCVMT_STTS_NM <!-- 수납 상태 명 -->
, R.DEL_YN <!-- 삭제 여부 -->
, R.REG_DT <!-- 등록 일시 -->
, (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = R.RGTR) AS RGTR_NM <!-- 등록자 명 -->
@ -97,6 +97,7 @@
, L.LEVY_YMD <!-- 부과 일자 -->
, L.FRST_DUDT_YMD <!-- 최초 납기 일자 -->
, L.DUDT_YMD <!-- 납기 일자 -->
, L.LAST_AMT <!-- 최종 금액 -->
, L.SZR_YMD <!-- 압류 일자 -->
, L.SZR_THING <!-- 압류 물건 -->
, L.RPM_SZR_VHRNO <!-- 대체 압류 자동차등록번호 -->
@ -104,17 +105,17 @@
, L.SZR_RMV_RSN <!-- 압류 해제 사유 -->
, C.CRDN_ID <!-- 단속 ID -->
, C.CRDN_YMD <!-- 단속 일자 -->
, (CONCAT(C.CRDN_YMD, C.CRDN_TM)) AS CRDN_YMD_TM <!-- 단속 일시 -->
, (CONCAT(C.CRDN_YMD, C.CRDN_TM)) AS CRDN_YMD_TM <!-- 단속 일시 -->
, C.VHRNO <!-- 차량번호 -->
, C.CRDN_STDG_NM <!-- 단속 법정동 명 -->
, C.CRDN_ROAD_NM <!-- 단속 도로 명 -->
, C.CRDN_PLC <!-- 단속 장소 -->
, C.CRDN_STTS_CD <!-- 단속 상태 코드 -->
, (SELECT GET_CODE_NM('FIM010', C.CRDN_STTS_CD) FROM DUAL) AS CRDN_STTS_NM <!-- 단속 상태 명 -->
, (GET_CODE_NM('FIM010', C.CRDN_STTS_CD)) AS CRDN_STTS_NM <!-- 단속 상태 명 -->
, C.CRDN_STTS_CHG_DT <!-- 단속 상태 변경 일시 -->
, P.RTPYR_ID <!-- 납부자 ID -->
, P.RTPYR_SE_CD <!-- 납부자 구분 코드 -->
, (SELECT GET_CODE_NM('FIM011', P.RTPYR_SE_CD) FROM DUAL) AS RTPYR_SE_NM <!-- 납부자 구분 명 -->
, (GET_CODE_NM('FIM011', P.RTPYR_SE_CD)) AS RTPYR_SE_NM <!-- 납부자 구분 명 -->
, P.RTPYR_NO <!-- 납부자 번호 -->
, P.RTPYR_NM <!-- 납부자 명 -->
, PA.ADDR_SN <!-- 주소 일련번호 -->
@ -274,23 +275,23 @@
SELECT R.RCVMT_ID <!-- 수납 ID -->
, R.SGG_CD <!-- 시군구 코드 -->
, R.TASK_SE_CD <!-- 업무 구분 코드 -->
, (SELECT GET_CODE_NM('FIM054', R.TASK_SE_CD) FROM DUAL) AS TASK_SE_NM <!-- 업무 구분 명 -->
, (GET_CODE_NM('FIM054', R.TASK_SE_CD)) AS TASK_SE_NM <!-- 업무 구분 명 -->
, R.RCVMT_INPT_SE_CD <!-- 수납 입력 구분 코드 -->
, (SELECT GET_CODE_NM('FIM044', R.RCVMT_INPT_SE_CD) FROM DUAL) AS RCVMT_INPT_SE_NM <!-- 수납 입력 구분 명 -->
, (GET_CODE_NM('FIM044', R.RCVMT_INPT_SE_CD)) AS RCVMT_INPT_SE_NM <!-- 수납 입력 구분 명 -->
, R.DEPT_CD <!-- 부서 코드 -->
, R.SPCL_BIZ_CD <!-- 특별회계 사업 코드 -->
, R.FYR <!-- 회계연도 -->
, R.ACNTG_SE_CD <!-- 회계 구분 코드 -->
, (SELECT GET_CODE_NM('FIM074', R.ACNTG_SE_CD) FROM DUAL) AS ACNTG_SE_NM <!-- 회계 구분 명 -->
, (GET_CODE_NM('FIM074', R.ACNTG_SE_CD)) AS ACNTG_SE_NM <!-- 회계 구분 명 -->
, R.TXITM_CD <!-- 세목 코드 -->
, (SELECT GET_CODE_NM('FIM075', R.TXITM_CD) FROM DUAL) AS TXITM_NM <!-- 세목 코드 명 -->
, (GET_CODE_NM('FIM075', R.TXITM_CD)) AS TXITM_NM <!-- 세목 코드 명 -->
, R.LEVY_NO <!-- 부과 번호 -->
, R.ISPY_SN <!-- 분납 일련번호 -->
, R.LAST_PCPTAX <!-- 최종 본세 -->
, R.LAST_ADAMT <!-- 최종 가산금 -->
, R.RCVMT_SN <!-- 수납 일련번호 -->
, R.RCVMT_SE_CD <!-- 수납 구분 코드 -->
, (SELECT GET_CODE_NM('FIM041', R.RCVMT_SE_CD) FROM DUAL) AS RCVMT_SE_NM <!-- 수납 구분 명 -->
, (GET_CODE_NM('FIM041', R.RCVMT_SE_CD)) AS RCVMT_SE_NM <!-- 수납 구분 명 -->
, R.RCVMT_YMD <!-- 수납 일자 -->
, R.ACNTG_YMD <!-- 회계 일자 -->
, R.TSF_YMD <!-- 이체 일자 -->
@ -300,22 +301,31 @@
, R.RCVMT_INT <!-- 수납 이자 -->
, R.RCVMT_BANK_NM <!-- 수납 은행 명 -->
, R.PAY_MTHD_SE_CD <!-- 납부 방법 구분 코드 -->
, (SELECT GET_CODE_NM('FIM045', R.PAY_MTHD_SE_CD) FROM DUAL) AS PAY_MTHD_SE_NM <!-- 납부 방법 구분 명 -->
, (GET_CODE_NM('FIM045', R.PAY_MTHD_SE_CD)) AS PAY_MTHD_SE_NM <!-- 납부 방법 구분 명 -->
, R.EPAYNO <!-- 전자납부번호 -->
, R.VR_ACTNO <!-- 가상계좌번호 -->
, R.RCVMT_RTRCN_YN <!-- 수납 취소 여부 -->
, R.RCVMT_RTRCN_DT <!-- 수납 취소 일시 -->
, R.RCVMT_RTRCN_RSN <!-- 수납 취소 사유 -->
, (SELECT GET_CODE_NM('CMN005', R.RCVMT_RTRCN_YN) FROM DUAL) AS RCVMT_RTRCN_NM <!-- 수납 취소 여부 명 -->
, (GET_CODE_NM('CMN005', R.RCVMT_RTRCN_YN)) AS RCVMT_RTRCN_NM <!-- 수납 취소 여부 명 -->
, R.RCVMT_STTS_CD <!-- 수납 상태 코드 -->
, (SELECT GET_CODE_NM('FIM020', R.RCVMT_STTS_CD) FROM DUAL) AS RCVMT_STTS_NM <!-- 수납 상태 명 -->
, (GET_CODE_NM('FIM020', R.RCVMT_STTS_CD)) AS RCVMT_STTS_NM <!-- 수납 상태 명 -->
, R.DEL_YN <!-- 삭제 여부 -->
, R.REG_DT <!-- 등록 일시 -->
, (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = R.RGTR) AS RGTR_NM <!-- 등록자 명 -->
, R.MDFCN_DT <!-- 수정 일시 -->
, (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = R.MDFR) AS MDFR_NM <!-- 수정자 명 -->
, L.LEVY_ID <!-- 부과 ID -->
, L.LEVY_PCPTAX AS L_LEVY_PCPTAX <!-- 부과 본세 -->
, L.LEVY_ADAMT AS L_LEVY_ADAMT <!-- 부과 가산금 -->
, L.RCVMT_PCPTAX AS L_RCVMT_PCPTAX <!-- 수납 본세 -->
, L.RCVMT_ADAMT AS L_RCVMT_ADAMT <!-- 수납 가산금 -->
, L.RDAMT_PCPTAX AS L_RDAMT_PCPTAX <!-- 감액 가산금 -->
, L.RDAMT_ADAMT AS L_RDAMT_ADAMT <!-- 감액 가산금 -->
, L.LAST_AMT <!-- 최종 금액 -->
, C.CRDN_ID <!-- 단속 ID -->
, C.CRDN_STTS_CD <!-- 단속 상태 코드 -->
, C.CRDN_STTS_CHG_DT <!-- 단속 상태 변경 일시 -->
FROM TB_RCVMT R
LEFT OUTER JOIN TB_LEVY L ON (R.LEVY_ID = L.LEVY_ID)
LEFT OUTER JOIN TB_CRDN C ON (L.CRDN_ID = C.CRDN_ID)
@ -480,32 +490,38 @@
</update>
<select id="selectLevyInfo" parameterType="map" resultType="dataobject">/* 부과 대장 객체 가져오기(rcvmtMapper.selectLevyInfo) */
SELECT L.LEVY_ID <!-- 부과 ID -->
, L.DEPT_CD <!-- 부서 코드 -->
, L.SPCL_BIZ_CD <!-- 특별회계 사업 코드 -->
, L.FYR <!-- 회계연도 -->
, L.ACNTG_SE_CD <!-- 회계 구분 코드 -->
, L.TXITM_CD <!-- 세목 코드 -->
, L.OPER_ITEM_CD <!-- 운영 항목 코드 -->
, L.LEVY_NO <!-- 부과 번호 -->
, L.ISPY_SN <!-- 분납 일련번호 -->
, L.FFNLG_AMT <!-- 과태료 금액 -->
, L.LEVY_PCPTAX <!-- 부과 본세 -->
, L.LEVY_ADAMT <!-- 부과 가산금 -->
, L.ISPY_INT <!-- 분납 이자 -->
, L.RCVMT_PCPTAX <!-- 수납 본세 -->
, L.RCVMT_ADAMT <!-- 수납 가산금 -->
SELECT L.LEVY_ID <!-- 부과 ID -->
, L.DEPT_CD <!-- 부서 코드 -->
, L.SPCL_BIZ_CD <!-- 특별회계 사업 코드 -->
, L.FYR <!-- 회계연도 -->
, L.ACNTG_SE_CD <!-- 회계 구분 코드 -->
, (GET_CODE_NM('FIM074', L.ACNTG_SE_CD)) AS ACNTG_SE_NM <!-- 회계 구분 명 -->
, L.TXITM_CD <!-- 세목 코드 -->
, (GET_CODE_NM('FIM075', L.TXITM_CD)) AS TXITM_NM <!-- 세목 코드 명 -->
, L.OPER_ITEM_CD <!-- 운영 항목 코드 -->
, (GET_CODE_NM('FIM075', L.OPER_ITEM_CD)) AS OPER_ITEM_NM <!-- 운영 항목 코드 명 -->
, L.LEVY_NO <!-- 부과 번호 -->
, L.ISPY_SN <!-- 분납 일련번호 -->
, L.FFNLG_AMT <!-- 과태료 금액 -->
, L.LEVY_PCPTAX <!-- 부과 본세 -->
, L.LEVY_ADAMT <!-- 부과 가산금 -->
, L.ISPY_INT <!-- 분납 이자 -->
, L.RCVMT_PCPTAX <!-- 수납 본세 -->
, L.RCVMT_ADAMT <!-- 수납 가산금 -->
, L.RDAMT_PCPTAX <!-- 감액 본세 -->
, L.RDAMT_ADAMT <!-- 감액 가산금 -->
, L.LAST_AMT <!-- 최종 금액 -->
, L.LEVY_PCPTAX - L.RCVMT_PCPTAX - L.RDAMT_PCPTAX AS LAST_PCPTAX <!-- 최종 본세 -->
, L.LEVY_ADAMT - L.RCVMT_ADAMT - L.RDAMT_ADAMT AS LAST_ADAMT <!-- 가산금 -->
, C.CRDN_ID <!-- 단속 ID -->
, C.SGG_CD <!-- 시군구 코드 -->
, C.TASK_SE_CD <!-- 업무 구분 코드 -->
, C.VHRNO <!-- 차량번호 -->
, C.CRDN_PLC <!-- 단속 장소 -->
, C.CRDN_STTS_CD <!-- 단속 상태 코드 -->
, C.CRDN_ID <!-- 단속 ID -->
, C.SGG_CD <!-- 시군구 코드 -->
, C.TASK_SE_CD <!-- 업무 구분 코드 -->
, (CONCAT(C.CRDN_YMD, C.CRDN_TM)) AS CRDN_YMD_TM <!-- 단속 일시 -->
, C.VHRNO <!-- 차량번호 -->
, C.CRDN_PLC <!-- 단속 장소 -->
, C.CRDN_STTS_CD <!-- 단속 상태 코드 -->
, (GET_CODE_NM('FIM010', C.CRDN_STTS_CD)) AS CRDN_STTS_NM <!-- 단속 상태 명 -->
, C.CRDN_STTS_CHG_DT <!-- 단속 상태 변경 일시 -->
, (CONCAT(C.CRDN_YMD, C.CRDN_TM)) AS CRDN_YMD_TM <!-- 단속 일시 -->
, (SELECT GET_CODE_NM('FIM010', C.CRDN_STTS_CD) FROM DUAL) AS CRDN_STTS_NM <!-- 단속 상태 명 -->
FROM TB_LEVY L
INNER JOIN TB_CRDN C ON (L.CRDN_ID = C.CRDN_ID)
<choose>

@ -745,7 +745,7 @@
<select id="selectNhtTrgtList" parameterType="map" resultType="dataobject">/* 사전통지 발송 대상 목록 조회(sndngMapper.selectAdvntceSndngTrgtList) */
<include refid="utility.paging-prefix" />
SELECT L.LEVY_ID <!-- 부과 ID -->
, SUM(L.SUM_AMT) OVER() AS GRAMT <!-- 총금액 -->
, SUM(L.LAST_AMT) OVER() AS GRAMT <!-- 총금액 -->
<include refid="selectNhtTrgt" />
<include refid="fromNhtTrgt" />
<include refid="utility.orderBy" />
@ -762,7 +762,7 @@
<select id="selectNhtTrgtCrdnIds" parameterType="map" resultType="dataobject">/* 고지서 발송 대상 단속ID 가져오기(sndngMapper.selectAdvntceTrgtCrdnIds) */
SELECT L.LEVY_ID <!-- 부과 ID -->
, C.CRDN_ID <!-- 단속 ID -->
, SUM(L.SUM_AMT) OVER() AS GRAMT <!-- 총금액 -->
, SUM(L.LAST_AMT) OVER() AS GRAMT <!-- 총금액 -->
<include refid="fromNhtTrgt" />
<include refid="utility.orderBy" />
</select>
@ -835,7 +835,7 @@
, L.RCVMT_ADAMT <!-- 수납 가산금 -->
, L.RDAMT_PCPTAX <!-- 감액 본세 -->
, L.RDAMT_ADAMT <!-- 감액 가산금 -->
, L.SUM_AMT <!-- 합계 금액 -->
, L.LAST_AMT <!-- 최종 금액 -->
, L.DUDT_AFTR_AMT <!-- 납기 후 금액 -->
, L.TXTN_THING <!-- 과세 물건 -->
, L.MNG_ITEM1 <!-- 관리 아이템1 -->

@ -29,7 +29,7 @@
<result property="ffnlgAmt" column="FFNLG_AMT" /> <!-- 과태료 금액 -->
<result property="pcptax" column="PCPTAX" /> <!-- 본세 -->
<result property="adamt" column="ADAMT" /> <!-- 가산금 -->
<result property="sumAmt" column="SUM_AMT" /> <!-- 합계 금액 -->
<result property="lastAmt" column="LAST_AMT" /> <!-- 최종 금액 -->
<result property="dudtAftrAmt" column="DUDT_AFTR_AMT" /> <!-- 납기 후 금액 -->
<result property="rcpnNm" column="RCPN_NM" /> <!-- 수령인 명 -->
<result property="rcpnBrdt" column="RCPN_BRDT" /> <!-- 수령인 생년월일 -->
@ -47,7 +47,7 @@
<result property="sndngDtlSttsCd" column="SNDNG_DTL_STTS_CD" /> <!-- 발송 상세 상태 코드 -->
<result property="bfrSndngDtlSttsCd" column="BFR_SNDNG_DTL_STTS_CD" /> <!-- 전 발송 상세 상태 코드 -->
<result property="bfrDlvrYmd" column="BFR_DLVR_YMD" /> <!-- 전 배달 일자 -->
<result property="bfrDlvrHr" column="BFR_DLVR_HR" /> <!-- 전 배달 시간 -->
<result property="bfrDlvrTm" column="BFR_DLVR_TM" /> <!-- 전 배달 시각 -->
<result property="sndngRcvmtCd" column="SNDNG_RCVMT_CD" /> <!-- 발송 수납 코드 -->
<result property="addrChgCd" column="ADDR_CHG_CD" /> <!-- 주소 변경 코드 -->
<result property="taxNo" column="TAX_NO" /> <!-- 납세 번호 -->
@ -134,7 +134,7 @@
, SD.BFR_SNDNG_DTL_STTS_CD <!-- 전 발송 상세 상태 코드 -->
, (GET_CODE_NM('FIM050', SD.BFR_SNDNG_DTL_STTS_CD)) AS BFR_SNDNG_DTL_STTS_NM <!-- 전 발송 상세 상태 명 -->
, SD.BFR_DLVR_YMD <!-- 전 배달 일자 -->
, SD.BFR_DLVR_HR <!-- 전 배달 시간 -->
, SD.BFR_DLVR_TM <!-- 전 배달 시각 -->
, SD.SNDNG_RCVMT_CD <!-- 발송 수납 코드 -->
, (GET_CODE_NM('FIM051', SD.SNDNG_RCVMT_CD)) AS SNDNG_RCVMT_NM <!-- 발송 수납 명 -->
, SD.ADDR_CHG_CD <!-- 주소 변경 코드 -->
@ -154,7 +154,7 @@
, SD.FFNLG_AMT <!-- 과태료 금액 -->
, SD.PCPTAX <!-- 본세 -->
, SD.ADAMT <!-- 가산금 -->
, SD.SUM_AMT <!-- 합계 금액 -->
, SD.LAST_AMT <!-- 최종 금액 -->
, SD.DUDT_AFTR_AMT <!-- 납기 후 금액 -->
, SD.TAX_NO <!-- 납세 번호 -->
, SD.EPAYNO <!-- 전자납부번호 -->
@ -371,7 +371,7 @@
, SNDNG_DTL_STTS_CD <!-- 발송 상세 상태 코드 -->
, BFR_SNDNG_DTL_STTS_CD <!-- 전 발송 상세 상태 코드 -->
, BFR_DLVR_YMD <!-- 전 배달 일자 -->
, BFR_DLVR_HR <!-- 전 배달 시간 -->
, BFR_DLVR_TM <!-- 전 배달 시각 -->
, SNDNG_RCVMT_CD <!-- 발송 수납 코드 -->
, ADDR_CHG_CD <!-- 주소 변경 코드 -->
, CRDN_DT <!-- 단속 일시 -->
@ -386,7 +386,7 @@
, FFNLG_AMT <!-- 과태료 금액 -->
, PCPTAX <!-- 본세 -->
, ADAMT <!-- 가산금 -->
, SUM_AMT <!-- 합계 금액 -->
, LAST_AMT <!-- 최종 금액 -->
, DUDT_AFTR_AMT <!-- 납기 후 금액 -->
, TAX_NO <!-- 납세 번호 -->
, EPAYNO <!-- 전자납부번호 -->
@ -462,7 +462,7 @@
, #{sndngDtlSttsCd} <!-- 발송 상세 상태 코드 -->
, #{bfrSndngDtlSttsCd} <!-- 전 발송 상세 상태 코드 -->
, #{bfrDlvrYmd} <!-- 전 배달 일자 -->
, #{bfrDlvrHr} <!-- 전 배달 시간 -->
, #{bfrDlvrTm} <!-- 전 배달 시각 -->
, #{sndngRcvmtCd} <!-- 발송 수납 코드 -->
, #{addrChgCd} <!-- 주소 변경 코드 -->
, #{crdnDt} <!-- 단속 일시 -->
@ -477,7 +477,7 @@
, #{ffnlgAmt} <!-- 과태료 금액 -->
, #{pcptax} <!-- 본세 -->
, #{adamt} <!-- 가산금 -->
, #{sumAmt} <!-- 합계 금액 -->
, #{lastAmt} <!-- 최종 금액 -->
, #{dudtAftrAmt} <!-- 납기 후 금액 -->
, #{taxNo} <!-- 납세 번호 -->
, #{epayno} <!-- 전자납부번호 -->
@ -550,10 +550,10 @@
, UNDLVR_RSN_NM = #{undlvrRsnNm} <!-- 미배달 사유 명 -->
, ACTL_RCPN_NM = #{actlRcpnNm} <!-- 실제 수령인 명 -->
, RCPN_REL_NM = #{rcpnRelNm} <!-- 수령인 관계 명 -->
, SNDNG_DTL_STTS_CD = #{sndngDtlSttsCd} <!-- 발송 상세 상태 코드 -->
, SNDNG_DTL_STTS_CD= #{sndngDtlSttsCd} <!-- 발송 상세 상태 코드 -->
, BFR_SNDNG_DTL_STTS_CD = #{bfrSndngDtlSttsCd} <!-- 전 발송 상세 상태 코드 -->
, BFR_DLVR_YMD = #{bfrDlvrYmd} <!-- 전 배달 일자 -->
, BFR_DLVR_HR = #{bfrDlvrHr} <!-- 전 배달 시간 -->
, BFR_DLVR_TM = #{bfrDlvrTm} <!-- 전 배달 시각 -->
, SNDNG_RCVMT_CD = #{sndngRcvmtCd} <!-- 발송 수납 코드 -->
, ADDR_CHG_CD = #{addrChgCd} <!-- 주소 변경 코드 -->
, CRDN_DT = #{crdnDt} <!-- 단속 일시 -->
@ -568,7 +568,7 @@
, FFNLG_AMT = #{ffnlgAmt} <!-- 과태료 금액 -->
, PCPTAX = #{pcptax} <!-- 본세 -->
, ADAMT = #{adamt} <!-- 가산금 -->
, SUM_AMT = #{sumAmt} <!-- 합계 금액 -->
, LAST_AMT = #{lastAmt} <!-- 최종 금액 -->
, DUDT_AFTR_AMT = #{dudtAftrAmt} <!-- 납기 후 금액 -->
, TAX_NO = #{taxNo} <!-- 납세 번호 -->
, EPAYNO = #{epayno} <!-- 전자납부번호 -->
@ -669,7 +669,7 @@
, FFNLG_AMT = #{ffnlgAmt} <!-- 과태료 금액 -->
, PCPTAX = #{pcptax} <!-- 본세 -->
, ADAMT = #{adamt} <!-- 가산금 -->
, SUM_AMT = #{sumAmt} <!-- 합계 금액 -->
, LAST_AMT = #{lastAmt} <!-- 최종 금액 -->
, DUDT_AFTR_AMT = #{dudtAftrAmt} <!-- 납기 후 금액 -->
, TAX_NO = #{taxNo} <!-- 납세 번호 -->
, EPAYNO = #{epayno} <!-- 전자납부번호 -->
@ -775,7 +775,7 @@
, SD.FFNLG_AMT <!-- 과태료 금액 -->
, SD.PCPTAX <!-- 본세 -->
, SD.ADAMT <!-- 가산금 -->
, SD.SUM_AMT <!-- 합계 금액 -->
, SD.LAST_AMT <!-- 최종 금액 -->
, SD.REG_DT <!-- 등록 일시 -->
, SD.RGTR <!-- 등록자 -->
, (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = SD.RGTR) AS RGTR_NM <!-- 등록자 명 -->
@ -970,7 +970,7 @@
, SD.SNDNG_DTL_STTS_CD <!-- 발송 상세 상태 코드 -->
, SD.BFR_SNDNG_DTL_STTS_CD <!-- 전 발송 상세 상태 코드 -->
, SD.BFR_DLVR_YMD <!-- 전 배달 일자 -->
, SD.BFR_DLVR_HR <!-- 전 배달 시간 -->
, SD.BFR_DLVR_TM <!-- 전 배달 시각 -->
, S.SNDNG_ID <!-- 발송 ID -->
, S.SGG_CD <!-- 시군구 코드 -->
, S.TASK_SE_CD <!-- 업무 구분 코드 -->
@ -1039,7 +1039,7 @@
<update id="updateSndbk" parameterType="cokr.xit.fims.sndb.SndngDtl">/* 발송상세의 반송 정보 수정(sndngDtlMapper.updateSndbk) */
UPDATE TB_SNDNG_DTL
SET BFR_DLVR_YMD = DLVR_YMD <!-- 전 배달 일자 -->
, BFR_DLVR_HR = DLVR_TM <!-- 전 배달 시간 -->
, BFR_DLVR_TM = DLVR_TM <!-- 전 배달 시각 -->
, DLVR_YMD = #{dlvrYmd} <!-- 배달 일자 -->
, DLVR_TM = #{dlvrTm} <!-- 배달 시각 -->
, UNDLVR_RSN_CD = #{undlvrRsnCd} <!-- 미배달 사유 코드 -->
@ -1063,7 +1063,7 @@
UPDATE TB_SNDNG_DTL
SET BFR_SNDNG_DTL_STTS_CD = NULL <!-- 전 발송 상세 상태 코드 -->
, BFR_DLVR_YMD = NULL <!-- 전 배달 일자 -->
, BFR_DLVR_HR = NULL <!-- 전 배달 시간 -->
, BFR_DLVR_TM = NULL <!-- 전 배달 시간 -->
, DLVR_YMD = #{dlvrYmd} <!-- 배달 일자 -->
, DLVR_TM = #{dlvrTm} <!-- 배달 시각 -->
, UNDLVR_RSN_CD = NULL <!-- 미배달 사유 코드 -->

@ -179,7 +179,7 @@
, SD.FFNLG_AMT <!-- 과태료 금액 -->
, SD.PCPTAX <!-- 본세 -->
, SD.ADAMT <!-- 가산금 -->
, SD.SUM_AMT <!-- 합계 금액 -->
, SD.LAST_AMT <!-- 최종 금액 -->
, SD.RCPN_NM <!-- 수령인 명 -->
, SD.RCPN_BRDT <!-- 수령인 생년월일 -->
, SD.RCPN_ADDR <!-- 수령인 주소 -->

@ -93,7 +93,7 @@
, L.RCVMT_ADAMT <!-- 수납 가산금 -->
, L.RDAMT_PCPTAX <!-- 감액 본세 -->
, L.RDAMT_ADAMT <!-- 감액 가산금 -->
, L.SUM_AMT <!-- 합계 금액 -->
, L.LAST_AMT <!-- 최종 금액 -->
, (L.LEVY_PCPTAX + L.LEVY_ADAMT) AS LEVY_AMT <!-- 부과 금액 -->
, (L.RCVMT_PCPTAX + L.RCVMT_ADAMT) AS RCVMT_AMT <!-- 수납 금액 -->
, (L.RDAMT_PCPTAX + L.RDAMT_ADAMT) AS REDUC_AMT <!-- 감액 금액 -->
@ -317,7 +317,7 @@ LEFT OUTER JOIN TB_LEVY L ON (C.CRDN_ID = L.CRDN_ID AND L.DEL_YN = '
<when test="by == 'towngYn'">IFNULL(CA.TOWNG_YN,'N')</when>
<when test="by == 'szrYmd'">L.SZR_YMD</when>
<when test="by == 'szrRmvYmd'">L.SZR_RMV_YMD</when>
<when test="by == 'sumAmt'">L.SUM_AMT</when>
<when test="by == 'lastAmt'">L.LAST_AMT</when>
<when test="by == 'minapAmt'">GET_MINAP_AMT(C.CRDN_ID)</when>
<when test="by == 'levyAmt'">(L.LEVY_PCPTAX+L.LEVY_ADAMT)</when>
<when test="by == 'levyPcptax'">L.LEVY_PCPTAX</when>

@ -22,7 +22,7 @@
LEFT OUTER JOIN TB_LEVY L ON (C.CRDN_ID = L.CRDN_ID AND L.DEL_YN = 'N')
</sql>
<select id="selectCrdnInfo" parameterType="String" resultType="dataobject">/* 개별총정보 조회(sprt02Mapper.selectCrdnInfo) */
<select id="selectCrdnInfo" parameterType="String" resultType="dataobject">/* 개별총정보 조회(TotalInfoMapper.selectCrdnInfo) */
<include refid="selectCrdn" />
WHERE C.CRDN_ID = #{crdnId} <!-- 단속 ID -->
</select>
@ -31,11 +31,11 @@
SELECT C.CRDN_ID <!-- 단속 ID -->
, C.SGG_CD <!-- 시군구 코드 -->
, C.TASK_SE_CD <!-- 업무 구분 코드 -->
, (SELECT GET_CODE_NM('FIM054', C.TASK_SE_CD) FROM DUAL) AS TASK_SE_NM <!-- 업무 구분 코드 명 -->
, (GET_CODE_NM('FIM054', C.TASK_SE_CD)) AS TASK_SE_NM <!-- 업무 구분 코드 명 -->
, C.CRDN_REG_SE_CD <!-- 단속 등록 구분 코드 -->
, (SELECT GET_CODE_NM('FIM026', C.CRDN_REG_SE_CD) FROM DUAL) AS CRDN_REG_SE_NM <!-- 단속 등록 구분 명 -->
, (GET_CODE_NM('FIM026', C.CRDN_REG_SE_CD)) AS CRDN_REG_SE_NM <!-- 단속 등록 구분 명 -->
, C.CRDN_INPT_SE_CD <!-- 단속 입력 구분 코드 -->
, (SELECT GET_CODE_NM('FIM003', C.CRDN_INPT_SE_CD) FROM DUAL) AS CRDN_INPT_SE_NM <!-- 단속 입력 구분 명 -->
, (GET_CODE_NM('FIM003', C.CRDN_INPT_SE_CD)) AS CRDN_INPT_SE_NM <!-- 단속 입력 구분 명 -->
, C.CVLCPT_LINK_YN <!-- 민원 연계 여부 -->
, C.CVLCPT_LINK_TBL_NM <!-- 민원 연계 테이블 명 -->
, C.CVLCPT_LINK_ID <!-- 민원 연계 ID -->
@ -62,7 +62,7 @@
, C.OPNN_SBMSN_YN <!-- 의견 제출 여부 -->
, C.ETC_CN <!-- 기타 내용 -->
, C.CRDN_STTS_CD <!-- 단속 상태 코드 -->
, (SELECT GET_CODE_NM('FIM010', C.CRDN_STTS_CD) FROM DUAL) AS CRDN_STTS_NM <!-- 단속 상태 명 -->
, (GET_CODE_NM('FIM010', C.CRDN_STTS_CD)) AS CRDN_STTS_NM <!-- 단속 상태 명 -->
, C.CRDN_STTS_CHG_DT <!-- 단속 상태 변경 일시 -->
, C.BFR_CRDN_ID <!-- 이전 단속 ID -->
, C.DEL_YN <!-- 삭제 여부 -->
@ -77,45 +77,45 @@
, C.DEL_RSN <!-- 삭제 사유 -->
, (SELECT USER_NM FROM TB_USER X WHERE X.USER_ID = C.DLTR) AS DLTR_NM <!-- 삭제자 명 -->
, CA.CRDN_SE_CD <!-- 단속 구분 코드 -->
, (SELECT GET_CODE_NM('FIM002', CA.CRDN_SE_CD) FROM DUAL) AS CRDN_SE_NM <!-- 단속 구분 명 -->
, (GET_CODE_NM('FIM002', CA.CRDN_SE_CD)) AS CRDN_SE_NM <!-- 단속 구분 명 -->
, CA.TEAM_ID <!-- 조 ID -->
, CA.DTL_CRDN_PLC <!-- 상세 단속 장소 -->
, CA.CRDN_SPAREA_CD <!-- 단속 특별구역 코드 -->
, (SELECT GET_CODE_NM('FIM007', CA.CRDN_SPAREA_CD) FROM DUAL) AS CRDN_SPAREA_NM <!-- 단속 특별구역 명 -->
, (GET_CODE_NM('FIM007', CA.CRDN_SPAREA_CD)) AS CRDN_SPAREA_NM <!-- 단속 특별구역 명 -->
, CA.CRDN_BGNG_TM <!-- 단속 시작 시각 -->
, CA.CRDN_END_TM <!-- 단속 종료 시각 -->
, CA.CRDN_SN <!-- 단속 일련번호 -->
, CA.MOSC_X <!-- 모자이크 X -->
, CA.MOSC_Y <!-- 모자이크 Y -->
, CA.TOWNG_YN <!-- 견인 여부 -->
, (SELECT GET_CODE_NM('FIM053', CA.TOWNG_YN) FROM DUAL) AS TOWNG_NM <!-- 견인 여부 명 -->
, (GET_CODE_NM('FIM053', CA.TOWNG_YN)) AS TOWNG_NM <!-- 견인 여부 명 -->
, CA.USE_FUEL_CD <!-- 사용 연료 코드 -->
, (SELECT GET_CODE_NM('LVS005', CA.USE_FUEL_CD) FROM DUAL) AS USE_FUEL_NM <!-- 사용 연료 명 -->
, (GET_CODE_NM('LVS005', CA.USE_FUEL_CD)) AS USE_FUEL_NM <!-- 사용 연료 명 -->
, CA.FFNLG_CARMDL_CD <!-- 과태료 차종 코드 -->
, (SELECT GET_CODE_NM('FIM009', CA.FFNLG_CARMDL_CD) FROM DUAL) AS FFNLG_CARMDL_NM <!-- 과태료 차종 명 -->
, (GET_CODE_NM('FIM009', CA.FFNLG_CARMDL_CD)) AS FFNLG_CARMDL_NM <!-- 과태료 차종 명 -->
, CA.PRK_PSBLTY_RSLT_CD <!-- 주차 가능 결과 코드 -->
, (SELECT GET_CODE_NM('FIM034', CA.PRK_PSBLTY_RSLT_CD) FROM DUAL) AS PRK_PSBLTY_RSLT_NM <!-- 주차 가능 결과 명 -->
, (GET_CODE_NM('FIM034', CA.PRK_PSBLTY_RSLT_CD)) AS PRK_PSBLTY_RSLT_NM <!-- 주차 가능 결과 명 -->
, CA.VLTN_NMTM <!-- 위반 횟수 -->
, CA.OVTM_YN <!-- 시간초과 여부 -->
, (SELECT GET_CODE_NM('CMN006', CA.OVTM_YN) FROM DUAL) AS OVTM_NM <!-- 시간초과 여부 명 -->
, (GET_CODE_NM('CMN006', CA.OVTM_YN)) AS OVTM_NM <!-- 시간초과 여부 명 -->
, CA.OVTM_PRTTN_YN <!-- 시간초과 분할 여부 -->
, (SELECT GET_CODE_NM('CMN006', CA.OVTM_PRTTN_YN) FROM DUAL) AS OVTM_PRTTN_NM <!-- 시간초과 분할 여부 명 -->
, (GET_CODE_NM('CMN006', CA.OVTM_PRTTN_YN)) AS OVTM_PRTTN_NM <!-- 시간초과 분할 여부 명 -->
, V.VLTN_ARTCL <!-- 위반 항목 -->
, P.RTPYR_ID <!-- 납부자 ID -->
, P.RTPYR_INPT_SE_CD <!-- 납부자 입력 구분 코드 -->
, (SELECT GET_CODE_NM('FIM015', P.RTPYR_INPT_SE_CD) FROM DUAL) AS RTPYR_INPT_SE_NM <!-- 납부자 입력 구분 명 -->
, (GET_CODE_NM('FIM015', P.RTPYR_INPT_SE_CD)) AS RTPYR_INPT_SE_NM <!-- 납부자 입력 구분 명 -->
, P.RTPYR_SE_CD <!-- 납부자 구분 코드 -->
, (SELECT GET_CODE_NM('FIM011', P.RTPYR_SE_CD) FROM DUAL) AS RTPYR_SE_NM <!-- 납부자 구분 명 -->
, (GET_CODE_NM('FIM011', P.RTPYR_SE_CD)) AS RTPYR_SE_NM <!-- 납부자 구분 명 -->
, P.RTPYR_NO <!-- 납부자 번호 -->
, P.RTPYR_NM <!-- 납부자 명 -->
, P.RTPYR_TELNO <!-- 납부자 전화번호 -->
, P.RTPYR_MBL_TELNO <!-- 납부자 휴대 전화번호 -->
, P.RTPYR_EML <!-- 납부자 이메일 -->
, P.RTPYR_STTS_CD <!-- 납부자 상태 코드 -->
, (SELECT GET_CODE_NM('FIM014', P.RTPYR_STTS_CD) FROM DUAL) AS RTPYR_STTS_NM <!-- 납부자 상태 명 -->
, (GET_CODE_NM('FIM014', P.RTPYR_STTS_CD)) AS RTPYR_STTS_NM <!-- 납부자 상태 명 -->
, PA.ADDR_SN <!-- 주소 일련번호 -->
, PA.ADDR_SE_CD <!-- 주소 구분 코드 -->
, (SELECT GET_CODE_NM('FIM013', PA.ADDR_SE_CD) FROM DUAL) AS ADDR_SE_NM <!-- 주소 구분 명 -->
, (GET_CODE_NM('FIM013', PA.ADDR_SE_CD)) AS ADDR_SE_NM <!-- 주소 구분 명 -->
, PA.ZIP <!-- 우편번호 -->
, PA.ADDR <!-- 주소 -->
, PA.DTL_ADDR <!-- 상세 주소 -->
@ -142,10 +142,11 @@
, CC.CVLCPT_PRCS_CMPTN_DT <!-- 민원 처리 완료 일시 -->
, CC.CVLCPT_PRCS_PIC <!-- 민원 처리 담당자 -->
, L.LEVY_ID <!-- 부과 ID -->
, (CONCAT(L.FYR, '-', L.LEVY_NO)) AS GOJI_NO <!-- 고지번호 -->
, (L.LEVY_PCPTAX + L.LEVY_ADAMT) AS LEVY_AMT <!-- 부과 금액 -->
, (L.RCVMT_PCPTAX + L.RCVMT_ADAMT) AS RCVMT_AMT <!-- 수납 금액 -->
, (L.RDAMT_PCPTAX + L.RDAMT_ADAMT) AS RDAMT_AMT <!-- 감액 금액 -->
, (CONCAT(L.FYR, '-', L.LEVY_NO)) AS GOJI_NO <!-- 고지번호 -->
, (L.LEVY_PCPTAX + L.LEVY_ADAMT) AS LEVY_AMT <!-- 부과 금액 -->
, (L.RCVMT_PCPTAX + L.RCVMT_ADAMT) AS RCVMT_AMT <!-- 수납 금액 -->
, (L.RDAMT_PCPTAX + L.RDAMT_ADAMT) AS RDAMT_AMT <!-- 감액 금액 -->
, L.LAST_AMT <!-- 최종 금액 -->
FROM TB_CRDN C
INNER JOIN TB_CRDN_ADI CA ON (C.CRDN_ID = CA.CRDN_ID)
INNER JOIN TB_VLTN V ON (C.VLTN_ID = V.VLTN_ID)
@ -155,12 +156,12 @@
LEFT OUTER JOIN TB_LEVY L ON (C.CRDN_ID = L.CRDN_ID AND L.DEL_YN = 'N')
</sql>
<select id="selectCrdnPayerInfo" parameterType="map" resultType="dataobject">/* 개별총정보 조회(sprt02Mapper.selectCrdnPayerInfo) */
<select id="selectCrdnPayerInfo" parameterType="map" resultType="dataobject">/* 개별총정보 조회(TotalInfoMapper.selectCrdnPayerInfo) */
<include refid="selectCrdnPayer" />
WHERE C.CRDN_ID = #{crdnId} <!-- 단속 ID -->
</select>
<update id="updateCrdnAtchFileCnt" parameterType="map">/* 단속 첨부 파일갯수 수정 (sprt02Mapper.updateCrdnAtchFileCnt) */
<update id="updateCrdnAtchFileCnt" parameterType="map">/* 단속 첨부 파일갯수 수정 (TotalInfoMapper.updateCrdnAtchFileCnt) */
UPDATE TB_CRDN
SET ATCH_FILE_CNT= #{crdn.atchFileCnt} <!-- 첨부 파일 수 -->
, MDFCN_DT = #{crdn.lastModified} <!-- 수정 일시 -->

Loading…
Cancel
Save