From a6f20aa450dd316409edbf164c20d6ad77b2607a Mon Sep 17 00:00:00 2001 From: jjh Date: Wed, 3 Jan 2024 14:31:08 +0900 Subject: [PATCH] =?UTF-8?q?=EC=82=AC=EC=A0=84=ED=86=B5=EC=A7=80=20?= =?UTF-8?q?=EB=B0=9C=EC=86=A1=20=EB=8C=80=EC=83=81=20=EC=88=98=EC=A0=95.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xit/fims/levy/service/bean/LevyBean.java | 2 +- .../cokr/xit/fims/sndb/dao/SndngMapper.java | 15 +- .../xit/fims/sndb/service/SndngService.java | 17 +- .../xit/fims/sndb/service/bean/SndngBean.java | 292 +++++++++++++++++- .../sndb/service/bean/SndngServiceBean.java | 10 +- .../xit/fims/sndb/web/Sndb01Controller.java | 37 +-- .../cokr/xit/fims/task/web/DpvController.java | 9 +- .../mapper/fims/cmmn/crdnSttsHstry-mapper.xml | 24 +- .../sql/mapper/fims/cmmn/task-mapper.xml | 4 +- .../sql/mapper/fims/sndb/sndng-mapper.xml | 4 +- .../WEB-INF/jsp/fims/sndb/sndb01020-info.jsp | 21 +- .../WEB-INF/jsp/fims/sndb/sndb01060-info.jsp | 188 +++++------ 12 files changed, 453 insertions(+), 170 deletions(-) diff --git a/src/main/java/cokr/xit/fims/levy/service/bean/LevyBean.java b/src/main/java/cokr/xit/fims/levy/service/bean/LevyBean.java index f809e07b..157bf5de 100644 --- a/src/main/java/cokr/xit/fims/levy/service/bean/LevyBean.java +++ b/src/main/java/cokr/xit/fims/levy/service/bean/LevyBean.java @@ -138,7 +138,7 @@ public class LevyBean extends AbstractComponent { rtnMsg = "[F] 작업 중 단속 상태가 " + crdnInfo.string("CRDN_STTS_NM") + " 자료가 있습니다."; return rtnMsg; } - if (!crdnInfo.string("RTPYR_ID").equals("")) { + if (crdnInfo.string("RTPYR_ID").equals("")) { rtnMsg = "[F] 작업 중 납부자 정보가 없는 자료가 있습니다."; return rtnMsg; } diff --git a/src/main/java/cokr/xit/fims/sndb/dao/SndngMapper.java b/src/main/java/cokr/xit/fims/sndb/dao/SndngMapper.java index 7f92b4e9..c3e6afff 100644 --- a/src/main/java/cokr/xit/fims/sndb/dao/SndngMapper.java +++ b/src/main/java/cokr/xit/fims/sndb/dao/SndngMapper.java @@ -42,9 +42,9 @@ public interface SndngMapper extends AbstractMapper { return !wrngTrgtInfo.isEmpty() ? wrngTrgtInfo.get(0) : null; } - /**지정한 조건에 따라 계도장 발송 대상의 단속 ID들을 반환한다. + /**지정한 조건에 따라 계도장 발송 대상의 단속ID 들을 반환한다. * @param req 발송 대장 조회 조건 - * @return 계도장 발송 대상 객체 목록 + * @return 계도장 발송 대상 단속ID 목록 */ List selectWrngTrgtCrdnIDs(SndbQuery req); @@ -54,7 +54,7 @@ public interface SndngMapper extends AbstractMapper { */ List selectAdvntceTrgtList(SndbQuery req); - /**지정한 조건에 따라 사전 통보 발송 대상 객체들을 반환한다. + /**지정한 조건에 따라 사전통지 발송 대상 객체들을 반환한다. * @param req 발송 대장 조회 조건 * @return 발송 대장 객체 목록 */ @@ -66,6 +66,15 @@ public interface SndngMapper extends AbstractMapper { return !InfoSndngTrgt.isEmpty() ? InfoSndngTrgt.get(0) : null; } + /**지정한 조건에 따라 사전통지 발송 대상의 단속ID 들을 반환한다. + * @param req 발송 대장 조회 조건 + * @return 사전통지 발송 대상 단속ID 목록 + */ + List selectAdvntceTrgtCrdnIDs(SndbQuery req); + + + + /**지정한 조건에 따라 발송 대장 목록을 조회하여 반환한다.
* @param req 발송 대장 조회 조건 * @return 발송 대장 목록 diff --git a/src/main/java/cokr/xit/fims/sndb/service/SndngService.java b/src/main/java/cokr/xit/fims/sndb/service/SndngService.java index a10989d4..a8408061 100644 --- a/src/main/java/cokr/xit/fims/sndb/service/SndngService.java +++ b/src/main/java/cokr/xit/fims/sndb/service/SndngService.java @@ -53,11 +53,6 @@ public interface SndngService { */ List getWrngSndngDtls(SndbQuery req); - - - - - /**지정한 조건에 따라 사전통지 발송 대상 목록을 조회하여 반환한다. * @param req 발송 대장 조회 조건 * @return 발송 대장 목록 @@ -70,14 +65,14 @@ public interface SndngService { */ List getAdvntceTrgts(SndbQuery req); - /**계도장 발송 대장 정보를 등록한다. - * @param sndng 발송 대장 + /**사전통지 발송 대상을 조회하여 발송 대장에 등록한다. + * @param req 계도장 발송 대상 조회, sndng 발송 대장 * @return 저장 여부 *
  • 저장됐으면 true
  • *
  • 그렇지 않으면 false
  • *
*/ - String createAdvntceSndng(Sndng sndng); + String createAdvntceSndngList(SndbQuery req, Sndng sndng); /**지정한 조건에 따라 사전통지 발송 대장 목록을 조회하여 반환한다. * @param req 발송 대장 조회 조건 @@ -91,6 +86,12 @@ public interface SndngService { */ List getAdvntceSndngDtls(SndbQuery req); + + + + + + /**발송 대장 정보를 등록한다. * @param sndng 발송 대장 * @return 저장 여부 diff --git a/src/main/java/cokr/xit/fims/sndb/service/bean/SndngBean.java b/src/main/java/cokr/xit/fims/sndb/service/bean/SndngBean.java index 11920fff..72eaf872 100644 --- a/src/main/java/cokr/xit/fims/sndb/service/bean/SndngBean.java +++ b/src/main/java/cokr/xit/fims/sndb/service/bean/SndngBean.java @@ -159,17 +159,21 @@ public class SndngBean extends AbstractComponent { sndng.setLevyBgngYmd(null); // 부과 시작 일자 sndng.setLevyEndYmd(null); // 부과 종료 일자 sndng.setSndngEndYmd(null); // 발송 종료 일자 + if (sndng.getTnocs() == 1) { sndng.setSndngRegSeCd("02"); // 발송 등록 구분 코드 - 개별 } else { sndng.setSndngRegSeCd("01"); // 발송 등록 구분 코드 - 일괄 } + if (sndng.getResndYN() == null) { sndng.setResndYN("N"); // 재발송 여부 } + if (sndng.getDelYN() == null) { sndng.setDelYN("N"); // 삭제 여부 } + sndng.setSndngSttsCd("00"); // 발송 상태 코드(FIM049) - 00 발송 준비 // 발송 등록 @@ -204,8 +208,26 @@ public class SndngBean extends AbstractComponent { boolean rtnScs = false; // DB 처리 결과 String rtnMsg = "[F] "; // 처리 결과 메시지 + // 단속, 납부자 대장을 조회 한다. DataObject crdnPayerInfo = sndngMapper.selectCrdnPayerInfo(crdnId); + if (crdnPayerInfo == null) { + throw new RuntimeException("

계도장 발송상세 등록 작업중 단속 정보가 확인되지 않았습니다.

" + + "

" + + "단속 ID : " + crdnId + + "

" + ); // 예외를 발생시켜서 DB Rollback + } + if (crdnPayerInfo.string("RTPYR_ID").equals("")) { + throw new RuntimeException("

계도장 발송상세 등록 작업중 납부자 정보가 확인되지 않았습니다.

" + + "

" + + "단속 ID : " + crdnId + + "
단속일시 : " + crdnPayerInfo.string("CRDN_YMD_TM_MASK") + + "
차량번호 : " + crdnPayerInfo.string("VHRNO") + + "

" + ); // 예외를 발생시켜서 DB Rollback + } + SndngDtl sndngDtl = new SndngDtl(); sndngDtl.setSndngId(sndng.getSndngId()); // 발송 ID @@ -232,7 +254,7 @@ public class SndngBean extends AbstractComponent { rtnScs = sndngDtlMapper.insert(sndngDtl); // 발송 상세 등록 if (!rtnScs) { - throw new RuntimeException("발송 상세 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback + throw new RuntimeException("발송상세 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback } // 단속 상태 코드를 수정한다. @@ -248,7 +270,7 @@ public class SndngBean extends AbstractComponent { // 단속 상태 이력(TB_CRDN_STTS_HSTRY) 대장에 등록하고, 단속(TB_CRDN) 대장을 수정한다. rtnScs = crdnSttsHstryBean.createHstryUpdateCrdnSttsCd(crdnSttsHstry); if (!rtnScs) { - throw new RuntimeException("발송 상세 등록 중 단속 대장의 단속상태 변경에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback + throw new RuntimeException("발송상세 등록 작업중 단속 대장의 단속상태 변경에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback } } @@ -294,6 +316,272 @@ public class SndngBean extends AbstractComponent { return sndngMapper.selectAdvntceTrgts(req); } + /**사전통지 발송 대상을 조회하여 발송 대장에 등록한다. + * @param req 사전통지 발송 대상 조회, sndng 발송 대장 + * @return 저장 여부 + *
  • 저장됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + public String createAdvntceSndngList(SndbQuery req, Sndng sndng) { + // 변수 선언 + boolean rtnScs = false; // DB 처리 결과 + String rtnMsg = "[F] "; // 처리 결과 메시지 + + List advntceTrgtList = sndngMapper.selectAdvntceTrgtCrdnIDs(req);; + + // 조회 건수 확인 + if (advntceTrgtList == null || advntceTrgtList.size() < 1) { + rtnMsg = "[F] 작업 중 대상 자료가 존재하지 않습니다."; + return rtnMsg; + } + if (sndng.getTnocs() != advntceTrgtList.size()) { + rtnMsg = "[F] 조회된 총 건수와 대상 건수가 다릅니다."; + return rtnMsg; + } + + // 사용자 정보 + DataObject userInfo = userBean.getUserInfo(currentUser().getId()); + + // 발송 대장에 등록한다. + sndng.setDeptCd(userInfo.string("DEPT_CD")); // 부서 코드 + sndng.setVltnId(sndng.getVltnId()); // 위반 ID + sndng.setLevyBgngYmd(null); // 부과 시작 일자 + sndng.setLevyEndYmd(null); // 부과 종료 일자 + + if (sndng.getTnocs() == 1) { + sndng.setSndngRegSeCd("02"); // 발송 등록 구분 코드 - 개별 + } else { + sndng.setSndngRegSeCd("01"); // 발송 등록 구분 코드 - 일괄 + } + + if (sndng.getResndYN() == null) { + sndng.setResndYN("N"); // 재발송 여부 + } + + if (sndng.getDelYN() == null) { + sndng.setDelYN("N"); // 삭제 여부 + } + + sndng.setSndngSttsCd("00"); // 발송 상태 코드(FIM049) - 00 발송 준비 + + // 발송(TB_SNDNG) 등록 + rtnScs = sndngMapper.insert(sndng); + if (!rtnScs) { + throw new RuntimeException("발송 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback + } + + // 발송 상세 대장에 등록한다. + for (int iLoop = 0; iLoop < advntceTrgtList.size(); iLoop++) { + rtnMsg = createAdvntceSndngDtl(sndng, advntceTrgtList.get(iLoop).string("CRDN_ID")); + // 메시지 확인 + if (!rtnMsg.contains("[S]")) { + throw new RuntimeException("사전통지 발송 등록 작업중 발송상세 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback + } + } + + rtnMsg = "[S] 작업이 정상 처리 되었습니다."; + + return rtnMsg; + } + + /**사전통지 발송 상세 정보를 등록한다. + * @param sndngDtl 발송 상세 + * @return 저장 여부 + *
  • 저장됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + public String createAdvntceSndngDtl(Sndng sndng, String crdnId) { + // 변수 선언 + boolean rtnScs = false; // DB 처리 결과 + String rtnMsg = "[F] "; // 처리 결과 메시지 + + // 단속, 납부자 대장을 조회 한다. + DataObject crdnPayerInfo = sndngMapper.selectCrdnPayerInfo(crdnId); + + if (crdnPayerInfo == null) { + throw new RuntimeException("

사전통지 발송상세 등록 작업중 단속 정보가 확인되지 않았습니다.

" + + "

" + + "단속 ID : " + crdnId + + "

" + ); // 예외를 발생시켜서 DB Rollback + } + if (crdnPayerInfo.string("RTPYR_ID").equals("")) { + throw new RuntimeException("

사전통지 발송상세 등록 작업중 납부자 정보가 확인되지 않았습니다.

" + + "

" + + "단속 ID : " + crdnId + + "
단속일시 : " + crdnPayerInfo.string("CRDN_YMD_TM_MASK") + + "
차량번호 : " + crdnPayerInfo.string("VHRNO") + + "

" + ); // 예외를 발생시켜서 DB Rollback + } + + // 부과 ID가 없다면 부과대장 등록 + if (crdnPayerInfo.string("LEVY_ID").equals("")) { + Levy levy = new Levy(); + + levy.setCrdnId(crdnPayerInfo.string("CRDN_ID")); // 단속 ID + levy.setLevyYmd(sndng.getSndngYmd()); // 부과 일자 + levy.setFrstDudtYmd(sndng.getSndngEndYmd()); // 최초 납기 일자 + levy.setDudtYmd(sndng.getSndngEndYmd()); // 납기 일자 + + rtnMsg = levyBean.createRductLevy(levy); + if (!rtnMsg.contains("[S]")) { + throw new RuntimeException(rtnMsg.replace("[F]", "사전통지 발송상세 등록 작업중 ")); // 예외를 발생시켜서 DB Rollback + } + + // 단속, 납부자 정보 재조회 ///////////////////////////////////////// + crdnPayerInfo = sndngMapper.selectCrdnPayerInfo(crdnId); + } else { + if (crdnPayerInfo.number("LEVY_ADAMT").intValue() != 0) { + throw new RuntimeException("

발송상세 등록 작업중 부과 가산금액이 0원이 아닙니다.

" + + "

" + + "단속ID : " + crdnPayerInfo.string("CRDN_ID") + + "
단속일시 : " + crdnPayerInfo.string("CRDN_YMD_TM_MASK") + + "
차량번호 : " + crdnPayerInfo.string("VHRNO") + + "

" + ); // 예외를 발생시켜서 DB Rollback + } + if (crdnPayerInfo.number("LEVY_PCPTAX").intValue() != crdnPayerInfo.number("SUM_AMT").intValue()) { + throw new RuntimeException("

발송상세 등록 작업중 본세금액과 합계금액이 다릅니다.

" + + "

" + + "단속ID : " + crdnPayerInfo.string("CRDN_ID") + + "
단속일시 : " + crdnPayerInfo.string("CRDN_YMD_TM_MASK") + + "
차량번호 : " + crdnPayerInfo.string("VHRNO") + + "
본세금액 : " + crdnPayerInfo.string("LEVY_PCPTAX") + + "
합계금액 : " + crdnPayerInfo.string("SUM_AMT") + + "

" + ); // 예외를 발생시켜서 DB Rollback + } + + if ("BPV,PVS".contains(crdnPayerInfo.string("TASK_SE_CD"))) { + // 사전 감경금액과 부과 본세금액 확인 + if (crdnPayerInfo.number("ADVNTCE_AMT").intValue() != crdnPayerInfo.number("LEVY_PCPTAX").intValue()) { + throw new RuntimeException("

발송상세 등록 작업중 사전 감경금액과 부과 본세금액이 다릅니다.

" + + "

" + + "단속ID : " + crdnPayerInfo.string("CRDN_ID") + + "
단속일시 : " + crdnPayerInfo.string("CRDN_YMD_TM_MASK") + + "
차량번호 : " + crdnPayerInfo.string("VHRNO") + + "
사전 감경금액 : " + crdnPayerInfo.string("ADVNTCE_AMT") + + "
부과 본세금액 : " + crdnPayerInfo.string("LEVY_PCPTAX") + + "

" + ); // 예외를 발생시켜서 DB Rollback + } + + // 부과일자, 최초납기일자, 납기일자를 변경한다. + Levy levy = new Levy(); + + levy.setLevyId(crdnPayerInfo.string("LEVY_ID")); // 부과 ID + levy.setLevyYmd(sndng.getSndngYmd()); // 부과 일자 + levy.setFrstDudtYmd(sndng.getSndngEndYmd()); // 최초 납기 일자 + 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()); // 합계 금액 + + rtnMsg = levyBean.updateRductLevyYmd(levy); + if (!rtnMsg.contains("[S]")) { + throw new RuntimeException(rtnMsg.replace("[F]", "사전통지 발송상세 등록 작업중 ")); // 예외를 발생시켜서 DB Rollback + } + } + } + + SndngDtl sndngDtl = new SndngDtl(); + + sndngDtl.setSndngId(sndng.getSndngId()); // 발송 ID + sndngDtl.setCrdnId(crdnPayerInfo.string("CRDN_ID")); // 단속 ID + sndngDtl.setSndngSeCd(sndng.getSndngSeCd()); // 발송 구분 코드 + sndngDtl.setSndngYmd(sndng.getSndngYmd()); // 발송 일자 + sndngDtl.setSndngEndYmd(sndng.getSndngEndYmd()); // 발송 종료 일자 + sndngDtl.setRtpyrNm(crdnPayerInfo.string("RTPYR_NM")); // 납부자 명 + sndngDtl.setRtpyrBrdt(crdnPayerInfo.string("RTPYR_BRDT")); // 납부자 생년월일 + sndngDtl.setRtpyrAddr(crdnPayerInfo.string("ADDR")); // 납부자 주소 + sndngDtl.setRtpyrDtlAddr(crdnPayerInfo.string("DTL_ADDR")); // 납부자 상세 주소 + sndngDtl.setRtpyrZip(crdnPayerInfo.string("ZIP")); // 납부자 우편번호 + sndngDtl.setSndngDtlSttsCd("00"); // 발송 상세 상태 코드 - 00 처리전 + sndngDtl.setVhrno(crdnPayerInfo.string("VHRNO")); // 차량번호 + sndngDtl.setCrdnDt(crdnPayerInfo.string("CRDN_YMD_TM_MASK")); // 단속 일시 + sndngDtl.setCrdnStdgNm(crdnPayerInfo.string("CRDN_STDG_NM")); // 단속 법정동 명 + sndngDtl.setCrdnPlc(crdnPayerInfo.string("CRDN_PLC")); // 단속 장소 + sndngDtl.setFyr(crdnPayerInfo.string("FYR")); // 회계연도 + sndngDtl.setLevyNo(crdnPayerInfo.string("LEVY_NO")); // 부과 번호 + sndngDtl.setLevyYmd(crdnPayerInfo.string("LEVY_YMD")); // 부과 일자 + sndngDtl.setDudtYmd(crdnPayerInfo.string("DUDT_YMD")); // 납기 일자 + 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.setDudtAftrAmt(0); // 납기 후 금액 + sndngDtl.setEpayno(crdnPayerInfo.string("TAX_NO")); // 납세 번호 + sndngDtl.setEpayno(crdnPayerInfo.string("EPAYNO")); // 전자납부번호 + sndngDtl.setBankNm(crdnPayerInfo.string("BANK_NM")); // 은행 명 + sndngDtl.setVrActno(crdnPayerInfo.string("VR_ACTNO")); // 가상 계좌번호 + sndngDtl.setBankNm2(crdnPayerInfo.string("BANK_NM2")); // 은행 명2 + sndngDtl.setVrActno2(crdnPayerInfo.string("VR_ACTNO2")); // 가상 계좌번호2 + sndngDtl.setBankNm3(crdnPayerInfo.string("BANK_NM3")); // 은행 명3 + sndngDtl.setVrActno3(crdnPayerInfo.string("VR_ACTNO3")); // 가상 계좌번호3 + sndngDtl.setBankNm4(crdnPayerInfo.string("BANK_NM4")); // 은행 명4 + sndngDtl.setVrActno4(crdnPayerInfo.string("VR_ACTNO4")); // 가상 계좌번호4 + sndngDtl.setBankNm5(crdnPayerInfo.string("BANK_NM5")); // 은행 명5 + sndngDtl.setVrActno5(crdnPayerInfo.string("VR_ACTNO5")); // 가상 계좌번호5 + sndngDtl.setBankNm6(crdnPayerInfo.string("BANK_NM6")); // 은행 명6 + sndngDtl.setVrActno6(crdnPayerInfo.string("VR_ACTNO6")); // 가상 계좌번호6 + sndngDtl.setBankNm7(crdnPayerInfo.string("BANK_NM7")); // 은행 명7 + sndngDtl.setVrActno7(crdnPayerInfo.string("VR_ACTNO7")); // 가상 계좌번호7 + sndngDtl.setBankNm8(crdnPayerInfo.string("BANK_NM8")); // 은행 명8 + sndngDtl.setVrActno8(crdnPayerInfo.string("VR_ACTNO8")); // 가상 계좌번호8 + sndngDtl.setBankNm9(crdnPayerInfo.string("BANK_NM9")); // 은행 명9 + sndngDtl.setVrActno9(crdnPayerInfo.string("VR_ACTNO9")); // 가상 계좌번호9 + sndngDtl.setBankNm10(crdnPayerInfo.string("BANK_NM10")); // 은행 명10 + sndngDtl.setVrActno10(crdnPayerInfo.string("VR_ACTNO10")); // 가상 계좌번호10 + sndngDtl.setBankNm11(crdnPayerInfo.string("BANK_NM11")); // 은행 명11 + sndngDtl.setVrActno11(crdnPayerInfo.string("VR_ACTNO11")); // 가상 계좌번호11 + sndngDtl.setDelYN("N"); // 삭제 여부 + + rtnScs = sndngDtlMapper.insert(sndngDtl); // 발송 상세 등록 + if (!rtnScs) { + throw new RuntimeException("발송상세 등록에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback + } + + // 단속 상태 이력(TB_CRDN_STTS_HSTRY)을 등록하고, 단속(TB_CRDN) 대장의 단속상태코드를 수정한다. + if ("21,22,23".contains(crdnPayerInfo.string("CRDN_STTS_CD"))) { + CrdnSttsHstry crdnSttsHstry = new CrdnSttsHstry(); + + crdnSttsHstry.setCrdnId(crdnPayerInfo.string("CRDN_ID")); + crdnSttsHstry.setBfrSttsCd(crdnPayerInfo.string("CRDN_STTS_CD")); + crdnSttsHstry.setBfrSttsChgDt(crdnPayerInfo.string("CRDN_STTS_CHG_DT")); + crdnSttsHstry.setCrdnSttsCd("42"); + crdnSttsHstry.setTaskDtlId(sndngDtl.getSndngDtlId()); + crdnSttsHstry.setUseYN("Y"); + + // 단속 상태 이력(TB_CRDN_STTS_HSTRY) 대장에 등록하고, 단속(TB_CRDN) 대장을 수정한다. + rtnScs = crdnSttsHstryBean.createHstryUpdateCrdnSttsCd(crdnSttsHstry); + if (!rtnScs) { + throw new RuntimeException("발송상세 등록 작업중 단속 대장의 단속상태 변경에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback + } + } else if (crdnPayerInfo.string("CRDN_STTS_CD").equals("31")) { + CrdnSttsHstry crdnSttsHstry = new CrdnSttsHstry(); + + crdnSttsHstry.setCrdnId(crdnPayerInfo.string("CRDN_ID")); + crdnSttsHstry.setBfrSttsCd(crdnPayerInfo.string("CRDN_STTS_CD")); + crdnSttsHstry.setBfrSttsChgDt(crdnPayerInfo.string("CRDN_STTS_CHG_DT")); + crdnSttsHstry.setCrdnSttsCd("42"); + crdnSttsHstry.setTaskDtlId(sndngDtl.getSndngDtlId()); + crdnSttsHstry.setUseYN("Y"); + + // 단속 상태 이력(TB_CRDN_STTS_HSTRY) 대장에 등록한다. + rtnScs = crdnSttsHstryBean.create(crdnSttsHstry); + if (!rtnScs) { + throw new RuntimeException("발송상세 등록 작업중 단속 대장의 단속상태 변경에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback + } + } + + rtnMsg = "[S] 작업이 정상 처리 되었습니다."; + + return rtnMsg; + } + diff --git a/src/main/java/cokr/xit/fims/sndb/service/bean/SndngServiceBean.java b/src/main/java/cokr/xit/fims/sndb/service/bean/SndngServiceBean.java index 3ed2dcbc..f738205f 100644 --- a/src/main/java/cokr/xit/fims/sndb/service/bean/SndngServiceBean.java +++ b/src/main/java/cokr/xit/fims/sndb/service/bean/SndngServiceBean.java @@ -60,12 +60,6 @@ public class SndngServiceBean extends AbstractServiceBean implements SndngServic return sndngDtlBean.getSndngDtls(req); } - - - - - - @Override public List getAdvntceTrgtList(SndbQuery req) { return sndngBean.getAdvntceTrgtList(req); @@ -77,8 +71,8 @@ public class SndngServiceBean extends AbstractServiceBean implements SndngServic } @Override - public String createAdvntceSndng(Sndng sndng) { - return sndngBean.createSndng(sndng); + public String createAdvntceSndngList(SndbQuery req, Sndng sndng) { + return sndngBean.createAdvntceSndngList(req, sndng); } @Override diff --git a/src/main/java/cokr/xit/fims/sndb/web/Sndb01Controller.java b/src/main/java/cokr/xit/fims/sndb/web/Sndb01Controller.java index 3db0c61f..85e22617 100644 --- a/src/main/java/cokr/xit/fims/sndb/web/Sndb01Controller.java +++ b/src/main/java/cokr/xit/fims/sndb/web/Sndb01Controller.java @@ -48,21 +48,21 @@ public class Sndb01Controller extends ApplicationController { warningTargetMain = "/010/main.do" // 계고장 발송 대상 메인 화면 , getWarningTargetList = "/010/list.do" // 계고장 발송 대상 목록 조회 , getWarningTargetInfo = "/020/info.do" // 계고장 발송 대상 조회 - , createWarningSendingList = "/020/createWrngSndngList.do" // 계고장 발송 등록 + , createWarningSendingList = "/020/createList.do" // 계고장 발송 등록 , warningSendingMain = "/030/main.do" // 계고장 발송 현황 메인 화면 , getWarningSendingList = "/030/list.do" // 계고장 발송 현황 목록 조회 , getWarningSendingInfo = "/040/info.do" // 계고장 발송 상세 대장 조회 - - - - , advanceNoticeTargetMain = "/050/main.do" // 사전통지 발송 대상 메인 화면 , getAdvanceNoticeTargetList = "/050/list.do" // 사전통지 발송 대상 목록 조회 , getAdvanceNoticeTargetInfo = "/060/info.do" // 사전통지 발송 대상 조회 - , createAdvanceNoticeSndng = "/060/create.do" // 사전통지 발송 등록 + , createAdvanceNoticeSendingList = "/060/createList.do" // 사전통지 발송 등록 , advanceNoticeSendingMain = "/070/main.do" // 사전통지 발송 현황 메인 화면 , getAdvanceNoticeSendingList = "/070/list.do" // 사전통지 발송 대상 목록 조회 , getAdvanceNoticeSendingInfo = "/080/info.do" // 사전통지 발송 상세 대장 조회 + + + + , noticeSheetSendingMain = "/090/main.do" // 고지서 발송 현황 메인 화면 , getNoticeSheetSendingList = "/090/list.do" // 고지서 발송 대상 목록 조회 , getNoticeSheetSendingInfo = "/100/info.do" // 고지서 발송 상세 대장 조회 @@ -70,7 +70,6 @@ public class Sndb01Controller extends ApplicationController { - , createSending = "/020/createSndng.do" // 발송 대상 등록 , createSendingLink = "/080/createSndngLink.do" // 우편 통합 발송 연계 등록 @@ -480,22 +479,19 @@ public class Sndb01Controller extends ApplicationController { List advntceTrgts = sndngService.getAdvntceTrgts(req); // 사전통지 납기일자 - DataObject taskInfo = taskService.getTaskInfo(new CmmnQuery().setSggCd(req.getSggCd()) - .setTaskSeCd(req.getTaskSeCd())); - - int advntceDayCnt = taskInfo.number("ADVNTCE_DAY_CNT").intValue(); + DataObject advntceYmdInfo = taskService.getAdvntceYmdInfo(new CmmnQuery().setSggCd(req.getSggCd()) + .setTaskSeCd(req.getTaskSeCd())); boolean json = jsonResponse(); ModelAndView mav = new ModelAndView(json ? "jsonView" : "fims/sndb/sndb01060-info"); - return mav.addObject("pageName", "sndb01060") - .addObject("sggCd", req.getSggCd()) - .addObject("taskSeCd", req.getTaskSeCd()) - .addObject("sndngSeCd", req.getSndngSeCd()) // 발송 구분 코드 - .addObject("vltnCd", req.getVltnCd()) // 위반 코드 - .addObject("advntceDayCnt", advntceDayCnt) // 사전통지 일수 - .addObject("advntceTrgtDtl", json ? advntceTrgts : toJson(advntceTrgts)) // 사전통지 발송 대상 정보 + return mav + .addObject("pageName", "sndb01060") + .addObject("callPurpose", req.getCallPurpose()) // 호출 용도 + .addObject("advntceTrgtQuery", json ? req : toJson(req)) // Query + .addObject("advntceTrgt", json ? advntceTrgts : toJson(advntceTrgts)) // 사전통지 발송 대상 정보 + .addObject("advntceYmdInfo", json ? advntceYmdInfo : toJson(advntceYmdInfo)) // 사전통지 기간 정보 ; } @@ -506,10 +502,11 @@ public class Sndb01Controller extends ApplicationController { * "saved": 등록되었으면 true, 그렇지 않으면 false * } */ - public ModelAndView createAdvanceNoticeSndng(Sndng sndng) { + public ModelAndView createAdvanceNoticeSendingList(SndbQuery req, Sndng sndng) { boolean saved = false; - String rtnMsg = sndngService.createAdvntceSndng(sndng); + String rtnMsg = "[F] "; + rtnMsg = sndngService.createAdvntceSndngList(req, sndng); if (rtnMsg.contains("[S]")) { saved = true; } else { diff --git a/src/main/java/cokr/xit/fims/task/web/DpvController.java b/src/main/java/cokr/xit/fims/task/web/DpvController.java index a2147eb7..2f40870f 100644 --- a/src/main/java/cokr/xit/fims/task/web/DpvController.java +++ b/src/main/java/cokr/xit/fims/task/web/DpvController.java @@ -1,12 +1,9 @@ package cokr.xit.fims.task.web; -import java.util.Map; - import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.ModelAndView; @@ -575,9 +572,9 @@ public class DpvController { } @Override - @RequestMapping(name="사전통지 발송 등록", value=METHOD_URL.createAdvanceNoticeSndng) - public ModelAndView createAdvanceNoticeSndng(Sndng sndng) { - return super.createAdvanceNoticeSndng(sndng); + @RequestMapping(name="사전통지 발송 등록", value=METHOD_URL.createAdvanceNoticeSendingList) + public ModelAndView createAdvanceNoticeSendingList(SndbQuery req, Sndng sndng) { + return super.createAdvanceNoticeSendingList(req, sndng); } @Override diff --git a/src/main/resources/sql/mapper/fims/cmmn/crdnSttsHstry-mapper.xml b/src/main/resources/sql/mapper/fims/cmmn/crdnSttsHstry-mapper.xml index 7d6821df..8034d1d6 100644 --- a/src/main/resources/sql/mapper/fims/cmmn/crdnSttsHstry-mapper.xml +++ b/src/main/resources/sql/mapper/fims/cmmn/crdnSttsHstry-mapper.xml @@ -96,18 +96,18 @@ INSERT INTO TB_CRDN_STTS_HSTRY ( - STTS_HSTRY_ID /* 상태 이력 ID */ - , CRDN_ID /* 단속 ID */ - , BFR_STTS_CD /* 이전 상태 코드 */ - , BFR_STTS_CHG_DT /* 이전 상태 변경 일시 */ - , CRDN_STTS_CD /* 단속 상태 코드 */ - , TASK_DTL_ID /* 업무 상세 ID */ - , ETC_CN /* 기타 내용 */ - , USE_YN /* 사용 여부 */ - , REG_DT /* 등록 일시*/ - , RGTR /* 등록자 */ - , MDFCN_DT /* 수정 일시 */ - , MDFR /* 수정자 */ + STTS_HSTRY_ID /* 상태 이력 ID */ + , CRDN_ID /* 단속 ID */ + , BFR_STTS_CD /* 이전 상태 코드 */ + , BFR_STTS_CHG_DT /* 이전 상태 변경 일시 */ + , CRDN_STTS_CD /* 단속 상태 코드 */ + , TASK_DTL_ID /* 업무 상세 ID */ + , ETC_CN /* 기타 내용 */ + , USE_YN /* 사용 여부 */ + , REG_DT /* 등록 일시*/ + , RGTR /* 등록자 */ + , MDFCN_DT /* 수정 일시 */ + , MDFR /* 수정자 */ ) VALUES ( #{crdnSttsHstry.sttsHstryId} /* 상태 이력 ID */ diff --git a/src/main/resources/sql/mapper/fims/cmmn/task-mapper.xml b/src/main/resources/sql/mapper/fims/cmmn/task-mapper.xml index e6ae4bda..867dcf07 100644 --- a/src/main/resources/sql/mapper/fims/cmmn/task-mapper.xml +++ b/src/main/resources/sql/mapper/fims/cmmn/task-mapper.xml @@ -67,7 +67,7 @@ - + - - - -
@@ -86,7 +81,7 @@ 민원처리결과 단속일시 차량번호 - 위반항목 + 위반항목 단속법정동 단속장소 단속금액 @@ -351,14 +346,8 @@ // 기본 데이터 설정 setFormData${pageName} = () => { // - $("#sggCd--${pageName}").val(${pageName}Query.sggCd); // 시군구 코드 - $("#taskSeCd--${pageName}").val(${pageName}Query.taskSeCd); // 업무 구분 코드 - $("#sndngSeCd--${pageName}").val(${pageName}Query.sndngSeCd); // 발송 구분 코드 - $("#vltnCd--${pageName}").val(${pageName}Query.vltnCd); // 위반 코드 - - // 총건수 / 총금액 - $("#tnocs--${pageName}").val(${pageName}Control.dataset.getValue("TNOCS")); - $("#gramt--${pageName}").val(${pageName}Control.dataset.getValue("GRAMT")); + $("#tnocs--${pageName}").val(${pageName}Control.dataset.getValue("TNOCS")); // 총건수 + $("#gramt--${pageName}").val(${pageName}Control.dataset.getValue("GRAMT")); // 총금액 // 발송 종료 일자 $("#sndngEndYmd--${pageName}").val(""); @@ -368,8 +357,8 @@ // 업무구분에 따른 url 설정 setURL${pageName} = (taskSeCd) => { - ${pageName}Control.urls.create = wctx.url(taskSeCd + ${pageName}PrefixUrl + "/020/createWrngSndngList.do"); // 등록 - ${pageName}Control.urls.update = wctx.url(taskSeCd + ${pageName}PrefixUrl + "/020/updateWrngSndngList.do"); // 수정 + ${pageName}Control.urls.create = wctx.url(taskSeCd + ${pageName}PrefixUrl + "/020/createList.do"); // 등록 +// ${pageName}Control.urls.update = wctx.url(taskSeCd + ${pageName}PrefixUrl + "/020/updateList.do"); // 수정 } /************************************************************************** diff --git a/src/main/webapp/WEB-INF/jsp/fims/sndb/sndb01060-info.jsp b/src/main/webapp/WEB-INF/jsp/fims/sndb/sndb01060-info.jsp index b04d7384..ad521230 100644 --- a/src/main/webapp/WEB-INF/jsp/fims/sndb/sndb01060-info.jsp +++ b/src/main/webapp/WEB-INF/jsp/fims/sndb/sndb01060-info.jsp @@ -10,11 +10,6 @@
- - - - -
@@ -59,9 +54,6 @@ - @@ -87,7 +79,8 @@ 민원처리결과 단속일시 차량번호 - 법정동 + 위반항목 + 단속법정동 단속장소 과태료금액 사전통지금액 @@ -117,13 +110,14 @@ {CVLCPT_PRCS_NM} {CRDN_YMD_TM} {VHRNO} + {VLTN_ARTCL} {CRDN_STDG_NM} {CRDN_PLC} {FFNLG_AMT} {ADVNTCE_AMT} {CRDN_STTS_NM} {RTPYR_NM} - {RTPYR_BRDT} + {RTPYR_BRDT_MASK} {ZIP} {ADDR} {DTL_ADDR} @@ -136,7 +130,7 @@ @@ -156,22 +150,25 @@ **************************************************************************/ // URL var ${pageName}PrefixUrl = "/sndb/sndb01"; + // infoDialog 호출 용도(view 조회(편집불가), create 등록, update 수정) + var ${pageName}CallPurpose = "${callPurpose}"; // FormFields var ${pageName}Fields = new FimsFormFields("#frmEdit--${pageName}"); + // main 의 검색 조건을 그대로 유지 + var ${pageName}Query = ${advntceTrgtQuery}; + // + var ${pageName}AdvntceYmdInfo = ${advntceYmdInfo}; /************************************************************************** * DatasetControl **************************************************************************/ var ${pageName}Control = new DatasetControl({ - prefix : "advntceTrgtDtl" + prefix : "advntceTrgt" , prefixName : "발송 대상" , keymapper : info => info ? info.CRDN_ID : "" - , dataGetter : obj => obj.advntceSndngTrgtDtlList + , dataGetter : obj => obj.advntceTrgtList , appendData : true - , tableRenderComplete : false // dataTables 에 자료 추가 완료 여부 - , urls : { - getInfo : wctx.url("/sprt/sprt02/010/main.do") // 개별총정보 - } + , tableRenderComplete : false // dataTables 에 자료 추가 완료 여부 , formats : { TNOCS : numberFormat , GRAMT : numberFormat @@ -191,9 +188,7 @@ ${pageName}Control.onDatasetChange = obj => { renderList${pageName}(); - ${pageName}Control.select(true); // 전체 선택 되도록.. - - ${pageName}Control.tableRenderComplete = true; // dataTables 에 자료 추가 완료 + ${pageName}Control.tableRenderComplete = true; // dataTables 에 자료 추가 완료 }; // 현재 선택 자료 변경 이벤트 @@ -217,34 +212,10 @@ }); }; - // 개별총정보 dialog - ${pageName}Control.getInfo = (crdnId) => { - if (typeof crdnId == "undefined" || crdnId == null || crdnId == "") return; - - let params = { - callControlName : "${pageName}Control" - , callPurpose : "view" - , crdnId : crdnId - } - - ajax.get({ - url : ${pageName}Control.urls.getInfo - , data : params - , success : resp => { - dialog.open({ - id : "totalInfoMainDialog" - , title : "개별총정보" - , content : resp - , size : "xxl" - }); - } - }); - } - // 저장 callback ${pageName}Control.onSave = (resp) => { let dialogTitle = $("#btnSave--${pageName}").attr("title"); - let showMessage = resp.retMessage.replace(/[S]|[F]/g, dialogTitle); + let showMessage = resp.rtnMsg.replace(/[S]|[F]/g, dialogTitle); dialog.alert(showMessage); @@ -257,24 +228,21 @@ ${pageName}Control.save = (info) => { if (!info) return; - // 선택된 자료의 단속ID 추가 - let selected = ${pageName}Control.dataset.getKeys("selected"); - - if (selected.length < 1) return; + info.resndYn = "N"; // 재발송 여부 + info.delYn = "N"; // 삭제 여부 - info.crdnIDs = selected.join(","); // 단속 IDs - info.resndYn = "N"; // 재발송 여부 - info.delYn = "N"; // 삭제 여부 + let create = (${pageName}CallPurpose == "create"); + let params = $.extend({}, ${pageName}Query, info); // 객체를 합친다. ajax.post({ - url : wctx.url(info.taskSeCd + ${pageName}PrefixUrl + "/060/create.do") - , data : info + url : !create ? ${pageName}Control.urls.update : ${pageName}Control.urls.create + , data : params , success : resp => ${pageName}Control.onSave(resp) }); } /************************************************************************** - * + * DataTables 이벤트 **************************************************************************/ // DataTables에 click, dbclick 이벤트 renderList${pageName} = () => { @@ -297,6 +265,51 @@ fn_securityModeToggle($("#securityMode--top").is(":checked")); } + /************************************************************************** + * 사용자 함수(function) + **************************************************************************/ + // 개별총정보 dialog + getTotalInfo${pageName} = (crdnId) => { + if (typeof crdnId == "undefined" || crdnId == null || crdnId == "") return; + + let params = { + callControlName : "${pageName}Control" + , callPurpose : "view" + , sggCd : $("#sggCd--${pageName}").val() + , taskSeCd : $("#taskSeCd--${pageName}").val() + , crdnId : crdnId + } + + ajax.get({ + url : wctx.url(params.taskSeCd + "/sprt/sprt02/010/main.do") + , data : params + , success : resp => { + dialog.open({ + id : "totalInfoMainDialog" + , title : "개별총정보" + , content : resp + , size : "xxl" + }); + } + }); + } + + /************************************************************************** + * 버튼 clickEvent + **************************************************************************/ + // 발송 등록 + fnSave${pageName} = () => { + // validate 확인 + if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return; + + dialog.alert({ + content : ${pageName}Control.prefixName + " 정보를 저장하시겠습니까?" + , onOK : () => { + ${pageName}Control.save(${pageName}Fields.get()); + } + }); + } + /************************************************************************** * 초기 셋팅 **************************************************************************/ @@ -319,60 +332,53 @@ $("#DataTables_Table_0--${pageName}").find("th").resizable( {handles : "e"} ); } - // 화면 초기값 셋팅 - setForm${pageName} = () => { + // 화면 초기 설정 + initForm${pageName} = () => { + // 화면 초기화 + $("#frmEdit--${pageName}")[0].reset(); + // 달력 초기화 initDatepicker("frmEdit--${pageName}"); - $("#sndngYmd--${pageName}").datepicker("setDate", new Date()); - $("#sndngEndYmd--${pageName}").datepicker("setDate", DateUtil.getDateDay(${advntceDayCnt}).date); + $("#sndngEndYmd--${pageName}").datepicker("setDate", new Date()); } - /************************************************************************** - * 버튼 clickEvent - **************************************************************************/ - // 엑셀 - fnExcel${pageName} = () => { - + // 기본 데이터 설정 + setFormData${pageName} = () => { + // + $("#tnocs--${pageName}").val(${pageName}Control.dataset.getValue("TNOCS")); // 총건수 + $("#gramt--${pageName}").val(${pageName}Control.dataset.getValue("GRAMT")); // 총금액 + $("#sndngYmd--${pageName}").val(${pageName}AdvntceYmdInfo.LEVY_YMD_MASK); // 발송일자 + $("#sndngEndYmd--${pageName}").val(${pageName}AdvntceYmdInfo.DUDT_YMD_MASK); // 납기일자 } - // 발송 등록 - fnSave${pageName} = () => { - // validate 확인 - if (!customValidate($("#frmEdit--${pageName}").find("input, select, textarea"))) return; - - dialog.alert({ - content : ${pageName}Control.prefixName + " 정보를 저장하시겠습니까?" - , onOK : () => { - ${pageName}Control.save(${pageName}Fields.get()); - } - }); + // 업무구분에 따른 url 설정 + setURL${pageName} = (taskSeCd) => { + ${pageName}Control.urls.create = wctx.url(taskSeCd + ${pageName}PrefixUrl + "/060/createList.do"); // 등록 +// ${pageName}Control.urls.update = wctx.url(taskSeCd + ${pageName}PrefixUrl + "/060/updateList.do"); // 수정 } /************************************************************************** * script 진입 **************************************************************************/ $(document).ready(function() { - // 기본 데이터 - $("#sggCd--${pageName}").val("${sggCd}"); // 시군구 코드 - $("#taskSeCd--${pageName}").val("${taskSeCd}"); // 업무 구분 코드 - $("#sndngSeCd--${pageName}").val("${sndngSeCd}"); // 발송 구분 코드 - $("#vltnCd--${pageName}").val("${vltnCd}"); // 위반 코드 - - // 보안모드 - fn_securityModeToggle($("#securityMode--top").is(":checked")); - // 이벤트 설정 setEvent${pageName}(); - // 화면 초기 설정 - setForm${pageName}(); + // 화면 초기화 + initForm${pageName}(); - // Dataset 셋팅 - 화면이 열리면서 조회하는 경우 addData 하여 자료를 추가 - ${pageName}Control.addData(${advntceTrgtDtl}); + // Dataset 셋팅 + ${pageName}Control.addData(${advntceTrgt}); - $("#tnocs--${pageName}").val(${pageName}Control.dataset.getValue("TNOCS")); // 총건수 - $("#gramt--${pageName}").val(${pageName}Control.dataset.getValue("GRAMT")); // 총금액 + // 기본 데이터 설정 + setFormData${pageName}(); + + // URL 설정 + setURL${pageName}(${pageName}Query.taskSeCd); + + // 보안모드 + fn_securityModeToggle($("#securityMode--top").is(":checked")); });