사전통지 발송 대상 수정.

main
jjh 11 months ago
parent 7e3075bcde
commit a6f20aa450

@ -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;
}

@ -44,7 +44,7 @@ public interface SndngMapper extends AbstractMapper {
/** ID .
* @param req
* @return
* @return ID
*/
List<DataObject> selectWrngTrgtCrdnIDs(SndbQuery req);
@ -54,7 +54,7 @@ public interface SndngMapper extends AbstractMapper {
*/
List<DataObject> 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<DataObject> selectAdvntceTrgtCrdnIDs(SndbQuery req);
/** .<br />
* @param req
* @return

@ -53,11 +53,6 @@ public interface SndngService {
*/
List<DataObject> getWrngSndngDtls(SndbQuery req);
/** .
* @param req
* @return
@ -70,14 +65,14 @@ public interface SndngService {
*/
List<DataObject> getAdvntceTrgts(SndbQuery req);
/** .
* @param sndng
/** .
* @param req , sndng
* @return
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
String createAdvntceSndng(Sndng sndng);
String createAdvntceSndngList(SndbQuery req, Sndng sndng);
/** .
* @param req
@ -91,6 +86,12 @@ public interface SndngService {
*/
List<DataObject> getAdvntceSndngDtls(SndbQuery req);
/** .
* @param sndng
* @return

@ -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("<p>계도장 발송상세 등록 작업중 단속 정보가 확인되지 않았습니다.</p>"
+ "<p>"
+ "단속 ID : " + crdnId
+ "</p>"
); // 예외를 발생시켜서 DB Rollback
}
if (crdnPayerInfo.string("RTPYR_ID").equals("")) {
throw new RuntimeException("<p>계도장 발송상세 등록 작업중 납부자 정보가 확인되지 않았습니다.</p>"
+ "<p>"
+ "단속 ID : " + crdnId
+ "<br />단속일시 : " + crdnPayerInfo.string("CRDN_YMD_TM_MASK")
+ "<br />차량번호 : " + crdnPayerInfo.string("VHRNO")
+ "</p>"
); // 예외를 발생시켜서 DB Rollback
}
SndngDtl sndngDtl = new SndngDtl();
sndngDtl.setSndngId(sndng.getSndngId()); // 발송 ID
@ -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
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
public String createAdvntceSndngList(SndbQuery req, Sndng sndng) {
// 변수 선언
boolean rtnScs = false; // DB 처리 결과
String rtnMsg = "[F] "; // 처리 결과 메시지
List<DataObject> 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
* <ul><li> true</li>
* <li> false</li>
* </ul>
*/
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("<p>사전통지 발송상세 등록 작업중 단속 정보가 확인되지 않았습니다.</p>"
+ "<p>"
+ "단속 ID : " + crdnId
+ "</p>"
); // 예외를 발생시켜서 DB Rollback
}
if (crdnPayerInfo.string("RTPYR_ID").equals("")) {
throw new RuntimeException("<p>사전통지 발송상세 등록 작업중 납부자 정보가 확인되지 않았습니다.</p>"
+ "<p>"
+ "단속 ID : " + crdnId
+ "<br />단속일시 : " + crdnPayerInfo.string("CRDN_YMD_TM_MASK")
+ "<br />차량번호 : " + crdnPayerInfo.string("VHRNO")
+ "</p>"
); // 예외를 발생시켜서 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("<p>발송상세 등록 작업중 부과 가산금액이 0원이 아닙니다.</p>"
+ "<p>"
+ "단속ID : " + crdnPayerInfo.string("CRDN_ID")
+ "<br />단속일시 : " + crdnPayerInfo.string("CRDN_YMD_TM_MASK")
+ "<br />차량번호 : " + crdnPayerInfo.string("VHRNO")
+ "</p>"
); // 예외를 발생시켜서 DB Rollback
}
if (crdnPayerInfo.number("LEVY_PCPTAX").intValue() != crdnPayerInfo.number("SUM_AMT").intValue()) {
throw new RuntimeException("<p>발송상세 등록 작업중 본세금액과 합계금액이 다릅니다.</p>"
+ "<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")
+ "</p>"
); // 예외를 발생시켜서 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("<p>발송상세 등록 작업중 사전 감경금액과 부과 본세금액이 다릅니다.</p>"
+ "<p>"
+ "단속ID : " + crdnPayerInfo.string("CRDN_ID")
+ "<br />단속일시 : " + crdnPayerInfo.string("CRDN_YMD_TM_MASK")
+ "<br />차량번호 : " + crdnPayerInfo.string("VHRNO")
+ "<br />사전 감경금액 : " + crdnPayerInfo.string("ADVNTCE_AMT")
+ "<br />부과 본세금액 : " + crdnPayerInfo.string("LEVY_PCPTAX")
+ "</p>"
); // 예외를 발생시켜서 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;
}

@ -60,12 +60,6 @@ public class SndngServiceBean extends AbstractServiceBean implements SndngServic
return sndngDtlBean.getSndngDtls(req);
}
@Override
public List<DataObject> 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

@ -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<DataObject> advntceTrgts = sndngService.getAdvntceTrgts(req);
// 사전통지 납기일자
DataObject taskInfo = taskService.getTaskInfo(new CmmnQuery().setSggCd(req.getSggCd())
DataObject advntceYmdInfo = taskService.getAdvntceYmdInfo(new CmmnQuery().setSggCd(req.getSggCd())
.setTaskSeCd(req.getTaskSeCd()));
int advntceDayCnt = taskInfo.number("ADVNTCE_DAY_CNT").intValue();
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
* }</code></pre>
*/
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 {

@ -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

@ -75,7 +75,9 @@
, ADVNTCE_RDUCT_RT /* 사전통지 감경 율 */
, DATE_FORMAT(CURRENT_DATE, '%Y') AS FYR /* 회계 연도 */
, DATE_FORMAT(CURRENT_DATE, '%Y%m%d') AS LEVY_YMD /* 부과 일자 */
, GET_MASK_DATE(DATE_FORMAT(CURRENT_DATE, '%Y%m%d'), '-') AS LEVY_YMD_MASK /* 부과 일자 */
, DATE_FORMAT(DATE_ADD(CURRENT_DATE, INTERVAL ADVNTCE_DAY_CNT DAY), '%Y%m%d') AS DUDT_YMD /* 납기 일자 */
, GET_MASK_DATE(DATE_FORMAT(DATE_ADD(CURRENT_DATE, INTERVAL ADVNTCE_DAY_CNT DAY), '%Y%m%d'), '-') AS DUDT_YMD_MASK /* 납기 일자 */
FROM TB_TASK
WHERE SGG_CD = #{sggCd}
AND TASK_SE_CD = #{taskSeCd}

@ -344,7 +344,7 @@
</if>
<choose>
<when test="taskSeCd == 'BPV' or taskSeCd == 'PVS'">
AND C.CRDN_STTS_CD = '23' /* 단속 상태 코드 */
AND C.CRDN_STTS_CD BETWEEN '23' AND '31' /* 단속 상태 코드 - 주정차, 전용차로는 사전부과 후 의견제출 접수도 사전통지 대상 */
</when>
<otherwise>
AND C.CRDN_STTS_CD BETWEEN '21' AND '23' /* 단속 상태 코드 */

@ -10,11 +10,6 @@
<div class="wrapper-pop">
<!-- 입력 영역 -->
<form id="frmEdit--${pageName}" name="frmEdit">
<input type="hidden" id="sggCd--${pageName}" name="sggCd" />
<input type="hidden" id="taskSeCd--${pageName}" name="taskSeCd" />
<input type="hidden" id="sndngSeCd--${pageName}" name="sndngSeCd" />
<input type="hidden" id="vltnCd--${pageName}" name="vltnCd" />
<div class="row g-1">
<!-- 총 건수 -->
<div class="col-md-12 text-end px-2">
@ -86,7 +81,7 @@
<th class="cmn" style="width: 200px;">민원처리결과</th>
<th class="cmn" style="width: 180px;">단속일시</th>
<th class="cmn" style="width: 140px;">차량번호</th>
<th class="cmn" style="width: 140px;">위반항목</th>
<th class="cmn" style="width: 160px;">위반항목</th>
<th class="cmn" style="width: 160px;">단속법정동</th>
<th class="cmn" style="width: 280px;">단속장소</th>
<th class="cmn" style="width: 120px;">단속금액</th>
@ -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"); // 수정
}
/**************************************************************************

@ -10,11 +10,6 @@
<div class="wrapper-pop">
<!-- 입력 영역 -->
<form id="frmEdit--${pageName}" name="frmEdit">
<input type="hidden" id="sggCd--${pageName}" name="sggCd" />
<input type="hidden" id="taskSeCd--${pageName}" name="taskSeCd" />
<input type="hidden" id="sndngSeCd--${pageName}" name="sndngSeCd" />
<input type="hidden" id="vltnCd--${pageName}" name="vltnCd" />
<div class="row g-1">
<!-- 총 건수 -->
<div class="col-md-12 text-end px-2">
@ -59,9 +54,6 @@
<span class="container-page-btn">
<span class="container-window-btn-right">
<!-- 업무 버튼 -->
<button type="button" class="btn btn-excel w-px-120" id="btnExcel--${pageName}" title="엑셀 저장" onclick="fnExcel${pageName}();">
엑셀 저장
</button>
<button type="button" class="btn btn-primary w-px-120" id="btnSave--${pageName}" title="발송 등록" onclick="fnSave${pageName}();">
발송 등록
</button>
@ -87,7 +79,8 @@
<th class="cmn" style="width: 160px;">민원처리결과</th>
<th class="cmn" style="width: 180px;">단속일시</th>
<th class="cmn" style="width: 140px;">차량번호</th>
<th class="cmn" style="width: 160px;">법정동</th>
<th class="cmn" style="width: 160px;">위반항목</th>
<th class="cmn" style="width: 160px;">단속법정동</th>
<th class="cmn" style="width: 280px;">단속장소</th>
<th class="cmn" style="width: 120px;">과태료금액</th>
<th class="cmn" style="width: 120px;">사전통지금액</th>
@ -117,13 +110,14 @@
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CVLCPT_PRCS_NM}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_YMD_TM}</td>
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{VHRNO}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{VLTN_ARTCL}</td>
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_STDG_NM}</td>
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_PLC}</td>
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{FFNLG_AMT}</td>
<td class="cmn text-end" onclick="{onclick}" ondblclick="{ondblclick}">{ADVNTCE_AMT}</td>
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{CRDN_STTS_NM}</td>
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{RTPYR_NM}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RTPYR_BRDT}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{RTPYR_BRDT_MASK}</td>
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{ZIP}</td>
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{ADDR}</td>
<td class="cmn text-start" onclick="{onclick}" ondblclick="{ondblclick}">{DTL_ADDR}</td>
@ -136,7 +130,7 @@
</template>
<template id="${infoPrefix}NotFound--${pageName}">
<tr class="odd">
<td valign="top" colspan="22" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
<td valign="top" colspan="23" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
</tr>
</template>
</table>
@ -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") // 개별총정보
}
, formats : {
TNOCS : numberFormat
, GRAMT : numberFormat
@ -191,8 +188,6 @@
${pageName}Control.onDatasetChange = obj => {
renderList${pageName}();
${pageName}Control.select(true); // 전체 선택 되도록..
${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.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"));
});
</script>

Loading…
Cancel
Save