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 b5932947..d639db8b 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
@@ -156,10 +156,9 @@ public class SndngBean extends AbstractBean {
sndng.setDeptCd(userInfo.string("DEPT_CD")); // 부서 코드
sndng.setVltnId(trgtList.get(0).string("VLTN_ID")); // 위반 ID
sndng.setSndngEndYmd(null); // 발송 종료 일자
- if (sndng.getTnocs() == 1) {
+
+ if (sndng.getSndngRegSeCd() == null) {
sndng.setSndngRegSeCd("02"); // 발송 등록 구분 코드 - 개별
- } else {
- sndng.setSndngRegSeCd("01"); // 발송 등록 구분 코드 - 일괄
}
if (sndng.getRsndYn() == null) {
sndng.setRsndYn("N"); // 재발송 여부
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 94a4962d..d3c097c6 100644
--- a/src/main/java/cokr/xit/fims/sndb/web/Sndb01Controller.java
+++ b/src/main/java/cokr/xit/fims/sndb/web/Sndb01Controller.java
@@ -62,7 +62,7 @@ import cokr.xit.foundation.data.DataObject;
*
*
* ============ 변경 이력 ============
-* 2023-08-24 JoJH 최초 작성
+* 2023-08-24 JoJH 최초 작성
* ================================
*
*/
@@ -70,2363 +70,2361 @@ import cokr.xit.foundation.data.DataObject;
@RequestMapping(name="발송반송", value=Sndb01Controller.CLASS_URL)
public class Sndb01Controller extends ApplicationController {
- public static final String CLASS_URL = "/sndb/sndb01";
-
- public class METHOD_URL {
- public static final String
- warningTargetMain = "/010/main.do" // 계고장 발송 대상 메인 화면
- , getWarningTargetList = "/010/list.do" // 계고장 발송 대상 목록 조회
- , getWarningTargetInfo = "/020/info.do" // 계고장 발송 대상 조회
- , createWarningSendingList = "/020/createList.do" // 계고장 발송 대상 목록의 발송 등록
- , warningSendingMain = "/030/main.do" // 계고장 발송 현황 메인 화면
- , getWarningSendingList = "/030/list.do" // 계고장 발송 현황 목록 조회
- , getWarningSendingDetailInfo = "/040/info.do" // 계고장 발송 현황 상세 화면
- , getWarningSendingDetailList = "/040/list.do" // 계고장 발송 현황 상세 목록 조회
- , advanceNoticeTargetMain = "/050/main.do" // 사전통지 발송 대상 메인 화면
- , getAdvanceNoticeTargetList = "/050/list.do" // 사전통지 발송 대상 목록 조회
- , getAdvanceNoticeTargetInfo = "/060/info.do" // 사전통지 발송 대상 조회
- , createAdvanceNoticeSendingList = "/060/createList.do" // 사전통지 발송 대상 목록의 발송 등록
- , advanceNoticeSendingMain = "/070/main.do" // 사전통지 발송 현황 메인 화면
- , getAdvanceNoticeSendingList = "/070/list.do" // 사전통지 발송 현황 목록 조회
- , removeAdvanceNoticeSending = "/070/remove.do" // 사전통지 발송 현황 삭제
- , getAdvanceNoticeSendingDetailInfo = "/080/info.do" // 사전통지 발송 현황 상세 화면
- , getAdvanceNoticeSendingDetailList = "/080/list.do" // 사전통지 발송 현황 상세 목록 조회
- , createSendingLink = "/080/createSndngLink.do" // 사전통지 발송 현황 상세 목록의 우편통합 발송 연계 등록
- , makeAdvanceNoticePdf = "/080/makeAdvntcePdf.do" // 사전통지 발송 현황 사전통지서 출력(PDF)
- , makeAdvanceNoticeOutsourcing = "/080/makeAdvntceOutsourcing.do" // 사전통지 발송 현황 사전통지서 출력(외주파일)
- , noticeSheetTargetMain = "/090/main.do" // 고지서 발송 대상 메인 화면
- , getNoticeSheetTargetList = "/090/list.do" // 고지서 발송 대상 목록 조회
- , getNoticeSheetTargetInfo = "/100/info.do" // 고지서 발송 대상 조회
- , createNoticeSheetSendingList = "/100/createList.do" // 고지서 발송 대상 목록의 발송 등록
- , noticeSheetSendingMain = "/110/main.do" // 고지서 발송 현황 메인 화면
- , getNoticeSheetSendingList = "/110/list.do" // 고지서 발송 현황 상세 목록 조회
- , removeNoticeSheetSending = "/110/remove.do" // 고지서 발송 현황 삭제
- , getNoticeSheetSendingDetailInfo = "/120/info.do" // 고지서 발송 현황 화면
- , getNoticeSheetSendingDetailList = "/120/list.do" // 고지서 발송 현황 상세 목록 조회
- , makeNoticeSheetPdf = "/120/makeNhtPdf.do" // 고지서 발송 현황 사전통지서 출력(PDF)
- , makeNoticeSheetOutsourcing = "/120/makeNhtOutsourcing.do" // 고지서 발송 현황 사전통지서 출력(외주파일)
-
-
- , sendingDetailInfo = "/210/info.do" // 수기 반송 등록 상세
- , getSendingDetailList = "/210/list.do" // 수기 반송 등록 조회
- , sendBackMain = "/220/main.do" // 반송 현황 메인 화면
- , getSendBackList = "/220/list.do" // 반송 현황 목록 조회
- , removeSendBack = "/220/remove.do" // 반송 삭제
- , getSendBackInfo = "/230/info.do" // 반송 정보 조회
- , createSendBackList = "/230/createSndbkList.do" // 사전통지 발송 상세 목록의 반송 확인(등록)
- , createSendBack = "/230/create.do" // 반송 등록
- , updateSendBack = "/230/update.do" // 반송 수정
- , serviceByPublicNoticeMain = "/240/main.do" // 공시송달 현황 메인 화면
- , getServiceByPublicNoticeList = "/240/list.do" // 공시송달 현황 목록 조회
- , removeServiceByPublicNotice = "/240/remove.do" // 공시송달 삭제
- , makeSvbtcFileFromHwpFormat = "/240/makeSvbtcHwp.do" // 공시송달 한글 파일 출력
- , getServiceByPublicNoticeDetailInfo = "/250/info.do" // 공시송달 상세 화면
- , getServiceByPublicNoticeDetailList = "/250/list.do" // 공시송달 상세 목록 조회
- , makeSvbtcDetailsFileFromHwpFormat = "/250/makeSvbtcDtlHwp.do" // 공시송달 상세 한글 파일 출력
- , removeServiceByPublicNoticeEach = "/250/remove.do" // 공시송달 개별 삭제
- , getServiceByPublicNoticeInfo = "/260/info.do" // 공시송달 정보
- , createServiceByPublicNotice = "/260/create.do" // 공시송달 등록
- , updateServiceByPublicNotice = "/260/update.do" // 공시송달 수정
-
- , setNonTaxReceiptIndividualA01List = "/991/nxrpA01List.do" // 과태료 대장 단속 정보 등록(실시간) A01
- , getNonTaxReceiptIndividualA03List = "/991/nxrpA03List.do" // 과태료 대장 등록 자료 상세 조회(실시간) A03
- , getNonTaxReceiptSpecialB01List = "/991/nxrpB01List.do" // 체납상세세목정보(실시간) B01
- ;
- }
-
- /**발송 대장 서비스*/
- @Resource(name="sndngService")
- private SndngService sndngService;
-
- /**발송 상세 서비스*/
- @Resource(name="sndngDtlService")
- private SndngDtlService sndngDtlService;
-
- /**공시송달 대장 서비스*/
- @Resource(name="svbtcService")
- private SvbtcService svbtcService;
-
- /**업무 정보 서비스*/
- @Resource(name="taskBean")
- private TaskBean taskBean;
-
- /**통합 조회 서비스*/
- @Resource(name="integrationSearchService")
- private IntegrationSearchService integrationSearchService;
-
- @Resource(name="stngBean")
- private StngBean stngBean;
-
- @Resource(name="fileBean")
- private FileBean fileBean;
-
- @Resource(name = "ogdpBean")
- private OgdpBean ogdpBean;
-
- @Resource(name="svbtcBean")
- private SvbtcBean svbtcBean;
-
- @Resource(name="mediaBean")
- private MediaBean mediaBean;
-
- @Resource(name="otptStngMapper")
- private OtptStngMapper otptStngMapper;
-
- @Resource(name="outsourcingStngBean")
- protected OutsourcingStngBean outsourcingStngBean;
-
- @Resource(name="integrationSearchMapper")
- private IntegrationSearchMapper integrationSearchMapper;
-
- /**계고장 발송 대상 자료 메인화면(sndb/sndb01/010-main)을 연다.
- * @return /sndb/sndb01/010-main
- */
- @RequestMapping(name = "계도장 발송 대상 메인", value = METHOD_URL.warningTargetMain)
- public ModelAndView warningTargetMain() {
- ModelAndView mav = new ModelAndView("fims/sndb/sndb01010-main");
-
- // 사용자 정보
- FimsUser fimsUser = (FimsUser)currentUser().getUser();
-
- // View(jsp)에서 사용할 공통코드를 조회
- Map> commonCodes = getCodesOf("FIM004", "FIM005", "FIM006", "FIM022", "FIM054", "FIM061", "FIM064");
-
- // 위반 코드(VLTN_CD)
- addCodes(commonCodes, mav, "FIM022", "FIM004", "FIM005", "FIM006", "FIM061", "FIM064");
-
- return mav
- .addObject("pageName", "sndb01010") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
- .addObject("infoPrefix", "wrngTrgt") // prefix
- .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
- .addObject("sggCd", fimsUser.getOrgID()) // 시군구 코드(SGG_CD)
- .addObject("taskListForSgg", stngBean.filterTaskSectionCodeForSgg(commonCodes.get("FIM054"))) // 시군구에서 사용하는 업무 목록
- .addObject("FIM022List", commonCodes.get("FIM022")) // 부과 제외 사유 코드(LEVY_EXCL_RSN_CD)
- .addObject("FIM004List", commonCodes.get("FIM004")) // 주정차위반 내역 코드(VLTN_ID)
- .addObject("FIM005List", commonCodes.get("FIM005")) // 전용차로위반 내역 코드(VLTN_ID)
- .addObject("FIM006List", commonCodes.get("FIM006")) // 장애인주차위반 내역 코드(VLTN_ID)
- .addObject("FIM061List", commonCodes.get("FIM061")) // 전기차 충전구역 및 충전방해 위반 코드(VLTN_ID)
- .addObject("FIM064List", commonCodes.get("FIM064")) // 화물자동차 밤샘주차 위반 코드(VLTN_ID)
- ;
- }
-
- /**계고장 발송 대상 목록을 조회하여 반환한다.
- * {@link SndngService#getSndngList(SndngQuery)} 참고
- * @param req 발송 대장 조회 조건
- * @return jsonView
- * {
- * "wrngSndngTrgtList": [계고장 발송 대상 목록]
- * "wrngSndngTrgtStart": 계고장 발송 대상 목록 시작 인덱스
- * "wrngSndngTrgtFetch": 한 번에 가져오는 계고장 발송 대상 목록 수
- * "wrngSndngTrgtTotal": 조회 결과 찾은 전체 계고장 발송 대상 수
- * }
- */
- @Task
- @RequestMapping(name="계고장 발송 대상 목록 조회", value=METHOD_URL.getWarningTargetList)
- public ModelAndView getWarningTargetList(SndbQuery req) {
- if (!"xls".equals(req.getDownload())) {
- List> result = sndngService.getWrngTrgtList(setFetchSize(req));
- return setCollectionInfo(new ModelAndView("jsonView"), result, "wrngTrgt");
- } else {
- // 현재 날짜 구하기
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
- String dateTime = dateFormat.format(System.currentTimeMillis());
-
- List 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 list = sndngService.getWrngTrgtList(req.setFetchSize(0));
-
- Map valueMap = new HashMap();
- valueMap.put("업무구분", format.of("TASK_SE_NM").style(center));
- valueMap.put("계고일자", FormatMaker.yyyy_mm_dd(format, "LEVY_EXCL_YMD").style(dateYMD));
- valueMap.put("계고사유", format.of("LEVY_EXCL_RSN_NM"));
- valueMap.put("기타내용", format.of("ETC_CN"));
- valueMap.put("민원신청번호", format.of("CVLCPT_APLY_NO").style(center));
- valueMap.put("민원접수번호", format.of("CVLCPT_RCPT_NO").style(center));
- valueMap.put("민원접수일자", FormatMaker.yyyy_mm_dd(format, "CVLCPT_RCPT_YMD").style(dateYMD));
- valueMap.put("민원처리담당자", format.of("CVLCPT_PRCS_PIC_NM").style(center));
- valueMap.put("민원처리결과", format.of("CVLCPT_PRCS_NM").style(center));
- valueMap.put("단속일시", FormatMaker.yyyy_mm_dd_hh_mm_ss(format, "CRDN_YMD_TM").style(dateDT));
- valueMap.put("차량번호", format.of("VHRNO"));
- valueMap.put("위반항목", format.of("VLTN_ARTCL"));
- valueMap.put("단속법정동", format.of("CRDN_STDG_NM"));
- valueMap.put("단속장소", format.of("CRDN_PLC"));
- valueMap.put("상세단속장소", format.of("DTL_CRDN_PLC"));
- valueMap.put("단속원금", format.of("FFNLG_CRDN_AMT").style(numeric));
- valueMap.put("처리상태", format.of("CRDN_STTS_NM"));
- valueMap.put("납부자명", format.of("RTPYR_NM"));
- valueMap.put("납부자생일", format.of("RTPYR_BRDT_MASK").style(center));
- valueMap.put("우편번호", format.of("ZIP").style(center));
- valueMap.put("주소", format.of("ADDR"));
- valueMap.put("상세주소", format.of("DTL_ADDR"));
- valueMap.put("단속특별구역", format.of("CRDN_SPAREA_NM").style(center));
- valueMap.put("사용연료", format.of("USE_FUEL_NM").style(center));
- valueMap.put("주차가능여부", format.of("PRK_PSBLTY_RSLT_NM").style(center));
- 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"));
- }
- }
-
- /**계고장 발송 대상 정보 화면(sndb/sndb01/020-info)을 연다.
- * @param crdnIds 단속 Ids
- * @return fims/sndb/sndb01020-info 또는 jsonView
- * {
- * "wrngSndngTrgts": [계고장 발송 대상 목록]
- * }
- */
- @Task
- @RequestMapping(name="계고장 발송 대상 상세 조회", value=METHOD_URL.getWarningTargetInfo)
- public ModelAndView getWarningTargetInfo(HttpServletRequest hReq, SndbQuery req) {
- ModelAndView mav = getWarningTargetList(req);
-
- mav.setViewName("fims/sndb/sndb01020-info");
-
- return mav
- .addObject("openerPageName", hReq.getParameter("openerPageName")) // 호출한 Jsp PageName
- .addObject("callPurpose", req.getCallPurpose()) // 호출 용도
- .addObject("pageName", "sndb01020") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
- .addObject("infoPrefix", "wrngTrgt") // prefix
- .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
- .addObject("mainQuery", toJson(req)) // 검색 조건
- .addObject("wrngTrgtList", toJson(mav.getModel().get("wrngTrgtList"))) // 자료
- ;
- }
-
- /**계도장 발송 대상을 조회하여 발송 대장에 등록한다.
- * @param req 계도장 발송 대상 조회, sndng 발송 대장
- * @return jsonView
- * {
- * "saved": 등록되었으면 true, 그렇지 않으면 false
- * }
- */
- @Task
- @RequestMapping(name="계고장 발송 등록", value=METHOD_URL.createWarningSendingList)
- public ModelAndView createWarningSendingList(SndbQuery req, Sndng sndng) {
- boolean saved = false;
- String rtnMsg = sndngService.createWrngSndngList(req, sndng);
-
- if (rtnMsg.contains("[S]")) {
- saved = true;
- } else {
- saved = false;
- }
-
- return new ModelAndView("jsonView")
- .addObject("saved", saved)
- .addObject("rtnMsg", rtnMsg);
- }
-
- /**계도장 발송 현황 메인화면(sndb/sndb01/030-main)을 연다.
- * @return /sndb/sndb01/030-main
- */
- @RequestMapping(name = "계도장 발송 현황 메인", value = METHOD_URL.warningSendingMain)
- public ModelAndView warningSendingMain() {
- ModelAndView mav = new ModelAndView("fims/sndb/sndb01030-main");
-
- // 사용자 정보
- FimsUser fimsUser = (FimsUser)currentUser().getUser();
-
- // View(jsp)에서 사용할 공통코드를 조회
- Map> commonCodes = getCodesOf("FIM054", "FIM067");
-
- return mav
- .addObject("pageName", "sndb01030") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
- .addObject("infoPrefix", "wrngSndng") // prefix
- .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
- .addObject("sggCd", fimsUser.getOrgID()) // 시군구 코드(SGG_CD)
- .addObject("taskListForSgg", stngBean.filterTaskSectionCodeForSgg(commonCodes.get("FIM054"))) // 시군구에서 사용하는 업무 목록
- .addObject("FIM067List", commonCodes.get("FIM067")) // 발송 등록 구분 코드(SNDNG_REG_SE_CD)
- ;
- }
-
- /**계도장 발송 현황 목록을 조회하여 반환한다.
- * {@link SndngService#getWarningSendingList(SndngQuery)} 참고
- * @param req 발송 대장 조회 조건
- * @return jsonView
- * {
- * "sndngList": [계도장 발송 현황 목록]
- * "sndngStart": 계도장 발송 현황 목록 시작 인덱스
- * "sndngFetch": 한 번에 가져오는 계도장 발송 현황 목록 수
- * "sndngTotal": 조회 결과 찾은 전체 계도장 발송 현황 수
- * }
- */
- @Task
- @RequestMapping(name="계고장 발송 현황 목록 조회", value=METHOD_URL.getWarningSendingList)
- public ModelAndView getWarningSendingList(SndbQuery req) {
- if (!"xls".equals(req.getDownload())) {
- List> result = sndngService.getWrngSndngList(setFetchSize(req));
- return setCollectionInfo(new ModelAndView("jsonView"), result, "wrngSndng");
- } else {
- // 현재 날짜 구하기
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
- String dateTime = dateFormat.format(System.currentTimeMillis());
-
- List 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 list = sndngService.getWrngSndngList(req.setFetchSize(0));
-
- Map valueMap = new HashMap();
- valueMap.put("업무구분", format.of("TASK_SE_NM").style(center));
- valueMap.put("등록구분", format.of("SNDNG_REG_SE_NM").style(center));
- valueMap.put("위반항목", format.of("VLTN_ARTCL"));
- valueMap.put("발송일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_YMD").style(dateYMD));
- valueMap.put("납기일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_END_YMD").style(dateYMD));
- valueMap.put("총건수", format.of("TNOCS").style(numeric));
- valueMap.put("총금액", format.of("GRAMT").style(numeric));
- valueMap.put("문서번호", format.of("DOC_NO"));
- valueMap.put("제목", format.of("TTL_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"));
- }
- }
-
- /**계도장 발송 현황 - 발송상세 화면(sndb/sndb01/040-info)을 연다.
- * @param sndngId 발송 ID
- * @return fims/sndb/sndb01040-info 또는 jsonView
- * {
- * "sndngDtls": [계도장 발송 상세 목록]
- * }
- */
- @Task
- @RequestMapping(name="계고장 발송 현황 상세 화면", value=METHOD_URL.getWarningSendingDetailInfo)
- public ModelAndView getWarningSendingDetailInfo(HttpServletRequest hReq, SndbQuery req) {
- ModelAndView mav = getWarningSendingDetailList(req);
-
- mav.setViewName("fims/sndb/sndb01040-info");
-
- return mav
- .addObject("openerPageName", hReq.getParameter("openerPageName")) // 호출한 Jsp PageName
- .addObject("callPurpose", req.getCallPurpose()) // 호출 용도
- .addObject("pageName", "sndb01040") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
- .addObject("infoPrefix", "wrngSndngDtl") // prefix
- .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
- .addObject("sggCd", req.getSggCd()) // 시군구 코드(SGG_CD)
- .addObject("taskSeCd", req.getTaskSeCd()) // 업무 구분 코드(TASK_SE_CD)
- .addObject("sndngId", req.getSndngId()) // 발송 ID(SNDNG_ID)
- .addObject("wrngSndngDtlList", toJson(mav.getModel().get("wrngSndngDtlList"))) // 자료
- ;
- }
-
- /**계도장 발송 현황 - 발송상세 목록을 조회하여 반환한다.
- * {@link SndngService#getSndngList(SndngQuery)} 참고
- * @param req 발송 대장 조회 조건
- * @return jsonView
- * {
- * "sndngDtlList": [발송상세 목록]
- * "sndngDtlStart": 발송상세 목록 시작 인덱스
- * "sndngDtlFetch": 한 번에 가져오는 발송상세 목록 수
- * "sndngDtlTotal": 조회 결과 찾은 전체 발송상세 수
- * }
- */
- @Task
- @RequestMapping(name="계고장 발송 현황 상세 목록 조회", value=METHOD_URL.getWarningSendingDetailList)
- public ModelAndView getWarningSendingDetailList(SndbQuery req) {
- if (!"xls".equals(req.getDownload())) {
- List> result = sndngDtlService.getSndngDtlList(setFetchSize(req));
- return setCollectionInfo(new ModelAndView("jsonView"), result, "wrngSndngDtl");
- } else {
- // 현재 날짜 구하기
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
- String dateTime = dateFormat.format(System.currentTimeMillis());
-
- List 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 list = sndngDtlService.getSndngDtlList(req.setFetchSize(0));
-
- Map valueMap = new HashMap();
- valueMap.put("발송상태", format.of("SNDNG_DTL_STTS_NM").style(center));
- valueMap.put("등기번호", format.of("RG_NO").style(center));
- valueMap.put("발송일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_YMD").style(dateYMD));
- valueMap.put("납기일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_END_YMD").style(dateYMD));
- valueMap.put("성명", format.of("RCPN_NM"));
- valueMap.put("우편번호", format.of("RCPN_ZIP").style(center));
- valueMap.put("주소", format.of("RCPN_ADDR"));
- valueMap.put("상세주소", format.of("RCPN_DTL_ADDR"));
- valueMap.put("배달일자", FormatMaker.yyyy_mm_dd(format, "DLVR_YMD").style(dateYMD));
- valueMap.put("배달시각", format.of("DLVR_TM").style(center));
- valueMap.put("미배달사유", format.of("UNDLVR_RSN_NM"));
- valueMap.put("수령인", format.of("ACTL_RCPN_NM"));
- valueMap.put("수령인관계", format.of("RCPN_REL_NM"));
- valueMap.put("단속일시", format.of("CRDN_DT").style(center));
- valueMap.put("차량번호", format.of("VHRNO"));
- valueMap.put("단속법정동", format.of("CRDN_STDG_NM"));
- valueMap.put("단속장소", format.of("CRDN_PLC"));
- valueMap.put("과태료금액", format.of("FFNLG_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));
- 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"));
- }
- }
-
- /**사전통지 발송 대상 자료 메인화면(sndb/sndb01/050-main)을 연다.
- * @return /sndb/sndb01/050-main
- */
- @RequestMapping(name = "사전통지 발송 대상 메인", value = METHOD_URL.advanceNoticeTargetMain)
- public ModelAndView advanceNoticeTargetMain() {
- ModelAndView mav = new ModelAndView("fims/sndb/sndb01050-main");
-
- // 사용자 정보
- FimsUser fimsUser = (FimsUser)currentUser().getUser();
-
- // View(jsp)에서 사용할 공통코드를 조회
- Map> commonCodes = getCodesOf("FIM004", "FIM005", "FIM006", "FIM054", "FIM061", "FIM064");
-
- addCodes(commonCodes, mav, "FIM004", "FIM005", "FIM006", "FIM061", "FIM064");
-
- return mav
- .addObject("pageName", "sndb01050") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
- .addObject("infoPrefix", "advntceTrgt") // prefix
- .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
- .addObject("sggCd", fimsUser.getOrgID()) // 시군구 코드(SGG_CD)
- .addObject("taskListForSgg", stngBean.filterTaskSectionCodeForSgg(commonCodes.get("FIM054"))) // 시군구에서 사용하는 업무 목록
- .addObject("FIM004List", commonCodes.get("FIM004")) // 주정차위반 내역 코드(VLTN_CD)
- .addObject("FIM005List", commonCodes.get("FIM005")) // 전용차로위반 내역 코드(VLTN_CD)
- .addObject("FIM006List", commonCodes.get("FIM006")) // 장애인주차위반 내역 코드(VLTN_CD)
- .addObject("FIM061List", commonCodes.get("FIM061")) // 전기차 충전구역 및 충전방해 위반 코드(VLTN_CD)
- .addObject("FIM064List", commonCodes.get("FIM064")) // 화물자동차 밤샘주차 위반 코드(VLTN_CD)
- ;
- }
-
- /**사전통지 발송 대상 목록을 조회하여 반환한다.
- * {@link SndngService#getSndngList(SndngQuery)} 참고
- * @param req 발송 대장 조회 조건
- * @return jsonView
- * {
- * "sndngList": [사전통지 발송 대상 목록]
- * "sndngStart": 사전통지 발송 대상 목록 시작 인덱스
- * "sndngFetch": 한 번에 가져오는 사전통지 발송 대상 목록 수
- * "sndngTotal": 조회 결과 찾은 전체 사전통지 발송 대상 수
- * }
- */
- @Task
- @RequestMapping(name="사전통지 발송 대상 목록 조회", value=METHOD_URL.getAdvanceNoticeTargetList)
- public ModelAndView getAdvanceNoticeTargetList(SndbQuery req) {
- if (!"xls".equals(req.getDownload())) {
- List> result = sndngService.getAdvntceTrgtList(setFetchSize(req));
- return setCollectionInfo(new ModelAndView("jsonView"), result, "advntceTrgt");
- } else {
- // 현재 날짜 구하기
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
- String dateTime = dateFormat.format(System.currentTimeMillis());
-
- List 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 list = sndngService.getAdvntceTrgtList(req.setFetchSize(0));
-
- Map valueMap = new HashMap();
- valueMap.put("업무구분", format.of("TASK_SE_NM").style(center));
- valueMap.put("민원신청번호", format.of("CVLCPT_APLY_NO").style(center));
- valueMap.put("민원접수번호", format.of("CVLCPT_RCPT_NO").style(center));
- valueMap.put("민원접수일자", FormatMaker.yyyy_mm_dd(format, "CVLCPT_RCPT_YMD").style(dateYMD));
- valueMap.put("민원처리담당자", format.of("CVLCPT_PRCS_PIC_NM").style(center));
- valueMap.put("민원처리결과", format.of("CVLCPT_PRCS_NM").style(center));
- valueMap.put("단속일시", FormatMaker.yyyy_mm_dd_hh_mm_ss(format, "CRDN_YMD_TM").style(dateDT));
- valueMap.put("차량번호", format.of("VHRNO"));
- valueMap.put("위반항목", format.of("VLTN_ARTCL"));
- valueMap.put("단속법정동", format.of("CRDN_STDG_NM"));
- valueMap.put("단속장소", format.of("CRDN_PLC"));
- valueMap.put("상세단속장소", format.of("DTL_CRDN_PLC"));
- valueMap.put("과태료금액", format.of("FFNLG_AMT").style(numeric));
- valueMap.put("사전통지금액", format.of("ADVNTCE_AMT").style(numeric));
- valueMap.put("처리상태", format.of("CRDN_STTS_NM"));
- valueMap.put("납부자명", format.of("RTPYR_NM"));
- valueMap.put("납부자생일", format.of("RTPYR_BRDT_MASK").style(center));
- valueMap.put("우편번호", format.of("ZIP").style(center));
- valueMap.put("주소", format.of("ADDR"));
- valueMap.put("상세주소", format.of("DTL_ADDR"));
- valueMap.put("단속특별구역", format.of("CRDN_SPAREA_NM").style(center));
- valueMap.put("사용연료", format.of("USE_FUEL_NM").style(center));
- valueMap.put("주차가능여부", format.of("PRK_PSBLTY_RSLT_NM").style(center));
- 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"));
- }
- }
-
- /**사전통지 발송 대상 정보 화면(sndb/sndb01/060-info)을 연다.
- * @param crdnIds 단속 Ids
- * @return fims/sndb/sndb01060-info 또는 jsonView
- * {
- * "advntceSndngTrgs": [사전통지 발송 대상 목록]
- * }
- */
- @Task
- @RequestMapping(name="사전통지 발송 대상 상세 조회", value=METHOD_URL.getAdvanceNoticeTargetInfo)
- public ModelAndView getAdvanceNoticeTargetInfo(HttpServletRequest hReq, SndbQuery req) {
- ModelAndView mav = getAdvanceNoticeTargetList(req);
-
- mav.setViewName("fims/sndb/sndb01060-info");
-
- // 사전통지 납기일자
- DataObject advntceYmdInfo = taskBean.getAdvntceYmdInfo(new CmmnQuery().setSggCd(req.getSggCd())
- .setTaskSeCd(req.getTaskSeCd()));
-
- return mav
- .addObject("openerPageName", hReq.getParameter("openerPageName")) // 호출한 Jsp PageName
- .addObject("callPurpose", req.getCallPurpose()) // 호출 용도
- .addObject("pageName", "sndb01060") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
- .addObject("infoPrefix", "advntceTrgt") // prefix
- .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
- .addObject("mainQuery", toJson(req)) // 검색 조건
- .addObject("advntceTrgtList", toJson(mav.getModel().get("advntceTrgtList"))) // 자료
- .addObject("advntceYmdInfo", toJson(advntceYmdInfo)) // 사전통지 기간 정보
- ;
- }
-
- /**사전통지 발송 대상을 등록한다.
- * @param sndng 발송 정보
- * @return jsonView
- * {
- * "saved": 등록되었으면 true, 그렇지 않으면 false
- * }
- */
- @Task
- @RequestMapping(name="사전통지 발송 등록", value=METHOD_URL.createAdvanceNoticeSendingList)
- public ModelAndView createAdvanceNoticeSendingList(SndbQuery req, Sndng sndng) {
- boolean saved = false;
- String rtnMsg = sndngService.createAdvntceSndngList(req, sndng);
-
- if (rtnMsg.contains("[S]")) {
- saved = true;
- } else {
- saved = false;
- }
-
- return new ModelAndView("jsonView")
- .addObject("saved", saved)
- .addObject("rtnMsg", rtnMsg);
- }
-
- /**사전통지 발송 현황 메인화면(sndb/sndb01/070-main)을 연다.
- *
- * @return /sndb/sndb01/070-main
- */
- @RequestMapping(name = "사전통지 발송 현황 메인", value = METHOD_URL.advanceNoticeSendingMain)
- public ModelAndView advanceNoticeSendingMain() {
- ModelAndView mav = new ModelAndView("fims/sndb/sndb01070-main");
-
- // 사용자 정보
- FimsUser fimsUser = (FimsUser)currentUser().getUser();
-
- // View(jsp)에서 사용할 공통코드를 조회
- Map> commonCodes = getCodesOf("FIM054", "FIM067");
-
- return mav
- .addObject("pageName", "sndb01070") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
- .addObject("infoPrefix", "advntceSndng") // prefix
- .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
- .addObject("sggCd", fimsUser.getOrgID()) // 시군구 코드(SGG_CD)
- .addObject("taskListForSgg", stngBean.filterTaskSectionCodeForSgg(commonCodes.get("FIM054"))) // 시군구에서 사용하는 업무 목록
- .addObject("FIM067List", commonCodes.get("FIM067")) // 발송 등록 구분 코드(SNDNG_REG_SE_CD)
- ;
- }
-
- /**사전통지 발송 현황 목록을 조회하여 반환한다.
- * {@link SndngService#getSndngList(SndngQuery)} 참고
- * @param req 발송 대장 조회 조건
- * @return jsonView
- * {
- * "sndngList": [사전통지 발송 현황 목록]
- * "sndngStart": 사전통지 발송 현황 목록 시작 인덱스
- * "sndngFetch": 한 번에 가져오는 사전통지 발송 현황 목록 수
- * "sndngTotal": 조회 결과 찾은 전체 사전통지 발송 현황 수
- * }
- */
- @Task
- @RequestMapping(name="사전통지 발송 현황 목록 조회", value=METHOD_URL.getAdvanceNoticeSendingList)
- public ModelAndView getAdvanceNoticeSendingList(SndbQuery req) {
- if (!"xls".equals(req.getDownload())) {
- List> result = sndngService.getAdvntceSndngList(setFetchSize(req));
- return setCollectionInfo(new ModelAndView("jsonView"), result, "advntceSndng");
- } else {
- // 현재 날짜 구하기
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
- String dateTime = dateFormat.format(System.currentTimeMillis());
-
- List 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 list = sndngService.getAdvntceSndngList(req.setFetchSize(0));
-
- Map valueMap = new HashMap();
- valueMap.put("업무구분", format.of("TASK_SE_NM").style(center));
- valueMap.put("등록구분", format.of("SNDNG_REG_SE_NM").style(center));
- valueMap.put("위반항목", format.of("VLTN_ARTCL"));
- valueMap.put("발송일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_YMD").style(dateYMD));
- valueMap.put("납기일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_END_YMD").style(dateYMD));
- valueMap.put("총건수", format.of("TNOCS").style(numeric));
- valueMap.put("총금액", format.of("GRAMT").style(numeric));
- valueMap.put("문서번호", format.of("DOC_NO"));
- valueMap.put("제목", format.of("TTL_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"));
- }
- }
-
- /**사전통지 발송 현황 - 발송상세 화면(sndb/sndb01/080-info)을 연다.
- * @param sndngId 발송 ID
- * @return fims/sndb/sndb01080-info 또는 jsonView
- * {
- * "sndngDtls": [사전통지 발송 상세 목록]
- * }
- */
- @Task
- @RequestMapping(name="사전통지 발송 현황 상세 화면", value=METHOD_URL.getAdvanceNoticeSendingDetailInfo)
- public ModelAndView getAdvanceNoticeSendingDetailInfo(HttpServletRequest hReq, SndbQuery req) {
- ModelAndView mav = getAdvanceNoticeSendingDetailList(req);
-
- mav.setViewName("fims/sndb/sndb01080-info");
-
- return mav
- .addObject("openerPageName", hReq.getParameter("openerPageName")) // 호출한 Jsp PageName
- .addObject("callPurpose", req.getCallPurpose()) // 호출 용도
- .addObject("pageName", "sndb01080") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
- .addObject("infoPrefix", "advntceSndngDtl") // prefix
- .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
- .addObject("sggCd", req.getSggCd()) // 시군구 코드(SGG_CD)
- .addObject("taskSeCd", req.getTaskSeCd()) // 업무 구분 코드(TASK_SE_CD)
- .addObject("sndngId", req.getSndngId()) // 발송 ID(SNDNG_ID)
- .addObject("advntceSndngDtlList", toJson(mav.getModel().get("advntceSndngDtlList"))) // 자료
- ;
- }
-
- /**사전통지 발송 현황 - 발송상세 목록을 조회하여 반환한다.
- * {@link SndngService#getSndngList(SndngQuery)} 참고
- * @param req 발송 대장 조회 조건
- * @return jsonView
- * {
- * "sndngDtlList": [발송상세 목록]
- * "sndngDtlStart": 발송상세 목록 시작 인덱스
- * "sndngDtlFetch": 한 번에 가져오는 발송상세 목록 수
- * "sndngDtlTotal": 조회 결과 찾은 전체 발송상세 수
- * }
- */
- @Task
- @RequestMapping(name="사전통지 발송 현황 상세 목록 조회", value=METHOD_URL.getAdvanceNoticeSendingDetailList)
- public ModelAndView getAdvanceNoticeSendingDetailList(SndbQuery req) {
- if (!"xls".equals(req.getDownload())) {
- List> result = sndngDtlService.getSndngDtlList(setFetchSize(req));
- return setCollectionInfo(new ModelAndView("jsonView"), result, "advntceSndngDtl");
- } else {
- // 현재 날짜 구하기
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
- String dateTime = dateFormat.format(System.currentTimeMillis());
-
- List 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 list = sndngDtlService.getSndngDtlList(req.setFetchSize(0));
-
- Map valueMap = new HashMap();
- valueMap.put("발송상태", format.of("SNDNG_DTL_STTS_NM").style(center));
- valueMap.put("등기번호", format.of("RG_NO").style(center));
- valueMap.put("발송일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_YMD").style(dateYMD));
- valueMap.put("발송종료일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_END_YMD").style(dateYMD));
- valueMap.put("성명", format.of("RCPN_NM"));
- valueMap.put("우편번호", format.of("RCPN_ZIP").style(center));
- valueMap.put("주소", format.of("RCPN_ADDR"));
- valueMap.put("상세주소", format.of("RCPN_DTL_ADDR"));
- valueMap.put("배달일자", FormatMaker.yyyy_mm_dd(format, "DLVR_YMD").style(dateYMD));
- valueMap.put("배달시각", format.of("DLVR_TM").style(center));
- valueMap.put("미배달사유", format.of("UNDLVR_RSN_NM"));
- valueMap.put("수령인", format.of("ACTL_RCPN_NM"));
- valueMap.put("수령인관계", format.of("RCPN_REL_NM"));
- valueMap.put("단속일시", format.of("CRDN_DT").style(center));
- valueMap.put("차량번호", format.of("VHRNO"));
- valueMap.put("단속법정동", format.of("CRDN_STDG_NM"));
- valueMap.put("단속장소", format.of("CRDN_PLC"));
- valueMap.put("회계연도", format.of("FYR").style(center));
- valueMap.put("부과번호", format.of("LEVY_NO").style(center));
- valueMap.put("부과일자", FormatMaker.yyyy_mm_dd(format, "LEVY_YMD").style(dateYMD));
- valueMap.put("납기일자", FormatMaker.yyyy_mm_dd(format, "DUDT_YMD").style(dateYMD));
- 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("등록일시", 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"));
- }
- }
-
- /**고지서 발송 대상 자료 메인화면(sndb/sndb01/090-main)을 연다.
- * @return /sndb/sndb01/090-main
- */
- @RequestMapping(name = "고지서 발송 대상 메인", value = METHOD_URL.noticeSheetTargetMain)
- public ModelAndView noticeSheetTargetMain() {
- ModelAndView mav = new ModelAndView("fims/sndb/sndb01090-main");
-
- // 사용자 정보
- FimsUser fimsUser = (FimsUser)currentUser().getUser();
-
- // View(jsp)에서 사용할 공통코드를 조회
- Map> commonCodes = getCodesOf("FIM004", "FIM005", "FIM006", "FIM054", "FIM061", "FIM064");
-
- addCodes(commonCodes, mav, "FIM004", "FIM005", "FIM006", "FIM061", "FIM064");
-
- return mav
- .addObject("pageName", "sndb01090") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
- .addObject("infoPrefix", "nhtTrgt") // prefix
- .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
- .addObject("sggCd", fimsUser.getOrgID()) // 시군구 코드(SGG_CD)
- .addObject("taskListForSgg", stngBean.filterTaskSectionCodeForSgg(commonCodes.get("FIM054"))) // 시군구에서 사용하는 업무 목록
- .addObject("FIM004List", commonCodes.get("FIM004")) // 주정차위반 내역 코드(VLTN_CD)
- .addObject("FIM005List", commonCodes.get("FIM005")) // 전용차로위반 내역 코드(VLTN_CD)
- .addObject("FIM006List", commonCodes.get("FIM006")) // 장애인주차위반 내역 코드(VLTN_CD)
- .addObject("FIM061List", commonCodes.get("FIM061")) // 전기차 충전구역 및 충전방해 위반 코드(VLTN_CD)
- .addObject("FIM064List", commonCodes.get("FIM064")) // 화물자동차 밤샘주차 위반 코드(VLTN_CD)
- ;
- }
-
- /**고지서 발송 대상 목록을 조회하여 반환한다.
- * {@link SndngService#getSndngList(SndngQuery)} 참고
- * @param req 발송 대장 조회 조건
- * @return jsonView
- * {
- * "sndngList": [사전통지 발송 대상 목록]
- * "sndngStart": 사전통지 발송 대상 목록 시작 인덱스
- * "sndngFetch": 한 번에 가져오는 사전통지 발송 대상 목록 수
- * "sndngTotal": 조회 결과 찾은 전체 사전통지 발송 대상 수
- * }
- */
- @Task
- @RequestMapping(name="고지서 발송 대상 목록 조회", value=METHOD_URL.getNoticeSheetTargetList)
- public ModelAndView getNoticeSheetTargetList(SndbQuery req) {
- if (!"xls".equals(req.getDownload())) {
- List> result = sndngService.getNhtTrgtList(setFetchSize(req));
- return setCollectionInfo(new ModelAndView("jsonView"), result, "nhtTrgt");
- } else {
- // 현재 날짜 구하기
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
- String dateTime = dateFormat.format(System.currentTimeMillis());
-
- List 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 list = sndngService.getNhtTrgtList(req.setFetchSize(0));
-
- Map valueMap = new HashMap();
- valueMap.put("업무구분", format.of("TASK_SE_NM").style(center));
- valueMap.put("민원신청번호", format.of("CVLCPT_APLY_NO").style(center));
- valueMap.put("민원접수번호", format.of("CVLCPT_RCPT_NO").style(center));
- valueMap.put("민원접수일자", FormatMaker.yyyy_mm_dd(format, "CVLCPT_RCPT_YMD").style(dateYMD));
- valueMap.put("민원처리담당자", format.of("CVLCPT_PRCS_PIC_NM").style(center));
- valueMap.put("민원처리결과", format.of("CVLCPT_PRCS_NM").style(center));
- valueMap.put("단속일시", FormatMaker.yyyy_mm_dd_hh_mm_ss(format, "CRDN_YMD_TM").style(dateDT));
- valueMap.put("차량번호", format.of("VHRNO"));
- valueMap.put("위반항목", format.of("VLTN_ARTCL"));
- valueMap.put("단속법정동", format.of("CRDN_STDG_NM"));
- valueMap.put("단속장소", format.of("CRDN_PLC"));
- valueMap.put("상세단속장소", format.of("DTL_CRDN_PLC"));
- valueMap.put("과태료금액", format.of("FFNLG_AMT").style(numeric));
- valueMap.put("사전통지금액", format.of("ADVNTCE_AMT").style(numeric));
- valueMap.put("처리상태", format.of("CRDN_STTS_NM"));
- valueMap.put("납부자명", format.of("RTPYR_NM"));
- valueMap.put("납부자생일", format.of("RTPYR_BRDT_MASK").style(center));
- valueMap.put("우편번호", format.of("ZIP").style(center));
- valueMap.put("주소", format.of("ADDR"));
- valueMap.put("상세주소", format.of("DTL_ADDR"));
- valueMap.put("단속특별구역", format.of("CRDN_SPAREA_NM").style(center));
- valueMap.put("사용연료", format.of("USE_FUEL_NM").style(center));
- valueMap.put("주차가능여부", format.of("PRK_PSBLTY_RSLT_NM").style(center));
- 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"));
- }
- }
-
- /**고지서 발송 대상 현황 - 발송 대상 상세 화면(sndb/sndb01/100-info)을 연다.
- * @param sndngId 발송 ID
- * @return fims/sndb/sndb01100-info 또는 jsonView
- * {
- * "sndngDtls": [고지서 발송 대상 상세 목록]
- * }
- */
- @Task
- @RequestMapping(name="고지서 발송 대상 상세 화면", value=METHOD_URL.getNoticeSheetTargetInfo)
- public ModelAndView getNoticeSheetTargetInfo(HttpServletRequest hReq, SndbQuery req) {
+ public static final String CLASS_URL = "/sndb/sndb01";
+
+ public class METHOD_URL {
+ public static final String
+ warningTargetMain = "/010/main.do" // 계고장 발송 대상 메인 화면
+ , getWarningTargetList = "/010/list.do" // 계고장 발송 대상 목록 조회
+ , getWarningTargetInfo = "/020/info.do" // 계고장 발송 대상 조회
+ , createWarningSendingList = "/020/createList.do" // 계고장 발송 대상 목록의 발송 등록
+ , warningSendingMain = "/030/main.do" // 계고장 발송 현황 메인 화면
+ , getWarningSendingList = "/030/list.do" // 계고장 발송 현황 목록 조회
+ , getWarningSendingDetailInfo = "/040/info.do" // 계고장 발송 현황 상세 화면
+ , getWarningSendingDetailList = "/040/list.do" // 계고장 발송 현황 상세 목록 조회
+ , advanceNoticeTargetMain = "/050/main.do" // 사전통지 발송 대상 메인 화면
+ , getAdvanceNoticeTargetList = "/050/list.do" // 사전통지 발송 대상 목록 조회
+ , getAdvanceNoticeTargetInfo = "/060/info.do" // 사전통지 발송 대상 조회
+ , createAdvanceNoticeSendingList = "/060/createList.do" // 사전통지 발송 대상 목록의 발송 등록
+ , advanceNoticeSendingMain = "/070/main.do" // 사전통지 발송 현황 메인 화면
+ , getAdvanceNoticeSendingList = "/070/list.do" // 사전통지 발송 현황 목록 조회
+ , removeAdvanceNoticeSending = "/070/remove.do" // 사전통지 발송 현황 삭제
+ , getAdvanceNoticeSendingDetailInfo = "/080/info.do" // 사전통지 발송 현황 상세 화면
+ , getAdvanceNoticeSendingDetailList = "/080/list.do" // 사전통지 발송 현황 상세 목록 조회
+ , createSendingLink = "/080/createSndngLink.do" // 사전통지 발송 현황 상세 목록의 우편통합 발송 연계 등록
+ , makeAdvanceNoticePdf = "/080/makeAdvntcePdf.do" // 사전통지 발송 현황 사전통지서 출력(PDF)
+ , makeAdvanceNoticeOutsourcing = "/080/makeAdvntceOutsourcing.do" // 사전통지 발송 현황 사전통지서 출력(외주파일)
+ , noticeSheetTargetMain = "/090/main.do" // 고지서 발송 대상 메인 화면
+ , getNoticeSheetTargetList = "/090/list.do" // 고지서 발송 대상 목록 조회
+ , getNoticeSheetTargetInfo = "/100/info.do" // 고지서 발송 대상 조회
+ , createNoticeSheetSendingList = "/100/createList.do" // 고지서 발송 대상 목록의 발송 등록
+ , noticeSheetSendingMain = "/110/main.do" // 고지서 발송 현황 메인 화면
+ , getNoticeSheetSendingList = "/110/list.do" // 고지서 발송 현황 상세 목록 조회
+ , removeNoticeSheetSending = "/110/remove.do" // 고지서 발송 현황 삭제
+ , getNoticeSheetSendingDetailInfo = "/120/info.do" // 고지서 발송 현황 화면
+ , getNoticeSheetSendingDetailList = "/120/list.do" // 고지서 발송 현황 상세 목록 조회
+ , makeNoticeSheetPdf = "/120/makeNhtPdf.do" // 고지서 발송 현황 사전통지서 출력(PDF)
+ , makeNoticeSheetOutsourcing = "/120/makeNhtOutsourcing.do" // 고지서 발송 현황 사전통지서 출력(외주파일)
+ , sendingDetailInfo = "/210/info.do" // 수기 반송 등록 상세
+ , getSendingDetailList = "/210/list.do" // 수기 반송 등록 조회
+ , sendBackMain = "/220/main.do" // 반송 현황 메인 화면
+ , getSendBackList = "/220/list.do" // 반송 현황 목록 조회
+ , removeSendBack = "/220/remove.do" // 반송 삭제
+ , getSendBackInfo = "/230/info.do" // 반송 정보 조회
+ , createSendBackList = "/230/createSndbkList.do" // 사전통지 발송 상세 목록의 반송 확인(등록)
+ , createSendBack = "/230/create.do" // 반송 등록
+ , updateSendBack = "/230/update.do" // 반송 수정
+ , serviceByPublicNoticeMain = "/240/main.do" // 공시송달 현황 메인 화면
+ , getServiceByPublicNoticeList = "/240/list.do" // 공시송달 현황 목록 조회
+ , removeServiceByPublicNotice = "/240/remove.do" // 공시송달 삭제
+ , makeSvbtcFileFromHwpFormat = "/240/makeSvbtcHwp.do" // 공시송달 한글 파일 출력
+ , getServiceByPublicNoticeDetailInfo = "/250/info.do" // 공시송달 상세 화면
+ , getServiceByPublicNoticeDetailList = "/250/list.do" // 공시송달 상세 목록 조회
+ , makeSvbtcDetailsFileFromHwpFormat = "/250/makeSvbtcDtlHwp.do" // 공시송달 상세 한글 파일 출력
+ , removeServiceByPublicNoticeEach = "/250/remove.do" // 공시송달 개별 삭제
+ , getServiceByPublicNoticeInfo = "/260/info.do" // 공시송달 정보
+ , createServiceByPublicNotice = "/260/create.do" // 공시송달 등록
+ , updateServiceByPublicNotice = "/260/update.do" // 공시송달 수정
+
+ , setNonTaxReceiptIndividualA01List = "/991/nxrpA01List.do" // 과태료 대장 단속 정보 등록(실시간) A01
+ , getNonTaxReceiptIndividualA03List = "/991/nxrpA03List.do" // 과태료 대장 등록 자료 상세 조회(실시간) A03
+ , getNonTaxReceiptSpecialB01List = "/991/nxrpB01List.do" // 체납상세세목정보(실시간) B01
+ ;
+ }
+
+ /**발송 대장 서비스*/
+ @Resource(name="sndngService")
+ private SndngService sndngService;
+
+ /**발송 상세 서비스*/
+ @Resource(name="sndngDtlService")
+ private SndngDtlService sndngDtlService;
+
+ /**공시송달 대장 서비스*/
+ @Resource(name="svbtcService")
+ private SvbtcService svbtcService;
+
+ /**업무 정보 서비스*/
+ @Resource(name="taskBean")
+ private TaskBean taskBean;
+
+ /**통합 조회 서비스*/
+ @Resource(name="integrationSearchService")
+ private IntegrationSearchService integrationSearchService;
+
+ @Resource(name="stngBean")
+ private StngBean stngBean;
+
+ @Resource(name="fileBean")
+ private FileBean fileBean;
+
+ @Resource(name = "ogdpBean")
+ private OgdpBean ogdpBean;
+
+ @Resource(name="svbtcBean")
+ private SvbtcBean svbtcBean;
+
+ @Resource(name="mediaBean")
+ private MediaBean mediaBean;
+
+ @Resource(name="otptStngMapper")
+ private OtptStngMapper otptStngMapper;
+
+ @Resource(name="outsourcingStngBean")
+ protected OutsourcingStngBean outsourcingStngBean;
+
+ @Resource(name="integrationSearchMapper")
+ private IntegrationSearchMapper integrationSearchMapper;
+
+ /**계고장 발송 대상 자료 메인화면(sndb/sndb01/010-main)을 연다.
+ * @return /sndb/sndb01/010-main
+ */
+ @RequestMapping(name = "계도장 발송 대상 메인", value = METHOD_URL.warningTargetMain)
+ public ModelAndView warningTargetMain() {
+ ModelAndView mav = new ModelAndView("fims/sndb/sndb01010-main");
+
+ // 사용자 정보
+ FimsUser fimsUser = (FimsUser)currentUser().getUser();
+
+ // View(jsp)에서 사용할 공통코드를 조회
+ Map> commonCodes = getCodesOf("FIM004", "FIM005", "FIM006", "FIM022", "FIM054", "FIM061", "FIM064", "FIM066");
+ addCodes(commonCodes, mav, "FIM022", "FIM004", "FIM005", "FIM006", "FIM061", "FIM064", "FIM066"); // 위반 코드(VLTN_CD)
+
+ return mav
+ .addObject("pageName", "sndb01010") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
+ .addObject("prefixUrl", CLASS_URL) // prefixUrl
+ .addObject("sggCd", fimsUser.getOrgID()) // 시군구 코드(SGG_CD)
+ .addObject("taskListForSgg", stngBean.filterTaskSectionCodeForSgg(commonCodes.get("FIM054"))) // 시군구에서 사용하는 업무 목록
+ .addObject("FIM022List", commonCodes.get("FIM022")) // 부과 제외 사유 코드(LEVY_EXCL_RSN_CD)
+ .addObject("FIM004List", commonCodes.get("FIM004")) // 주정차위반 내역 코드(VLTN_ID)
+ .addObject("FIM005List", commonCodes.get("FIM005")) // 전용차로위반 내역 코드(VLTN_ID)
+ .addObject("FIM006List", commonCodes.get("FIM006")) // 장애인주차위반 내역 코드(VLTN_ID)
+ .addObject("FIM061List", commonCodes.get("FIM061")) // 전기차 충전구역 및 충전방해 위반 코드(VLTN_ID)
+ .addObject("FIM064List", commonCodes.get("FIM064")) // 화물자동차 밤샘주차 위반 코드(VLTN_ID)
+ .addObject("FIM066List", commonCodes.get("FIM066")) // 미세먼지 위반 코드(VLTN_ID)
+
+ ;
+ }
+
+ /**계고장 발송 대상 목록을 조회하여 반환한다.
+ * {@link SndngService#getSndngList(SndngQuery)} 참고
+ * @param req 발송 대장 조회 조건
+ * @return jsonView
+ * {
+ * "wrngSndngTrgtList": [계고장 발송 대상 목록]
+ * "wrngSndngTrgtStart": 계고장 발송 대상 목록 시작 인덱스
+ * "wrngSndngTrgtFetch": 한 번에 가져오는 계고장 발송 대상 목록 수
+ * "wrngSndngTrgtTotal": 조회 결과 찾은 전체 계고장 발송 대상 수
+ * }
+ */
+ @Task
+ @RequestMapping(name="계고장 발송 대상 목록 조회", value=METHOD_URL.getWarningTargetList)
+ public ModelAndView getWarningTargetList(SndbQuery req) {
+ if (!"xls".equals(req.getDownload())) {
+ List> result = sndngService.getWrngTrgtList(setFetchSize(req));
+ return setPagingInfo(new ModelAndView("jsonView"), result, "");
+ } else {
+ // 현재 날짜 구하기
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
+ String dateTime = dateFormat.format(System.currentTimeMillis());
+
+ List 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 list = sndngService.getWrngTrgtList(req.setFetchSize(0));
+
+ Map valueMap = new HashMap();
+ valueMap.put("업무구분", format.of("TASK_SE_NM").style(center));
+ valueMap.put("계고일자", FormatMaker.yyyy_mm_dd(format, "LEVY_EXCL_YMD").style(dateYMD));
+ valueMap.put("계고사유", format.of("LEVY_EXCL_RSN_NM"));
+ valueMap.put("기타내용", format.of("ETC_CN"));
+ valueMap.put("민원신청번호", format.of("CVLCPT_APLY_NO").style(center));
+ valueMap.put("민원접수번호", format.of("CVLCPT_RCPT_NO").style(center));
+ valueMap.put("민원접수일자", FormatMaker.yyyy_mm_dd(format, "CVLCPT_RCPT_YMD").style(dateYMD));
+ valueMap.put("민원처리담당자", format.of("CVLCPT_PRCS_PIC_NM").style(center));
+ valueMap.put("민원처리결과", format.of("CVLCPT_PRCS_NM").style(center));
+ valueMap.put("단속일시", FormatMaker.yyyy_mm_dd_hh_mm_ss(format, "CRDN_YMD_TM").style(dateDT));
+ valueMap.put("차량번호", format.of("VHRNO"));
+ valueMap.put("위반항목", format.of("VLTN_ARTCL"));
+ valueMap.put("단속법정동", format.of("CRDN_STDG_NM"));
+ valueMap.put("단속장소", format.of("CRDN_PLC"));
+ valueMap.put("상세단속장소", format.of("DTL_CRDN_PLC"));
+ valueMap.put("단속원금", format.of("FFNLG_CRDN_AMT").style(numeric));
+ valueMap.put("처리상태", format.of("CRDN_STTS_NM"));
+ valueMap.put("납부자명", format.of("RTPYR_NM"));
+ valueMap.put("납부자생일", format.of("RTPYR_BRDT_MASK").style(center));
+ valueMap.put("우편번호", format.of("ZIP").style(center));
+ valueMap.put("주소", format.of("ADDR"));
+ valueMap.put("상세주소", format.of("DTL_ADDR"));
+ valueMap.put("단속특별구역", format.of("CRDN_SPAREA_NM").style(center));
+ valueMap.put("사용연료", format.of("USE_FUEL_NM").style(center));
+ valueMap.put("주차가능여부", format.of("PRK_PSBLTY_RSLT_NM").style(center));
+ 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"));
+ }
+ }
+
+ /**계고장 발송 대상 정보 화면(sndb/sndb01/020-info)을 연다.
+ * @param crdnIds 단속 Ids
+ * @return fims/sndb/sndb01020-info 또는 jsonView
+ * {
+ * "wrngSndngTrgts": [계고장 발송 대상 목록]
+ * }
+ */
+ @Task
+ @RequestMapping(name="계고장 발송 대상 상세 조회", value=METHOD_URL.getWarningTargetInfo)
+ public ModelAndView getWarningTargetInfo(HttpServletRequest hReq, SndbQuery req) {
+ ModelAndView mav = getWarningTargetList(req);
+
+ mav.setViewName("fims/sndb/sndb01020-info");
+
+ return mav
+ .addObject("callPurpose", req.getCallPurpose()) // 호출 용도
+ .addObject("pageName", "sndb01020") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
+ .addObject("prefixUrl", CLASS_URL) // prefixUrl
+ .addObject("sggCd", req.getSggCd()) // 시군구 코드(SGG_CD)
+ .addObject("taskSeCd", req.getTaskSeCd()) // 업무 구분 코드(TASK_SE_CD)
+ .addObject("mainQuery", toJson(req)) // 검색 조건
+ .addObject("List", toJson(mav.getModel().get("List"))) // 데이터
+ .addObject("Paging", toJson(mav.getModel().get("Paging"))) // 페이징
+ ;
+ }
+
+ /**계도장 발송 대상을 조회하여 발송 대장에 등록한다.
+ * @param req 계도장 발송 대상 조회, sndng 발송 대장
+ * @return jsonView
+ * {
+ * "saved": 등록되었으면 true, 그렇지 않으면 false
+ * }
+ */
+ @Task
+ @RequestMapping(name="계고장 발송 등록", value=METHOD_URL.createWarningSendingList)
+ public ModelAndView createWarningSendingList(SndbQuery req, Sndng sndng) {
+ boolean saved = false;
+ String rtnMsg = sndngService.createWrngSndngList(req, sndng);
+
+ if (rtnMsg.contains("[S]")) {
+ saved = true;
+ } else {
+ saved = false;
+ }
+
+ return new ModelAndView("jsonView")
+ .addObject("saved", saved)
+ .addObject("rtnMsg", rtnMsg);
+ }
+
+ /**계도장 발송 현황 메인화면(sndb/sndb01/030-main)을 연다.
+ * @return /sndb/sndb01/030-main
+ */
+ @RequestMapping(name = "계도장 발송 현황 메인", value = METHOD_URL.warningSendingMain)
+ public ModelAndView warningSendingMain() {
+ ModelAndView mav = new ModelAndView("fims/sndb/sndb01030-main");
+
+ // 사용자 정보
+ FimsUser fimsUser = (FimsUser)currentUser().getUser();
+
+ // View(jsp)에서 사용할 공통코드를 조회
+ Map> commonCodes = getCodesOf("FIM054", "FIM067");
+
+ return mav
+ .addObject("pageName", "sndb01030") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
+ .addObject("infoPrefix", "wrngSndng") // prefix
+ .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
+ .addObject("sggCd", fimsUser.getOrgID()) // 시군구 코드(SGG_CD)
+ .addObject("taskListForSgg", stngBean.filterTaskSectionCodeForSgg(commonCodes.get("FIM054"))) // 시군구에서 사용하는 업무 목록
+ .addObject("FIM067List", commonCodes.get("FIM067")) // 발송 등록 구분 코드(SNDNG_REG_SE_CD)
+ ;
+ }
+
+ /**계도장 발송 현황 목록을 조회하여 반환한다.
+ * {@link SndngService#getWarningSendingList(SndngQuery)} 참고
+ * @param req 발송 대장 조회 조건
+ * @return jsonView
+ * {
+ * "sndngList": [계도장 발송 현황 목록]
+ * "sndngStart": 계도장 발송 현황 목록 시작 인덱스
+ * "sndngFetch": 한 번에 가져오는 계도장 발송 현황 목록 수
+ * "sndngTotal": 조회 결과 찾은 전체 계도장 발송 현황 수
+ * }
+ */
+ @Task
+ @RequestMapping(name="계고장 발송 현황 목록 조회", value=METHOD_URL.getWarningSendingList)
+ public ModelAndView getWarningSendingList(SndbQuery req) {
+ if (!"xls".equals(req.getDownload())) {
+ List> result = sndngService.getWrngSndngList(setFetchSize(req));
+ return setCollectionInfo(new ModelAndView("jsonView"), result, "wrngSndng");
+ } else {
+ // 현재 날짜 구하기
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
+ String dateTime = dateFormat.format(System.currentTimeMillis());
+
+ List 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 list = sndngService.getWrngSndngList(req.setFetchSize(0));
+
+ Map valueMap = new HashMap();
+ valueMap.put("업무구분", format.of("TASK_SE_NM").style(center));
+ valueMap.put("등록구분", format.of("SNDNG_REG_SE_NM").style(center));
+ valueMap.put("위반항목", format.of("VLTN_ARTCL"));
+ valueMap.put("발송일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_YMD").style(dateYMD));
+ valueMap.put("납기일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_END_YMD").style(dateYMD));
+ valueMap.put("총건수", format.of("TNOCS").style(numeric));
+ valueMap.put("총금액", format.of("GRAMT").style(numeric));
+ valueMap.put("문서번호", format.of("DOC_NO"));
+ valueMap.put("제목", format.of("TTL_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"));
+ }
+ }
+
+ /**계도장 발송 현황 - 발송상세 화면(sndb/sndb01/040-info)을 연다.
+ * @param sndngId 발송 ID
+ * @return fims/sndb/sndb01040-info 또는 jsonView
+ * {
+ * "sndngDtls": [계도장 발송 상세 목록]
+ * }
+ */
+ @Task
+ @RequestMapping(name="계고장 발송 현황 상세 화면", value=METHOD_URL.getWarningSendingDetailInfo)
+ public ModelAndView getWarningSendingDetailInfo(HttpServletRequest hReq, SndbQuery req) {
+ ModelAndView mav = getWarningSendingDetailList(req);
+
+ mav.setViewName("fims/sndb/sndb01040-info");
+
+ return mav
+ .addObject("openerPageName", hReq.getParameter("openerPageName")) // 호출한 Jsp PageName
+ .addObject("callPurpose", req.getCallPurpose()) // 호출 용도
+ .addObject("pageName", "sndb01040") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
+ .addObject("infoPrefix", "wrngSndngDtl") // prefix
+ .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
+ .addObject("sggCd", req.getSggCd()) // 시군구 코드(SGG_CD)
+ .addObject("taskSeCd", req.getTaskSeCd()) // 업무 구분 코드(TASK_SE_CD)
+ .addObject("sndngId", req.getSndngId()) // 발송 ID(SNDNG_ID)
+ .addObject("wrngSndngDtlList", toJson(mav.getModel().get("wrngSndngDtlList"))) // 자료
+ ;
+ }
+
+ /**계도장 발송 현황 - 발송상세 목록을 조회하여 반환한다.
+ * {@link SndngService#getSndngList(SndngQuery)} 참고
+ * @param req 발송 대장 조회 조건
+ * @return jsonView
+ * {
+ * "sndngDtlList": [발송상세 목록]
+ * "sndngDtlStart": 발송상세 목록 시작 인덱스
+ * "sndngDtlFetch": 한 번에 가져오는 발송상세 목록 수
+ * "sndngDtlTotal": 조회 결과 찾은 전체 발송상세 수
+ * }
+ */
+ @Task
+ @RequestMapping(name="계고장 발송 현황 상세 목록 조회", value=METHOD_URL.getWarningSendingDetailList)
+ public ModelAndView getWarningSendingDetailList(SndbQuery req) {
+ if (!"xls".equals(req.getDownload())) {
+ List> result = sndngDtlService.getSndngDtlList(setFetchSize(req));
+ return setCollectionInfo(new ModelAndView("jsonView"), result, "wrngSndngDtl");
+ } else {
+ // 현재 날짜 구하기
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
+ String dateTime = dateFormat.format(System.currentTimeMillis());
+
+ List 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 list = sndngDtlService.getSndngDtlList(req.setFetchSize(0));
+
+ Map valueMap = new HashMap();
+ valueMap.put("발송상태", format.of("SNDNG_DTL_STTS_NM").style(center));
+ valueMap.put("등기번호", format.of("RG_NO").style(center));
+ valueMap.put("발송일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_YMD").style(dateYMD));
+ valueMap.put("납기일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_END_YMD").style(dateYMD));
+ valueMap.put("성명", format.of("RCPN_NM"));
+ valueMap.put("우편번호", format.of("RCPN_ZIP").style(center));
+ valueMap.put("주소", format.of("RCPN_ADDR"));
+ valueMap.put("상세주소", format.of("RCPN_DTL_ADDR"));
+ valueMap.put("배달일자", FormatMaker.yyyy_mm_dd(format, "DLVR_YMD").style(dateYMD));
+ valueMap.put("배달시각", format.of("DLVR_TM").style(center));
+ valueMap.put("미배달사유", format.of("UNDLVR_RSN_NM"));
+ valueMap.put("수령인", format.of("ACTL_RCPN_NM"));
+ valueMap.put("수령인관계", format.of("RCPN_REL_NM"));
+ valueMap.put("단속일시", format.of("CRDN_DT").style(center));
+ valueMap.put("차량번호", format.of("VHRNO"));
+ valueMap.put("단속법정동", format.of("CRDN_STDG_NM"));
+ valueMap.put("단속장소", format.of("CRDN_PLC"));
+ valueMap.put("과태료금액", format.of("FFNLG_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));
+ 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"));
+ }
+ }
+
+ /**사전통지 발송 대상 자료 메인화면(sndb/sndb01/050-main)을 연다.
+ * @return /sndb/sndb01/050-main
+ */
+ @RequestMapping(name = "사전통지 발송 대상 메인", value = METHOD_URL.advanceNoticeTargetMain)
+ public ModelAndView advanceNoticeTargetMain() {
+ ModelAndView mav = new ModelAndView("fims/sndb/sndb01050-main");
+
+ // 사용자 정보
+ FimsUser fimsUser = (FimsUser)currentUser().getUser();
+
+ // View(jsp)에서 사용할 공통코드를 조회
+ Map> commonCodes = getCodesOf("FIM004", "FIM005", "FIM006", "FIM054", "FIM061", "FIM064");
+
+ addCodes(commonCodes, mav, "FIM004", "FIM005", "FIM006", "FIM061", "FIM064");
+
+ return mav
+ .addObject("pageName", "sndb01050") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
+ .addObject("infoPrefix", "advntceTrgt") // prefix
+ .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
+ .addObject("sggCd", fimsUser.getOrgID()) // 시군구 코드(SGG_CD)
+ .addObject("taskListForSgg", stngBean.filterTaskSectionCodeForSgg(commonCodes.get("FIM054"))) // 시군구에서 사용하는 업무 목록
+ .addObject("FIM004List", commonCodes.get("FIM004")) // 주정차위반 내역 코드(VLTN_CD)
+ .addObject("FIM005List", commonCodes.get("FIM005")) // 전용차로위반 내역 코드(VLTN_CD)
+ .addObject("FIM006List", commonCodes.get("FIM006")) // 장애인주차위반 내역 코드(VLTN_CD)
+ .addObject("FIM061List", commonCodes.get("FIM061")) // 전기차 충전구역 및 충전방해 위반 코드(VLTN_CD)
+ .addObject("FIM064List", commonCodes.get("FIM064")) // 화물자동차 밤샘주차 위반 코드(VLTN_CD)
+ ;
+ }
+
+ /**사전통지 발송 대상 목록을 조회하여 반환한다.
+ * {@link SndngService#getSndngList(SndngQuery)} 참고
+ * @param req 발송 대장 조회 조건
+ * @return jsonView
+ * {
+ * "sndngList": [사전통지 발송 대상 목록]
+ * "sndngStart": 사전통지 발송 대상 목록 시작 인덱스
+ * "sndngFetch": 한 번에 가져오는 사전통지 발송 대상 목록 수
+ * "sndngTotal": 조회 결과 찾은 전체 사전통지 발송 대상 수
+ * }
+ */
+ @Task
+ @RequestMapping(name="사전통지 발송 대상 목록 조회", value=METHOD_URL.getAdvanceNoticeTargetList)
+ public ModelAndView getAdvanceNoticeTargetList(SndbQuery req) {
+ if (!"xls".equals(req.getDownload())) {
+ List> result = sndngService.getAdvntceTrgtList(setFetchSize(req));
+ return setCollectionInfo(new ModelAndView("jsonView"), result, "advntceTrgt");
+ } else {
+ // 현재 날짜 구하기
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
+ String dateTime = dateFormat.format(System.currentTimeMillis());
+
+ List 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 list = sndngService.getAdvntceTrgtList(req.setFetchSize(0));
+
+ Map valueMap = new HashMap();
+ valueMap.put("업무구분", format.of("TASK_SE_NM").style(center));
+ valueMap.put("민원신청번호", format.of("CVLCPT_APLY_NO").style(center));
+ valueMap.put("민원접수번호", format.of("CVLCPT_RCPT_NO").style(center));
+ valueMap.put("민원접수일자", FormatMaker.yyyy_mm_dd(format, "CVLCPT_RCPT_YMD").style(dateYMD));
+ valueMap.put("민원처리담당자", format.of("CVLCPT_PRCS_PIC_NM").style(center));
+ valueMap.put("민원처리결과", format.of("CVLCPT_PRCS_NM").style(center));
+ valueMap.put("단속일시", FormatMaker.yyyy_mm_dd_hh_mm_ss(format, "CRDN_YMD_TM").style(dateDT));
+ valueMap.put("차량번호", format.of("VHRNO"));
+ valueMap.put("위반항목", format.of("VLTN_ARTCL"));
+ valueMap.put("단속법정동", format.of("CRDN_STDG_NM"));
+ valueMap.put("단속장소", format.of("CRDN_PLC"));
+ valueMap.put("상세단속장소", format.of("DTL_CRDN_PLC"));
+ valueMap.put("과태료금액", format.of("FFNLG_AMT").style(numeric));
+ valueMap.put("사전통지금액", format.of("ADVNTCE_AMT").style(numeric));
+ valueMap.put("처리상태", format.of("CRDN_STTS_NM"));
+ valueMap.put("납부자명", format.of("RTPYR_NM"));
+ valueMap.put("납부자생일", format.of("RTPYR_BRDT_MASK").style(center));
+ valueMap.put("우편번호", format.of("ZIP").style(center));
+ valueMap.put("주소", format.of("ADDR"));
+ valueMap.put("상세주소", format.of("DTL_ADDR"));
+ valueMap.put("단속특별구역", format.of("CRDN_SPAREA_NM").style(center));
+ valueMap.put("사용연료", format.of("USE_FUEL_NM").style(center));
+ valueMap.put("주차가능여부", format.of("PRK_PSBLTY_RSLT_NM").style(center));
+ 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"));
+ }
+ }
+
+ /**사전통지 발송 대상 정보 화면(sndb/sndb01/060-info)을 연다.
+ * @param crdnIds 단속 Ids
+ * @return fims/sndb/sndb01060-info 또는 jsonView
+ * {
+ * "advntceSndngTrgs": [사전통지 발송 대상 목록]
+ * }
+ */
+ @Task
+ @RequestMapping(name="사전통지 발송 대상 상세 조회", value=METHOD_URL.getAdvanceNoticeTargetInfo)
+ public ModelAndView getAdvanceNoticeTargetInfo(HttpServletRequest hReq, SndbQuery req) {
+ ModelAndView mav = getAdvanceNoticeTargetList(req);
+
+ mav.setViewName("fims/sndb/sndb01060-info");
+
+ // 사전통지 납기일자
+ DataObject advntceYmdInfo = taskBean.getAdvntceYmdInfo(new CmmnQuery().setSggCd(req.getSggCd())
+ .setTaskSeCd(req.getTaskSeCd()));
+
+ return mav
+ .addObject("openerPageName", hReq.getParameter("openerPageName")) // 호출한 Jsp PageName
+ .addObject("callPurpose", req.getCallPurpose()) // 호출 용도
+ .addObject("pageName", "sndb01060") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
+ .addObject("infoPrefix", "advntceTrgt") // prefix
+ .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
+ .addObject("mainQuery", toJson(req)) // 검색 조건
+ .addObject("advntceTrgtList", toJson(mav.getModel().get("advntceTrgtList"))) // 자료
+ .addObject("advntceYmdInfo", toJson(advntceYmdInfo)) // 사전통지 기간 정보
+ ;
+ }
+
+ /**사전통지 발송 대상을 등록한다.
+ * @param sndng 발송 정보
+ * @return jsonView
+ * {
+ * "saved": 등록되었으면 true, 그렇지 않으면 false
+ * }
+ */
+ @Task
+ @RequestMapping(name="사전통지 발송 등록", value=METHOD_URL.createAdvanceNoticeSendingList)
+ public ModelAndView createAdvanceNoticeSendingList(SndbQuery req, Sndng sndng) {
+ boolean saved = false;
+ String rtnMsg = sndngService.createAdvntceSndngList(req, sndng);
+
+ if (rtnMsg.contains("[S]")) {
+ saved = true;
+ } else {
+ saved = false;
+ }
+
+ return new ModelAndView("jsonView")
+ .addObject("saved", saved)
+ .addObject("rtnMsg", rtnMsg);
+ }
+
+ /**사전통지 발송 현황 메인화면(sndb/sndb01/070-main)을 연다.
+ *
+ * @return /sndb/sndb01/070-main
+ */
+ @RequestMapping(name = "사전통지 발송 현황 메인", value = METHOD_URL.advanceNoticeSendingMain)
+ public ModelAndView advanceNoticeSendingMain() {
+ ModelAndView mav = new ModelAndView("fims/sndb/sndb01070-main");
+
+ // 사용자 정보
+ FimsUser fimsUser = (FimsUser)currentUser().getUser();
+
+ // View(jsp)에서 사용할 공통코드를 조회
+ Map> commonCodes = getCodesOf("FIM054", "FIM067");
+
+ return mav
+ .addObject("pageName", "sndb01070") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
+ .addObject("infoPrefix", "advntceSndng") // prefix
+ .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
+ .addObject("sggCd", fimsUser.getOrgID()) // 시군구 코드(SGG_CD)
+ .addObject("taskListForSgg", stngBean.filterTaskSectionCodeForSgg(commonCodes.get("FIM054"))) // 시군구에서 사용하는 업무 목록
+ .addObject("FIM067List", commonCodes.get("FIM067")) // 발송 등록 구분 코드(SNDNG_REG_SE_CD)
+ ;
+ }
+
+ /**사전통지 발송 현황 목록을 조회하여 반환한다.
+ * {@link SndngService#getSndngList(SndngQuery)} 참고
+ * @param req 발송 대장 조회 조건
+ * @return jsonView
+ * {
+ * "sndngList": [사전통지 발송 현황 목록]
+ * "sndngStart": 사전통지 발송 현황 목록 시작 인덱스
+ * "sndngFetch": 한 번에 가져오는 사전통지 발송 현황 목록 수
+ * "sndngTotal": 조회 결과 찾은 전체 사전통지 발송 현황 수
+ * }
+ */
+ @Task
+ @RequestMapping(name="사전통지 발송 현황 목록 조회", value=METHOD_URL.getAdvanceNoticeSendingList)
+ public ModelAndView getAdvanceNoticeSendingList(SndbQuery req) {
+ if (!"xls".equals(req.getDownload())) {
+ List> result = sndngService.getAdvntceSndngList(setFetchSize(req));
+ return setCollectionInfo(new ModelAndView("jsonView"), result, "advntceSndng");
+ } else {
+ // 현재 날짜 구하기
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
+ String dateTime = dateFormat.format(System.currentTimeMillis());
+
+ List 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 list = sndngService.getAdvntceSndngList(req.setFetchSize(0));
+
+ Map valueMap = new HashMap();
+ valueMap.put("업무구분", format.of("TASK_SE_NM").style(center));
+ valueMap.put("등록구분", format.of("SNDNG_REG_SE_NM").style(center));
+ valueMap.put("위반항목", format.of("VLTN_ARTCL"));
+ valueMap.put("발송일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_YMD").style(dateYMD));
+ valueMap.put("납기일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_END_YMD").style(dateYMD));
+ valueMap.put("총건수", format.of("TNOCS").style(numeric));
+ valueMap.put("총금액", format.of("GRAMT").style(numeric));
+ valueMap.put("문서번호", format.of("DOC_NO"));
+ valueMap.put("제목", format.of("TTL_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"));
+ }
+ }
+
+ /**사전통지 발송 현황 - 발송상세 화면(sndb/sndb01/080-info)을 연다.
+ * @param sndngId 발송 ID
+ * @return fims/sndb/sndb01080-info 또는 jsonView
+ * {
+ * "sndngDtls": [사전통지 발송 상세 목록]
+ * }
+ */
+ @Task
+ @RequestMapping(name="사전통지 발송 현황 상세 화면", value=METHOD_URL.getAdvanceNoticeSendingDetailInfo)
+ public ModelAndView getAdvanceNoticeSendingDetailInfo(HttpServletRequest hReq, SndbQuery req) {
+ ModelAndView mav = getAdvanceNoticeSendingDetailList(req);
+
+ mav.setViewName("fims/sndb/sndb01080-info");
+
+ return mav
+ .addObject("openerPageName", hReq.getParameter("openerPageName")) // 호출한 Jsp PageName
+ .addObject("callPurpose", req.getCallPurpose()) // 호출 용도
+ .addObject("pageName", "sndb01080") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
+ .addObject("infoPrefix", "advntceSndngDtl") // prefix
+ .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
+ .addObject("sggCd", req.getSggCd()) // 시군구 코드(SGG_CD)
+ .addObject("taskSeCd", req.getTaskSeCd()) // 업무 구분 코드(TASK_SE_CD)
+ .addObject("sndngId", req.getSndngId()) // 발송 ID(SNDNG_ID)
+ .addObject("advntceSndngDtlList", toJson(mav.getModel().get("advntceSndngDtlList"))) // 자료
+ ;
+ }
+
+ /**사전통지 발송 현황 - 발송상세 목록을 조회하여 반환한다.
+ * {@link SndngService#getSndngList(SndngQuery)} 참고
+ * @param req 발송 대장 조회 조건
+ * @return jsonView
+ * {
+ * "sndngDtlList": [발송상세 목록]
+ * "sndngDtlStart": 발송상세 목록 시작 인덱스
+ * "sndngDtlFetch": 한 번에 가져오는 발송상세 목록 수
+ * "sndngDtlTotal": 조회 결과 찾은 전체 발송상세 수
+ * }
+ */
+ @Task
+ @RequestMapping(name="사전통지 발송 현황 상세 목록 조회", value=METHOD_URL.getAdvanceNoticeSendingDetailList)
+ public ModelAndView getAdvanceNoticeSendingDetailList(SndbQuery req) {
+ if (!"xls".equals(req.getDownload())) {
+ List> result = sndngDtlService.getSndngDtlList(setFetchSize(req));
+ return setCollectionInfo(new ModelAndView("jsonView"), result, "advntceSndngDtl");
+ } else {
+ // 현재 날짜 구하기
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
+ String dateTime = dateFormat.format(System.currentTimeMillis());
+
+ List 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 list = sndngDtlService.getSndngDtlList(req.setFetchSize(0));
+
+ Map valueMap = new HashMap();
+ valueMap.put("발송상태", format.of("SNDNG_DTL_STTS_NM").style(center));
+ valueMap.put("등기번호", format.of("RG_NO").style(center));
+ valueMap.put("발송일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_YMD").style(dateYMD));
+ valueMap.put("발송종료일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_END_YMD").style(dateYMD));
+ valueMap.put("성명", format.of("RCPN_NM"));
+ valueMap.put("우편번호", format.of("RCPN_ZIP").style(center));
+ valueMap.put("주소", format.of("RCPN_ADDR"));
+ valueMap.put("상세주소", format.of("RCPN_DTL_ADDR"));
+ valueMap.put("배달일자", FormatMaker.yyyy_mm_dd(format, "DLVR_YMD").style(dateYMD));
+ valueMap.put("배달시각", format.of("DLVR_TM").style(center));
+ valueMap.put("미배달사유", format.of("UNDLVR_RSN_NM"));
+ valueMap.put("수령인", format.of("ACTL_RCPN_NM"));
+ valueMap.put("수령인관계", format.of("RCPN_REL_NM"));
+ valueMap.put("단속일시", format.of("CRDN_DT").style(center));
+ valueMap.put("차량번호", format.of("VHRNO"));
+ valueMap.put("단속법정동", format.of("CRDN_STDG_NM"));
+ valueMap.put("단속장소", format.of("CRDN_PLC"));
+ valueMap.put("회계연도", format.of("FYR").style(center));
+ valueMap.put("부과번호", format.of("LEVY_NO").style(center));
+ valueMap.put("부과일자", FormatMaker.yyyy_mm_dd(format, "LEVY_YMD").style(dateYMD));
+ valueMap.put("납기일자", FormatMaker.yyyy_mm_dd(format, "DUDT_YMD").style(dateYMD));
+ 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("등록일시", 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"));
+ }
+ }
+
+ /**고지서 발송 대상 자료 메인화면(sndb/sndb01/090-main)을 연다.
+ * @return /sndb/sndb01/090-main
+ */
+ @RequestMapping(name = "고지서 발송 대상 메인", value = METHOD_URL.noticeSheetTargetMain)
+ public ModelAndView noticeSheetTargetMain() {
+ ModelAndView mav = new ModelAndView("fims/sndb/sndb01090-main");
+
+ // 사용자 정보
+ FimsUser fimsUser = (FimsUser)currentUser().getUser();
+
+ // View(jsp)에서 사용할 공통코드를 조회
+ Map> commonCodes = getCodesOf("FIM004", "FIM005", "FIM006", "FIM054", "FIM061", "FIM064");
+
+ addCodes(commonCodes, mav, "FIM004", "FIM005", "FIM006", "FIM061", "FIM064");
+
+ return mav
+ .addObject("pageName", "sndb01090") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
+ .addObject("infoPrefix", "nhtTrgt") // prefix
+ .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
+ .addObject("sggCd", fimsUser.getOrgID()) // 시군구 코드(SGG_CD)
+ .addObject("taskListForSgg", stngBean.filterTaskSectionCodeForSgg(commonCodes.get("FIM054"))) // 시군구에서 사용하는 업무 목록
+ .addObject("FIM004List", commonCodes.get("FIM004")) // 주정차위반 내역 코드(VLTN_CD)
+ .addObject("FIM005List", commonCodes.get("FIM005")) // 전용차로위반 내역 코드(VLTN_CD)
+ .addObject("FIM006List", commonCodes.get("FIM006")) // 장애인주차위반 내역 코드(VLTN_CD)
+ .addObject("FIM061List", commonCodes.get("FIM061")) // 전기차 충전구역 및 충전방해 위반 코드(VLTN_CD)
+ .addObject("FIM064List", commonCodes.get("FIM064")) // 화물자동차 밤샘주차 위반 코드(VLTN_CD)
+ ;
+ }
+
+ /**고지서 발송 대상 목록을 조회하여 반환한다.
+ * {@link SndngService#getSndngList(SndngQuery)} 참고
+ * @param req 발송 대장 조회 조건
+ * @return jsonView
+ * {
+ * "sndngList": [사전통지 발송 대상 목록]
+ * "sndngStart": 사전통지 발송 대상 목록 시작 인덱스
+ * "sndngFetch": 한 번에 가져오는 사전통지 발송 대상 목록 수
+ * "sndngTotal": 조회 결과 찾은 전체 사전통지 발송 대상 수
+ * }
+ */
+ @Task
+ @RequestMapping(name="고지서 발송 대상 목록 조회", value=METHOD_URL.getNoticeSheetTargetList)
+ public ModelAndView getNoticeSheetTargetList(SndbQuery req) {
+ if (!"xls".equals(req.getDownload())) {
+ List> result = sndngService.getNhtTrgtList(setFetchSize(req));
+ return setCollectionInfo(new ModelAndView("jsonView"), result, "nhtTrgt");
+ } else {
+ // 현재 날짜 구하기
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
+ String dateTime = dateFormat.format(System.currentTimeMillis());
+
+ List 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 list = sndngService.getNhtTrgtList(req.setFetchSize(0));
+
+ Map valueMap = new HashMap();
+ valueMap.put("업무구분", format.of("TASK_SE_NM").style(center));
+ valueMap.put("민원신청번호", format.of("CVLCPT_APLY_NO").style(center));
+ valueMap.put("민원접수번호", format.of("CVLCPT_RCPT_NO").style(center));
+ valueMap.put("민원접수일자", FormatMaker.yyyy_mm_dd(format, "CVLCPT_RCPT_YMD").style(dateYMD));
+ valueMap.put("민원처리담당자", format.of("CVLCPT_PRCS_PIC_NM").style(center));
+ valueMap.put("민원처리결과", format.of("CVLCPT_PRCS_NM").style(center));
+ valueMap.put("단속일시", FormatMaker.yyyy_mm_dd_hh_mm_ss(format, "CRDN_YMD_TM").style(dateDT));
+ valueMap.put("차량번호", format.of("VHRNO"));
+ valueMap.put("위반항목", format.of("VLTN_ARTCL"));
+ valueMap.put("단속법정동", format.of("CRDN_STDG_NM"));
+ valueMap.put("단속장소", format.of("CRDN_PLC"));
+ valueMap.put("상세단속장소", format.of("DTL_CRDN_PLC"));
+ valueMap.put("과태료금액", format.of("FFNLG_AMT").style(numeric));
+ valueMap.put("사전통지금액", format.of("ADVNTCE_AMT").style(numeric));
+ valueMap.put("처리상태", format.of("CRDN_STTS_NM"));
+ valueMap.put("납부자명", format.of("RTPYR_NM"));
+ valueMap.put("납부자생일", format.of("RTPYR_BRDT_MASK").style(center));
+ valueMap.put("우편번호", format.of("ZIP").style(center));
+ valueMap.put("주소", format.of("ADDR"));
+ valueMap.put("상세주소", format.of("DTL_ADDR"));
+ valueMap.put("단속특별구역", format.of("CRDN_SPAREA_NM").style(center));
+ valueMap.put("사용연료", format.of("USE_FUEL_NM").style(center));
+ valueMap.put("주차가능여부", format.of("PRK_PSBLTY_RSLT_NM").style(center));
+ 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"));
+ }
+ }
+
+ /**고지서 발송 대상 현황 - 발송 대상 상세 화면(sndb/sndb01/100-info)을 연다.
+ * @param sndngId 발송 ID
+ * @return fims/sndb/sndb01100-info 또는 jsonView
+ * {
+ * "sndngDtls": [고지서 발송 대상 상세 목록]
+ * }
+ */
+ @Task
+ @RequestMapping(name="고지서 발송 대상 상세 화면", value=METHOD_URL.getNoticeSheetTargetInfo)
+ public ModelAndView getNoticeSheetTargetInfo(HttpServletRequest hReq, SndbQuery req) {
ModelAndView mav = new ModelAndView("fims/sndb/sndb01100-info");
- // View(jsp)에서 사용할 공통코드를 조회
- Map> commonCodes = getCodesOf("FIM004", "FIM005", "FIM006", "FIM047", "FIM061", "FIM064");
-
- addCodes(commonCodes, mav, "FIM004", "FIM005", "FIM006", "FIM061", "FIM064", "FIM047");
-
- return mav
- .addObject("openerPageName", hReq.getParameter("openerPageName")) // 호출한 Jsp PageName
- .addObject("callPurpose", req.getCallPurpose()) // 호출 용도
- .addObject("pageName", "sndb01100") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
- .addObject("infoPrefix", "nhtTrgt") // prefix
- .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
- .addObject("sggCd", req.getSggCd()) // 시군구 코드(SGG_CD)
- .addObject("taskSeCd", req.getTaskSeCd()) // 업무 구분 코드(TASK_SE_CD)
- .addObject("FIM047List", commonCodes.get("FIM047")) // 발송 구분 코드(SNDNG_SE_CD)
- ;
- }
-
- /**고지서 발송 대상을 등록한다.
- * @param sndng 발송 정보
- * @return jsonView
- * {
- * "saved": 등록되었으면 true, 그렇지 않으면 false
- * }
- */
- @Task
- @RequestMapping(name="고지서 발송 대장 등록", value=METHOD_URL.createNoticeSheetSendingList)
- public ModelAndView createNoticeSheetSendingList(SndbQuery req, Sndng sndng) {
- boolean saved = false;
- String rtnMsg = sndngService.createNhtSndngList(req, sndng);
-
- if (rtnMsg.contains("[S]")) {
- saved = true;
- } else {
- saved = false;
- }
-
- return new ModelAndView("jsonView")
- .addObject("saved", saved)
- .addObject("rtnMsg", rtnMsg);
- }
-
- /**지정한 부과제외 ID에 해당하는 부과제외 대장를 제거한다.
- * @param levyExclID 부과제외 대장 아이디
- * @return jsonView
- * {
- * "affected": 저장된 정보수
- * "saved": 저장되었으면 true, 그렇지 않으면 false
- * }
- */
- @Task
- @RequestMapping(name="고지서 발송 대장 삭제", value=METHOD_URL.removeNoticeSheetSending)
- public ModelAndView removeNoticeSheetSending(Sndng sndng) {
- boolean saved = false;
- String rtnMsg = "";
-
- // 발송(sndngId) 단건 삭제
- if (sndng.getSndngIds() == null || sndng.getSndngIds().length < 1) {
- rtnMsg = sndngService.removeSndng(sndng);
- } else {
- // 발송 Ids 만큼 삭제 반복..
- for (String sndngId : sndng.getSndngIds()) {
- Sndng deltSndng = new Sndng();
- deltSndng.setSndngId(sndngId);
- deltSndng.setDelRsn(sndng.getDelRsn());
-
- // 발송 삭제 호출
- rtnMsg = sndngService.removeSndng(deltSndng);
- if (!rtnMsg.contains("[S]")) // 오류가 발생하였으면 종료..
- break;
- }
- }
-
- if (rtnMsg.contains("[S]")) {
- saved = true;
- } else {
- saved = false;
- }
-
- return new ModelAndView("jsonView")
- .addObject("saved", saved)
- .addObject("rtnMsg", rtnMsg);
- }
-
- /**고지서 발송 현황 메인화면(sndb/sndb01/110-main)을 연다.
- *
- * @return /sndb/sndb01/110-main
- */
- @RequestMapping(name = "고지서 발송 현황 메인", value = METHOD_URL.noticeSheetSendingMain)
- public ModelAndView noticeSheetSendingMain() {
- ModelAndView mav = new ModelAndView("fims/sndb/sndb01110-main");
-
- // 사용자 정보
- FimsUser fimsUser = (FimsUser)currentUser().getUser();
-
- // View(jsp)에서 사용할 공통코드를 조회
- Map> commonCodes = getCodesOf("FIM047", "FIM054", "FIM067");
-
- addCodes(commonCodes, mav, "FIM047");
-
- return mav
- .addObject("pageName", "sndb01110") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
- .addObject("infoPrefix", "nhtSndng") // prefix
- .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
- .addObject("sggCd", fimsUser.getOrgID()) // 시군구 코드(SGG_CD)
- .addObject("taskListForSgg", stngBean.filterTaskSectionCodeForSgg(commonCodes.get("FIM054"))) // 시군구에서 사용하는 업무 목록
- .addObject("FIM047List", commonCodes.get("FIM047")) // 발송 구분 코드(SNDNG_SE_CD)
- .addObject("FIM067List", commonCodes.get("FIM067")) // 발송 등록 구분 코드(SNDNG_REG_SE_CD)
- ;
- }
-
- /**고지서 발송 현황 목록을 조회하여 반환한다.
- * {@link SndngService#getSndngList(SndngQuery)} 참고
- * @param req 발송 대장 조회 조건
- * @return jsonView
- * {
- * "sndngList": [고지서 발송 현황 목록]
- * "sndngStart": 고지서 발송 현황 목록 시작 인덱스
- * "sndngFetch": 한 번에 가져오는 고지서 발송 현황 목록 수
- * "sndngTotal": 조회 결과 찾은 전체 고지서 발송 현황 수
- * }
- */
- @Task
- @RequestMapping(name="고지서 발송 현황 목록 조회", value=METHOD_URL.getNoticeSheetSendingList)
- public ModelAndView getNoticeSheetSendingList(SndbQuery req) {
- if (!"xls".equals(req.getDownload())) {
- List> result = sndngService.getSndngList(setFetchSize(req));
- return setCollectionInfo(new ModelAndView("jsonView"), result, "nhtSndng");
- } else {
- // 현재 날짜 구하기
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
- String dateTime = dateFormat.format(System.currentTimeMillis());
-
- List 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 list = sndngService.getSndngList(req.setFetchSize(0));
-
- Map valueMap = new HashMap();
- valueMap.put("업무구분", format.of("TASK_SE_NM").style(center));
- valueMap.put("등록구분", format.of("SNDNG_REG_SE_NM").style(center));
- valueMap.put("위반항목", format.of("VLTN_ARTCL"));
- valueMap.put("발송일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_YMD").style(dateYMD));
- valueMap.put("납기일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_END_YMD").style(dateYMD));
- valueMap.put("총건수", format.of("TNOCS").style(numeric));
- valueMap.put("총금액", format.of("GRAMT").style(numeric));
- valueMap.put("문서번호", format.of("DOC_NO"));
- valueMap.put("제목", format.of("TTL_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"));
- }
- }
-
- /**고지서 발송 현황 - 발송상세 화면(sndb/sndb01/120-info)을 연다.
- * @param sndngId 발송 ID
- * @return fims/sndb/sndb01120-info 또는 jsonView
- * {
- * "sndngDtls": [고지서 발송 상세 목록]
- * }
- */
- @Task
- @RequestMapping(name="고지서 발송 현황 상세 화면", value=METHOD_URL.getNoticeSheetSendingDetailInfo)
- public ModelAndView getNoticeSheetSendingDetailInfo(HttpServletRequest hReq, SndbQuery req) {
- ModelAndView mav = getNoticeSheetSendingDetailList(req);
-
- mav.setViewName("fims/sndb/sndb01120-info");
-
- return mav
- .addObject("openerPageName", hReq.getParameter("openerPageName")) // 호출한 Jsp PageName
- .addObject("callPurpose", req.getCallPurpose()) // 호출 용도
- .addObject("pageName", "sndb01120") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
- .addObject("infoPrefix", "nhtSndngDtl") // prefix
- .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
- .addObject("sggCd", req.getSggCd()) // 시군구 코드(SGG_CD)
- .addObject("taskSeCd", req.getTaskSeCd()) // 업무 구분 코드(TASK_SE_CD)
- .addObject("sndngId", req.getSndngId()) // 발송 ID(SNDNG_ID)
- .addObject("nhtSndngDtlList", toJson(mav.getModel().get("nhtSndngDtlList"))) // 자료
- ;
- }
-
- /**고지서 발송 현황 - 발송상세 목록을 조회하여 반환한다.
- * {@link SndngService#getSndngList(SndngQuery)} 참고
- * @param req 발송 대장 조회 조건
- * @return jsonView
- * {
- * "sndngDtlList": [발송상세 목록]
- * "sndngDtlStart": 발송상세 목록 시작 인덱스
- * "sndngDtlFetch": 한 번에 가져오는 발송상세 목록 수
- * "sndngDtlTotal": 조회 결과 찾은 전체 발송상세 수
- * }
- */
- @Task
- @RequestMapping(name="고지서 발송 현황 상세 목록 조회", value=METHOD_URL.getNoticeSheetSendingDetailList)
- public ModelAndView getNoticeSheetSendingDetailList(SndbQuery req) {
- if (!"xls".equals(req.getDownload())) {
- List> result = sndngDtlService.getSndngDtlList(setFetchSize(req));
- return setCollectionInfo(new ModelAndView("jsonView"), result, "nhtSndngDtl");
- } else {
- // 현재 날짜 구하기
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
- String dateTime = dateFormat.format(System.currentTimeMillis());
-
- List 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 list = sndngDtlService.getSndngDtlList(req.setFetchSize(0));
-
- Map valueMap = new HashMap();
- valueMap.put("발송상태", format.of("SNDNG_DTL_STTS_NM").style(center));
- valueMap.put("등기번호", format.of("RG_NO").style(center));
- valueMap.put("발송일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_YMD").style(dateYMD));
- valueMap.put("발송종료일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_END_YMD").style(dateYMD));
- valueMap.put("성명", format.of("RCPN_NM"));
- valueMap.put("우편번호", format.of("RCPN_ZIP").style(center));
- valueMap.put("주소", format.of("RCPN_ADDR"));
- valueMap.put("상세주소", format.of("RCPN_DTL_ADDR"));
- valueMap.put("배달일자", FormatMaker.yyyy_mm_dd(format, "DLVR_YMD").style(dateYMD));
- valueMap.put("배달시각", format.of("DLVR_TM").style(center));
- valueMap.put("미배달사유", format.of("UNDLVR_RSN_NM"));
- valueMap.put("수령인", format.of("ACTL_RCPN_NM"));
- valueMap.put("수령인관계", format.of("RCPN_REL_NM"));
- valueMap.put("단속일시", format.of("CRDN_DT").style(center));
- valueMap.put("차량번호", format.of("VHRNO"));
- valueMap.put("단속법정동", format.of("CRDN_STDG_NM"));
- valueMap.put("단속장소", format.of("CRDN_PLC"));
- valueMap.put("회계연도", format.of("FYR").style(center));
- valueMap.put("부과번호", format.of("LEVY_NO").style(center));
- valueMap.put("부과일자", FormatMaker.yyyy_mm_dd(format, "LEVY_YMD").style(dateYMD));
- valueMap.put("납기일자", FormatMaker.yyyy_mm_dd(format, "DUDT_YMD").style(dateYMD));
- 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("등록일시", 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"));
- }
- }
-
- /**우편통합 발송 대상을 등록한다.
- * @param sndng 발송 정보
- * @return jsonView
- * {
- * "saved": 등록되었으면 true, 그렇지 않으면 false
- * }
- */
- @Task
- @RequestMapping(name="우편통합 발송 연계 등록", value=METHOD_URL.createSendingLink)
- public ModelAndView createSendingLink(Sndng sndng) {
- boolean saved = false;
- String rtnMsg = sndngService.createSndngLink(sndng);
-
- if (rtnMsg.contains("[S]")) {
- saved = true;
- } else {
- saved = false;
- }
-
- return new ModelAndView("jsonView")
- .addObject("saved", saved)
- .addObject("rtnMsg", rtnMsg);
- }
-
- /**수기 반송 등록 정보(sndb/sndb01/210-info)을 연다.
- *
- * @return /sndb/sndb01/210-info
- */
- @Task
- @RequestMapping(name = "수기 반송 등록 정보 조회", value = METHOD_URL.sendingDetailInfo)
- public ModelAndView sendingDetailInfo(HttpServletRequest hReq, SndbQuery req) {
- ModelAndView mav = new ModelAndView("fims/sndb/sndb01210-info");
-
- // View(jsp)에서 사용할 공통코드를 조회
- Map> commonCodes = getCodesOf("FIM047", "FIM054", "FIM081");
-
- return mav
- .addObject("openerPageName", hReq.getParameter("openerPageName")) // 호출한 Jsp PageName
- .addObject("callPurpose", req.getCallPurpose()) // 호출 용도
- .addObject("pageName", "sndb01210") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
- .addObject("infoPrefix", "sndbkTrgt") // prefix
- .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
- .addObject("sggCd", req.getSggCd()) // 시군구 코드(SGG_CD)
- .addObject("taskSeCd", req.getTaskSeCd()) // 업무 구분 코드(TASK_SE_CD)
- .addObject("FIM047List", commonCodes.get("FIM047")) // 발송 구분 코드(SNDNG_SE_CD)
- .addObject("FIM081List", commonCodes.get("FIM081")) // 미배달 사유 코드(UNDLVR_RSN_CD)
- ;
- }
-
- /**발송 상세 대장 목록을 조회하여 반환한다
- * {@link SndngService#getSndngList(SndngQuery)} 참고
- * @param req 발송 대장 조회 조건
- * @return jsonView
- * {
- * "sndngDtlList": [발송상세 목록]
- * "sndngDtlStart": 발송상세 목록 시작 인덱스
- * "sndngDtlFetch": 한 번에 가져오는 발송상세 목록 수
- * "sndngDtlTotal": 조회 결과 찾은 전체 발송상세 수
- * }
- */
- @Task
- @RequestMapping(name="반송 대상 목록 조회", value=METHOD_URL.getSendingDetailList)
- public ModelAndView getSendingDetailList(SndbQuery req) {
- if (!"xls".equals(req.getDownload())) {
- List> result = sndngDtlService.getSndngDtlList(setFetchSize(req));
- return setCollectionInfo(new ModelAndView("jsonView"), result, "sndbkTrgt");
- } else {
- // 현재 날짜 구하기
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
- String dateTime = dateFormat.format(System.currentTimeMillis());
-
- List 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 list = sndngDtlService.getSndngDtlList(req.setFetchSize(0));
-
- Map valueMap = new HashMap();
- valueMap.put("발송상태", format.of("SNDNG_DTL_STTS_NM").style(center));
- valueMap.put("등기번호", format.of("RG_NO").style(center));
- valueMap.put("발송일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_YMD").style(dateYMD));
- valueMap.put("발송종료일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_END_YMD").style(dateYMD));
- valueMap.put("성명", format.of("RCPN_NM"));
- valueMap.put("우편번호", format.of("RCPN_ZIP").style(center));
- valueMap.put("주소", format.of("RCPN_ADDR"));
- valueMap.put("상세주소", format.of("RCPN_DTL_ADDR"));
- valueMap.put("배달일자", FormatMaker.yyyy_mm_dd(format, "DLVR_YMD").style(dateYMD));
- valueMap.put("배달시각", format.of("DLVR_TM").style(center));
- valueMap.put("미배달사유", format.of("UNDLVR_RSN_NM"));
- valueMap.put("수령인", format.of("ACTL_RCPN_NM"));
- valueMap.put("수령인관계", format.of("RCPN_REL_NM"));
- valueMap.put("단속일시", format.of("CRDN_DT").style(center));
- valueMap.put("차량번호", format.of("VHRNO"));
- valueMap.put("단속법정동", format.of("CRDN_STDG_NM"));
- valueMap.put("단속장소", format.of("CRDN_PLC"));
- valueMap.put("회계연도", format.of("FYR").style(center));
- valueMap.put("부과번호", format.of("LEVY_NO").style(center));
- valueMap.put("부과일자", FormatMaker.yyyy_mm_dd(format, "LEVY_YMD").style(dateYMD));
- valueMap.put("납기일자", FormatMaker.yyyy_mm_dd(format, "DUDT_YMD").style(dateYMD));
- 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("등록일시", 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"));
- }
- }
-
- /**발송상세 목록의 반송 정보를 등록한다.
- * @param sndngDtl 발송상세 정보
- * @return jsonView
- * {
- * "saved": 수정되었으면 true, 그렇지 않으면 false
- * }
- */
- @Task
- @RequestMapping(name="발송상세 목록의 반송 정보 등록", value=METHOD_URL.createSendBackList)
- public ModelAndView createSendBackList(SndbQuery req) {
- boolean saved = false;
- String rtnMsg = sndngDtlService.createSndbkList(req);
-
- if (rtnMsg.contains("[S]")) {
- saved = true;
- } else {
- saved = false;
- }
-
- return new ModelAndView("jsonView")
- .addObject("saved", saved)
- .addObject("rtnMsg", rtnMsg);
- }
-
- /**발송상세 정보의 반송 정보를 등록한다.
- * @param sndngDtl 발송상세 정보
- * @return jsonView
- * {
- * "saved": 수정되었으면 true, 그렇지 않으면 false
- * }
- */
- @Task
- @RequestMapping(name="발송상세의 반송 정보 등록", value=METHOD_URL.createSendBack)
- public ModelAndView createSendBack(SndngDtl sndngDtl) {
- boolean saved = false;
- String rtnMsg = sndngDtlService.createSndbk(sndngDtl);
-
- if (rtnMsg.contains("[S]")) {
- saved = true;
- } else {
- saved = false;
- }
-
- return new ModelAndView("jsonView")
- .addObject("saved", saved)
- .addObject("rtnMsg", rtnMsg);
- }
-
- /**발송상세 정보의 반송 정보를 수정한다.
- * @param sndngDtl 발송상세 정보
- * @return jsonView
- * {
- * "saved": 수정되었으면 true, 그렇지 않으면 false
- * }
- */
- @Task
- @RequestMapping(name="발송상세의 반송 정보 수정", value=METHOD_URL.updateSendBack)
- public ModelAndView updateSendBack(SndngDtl sndngDtl) {
- boolean saved = false;
- String rtnMsg = sndngDtlService.updateSndbk(sndngDtl);
-
- if (rtnMsg.contains("[S]")) {
- saved = true;
- } else {
- saved = false;
- }
-
- return new ModelAndView("jsonView")
- .addObject("saved", saved)
- .addObject("rtnMsg", rtnMsg);
- }
-
- /**발송상세 정보의 반송 정보를 삭제한다.
- * @param sndngDtl 발송상세 정보
- * @return jsonView
- * {
- * "saved": 수정되었으면 true, 그렇지 않으면 false
- * }
- */
- @Task
- @RequestMapping(name="발송상세의 반송 정보 삭제", value=METHOD_URL.removeSendBack)
- public ModelAndView removeSendBack(SndngDtl sndngDtl) {
- boolean saved = false;
- String rtnMsg = sndngDtlService.removeSndbk(sndngDtl);
-
- if (rtnMsg.contains("[S]")) {
- saved = true;
- } else {
- saved = false;
- }
-
- return new ModelAndView("jsonView")
- .addObject("saved", saved)
- .addObject("rtnMsg", rtnMsg);
- }
-
- /**반송 현황 메인화면(sndb/sndb01/220-main)을 연다.
- *
- * @return /sndb/sndb01/220-main
- */
- @RequestMapping(name = "반송 현황 메인", value = METHOD_URL.sendBackMain)
- public ModelAndView sendBackMain() {
- ModelAndView mav = new ModelAndView("fims/sndb/sndb01220-main");
-
- // 사용자 정보
- FimsUser fimsUser = (FimsUser)currentUser().getUser();
-
- // View(jsp)에서 사용할 공통코드를 조회
- Map> commonCodes = getCodesOf("FIM004", "FIM005", "FIM006", "FIM047", "FIM054", "FIM061", "FIM064", "FIM081");
-
- addCodes(commonCodes, mav, "FIM004", "FIM005", "FIM006", "FIM061", "FIM064");
-
- return mav
- .addObject("pageName", "sndb01220") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
- .addObject("infoPrefix", "sndbk") // prefix
- .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
- .addObject("sggCd", fimsUser.getOrgID()) // 시군구 코드(SGG_CD)
- .addObject("taskListForSgg", stngBean.filterTaskSectionCodeForSgg(commonCodes.get("FIM054"))) // 시군구에서 사용하는 업무 목록
- .addObject("FIM004List", commonCodes.get("FIM004")) // 주정차위반 내역 코드(VLTN_ID)
- .addObject("FIM005List", commonCodes.get("FIM005")) // 전용차로위반 내역 코드(VLTN_ID)
- .addObject("FIM006List", commonCodes.get("FIM006")) // 장애인주차위반 내역 코드(VLTN_ID)
- .addObject("FIM061List", commonCodes.get("FIM061")) // 전기차 충전구역 및 충전방해 위반 코드(VLTN_ID)
- .addObject("FIM064List", commonCodes.get("FIM064")) // 화물자동차 밤샘주차 위반 코드(VLTN_ID)
- .addObject("FIM047List", commonCodes.get("FIM047")) // 발송 구분 코드(SNDNG_SE_CD)
- .addObject("FIM081List", commonCodes.get("FIM081")) // 미배달 사유 코드(UNDLVR_RSN_CD)
- ;
- }
-
- /**반송 현황 목록을 조회하여 반환한다.
- * {@link SndngService#getSndngList(SndngQuery)} 참고
- * @param req 발송 대장 조회 조건
- * @return jsonView
- * {
- * "sndngList": [반송 현황 목록]
- * "sndngStart": 반송 현황 목록 시작 인덱스
- * "sndngFetch": 한 번에 가져오는 반송 현황 목록 수
- * "sndngTotal": 조회 결과 찾은 전체 반송 현황 수
- * }
- */
- @Task
- @RequestMapping(name="반송 목록 조회", value=METHOD_URL.getSendBackList)
- public ModelAndView getSendBackList(SndbQuery req) {
- if (!"xls".equals(req.getDownload())) {
- List> result = sndngDtlService.getSndbkList(setFetchSize(req));
- return setCollectionInfo(new ModelAndView("jsonView"), result, "sndbk");
- } else {
- // 현재 날짜 구하기
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
- String dateTime = dateFormat.format(System.currentTimeMillis());
-
- List 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 list = sndngDtlService.getSndbkList(req.setFetchSize(0));
-
- Map valueMap = new HashMap();
- valueMap.put("업무구분", format.of("TASK_SE_NM").style(center));
- valueMap.put("고지번호", format.of("GOJI_NO").style(center));
- valueMap.put("등기번호", format.of("RG_NO").style(center));
- valueMap.put("배달일자", FormatMaker.yyyy_mm_dd(format, "DLVR_YMD").style(dateYMD));
- valueMap.put("배달시간", format.of("DLVR_TM"));
- valueMap.put("미배달사유", format.of("UNDLVR_RSN_NM"));
- valueMap.put("수령인", format.of("ACTL_RCPN_NM"));
- valueMap.put("수령인관계", format.of("RCPN_REL_NM"));
- valueMap.put("발송구분", format.of("SNDNG_SE_NM").style(center));
- valueMap.put("발송일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_YMD").style(dateYMD));
- valueMap.put("과태료금액", format.of("FFNLG_AMT").style(numeric));
- valueMap.put("성명", format.of("RCPN_NM"));
- valueMap.put("우편번호", format.of("RCPN_ZIP").style(center));
- valueMap.put("주소", format.of("RCPN_ADDR"));
- valueMap.put("상세주소", format.of("RCPN_DTL_ADDR"));
- 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").style(center));
- 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"));
- }
- }
-
- /**반송등록 (sndb/sndb01/230-info)을 연다.
- * @param sndngId 발송 ID
- * @return fims/sndb/sndb01230-info 또는 jsonView
- * {
- * "sndngDtls":
- * }
- */
- @Task
- @RequestMapping(name="발송상세의 반송(미배달) 정보 조회", value=METHOD_URL.getSendBackInfo)
- public ModelAndView getSendBackInfo(HttpServletRequest hReq, SndbQuery req) {
- DataObject info = sndngDtlService.getSndbkInfo(req);
-
- // 등록을 호출하였지만 등록된 미배달 사유가 있는지 확인.
- if (req.getCallPurpose().equals("create") && !info.string("UNDLVR_RSN_NM").equals("")) {
- ModelAndView mav = new ModelAndView("jsonView");
-
- return mav.addObject("pageName", "sndb01230")
- .addObject("rtnMsg", "이미 등록된 미배달 사유가 있습니다.")
- ;
- } else {
- boolean json = jsonResponse();
- ModelAndView mav = new ModelAndView(json ? "jsonView" : "fims/sndb/sndb01230-info");
-
- // View(jsp)에서 사용할 공통코드를 조회
- Map> commonCodes = getCodesOf("FIM054", "FIM081");
-
- return mav
- .addObject("openerPageName", hReq.getParameter("openerPageName")) // 호출한 Jsp PageName
- .addObject("callPurpose", req.getCallPurpose()) // 호출 용도
- .addObject("pageName", "sndb01230") // jsp pageName
- .addObject("infoPrefix", "sndbk") // prefix
- .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
- .addObject("FIM054List", commonCodes.get("FIM054")) // 업무 구분 코드(TASK_SE_CD)
- .addObject("FIM081List", commonCodes.get("FIM081")) // 미배달 사유 코드(UNDLVR_RSN_CD)
- .addObject("sndbkInfo", json ? info : toJson(info)) // 반송 정보
- ;
- }
- }
-
- /**공시송달 현황 메인화면(sndb/sndb01/240-main)을 연다.
- *
- * @return /sndb/sndb01/240-main
- */
- @RequestMapping(name = "공시송달 현황 메인", value = METHOD_URL.serviceByPublicNoticeMain)
- public ModelAndView serviceByPublicNoticeMain() {
- ModelAndView mav = new ModelAndView("fims/sndb/sndb01240-main");
-
- // 사용자 정보
- FimsUser fimsUser = (FimsUser)currentUser().getUser();
-
- // View(jsp)에서 사용할 공통코드를 조회
- Map> commonCodes = getCodesOf("FIM047", "FIM054");
-
- return mav.addObject("pageName", "sndb01240") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
- .addObject("infoPrefix", "svbtc") // prefix
- .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
- .addObject("sggCd", fimsUser.getOrgID()) // 시군구 코드(SGG_CD)
- .addObject("taskListForSgg", stngBean.filterTaskSectionCodeForSgg(commonCodes.get("FIM054"))) // 시군구에서 사용하는 업무 목록
- .addObject("FIM047List", commonCodes.get("FIM047")) // 발송 구분 코드(SNDNG_SE_CD)
- ;
- }
-
- /**공시송달 현황 목록을 조회하여 반환한다.
- * {@link SndngService#getSndngList(SndngQuery)} 참고
- * @param req 발송 대장 조회 조건
- * @return jsonView
- * {
- * "sndngList": [공시송달 현황 목록]
- * "sndngStart": 공시송달 현황 목록 시작 인덱스
- * "sndngFetch": 한 번에 가져오는 공시송달 현황 목록 수
- * "sndngTotal": 조회 결과 찾은 전체 공시송달 현황 수
- * }
- */
- @Task
- @RequestMapping(name="공시송달 목록 조회", value=METHOD_URL.getServiceByPublicNoticeList)
- public ModelAndView getServiceByPublicNoticeList(SndbQuery req) {
- if (!"xls".equals(req.getDownload())) {
- List> result = svbtcService.getSvbtcList(setFetchSize(req));
- return setCollectionInfo(new ModelAndView("jsonView"), result, "svbtc");
- } else {
- // 현재 날짜 구하기
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
- String dateTime = dateFormat.format(System.currentTimeMillis());
-
- List 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 list = svbtcService.getSvbtcList(req.setFetchSize(0));
-
- Map valueMap = new HashMap();
- valueMap.put("업무구분", format.of("TASK_SE_NM").style(center));
- valueMap.put("발송구분", format.of("SNDNG_SE_NM").style(center));
- valueMap.put("공시송달일자", FormatMaker.yyyy_mm_dd(format, "SVBTC_YMD").style(dateYMD));
- valueMap.put("공시송달종료일자", FormatMaker.yyyy_mm_dd(format, "SVBTC_END_YMD").style(dateYMD));
- valueMap.put("총건수", format.of("TNOCS").style(numeric));
- valueMap.put("문서번호", format.of("DOC_NO"));
- valueMap.put("제목", format.of("TTL_NM"));
- valueMap.put("기타내용", format.of("ETC_CN"));
- 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"));
- }
- }
-
- /**공시송달 발송 현황 - 공시송달 상세 정보 화면(sndb/sndb01/250-info)을 연다.
- * @param svbtcId 공시송달 ID
- * @return fims/sndb/sndb01250-info 또는 jsonView
- * {
- * "sndngDtls": [발송 상세 목록]
- * }
- */
- @Task
- @RequestMapping(name="공시송달 상세 화면", value=METHOD_URL.getServiceByPublicNoticeDetailInfo)
- public ModelAndView getServiceByPublicNoticeDetailInfo(HttpServletRequest hReq, SndbQuery req) {
- ModelAndView mav = getServiceByPublicNoticeDetailList(req);
-
- mav.setViewName("fims/sndb/sndb01250-info");
-
- return mav
- .addObject("openerPageName", hReq.getParameter("openerPageName")) // 호출한 Jsp PageName
- .addObject("callPurpose", req.getCallPurpose()) // 호출 용도
- .addObject("pageName", "sndb01250") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
- .addObject("infoPrefix", "svbtcDtl") // prefix
- .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
- .addObject("mainQuery", toJson(req)) // 검색 조건
- .addObject("svbtcDtlList", toJson(mav.getModel().get("svbtcDtlList"))) // 자료
- ;
- }
-
- /**공시송달 발송 현황 - 공시송달 상세 목록을 조회하여 반환한다.
- * {@link SndngService#getSndngList(SndngQuery)} 참고
- * @param req 발송 대장 조회 조건
- * @return jsonView
- * {
- * "sndngDtlList": [공시송달 상세 목록]
- * "sndngDtlStart": 공시송달 상세 목록 시작 인덱스
- * "sndngDtlFetch": 한 번에 가져오는 공시송달 상세 목록 수
- * "sndngDtlTotal": 조회 결과 찾은 전체 공시송달 상세 수
- * }
- */
- @Task
- @RequestMapping(name="공시송달 상세 목록 조회", value=METHOD_URL.getServiceByPublicNoticeDetailList)
- public ModelAndView getServiceByPublicNoticeDetailList(SndbQuery req) {
- if (!"xls".equals(req.getDownload())) {
- List> result = svbtcService.getSvbtcDtls(req); // 공시송달자료는 일괄조회 하자. List> result = svbtcService.getSvbtcDtlList(setFetchSize(req));
- return setCollectionInfo(new ModelAndView("jsonView"), result, "svbtcDtl");
- } else {
- // 현재 날짜 구하기
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
- String dateTime = dateFormat.format(System.currentTimeMillis());
-
- List 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 list = svbtcService.getSvbtcDtlList(req.setFetchSize(0));
-
- Map valueMap = new HashMap();
- valueMap.put("발송상태", format.of("SNDNG_DTL_STTS_NM").style(center));
- valueMap.put("공시송달일자", FormatMaker.yyyy_mm_dd(format, "SVBTC_YMD").style(dateYMD));
- valueMap.put("등기번호", format.of("RG_NO").style(center));
- valueMap.put("발송일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_YMD").style(dateYMD));
- valueMap.put("발송종료일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_END_YMD").style(dateYMD));
- valueMap.put("성명", format.of("RCPN_NM"));
- valueMap.put("우편번호", format.of("RCPN_ZIP").style(center));
- valueMap.put("주소", format.of("RCPN_ADDR"));
- valueMap.put("상세주소", format.of("RCPN_DTL_ADDR"));
- valueMap.put("배달일자", FormatMaker.yyyy_mm_dd(format, "DLVR_YMD").style(dateYMD));
- valueMap.put("배달시각", format.of("DLVR_TM").style(center));
- valueMap.put("미배달사유", format.of("UNDLVR_RSN_NM"));
- valueMap.put("수령인", format.of("ACTL_RCPN_NM"));
- valueMap.put("수령인관계", format.of("RCPN_REL_NM"));
- valueMap.put("단속일시", format.of("CRDN_DT").style(center));
- valueMap.put("차량번호", format.of("VHRNO"));
- valueMap.put("단속법정동", format.of("CRDN_STDG_NM"));
- valueMap.put("단속장소", format.of("CRDN_PLC"));
- valueMap.put("회계연도", format.of("FYR").style(center));
- valueMap.put("부과번호", format.of("LEVY_NO").style(center));
- valueMap.put("부과일자", FormatMaker.yyyy_mm_dd(format, "LEVY_YMD").style(dateYMD));
- valueMap.put("납기일자", FormatMaker.yyyy_mm_dd(format, "DUDT_YMD").style(dateYMD));
- valueMap.put("과태료금액", format.of("FFNLG_AMT").style(numeric));
- valueMap.put("본세", format.of("PCPTAX").style(numeric));
- valueMap.put("가산금", format.of("ADAMT").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));
- 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"));
- }
- }
-
- /** 공시송달 한글 파일로 작성한다.
- * @return 공시송달 hwp파일
- */
- @Task
- @RequestMapping(name="공시송달 한글 저장", value=METHOD_URL.makeSvbtcFileFromHwpFormat)
- public ModelAndView makeSvbtcFileFromHwpFormat(SndbQuery req) {
- UserInfo userInfo = currentUser();
- ogdpBean.initUserInfo(userInfo);
- Print print = new Print();
- print.setPrintRequestUserInfo(userInfo);
-
- FimsPrintOption printOption = new FimsPrintOption();
-
- req.setSggCd((String)userInfo.getInfo().get("sggCd"));
- req.setDeptCd((String)userInfo.getInfo().get("deptCd"));
- req.setOrderBy("SV.SVBTC_ID, SD.SNDNG_DTL_ID");
- List dataObjectList = svbtcBean.getSvbtcPrint(req);
-
- SvbtcList hwpFormat = new SvbtcList(print, printOption, dataObjectList);
- HashMap result = hwpFormat.makeFile().andDownload();
- ModelAndView mav = new ModelAndView("downloadView");
- mav.addAllObjects(result);
-
- return mav;
- }
-
- /**지정한 ID의 공시송달 정보를 반환한다.
- * @param svbtcId 공시송달 ID
- * @return fims/sndb/sndb01260-info 또는 jsonView
- * {
- * "svbtcInfo": 공시송달 정보
- * }
- */
- @Task
- @RequestMapping(name="공시송달 정보", value=METHOD_URL.getServiceByPublicNoticeInfo)
- public ModelAndView getServiceByPublicNoticeInfo(HttpServletRequest hReq, SndbQuery req) {
- // 공시송달 정보 조회
- DataObject info = svbtcService.getSvbtcInfo(req);
-
- // 등록을 호출하였지만 등록된 공시송달 ID가 있는지 확인.
- if (req.getCallPurpose().equals("create") && !info.string("SVBTC_ID").equals("")) {
- ModelAndView mav = new ModelAndView("jsonView");
-
- return mav.addObject("rtnMsg", "이미 등록된 공시송달 정보가 있습니다.");
- } else {
- boolean json = jsonResponse();
- ModelAndView mav = new ModelAndView(json ? "jsonView" : "fims/sndb/sndb01260-info");
-
- // View(jsp)에서 사용할 공통코드를 조회
- Map> commonCodes = getCodesOf("FIM047", "FIM054");
-
- addCodes(commonCodes, mav, "FIM047", "FIM054");
-
- return mav
- .addObject("openerPageName", hReq.getParameter("openerPageName")) // 호출한 Jsp PageName
- .addObject("callPurpose", req.getCallPurpose()) // 호출 용도
- .addObject("pageName", "sndb01260") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
- .addObject("infoPrefix", "svbtc") // prefix
- .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
- .addObject("mainQuery", json ? req : toJson(req)) // Query
- .addObject("svbtcInfo", json ? info : toJson(info)) // 공시송달 정보
- ;
- }
- }
-
- /**공시송달 대장에 공시송달 정보를 등록한다.
- * @param svbtc 공시송달 정보
- * @return jsonView
- * {
- * "saved": 수정되었으면 true, 그렇지 않으면 false
- * }
- */
- @Task
- @RequestMapping(name="공시송달 등록", value=METHOD_URL.createServiceByPublicNotice)
- public ModelAndView createServiceByPublicNotice(SndbQuery req, Svbtc svbtc) {
- boolean saved = false;
- String rtnMsg = svbtcService.createSvbtc(req, svbtc);
-
- if (rtnMsg.contains("[S]")) {
- saved = true;
- } else {
- saved = false;
- }
-
- return new ModelAndView("jsonView")
- .addObject("saved", saved)
- .addObject("rtnMsg", rtnMsg);
- }
-
- /**공시송달 대장에 공시송달 정보를 수정한다.
- * @param svbtc 공시송달 정보
- * @return jsonView
- * {
- * "saved": 수정되었으면 true, 그렇지 않으면 false
- * }
- */
- @Task
- @RequestMapping(name="공시송달 수정", value=METHOD_URL.updateServiceByPublicNotice)
- public ModelAndView updateServiceByPublicNotice(Svbtc svbtc) {
- boolean saved = false;
- String rtnMsg = svbtcService.updateSvbtc(svbtc);
-
- if (rtnMsg.contains("[S]")) {
- saved = true;
- } else {
- saved = false;
- }
-
- return new ModelAndView("jsonView")
- .addObject("saved", saved)
- .addObject("rtnMsg", rtnMsg);
- }
-
- /**지정한 공시송달 ID에 해당하는 공시송달 대장을 제거한다.
- * @param svbtcId 공시송달 ID
- * @return jsonView
- * {
- * "affected": 저장된 정보수
- * "saved": 저장되었으면 true, 그렇지 않으면 false
- * }
- */
- @Task
- @RequestMapping(name="공시송달 삭제", value=METHOD_URL.removeServiceByPublicNotice)
- public ModelAndView removeServiceByPublicNotice(Svbtc svbtc) {
- boolean saved = false;
- String rtnMsg = "";
-
- if (svbtc.getSvbtcIds() == null || svbtc.getSvbtcIds().length < 1) {
- rtnMsg = svbtcService.removeSvbtc(svbtc);
- } else {
- // 공시송달 Ids 만큼 삭제 반복..
- for (String svbtcId : svbtc.getSvbtcIds()) {
- Svbtc deltSvbtc = new Svbtc();
- deltSvbtc.setSvbtcId(svbtcId);
- deltSvbtc.setDelRsn(svbtc.getDelRsn());
-
- // 공시송달 삭제 호출
- rtnMsg = svbtcService.removeSvbtc(deltSvbtc);
- if (!rtnMsg.contains("[S]")) // 오류가 발생하였으면 종료..
- break;
- }
- }
-
- if (rtnMsg.contains("[S]")) {
- saved = true;
- } else {
- saved = false;
- }
-
- return new ModelAndView("jsonView")
- .addObject("saved", saved)
- .addObject("rtnMsg", rtnMsg);
- }
-
- /**지정한 공시송달 ID에 해당하는 공시송달 대장을 제거한다.
- * @param svbtcId 공시송달 ID
- * @return jsonView
- * {
- * "affected": 저장된 정보수
- * "saved": 저장되었으면 true, 그렇지 않으면 false
- * }
- */
- @Task
- @RequestMapping(name="공시송달 개별 삭제", value=METHOD_URL.removeServiceByPublicNoticeEach)
- public ModelAndView removeServiceByPublicNoticeEach(Svbtc svbtc) {
- boolean saved = false;
- String rtnMsg = svbtcService.removeSvbtcEach(svbtc);
-
- if (rtnMsg.contains("[S]")) {
- saved = true;
- } else {
- saved = false;
- }
-
- return new ModelAndView("jsonView")
- .addObject("saved", saved)
- .addObject("rtnMsg", rtnMsg);
- }
-
- /** 사전통지서를 PDF 파일로 작성한다.
- * @return 사전통지서 PDF파일
- */
- @Task
- @RequestMapping(name="사전통지서 pdf 파일 생성", value=METHOD_URL.makeAdvanceNoticePdf)
- public ModelAndView makeAdvanceNoticePdf(SndbQuery req, FimsPrintOption printOption) {
- ModelAndView mav = new ModelAndView("downloadView");
-
- List list = sndngDtlService.getSndngTrgtDtlIds(req);
-
- String[] crdnIds = new String[list.size()];
-
- for (int iLoop = 0; iLoop < list.size(); iLoop++) {
- crdnIds[iLoop] = list.get(iLoop).string("CRDN_ID");
- }
-
- List dataObjectList = new ArrayList();
- if(crdnIds.length == 1 && crdnIds[0].equals("sample")) {
- DataObject sample = new Advntce().createSampleData();
- dataObjectList.add(sample);
- } else {
- SprtQuery sprtQuery = new SprtQuery();
- sprtQuery.setCrdnIds(crdnIds);
- dataObjectList = integrationSearchMapper.selectIntegrationDataList(sprtQuery);
-
- for(int i=0; i < dataObjectList.size(); i++) {
- DataObject dataObject = dataObjectList.get(i);
- String crdnId = dataObject.string("CRDN_ID");
-
- FileQuery fileQuery = new FileQuery();
- fileQuery.setInfoType(Crdn.INF_TYPE);
- fileQuery.setInfoKeys(crdnId);
-
- List fileInfoList = fileBean.getFileList(fileQuery);
- if (fileInfoList != null && fileInfoList.size() > 0) {
- for (int j=0; j mosSet = mediaBean.getMosaicList(fileInfoList.get(j).string("FILE_ID"));
- if (mosSet != null && !mosSet.isEmpty()) {
- dataObject.set("MOS"+fileInfoList.get(j).string("FILE_ID"), mosSet);
- }
- }
- }
- }
- }
-
- Print print = new Print();
- UserInfo userInfo = currentUser();
- ogdpBean.initUserInfo(userInfo);
- print.setPrintRequestUserInfo(userInfo);
-
- //출력물 기본 설정
- OtptStngQuery otptStngQuery = new OtptStngQuery();
-
- otptStngQuery.setSggCd((String)userInfo.getInfo().get("sggCd"));
- String paperSeCd = printOption.getPaperSeCd();
- String taskSeCd = printOption.getTaskSeCd();
- otptStngQuery.setTaskSeCd(taskSeCd);
- otptStngQuery.setSndngSeCd("02");
- otptStngQuery.setPaperSeCd(paperSeCd);
- DataObject otptBscStng = otptStngMapper.selectOtptBscStng(otptStngQuery);
- if(otptBscStng == null) {
- otptBscStng = new DataObject();
- }
-
- //출력 요소별 설정
- List otptArtclStngList = otptStngMapper.selectOtptArtclStngList(otptStngQuery);
-
- DataObject sggStngInfo = stngBean.getStng("sgg");
- DataObject deptStngInfo = stngBean.getStng("dept");
- //
- Map globalVariable = printOption.getGlobalVariable();
- if(globalVariable == null) {
- globalVariable = new HashMap();
- }
- globalVariable.put("offcsFilePath", sggStngInfo.string("OFFCS_FILE_PATH"));
- globalVariable.put("logoFilePath", sggStngInfo.string("LOGO_FILE_PATH"));
- globalVariable.put("instAddr", sggStngInfo.string("INST_ADDR"));
- globalVariable.put("instDaddr", sggStngInfo.string("INST_DADDR"));
- globalVariable.put("instZip", sggStngInfo.string("INST_ZIP"));
- globalVariable.put("deptTelno", deptStngInfo.string("DEPT_TELNO"));
- globalVariable.put("deptFxno", deptStngInfo.string("DEPT_FXNO"));
- if(!otptBscStng.string("BCRN_IMG_PATH").equals("")) {
- globalVariable.put("bcrnImgPath", otptBscStng.string("BCRN_IMG_PATH"));
- }
- printOption.setGlobalVariable(globalVariable);
-
- Advntce pdfFormat = new Advntce(print,printOption,otptBscStng,otptArtclStngList,paperSeCd,dataObjectList);
- Map result = pdfFormat.makeFile();
-
- mav.addAllObjects(result);
-
- return mav;
- }
-
- /** 사전통지 정보로 txt파일,이미지파일을 생성하고 압축파일로 반환한다.
- * @return 사전통지서 압축파일
- */
- @Task
- @RequestMapping(name="사전통지서 외주 파일 생성", value=METHOD_URL.makeAdvanceNoticeOutsourcing)
- public ModelAndView makeAdvanceNoticeOutsourcing(SndbQuery req, FimsPrintOption printOption) {
- ModelAndView mav = new ModelAndView("downloadView");
-
- String taskSeCd = "";
-
- List list = sndngDtlService.getSndngTrgtDtlIds(req);
-
- String[] crdnIds = new String[list.size()];
-
- for (int iLoop = 0; iLoop < list.size(); iLoop++) {
- crdnIds[iLoop] = list.get(iLoop).string("CRDN_ID");
- }
- SprtQuery sprtQuery = new SprtQuery();
- sprtQuery.setCrdnIds(crdnIds);
- List dataObjectList = integrationSearchMapper.selectIntegrationDataList(sprtQuery);
- for(int i=0; i < dataObjectList.size(); i++) {
- DataObject sndngDtl = integrationSearchMapper.selectLatestSndngDtlInfo(dataObjectList.get(i).string("CRDN_ID"));
- dataObjectList.get(i).set("SNDNG_DTL_ID",sndngDtl.string("SNDNG_DTL_ID"));
- dataObjectList.get(i).set("SNDNG_YMD",sndngDtl.string("SNDNG_YMD"));
- dataObjectList.get(i).set("OPNN_RANGE",
- dataObjectList.get(i).string("SNDNG_YMD")+"~"+dataObjectList.get(i).string("DUDT_YMD"));
- dataObjectList.get(i).set("RG_NO",sndngDtl.string("RG_NO"));
- }
-
- for(int i=0; i < dataObjectList.size(); i++) {
- DataObject dataObject = dataObjectList.get(i);
-
- if(taskSeCd.equals("")) {
- taskSeCd = dataObject.string("TASK_SE_CD");
- }
-
- FileQuery fileQuery = new FileQuery();
- fileQuery.setInfoType(Crdn.INF_TYPE);
- fileQuery.setInfoKeys(dataObject.string("CRDN_ID"));
- List fileInfoList = fileBean.getFileList(fileQuery);
-
- if(fileInfoList != null) {
- int crdnPhotoCnt = fileInfoList.size();
- for(int j=0; j < fileInfoList.size(); j++) {
- DataObject fileInfo = fileInfoList.get(j);
-
- dataObject.set("CRDN_PHOTO"+(j+1), fileInfo.string("FILE_PATH"));
- dataObject.set("CRDN_PHOTO"+(j+1)+"KEY", fileInfo.string("FILE_ID"));
- List mosSet = mediaBean.getMosaicList(fileInfo.string("FILE_ID"));
- if(mosSet != null) {
- for(int k=0; k < mosSet.size(); k++) {
- dataObject.set("MOS"+fileInfo.string("FILE_ID"), mosSet);
- }
- }
- }
- dataObject.set("CRDN_PHOTO_CNT", crdnPhotoCnt);
- } else {
- dataObject.set("CRDN_PHOTO_CNT", 0);
- }
-
- }
-
- FimsUser currentUser = (FimsUser) currentUser().getUser();
- String sggCd = currentUser.getOrgID();
-
- OutsourcingStngQuery stngQuery = new OutsourcingStngQuery();
- stngQuery.setSggCd(sggCd);
- stngQuery.setTaskSeCd(taskSeCd);
- stngQuery.setSndngSeCd("02");
- List printStngItems = outsourcingStngBean.getArtclStngList(stngQuery);
-
- OutsourcingFileMaker osMaker = new OutsourcingFileMaker("사전통지", printOption, printStngItems, dataObjectList);
-
- Map result = osMaker.makeFile();
-
- mav.addAllObjects(result);
-
- return mav;
- }
-
- /** 고지서를 PDF 파일로 작성한다.
- * @return 고지서 PDF파일
- */
- @Task
- @RequestMapping(name="고지서 pdf 파일 생성", value=METHOD_URL.makeNoticeSheetPdf)
- public ModelAndView makeNoticeSheetPdf(SndbQuery req, FimsPrintOption printOption) {
- // 고지서 출력 대상 자료 조회
- List list = sndngDtlService.getSndngTrgtDtlIds(req);
-
- String[] crdnIds = new String[list.size()];
- for (int iLoop = 0; iLoop < list.size(); iLoop++) {
- crdnIds[iLoop] = list.get(iLoop).string("CRDN_ID");
- }
-
- UserInfo userInfo = currentUser();
- ogdpBean.initUserInfo(userInfo);
-
- ModelAndView mav = new ModelAndView("downloadView");
-
- // 단속 대장 조회
- SprtQuery sprtQuery = new SprtQuery();
- sprtQuery.setCrdnIds(crdnIds);
-
- ListdataObjectList = integrationSearchMapper.selectIntegrationDataList(sprtQuery);
-
- for (int i=0; i < dataObjectList.size(); i++) {
- DataObject dataObject = dataObjectList.get(i);
- String crdnId = dataObject.string("CRDN_ID");
-
- FileQuery fileQuery = new FileQuery();
- fileQuery.setInfoType(Crdn.INF_TYPE);
- fileQuery.setInfoKeys(crdnId);
-
- List fileInfoList = fileBean.getFileList(fileQuery);
- if (fileInfoList != null && fileInfoList.size() > 0) {
- for (int j=0; j mosSet = mediaBean.getMosaicList(fileInfoList.get(j).string("FILE_ID"));
- if (mosSet != null && !mosSet.isEmpty()) {
- dataObject.set("MOS"+fileInfoList.get(j).string("FILE_ID"), mosSet);
- }
- }
- }
- }
-
- Print print = new Print();
- print.setPrintRequestUserInfo(userInfo);
-
- //출력물 기본 설정
- OtptStngQuery otptStngQuery = new OtptStngQuery();
- String paperSeCd = printOption.getPaperSeCd();
- String taskSeCd = printOption.getTaskSeCd();
- otptStngQuery.setSggCd((String)userInfo.getInfo().get("sggCd"));
- otptStngQuery.setTaskSeCd(taskSeCd);
- otptStngQuery.setSndngSeCd("03");
- otptStngQuery.setPaperSeCd(paperSeCd);
- DataObject otptBscStng = otptStngMapper.selectOtptBscStng(otptStngQuery);
- if(otptBscStng == null) {
- otptBscStng = new DataObject();
- }
- //출력 요소별 설정
- List otptArtclStngList = otptStngMapper.selectOtptArtclStngList(otptStngQuery);
-
- DataObject sggStngInfo = stngBean.getStng("sgg");
- DataObject deptStngInfo = stngBean.getStng("dept");
- //
- Map globalVariable = printOption.getGlobalVariable();
- if(globalVariable == null) {
- globalVariable = new HashMap();
- }
- globalVariable.put("offcsFilePath", sggStngInfo.string("OFFCS_FILE_PATH"));
- globalVariable.put("logoFilePath", sggStngInfo.string("LOGO_FILE_PATH"));
- globalVariable.put("instAddr", sggStngInfo.string("INST_ADDR"));
- globalVariable.put("instDaddr", sggStngInfo.string("INST_DADDR"));
- globalVariable.put("instZip", sggStngInfo.string("INST_ZIP"));
- globalVariable.put("deptTelno", deptStngInfo.string("DEPT_TELNO"));
- globalVariable.put("deptFxno", deptStngInfo.string("DEPT_FXNO"));
- if(!otptBscStng.string("BCRN_IMG_PATH").equals("")) {
- globalVariable.put("bcrnImgPath", otptBscStng.string("BCRN_IMG_PATH"));
- }
- printOption.setGlobalVariable(globalVariable);
-
- Nht pdfFormat = new Nht(print,printOption,otptBscStng,otptArtclStngList,paperSeCd,dataObjectList);
-
- Map result = pdfFormat.makeFile();
-
- mav.addAllObjects(result);
-
- return mav;
- }
-
- /** 고지서 정보로 txt파일,이미지파일을 생성하고 압축파일로 반환한다.
- * @return 고지서 압축파일
- */
- @Task
- @RequestMapping(name="고지서 외주 파일 생성", value=METHOD_URL.makeNoticeSheetOutsourcing)
- public ModelAndView makeNoticeSheetOutsourcing(SndbQuery req, FimsPrintOption printOption) {
- // 고지서 출력 대상 자료 조회
- List list = sndngDtlService.getSndngTrgtDtlIds(req);
-
- String[] crdnIds = new String[list.size()];
- for (int iLoop = 0; iLoop < list.size(); iLoop++) {
- crdnIds[iLoop] = list.get(iLoop).string("CRDN_ID");
- }
-
- UserInfo userInfo = currentUser();
- ogdpBean.initUserInfo(userInfo);
-
- ModelAndView mav = new ModelAndView("downloadView");
-
- String taskSeCd = req.getTaskSeCd();
-
- // 단속 대장 조회
- SprtQuery sprtQuery = new SprtQuery();
- sprtQuery.setCrdnIds(crdnIds);
-
- List dataObjectList = integrationSearchMapper.selectIntegrationDataList(sprtQuery);
-
- for (int i=0; i < dataObjectList.size(); i++) {
- DataObject dataObject = dataObjectList.get(i);
-
- if (taskSeCd.equals("")) {
- taskSeCd = dataObject.string("TASK_SE_CD");
- }
-
- FileQuery fileQuery = new FileQuery();
- fileQuery.setInfoType(Crdn.INF_TYPE);
- fileQuery.setInfoKeys(dataObject.string("CRDN_ID"));
- List fileInfoList = fileBean.getFileList(fileQuery);
-
- if (fileInfoList != null) {
- int crdnPhotoCnt = fileInfoList.size();
- for (int j=0; j < fileInfoList.size(); j++) {
- DataObject fileInfo = fileInfoList.get(j);
- dataObject.set("CRDN_PHOTO"+(j+1), fileInfo.string("FILE_PATH"));
- dataObject.set("CRDN_PHOTO"+(j+1)+"KEY", fileInfo.string("FILE_ID"));
-
- List mosSet = mediaBean.getMosaicList(fileInfo.string("FILE_ID"));
- if (mosSet != null) {
- for (int k=0; k < mosSet.size(); k++) {
- dataObject.set("MOS"+fileInfo.string("FILE_ID"), mosSet);
- }
- }
- }
- dataObject.set("CRDN_PHOTO_CNT", crdnPhotoCnt);
- } else {
- dataObject.set("CRDN_PHOTO_CNT", 0);
- }
- }
-
- FimsUser currentUser = (FimsUser) currentUser().getUser();
- String sggCd = currentUser.getOrgID();
-
- OutsourcingStngQuery stngQuery = new OutsourcingStngQuery();
- stngQuery.setSggCd(sggCd);
- stngQuery.setTaskSeCd(taskSeCd);
- stngQuery.setSndngSeCd("03");
-
- List printStngItems = outsourcingStngBean.getArtclStngList(stngQuery);
-
- OutsourcingFileMaker osMaker = new OutsourcingFileMaker("고지서", printOption, printStngItems, dataObjectList);
-
- Map result = osMaker.makeFile();
-
- mav.addAllObjects(result);
-
- return mav;
- }
-
- /**과태료 대장 단속 정보 등록를 등록한다.
- * @param req 발송 대장 조회 조건
- * @return jsonView
- * {
- * "saved": 등록되었으면 true, 그렇지 않으면 false
- * }
- */
- @Task({"ECA","DPV","PES","DVS"})
- @RequestMapping(name="세외수입 과태료 대장 단속 정보 등록", value=METHOD_URL.setNonTaxReceiptIndividualA01List)
- public ModelAndView setNonTaxReceiptIndividualA01List(SndbQuery req, Sndng sndng) {
- boolean saved = false;
- String rtnMsg = "";
-
- List dtlList = sndngDtlService.getSndngTrgtDtlIds(req);
-
- // 발송상세 Ids 만큼 반복..
- for (int iLoop = 0; iLoop < dtlList.size(); iLoop++) {
- SndngDtl sndngDtl = new SndngDtl();
-
- sndngDtl.setSndngDtlId(dtlList.get(iLoop).string("SNDNG_DTL_ID"));
- sndngDtl.setCrdnId(dtlList.get(iLoop).string("CRDN_ID"));
- sndngDtl.setLinkTrgtCd(dtlList.get(iLoop).string("LINK_TRGT_CD"));
- sndngDtl.setLinkMngKey(dtlList.get(iLoop).string("LINK_MNG_KEY"));
- sndngDtl.setSndngDtlSttsCd(dtlList.get(iLoop).string("SNDNG_DTL_STTS_CD"));
- sndngDtl.setDelYn("N");
- sndngDtl.setSndngYmd(sndng.getSndngYmd());
-
- rtnMsg = sndngDtlService.setNxrpIndivA01List(sndngDtl);
- if (rtnMsg.contains("[S]")) {
- saved = true;
- } else {
- saved = false;
- }
- }
-
- return new ModelAndView("jsonView")
- .addObject("saved", saved)
- .addObject("rtnMsg", rtnMsg);
- }
-
- /**과태료 대장 등록 자료 상세 조회(실시간)한다.
- * @param req 발송 대장 조회 조건
- * @return jsonView
- * {
- * "saved": 등록되었으면 true, 그렇지 않으면 false
- * }
- */
- @Task({"ECA","DPV","PES","DVS"})
- @RequestMapping(name="세외수입 과태료 대장 등록 자료 상세 조회", value=METHOD_URL.getNonTaxReceiptIndividualA03List)
- public ModelAndView getNonTaxReceiptIndividualA03List(SndbQuery req) {
- boolean saved = false;
- String rtnMsg = "";
-
- List dtlList = sndngDtlService.getSndngTrgtDtlIds(req);
-
- // 발송상세 Ids 만큼 반복..
- for (int iLoop = 0; iLoop < dtlList.size(); iLoop++) {
- SndngDtl sndngDtl = new SndngDtl();
-
- sndngDtl.setSndngDtlId(dtlList.get(iLoop).string("SNDNG_DTL_ID"));
- sndngDtl.setCrdnId(dtlList.get(iLoop).string("CRDN_ID"));
- sndngDtl.setLinkTrgtCd(dtlList.get(iLoop).string("LINK_TRGT_CD"));
- sndngDtl.setLinkMngKey(dtlList.get(iLoop).string("LINK_MNG_KEY"));
- sndngDtl.setSndngDtlSttsCd(dtlList.get(iLoop).string("SNDNG_DTL_STTS_CD"));
- sndngDtl.setDelYn("N");
-
- rtnMsg = sndngDtlService.getNxrpIndivA03List(sndngDtl);
- if (rtnMsg.contains("[S]")) {
- saved = true;
- } else {
- saved = false;
- }
- }
-
- return new ModelAndView("jsonView")
- .addObject("saved", saved)
- .addObject("rtnMsg", rtnMsg);
- }
-
- /**과태료 대장 등록 자료 상세 조회(실시간)한다.
- * @param req 발송 대장 조회 조건
- * @return jsonView
- * {
- * "saved": 등록되었으면 true, 그렇지 않으면 false
- * }
- */
- @Task
- @RequestMapping(name="세외수입 체납상세 세목정보 조회", value=METHOD_URL.getNonTaxReceiptSpecialB01List)
- public ModelAndView getNonTaxReceiptSpecialB01List(SndbQuery req) {
- boolean saved = false;
- String rtnMsg = "";
+ // View(jsp)에서 사용할 공통코드를 조회
+ Map> commonCodes = getCodesOf("FIM004", "FIM005", "FIM006", "FIM047", "FIM061", "FIM064");
+
+ addCodes(commonCodes, mav, "FIM004", "FIM005", "FIM006", "FIM061", "FIM064", "FIM047");
+
+ return mav
+ .addObject("openerPageName", hReq.getParameter("openerPageName")) // 호출한 Jsp PageName
+ .addObject("callPurpose", req.getCallPurpose()) // 호출 용도
+ .addObject("pageName", "sndb01100") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
+ .addObject("infoPrefix", "nhtTrgt") // prefix
+ .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
+ .addObject("sggCd", req.getSggCd()) // 시군구 코드(SGG_CD)
+ .addObject("taskSeCd", req.getTaskSeCd()) // 업무 구분 코드(TASK_SE_CD)
+ .addObject("FIM047List", commonCodes.get("FIM047")) // 발송 구분 코드(SNDNG_SE_CD)
+ ;
+ }
+
+ /**고지서 발송 대상을 등록한다.
+ * @param sndng 발송 정보
+ * @return jsonView
+ * {
+ * "saved": 등록되었으면 true, 그렇지 않으면 false
+ * }
+ */
+ @Task
+ @RequestMapping(name="고지서 발송 대장 등록", value=METHOD_URL.createNoticeSheetSendingList)
+ public ModelAndView createNoticeSheetSendingList(SndbQuery req, Sndng sndng) {
+ boolean saved = false;
+ String rtnMsg = sndngService.createNhtSndngList(req, sndng);
+
+ if (rtnMsg.contains("[S]")) {
+ saved = true;
+ } else {
+ saved = false;
+ }
+
+ return new ModelAndView("jsonView")
+ .addObject("saved", saved)
+ .addObject("rtnMsg", rtnMsg);
+ }
+
+ /**지정한 부과제외 ID에 해당하는 부과제외 대장를 제거한다.
+ * @param levyExclID 부과제외 대장 아이디
+ * @return jsonView
+ * {
+ * "affected": 저장된 정보수
+ * "saved": 저장되었으면 true, 그렇지 않으면 false
+ * }
+ */
+ @Task
+ @RequestMapping(name="고지서 발송 대장 삭제", value=METHOD_URL.removeNoticeSheetSending)
+ public ModelAndView removeNoticeSheetSending(Sndng sndng) {
+ boolean saved = false;
+ String rtnMsg = "";
+
+ // 발송(sndngId) 단건 삭제
+ if (sndng.getSndngIds() == null || sndng.getSndngIds().length < 1) {
+ rtnMsg = sndngService.removeSndng(sndng);
+ } else {
+ // 발송 Ids 만큼 삭제 반복..
+ for (String sndngId : sndng.getSndngIds()) {
+ Sndng deltSndng = new Sndng();
+ deltSndng.setSndngId(sndngId);
+ deltSndng.setDelRsn(sndng.getDelRsn());
+
+ // 발송 삭제 호출
+ rtnMsg = sndngService.removeSndng(deltSndng);
+ if (!rtnMsg.contains("[S]")) // 오류가 발생하였으면 종료..
+ break;
+ }
+ }
+
+ if (rtnMsg.contains("[S]")) {
+ saved = true;
+ } else {
+ saved = false;
+ }
+
+ return new ModelAndView("jsonView")
+ .addObject("saved", saved)
+ .addObject("rtnMsg", rtnMsg);
+ }
+
+ /**고지서 발송 현황 메인화면(sndb/sndb01/110-main)을 연다.
+ *
+ * @return /sndb/sndb01/110-main
+ */
+ @RequestMapping(name = "고지서 발송 현황 메인", value = METHOD_URL.noticeSheetSendingMain)
+ public ModelAndView noticeSheetSendingMain() {
+ ModelAndView mav = new ModelAndView("fims/sndb/sndb01110-main");
+
+ // 사용자 정보
+ FimsUser fimsUser = (FimsUser)currentUser().getUser();
+
+ // View(jsp)에서 사용할 공통코드를 조회
+ Map> commonCodes = getCodesOf("FIM047", "FIM054", "FIM067");
+
+ addCodes(commonCodes, mav, "FIM047");
+
+ return mav
+ .addObject("pageName", "sndb01110") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
+ .addObject("infoPrefix", "nhtSndng") // prefix
+ .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
+ .addObject("sggCd", fimsUser.getOrgID()) // 시군구 코드(SGG_CD)
+ .addObject("taskListForSgg", stngBean.filterTaskSectionCodeForSgg(commonCodes.get("FIM054"))) // 시군구에서 사용하는 업무 목록
+ .addObject("FIM047List", commonCodes.get("FIM047")) // 발송 구분 코드(SNDNG_SE_CD)
+ .addObject("FIM067List", commonCodes.get("FIM067")) // 발송 등록 구분 코드(SNDNG_REG_SE_CD)
+ ;
+ }
+
+ /**고지서 발송 현황 목록을 조회하여 반환한다.
+ * {@link SndngService#getSndngList(SndngQuery)} 참고
+ * @param req 발송 대장 조회 조건
+ * @return jsonView
+ * {
+ * "sndngList": [고지서 발송 현황 목록]
+ * "sndngStart": 고지서 발송 현황 목록 시작 인덱스
+ * "sndngFetch": 한 번에 가져오는 고지서 발송 현황 목록 수
+ * "sndngTotal": 조회 결과 찾은 전체 고지서 발송 현황 수
+ * }
+ */
+ @Task
+ @RequestMapping(name="고지서 발송 현황 목록 조회", value=METHOD_URL.getNoticeSheetSendingList)
+ public ModelAndView getNoticeSheetSendingList(SndbQuery req) {
+ if (!"xls".equals(req.getDownload())) {
+ List> result = sndngService.getSndngList(setFetchSize(req));
+ return setCollectionInfo(new ModelAndView("jsonView"), result, "nhtSndng");
+ } else {
+ // 현재 날짜 구하기
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
+ String dateTime = dateFormat.format(System.currentTimeMillis());
+
+ List 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 list = sndngService.getSndngList(req.setFetchSize(0));
+
+ Map valueMap = new HashMap();
+ valueMap.put("업무구분", format.of("TASK_SE_NM").style(center));
+ valueMap.put("등록구분", format.of("SNDNG_REG_SE_NM").style(center));
+ valueMap.put("위반항목", format.of("VLTN_ARTCL"));
+ valueMap.put("발송일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_YMD").style(dateYMD));
+ valueMap.put("납기일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_END_YMD").style(dateYMD));
+ valueMap.put("총건수", format.of("TNOCS").style(numeric));
+ valueMap.put("총금액", format.of("GRAMT").style(numeric));
+ valueMap.put("문서번호", format.of("DOC_NO"));
+ valueMap.put("제목", format.of("TTL_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"));
+ }
+ }
+
+ /**고지서 발송 현황 - 발송상세 화면(sndb/sndb01/120-info)을 연다.
+ * @param sndngId 발송 ID
+ * @return fims/sndb/sndb01120-info 또는 jsonView
+ * {
+ * "sndngDtls": [고지서 발송 상세 목록]
+ * }
+ */
+ @Task
+ @RequestMapping(name="고지서 발송 현황 상세 화면", value=METHOD_URL.getNoticeSheetSendingDetailInfo)
+ public ModelAndView getNoticeSheetSendingDetailInfo(HttpServletRequest hReq, SndbQuery req) {
+ ModelAndView mav = getNoticeSheetSendingDetailList(req);
+
+ mav.setViewName("fims/sndb/sndb01120-info");
+
+ return mav
+ .addObject("openerPageName", hReq.getParameter("openerPageName")) // 호출한 Jsp PageName
+ .addObject("callPurpose", req.getCallPurpose()) // 호출 용도
+ .addObject("pageName", "sndb01120") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
+ .addObject("infoPrefix", "nhtSndngDtl") // prefix
+ .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
+ .addObject("sggCd", req.getSggCd()) // 시군구 코드(SGG_CD)
+ .addObject("taskSeCd", req.getTaskSeCd()) // 업무 구분 코드(TASK_SE_CD)
+ .addObject("sndngId", req.getSndngId()) // 발송 ID(SNDNG_ID)
+ .addObject("nhtSndngDtlList", toJson(mav.getModel().get("nhtSndngDtlList"))) // 자료
+ ;
+ }
+
+ /**고지서 발송 현황 - 발송상세 목록을 조회하여 반환한다.
+ * {@link SndngService#getSndngList(SndngQuery)} 참고
+ * @param req 발송 대장 조회 조건
+ * @return jsonView
+ * {
+ * "sndngDtlList": [발송상세 목록]
+ * "sndngDtlStart": 발송상세 목록 시작 인덱스
+ * "sndngDtlFetch": 한 번에 가져오는 발송상세 목록 수
+ * "sndngDtlTotal": 조회 결과 찾은 전체 발송상세 수
+ * }
+ */
+ @Task
+ @RequestMapping(name="고지서 발송 현황 상세 목록 조회", value=METHOD_URL.getNoticeSheetSendingDetailList)
+ public ModelAndView getNoticeSheetSendingDetailList(SndbQuery req) {
+ if (!"xls".equals(req.getDownload())) {
+ List> result = sndngDtlService.getSndngDtlList(setFetchSize(req));
+ return setCollectionInfo(new ModelAndView("jsonView"), result, "nhtSndngDtl");
+ } else {
+ // 현재 날짜 구하기
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
+ String dateTime = dateFormat.format(System.currentTimeMillis());
+
+ List 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 list = sndngDtlService.getSndngDtlList(req.setFetchSize(0));
+
+ Map valueMap = new HashMap();
+ valueMap.put("발송상태", format.of("SNDNG_DTL_STTS_NM").style(center));
+ valueMap.put("등기번호", format.of("RG_NO").style(center));
+ valueMap.put("발송일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_YMD").style(dateYMD));
+ valueMap.put("발송종료일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_END_YMD").style(dateYMD));
+ valueMap.put("성명", format.of("RCPN_NM"));
+ valueMap.put("우편번호", format.of("RCPN_ZIP").style(center));
+ valueMap.put("주소", format.of("RCPN_ADDR"));
+ valueMap.put("상세주소", format.of("RCPN_DTL_ADDR"));
+ valueMap.put("배달일자", FormatMaker.yyyy_mm_dd(format, "DLVR_YMD").style(dateYMD));
+ valueMap.put("배달시각", format.of("DLVR_TM").style(center));
+ valueMap.put("미배달사유", format.of("UNDLVR_RSN_NM"));
+ valueMap.put("수령인", format.of("ACTL_RCPN_NM"));
+ valueMap.put("수령인관계", format.of("RCPN_REL_NM"));
+ valueMap.put("단속일시", format.of("CRDN_DT").style(center));
+ valueMap.put("차량번호", format.of("VHRNO"));
+ valueMap.put("단속법정동", format.of("CRDN_STDG_NM"));
+ valueMap.put("단속장소", format.of("CRDN_PLC"));
+ valueMap.put("회계연도", format.of("FYR").style(center));
+ valueMap.put("부과번호", format.of("LEVY_NO").style(center));
+ valueMap.put("부과일자", FormatMaker.yyyy_mm_dd(format, "LEVY_YMD").style(dateYMD));
+ valueMap.put("납기일자", FormatMaker.yyyy_mm_dd(format, "DUDT_YMD").style(dateYMD));
+ 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("등록일시", 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"));
+ }
+ }
+
+ /**우편통합 발송 대상을 등록한다.
+ * @param sndng 발송 정보
+ * @return jsonView
+ * {
+ * "saved": 등록되었으면 true, 그렇지 않으면 false
+ * }
+ */
+ @Task
+ @RequestMapping(name="우편통합 발송 연계 등록", value=METHOD_URL.createSendingLink)
+ public ModelAndView createSendingLink(Sndng sndng) {
+ boolean saved = false;
+ String rtnMsg = sndngService.createSndngLink(sndng);
+
+ if (rtnMsg.contains("[S]")) {
+ saved = true;
+ } else {
+ saved = false;
+ }
+
+ return new ModelAndView("jsonView")
+ .addObject("saved", saved)
+ .addObject("rtnMsg", rtnMsg);
+ }
+
+ /**수기 반송 등록 정보(sndb/sndb01/210-info)을 연다.
+ *
+ * @return /sndb/sndb01/210-info
+ */
+ @Task
+ @RequestMapping(name = "수기 반송 등록 정보 조회", value = METHOD_URL.sendingDetailInfo)
+ public ModelAndView sendingDetailInfo(HttpServletRequest hReq, SndbQuery req) {
+ ModelAndView mav = new ModelAndView("fims/sndb/sndb01210-info");
+
+ // View(jsp)에서 사용할 공통코드를 조회
+ Map> commonCodes = getCodesOf("FIM047", "FIM054", "FIM081");
+
+ return mav
+ .addObject("openerPageName", hReq.getParameter("openerPageName")) // 호출한 Jsp PageName
+ .addObject("callPurpose", req.getCallPurpose()) // 호출 용도
+ .addObject("pageName", "sndb01210") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
+ .addObject("infoPrefix", "sndbkTrgt") // prefix
+ .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
+ .addObject("sggCd", req.getSggCd()) // 시군구 코드(SGG_CD)
+ .addObject("taskSeCd", req.getTaskSeCd()) // 업무 구분 코드(TASK_SE_CD)
+ .addObject("FIM047List", commonCodes.get("FIM047")) // 발송 구분 코드(SNDNG_SE_CD)
+ .addObject("FIM081List", commonCodes.get("FIM081")) // 미배달 사유 코드(UNDLVR_RSN_CD)
+ ;
+ }
+
+ /**발송 상세 대장 목록을 조회하여 반환한다
+ * {@link SndngService#getSndngList(SndngQuery)} 참고
+ * @param req 발송 대장 조회 조건
+ * @return jsonView
+ * {
+ * "sndngDtlList": [발송상세 목록]
+ * "sndngDtlStart": 발송상세 목록 시작 인덱스
+ * "sndngDtlFetch": 한 번에 가져오는 발송상세 목록 수
+ * "sndngDtlTotal": 조회 결과 찾은 전체 발송상세 수
+ * }
+ */
+ @Task
+ @RequestMapping(name="반송 대상 목록 조회", value=METHOD_URL.getSendingDetailList)
+ public ModelAndView getSendingDetailList(SndbQuery req) {
+ if (!"xls".equals(req.getDownload())) {
+ List> result = sndngDtlService.getSndngDtlList(setFetchSize(req));
+ return setCollectionInfo(new ModelAndView("jsonView"), result, "sndbkTrgt");
+ } else {
+ // 현재 날짜 구하기
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
+ String dateTime = dateFormat.format(System.currentTimeMillis());
+
+ List 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 list = sndngDtlService.getSndngDtlList(req.setFetchSize(0));
+
+ Map valueMap = new HashMap();
+ valueMap.put("발송상태", format.of("SNDNG_DTL_STTS_NM").style(center));
+ valueMap.put("등기번호", format.of("RG_NO").style(center));
+ valueMap.put("발송일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_YMD").style(dateYMD));
+ valueMap.put("발송종료일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_END_YMD").style(dateYMD));
+ valueMap.put("성명", format.of("RCPN_NM"));
+ valueMap.put("우편번호", format.of("RCPN_ZIP").style(center));
+ valueMap.put("주소", format.of("RCPN_ADDR"));
+ valueMap.put("상세주소", format.of("RCPN_DTL_ADDR"));
+ valueMap.put("배달일자", FormatMaker.yyyy_mm_dd(format, "DLVR_YMD").style(dateYMD));
+ valueMap.put("배달시각", format.of("DLVR_TM").style(center));
+ valueMap.put("미배달사유", format.of("UNDLVR_RSN_NM"));
+ valueMap.put("수령인", format.of("ACTL_RCPN_NM"));
+ valueMap.put("수령인관계", format.of("RCPN_REL_NM"));
+ valueMap.put("단속일시", format.of("CRDN_DT").style(center));
+ valueMap.put("차량번호", format.of("VHRNO"));
+ valueMap.put("단속법정동", format.of("CRDN_STDG_NM"));
+ valueMap.put("단속장소", format.of("CRDN_PLC"));
+ valueMap.put("회계연도", format.of("FYR").style(center));
+ valueMap.put("부과번호", format.of("LEVY_NO").style(center));
+ valueMap.put("부과일자", FormatMaker.yyyy_mm_dd(format, "LEVY_YMD").style(dateYMD));
+ valueMap.put("납기일자", FormatMaker.yyyy_mm_dd(format, "DUDT_YMD").style(dateYMD));
+ 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("등록일시", 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"));
+ }
+ }
+
+ /**발송상세 목록의 반송 정보를 등록한다.
+ * @param sndngDtl 발송상세 정보
+ * @return jsonView
+ * {
+ * "saved": 수정되었으면 true, 그렇지 않으면 false
+ * }
+ */
+ @Task
+ @RequestMapping(name="발송상세 목록의 반송 정보 등록", value=METHOD_URL.createSendBackList)
+ public ModelAndView createSendBackList(SndbQuery req) {
+ boolean saved = false;
+ String rtnMsg = sndngDtlService.createSndbkList(req);
+
+ if (rtnMsg.contains("[S]")) {
+ saved = true;
+ } else {
+ saved = false;
+ }
+
+ return new ModelAndView("jsonView")
+ .addObject("saved", saved)
+ .addObject("rtnMsg", rtnMsg);
+ }
+
+ /**발송상세 정보의 반송 정보를 등록한다.
+ * @param sndngDtl 발송상세 정보
+ * @return jsonView
+ * {
+ * "saved": 수정되었으면 true, 그렇지 않으면 false
+ * }
+ */
+ @Task
+ @RequestMapping(name="발송상세의 반송 정보 등록", value=METHOD_URL.createSendBack)
+ public ModelAndView createSendBack(SndngDtl sndngDtl) {
+ boolean saved = false;
+ String rtnMsg = sndngDtlService.createSndbk(sndngDtl);
+
+ if (rtnMsg.contains("[S]")) {
+ saved = true;
+ } else {
+ saved = false;
+ }
+
+ return new ModelAndView("jsonView")
+ .addObject("saved", saved)
+ .addObject("rtnMsg", rtnMsg);
+ }
+
+ /**발송상세 정보의 반송 정보를 수정한다.
+ * @param sndngDtl 발송상세 정보
+ * @return jsonView
+ * {
+ * "saved": 수정되었으면 true, 그렇지 않으면 false
+ * }
+ */
+ @Task
+ @RequestMapping(name="발송상세의 반송 정보 수정", value=METHOD_URL.updateSendBack)
+ public ModelAndView updateSendBack(SndngDtl sndngDtl) {
+ boolean saved = false;
+ String rtnMsg = sndngDtlService.updateSndbk(sndngDtl);
+
+ if (rtnMsg.contains("[S]")) {
+ saved = true;
+ } else {
+ saved = false;
+ }
+
+ return new ModelAndView("jsonView")
+ .addObject("saved", saved)
+ .addObject("rtnMsg", rtnMsg);
+ }
+
+ /**발송상세 정보의 반송 정보를 삭제한다.
+ * @param sndngDtl 발송상세 정보
+ * @return jsonView
+ * {
+ * "saved": 수정되었으면 true, 그렇지 않으면 false
+ * }
+ */
+ @Task
+ @RequestMapping(name="발송상세의 반송 정보 삭제", value=METHOD_URL.removeSendBack)
+ public ModelAndView removeSendBack(SndngDtl sndngDtl) {
+ boolean saved = false;
+ String rtnMsg = sndngDtlService.removeSndbk(sndngDtl);
+
+ if (rtnMsg.contains("[S]")) {
+ saved = true;
+ } else {
+ saved = false;
+ }
+
+ return new ModelAndView("jsonView")
+ .addObject("saved", saved)
+ .addObject("rtnMsg", rtnMsg);
+ }
+
+ /**반송 현황 메인화면(sndb/sndb01/220-main)을 연다.
+ *
+ * @return /sndb/sndb01/220-main
+ */
+ @RequestMapping(name = "반송 현황 메인", value = METHOD_URL.sendBackMain)
+ public ModelAndView sendBackMain() {
+ ModelAndView mav = new ModelAndView("fims/sndb/sndb01220-main");
+
+ // 사용자 정보
+ FimsUser fimsUser = (FimsUser)currentUser().getUser();
+
+ // View(jsp)에서 사용할 공통코드를 조회
+ Map> commonCodes = getCodesOf("FIM004", "FIM005", "FIM006", "FIM047", "FIM054", "FIM061", "FIM064", "FIM081");
+
+ addCodes(commonCodes, mav, "FIM004", "FIM005", "FIM006", "FIM061", "FIM064");
+
+ return mav
+ .addObject("pageName", "sndb01220") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
+ .addObject("infoPrefix", "sndbk") // prefix
+ .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
+ .addObject("sggCd", fimsUser.getOrgID()) // 시군구 코드(SGG_CD)
+ .addObject("taskListForSgg", stngBean.filterTaskSectionCodeForSgg(commonCodes.get("FIM054"))) // 시군구에서 사용하는 업무 목록
+ .addObject("FIM004List", commonCodes.get("FIM004")) // 주정차위반 내역 코드(VLTN_ID)
+ .addObject("FIM005List", commonCodes.get("FIM005")) // 전용차로위반 내역 코드(VLTN_ID)
+ .addObject("FIM006List", commonCodes.get("FIM006")) // 장애인주차위반 내역 코드(VLTN_ID)
+ .addObject("FIM061List", commonCodes.get("FIM061")) // 전기차 충전구역 및 충전방해 위반 코드(VLTN_ID)
+ .addObject("FIM064List", commonCodes.get("FIM064")) // 화물자동차 밤샘주차 위반 코드(VLTN_ID)
+ .addObject("FIM047List", commonCodes.get("FIM047")) // 발송 구분 코드(SNDNG_SE_CD)
+ .addObject("FIM081List", commonCodes.get("FIM081")) // 미배달 사유 코드(UNDLVR_RSN_CD)
+ ;
+ }
+
+ /**반송 현황 목록을 조회하여 반환한다.
+ * {@link SndngService#getSndngList(SndngQuery)} 참고
+ * @param req 발송 대장 조회 조건
+ * @return jsonView
+ * {
+ * "sndngList": [반송 현황 목록]
+ * "sndngStart": 반송 현황 목록 시작 인덱스
+ * "sndngFetch": 한 번에 가져오는 반송 현황 목록 수
+ * "sndngTotal": 조회 결과 찾은 전체 반송 현황 수
+ * }
+ */
+ @Task
+ @RequestMapping(name="반송 목록 조회", value=METHOD_URL.getSendBackList)
+ public ModelAndView getSendBackList(SndbQuery req) {
+ if (!"xls".equals(req.getDownload())) {
+ List> result = sndngDtlService.getSndbkList(setFetchSize(req));
+ return setCollectionInfo(new ModelAndView("jsonView"), result, "sndbk");
+ } else {
+ // 현재 날짜 구하기
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
+ String dateTime = dateFormat.format(System.currentTimeMillis());
+
+ List 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 list = sndngDtlService.getSndbkList(req.setFetchSize(0));
+
+ Map valueMap = new HashMap();
+ valueMap.put("업무구분", format.of("TASK_SE_NM").style(center));
+ valueMap.put("고지번호", format.of("GOJI_NO").style(center));
+ valueMap.put("등기번호", format.of("RG_NO").style(center));
+ valueMap.put("배달일자", FormatMaker.yyyy_mm_dd(format, "DLVR_YMD").style(dateYMD));
+ valueMap.put("배달시간", format.of("DLVR_TM"));
+ valueMap.put("미배달사유", format.of("UNDLVR_RSN_NM"));
+ valueMap.put("수령인", format.of("ACTL_RCPN_NM"));
+ valueMap.put("수령인관계", format.of("RCPN_REL_NM"));
+ valueMap.put("발송구분", format.of("SNDNG_SE_NM").style(center));
+ valueMap.put("발송일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_YMD").style(dateYMD));
+ valueMap.put("과태료금액", format.of("FFNLG_AMT").style(numeric));
+ valueMap.put("성명", format.of("RCPN_NM"));
+ valueMap.put("우편번호", format.of("RCPN_ZIP").style(center));
+ valueMap.put("주소", format.of("RCPN_ADDR"));
+ valueMap.put("상세주소", format.of("RCPN_DTL_ADDR"));
+ 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").style(center));
+ 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"));
+ }
+ }
+
+ /**반송등록 (sndb/sndb01/230-info)을 연다.
+ * @param sndngId 발송 ID
+ * @return fims/sndb/sndb01230-info 또는 jsonView
+ * {
+ * "sndngDtls":
+ * }
+ */
+ @Task
+ @RequestMapping(name="발송상세의 반송(미배달) 정보 조회", value=METHOD_URL.getSendBackInfo)
+ public ModelAndView getSendBackInfo(HttpServletRequest hReq, SndbQuery req) {
+ DataObject info = sndngDtlService.getSndbkInfo(req);
+
+ // 등록을 호출하였지만 등록된 미배달 사유가 있는지 확인.
+ if (req.getCallPurpose().equals("create") && !info.string("UNDLVR_RSN_NM").equals("")) {
+ ModelAndView mav = new ModelAndView("jsonView");
+
+ return mav.addObject("pageName", "sndb01230")
+ .addObject("rtnMsg", "이미 등록된 미배달 사유가 있습니다.")
+ ;
+ } else {
+ boolean json = jsonResponse();
+ ModelAndView mav = new ModelAndView(json ? "jsonView" : "fims/sndb/sndb01230-info");
+
+ // View(jsp)에서 사용할 공통코드를 조회
+ Map> commonCodes = getCodesOf("FIM054", "FIM081");
+
+ return mav
+ .addObject("openerPageName", hReq.getParameter("openerPageName")) // 호출한 Jsp PageName
+ .addObject("callPurpose", req.getCallPurpose()) // 호출 용도
+ .addObject("pageName", "sndb01230") // jsp pageName
+ .addObject("infoPrefix", "sndbk") // prefix
+ .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
+ .addObject("FIM054List", commonCodes.get("FIM054")) // 업무 구분 코드(TASK_SE_CD)
+ .addObject("FIM081List", commonCodes.get("FIM081")) // 미배달 사유 코드(UNDLVR_RSN_CD)
+ .addObject("sndbkInfo", json ? info : toJson(info)) // 반송 정보
+ ;
+ }
+ }
+
+ /**공시송달 현황 메인화면(sndb/sndb01/240-main)을 연다.
+ *
+ * @return /sndb/sndb01/240-main
+ */
+ @RequestMapping(name = "공시송달 현황 메인", value = METHOD_URL.serviceByPublicNoticeMain)
+ public ModelAndView serviceByPublicNoticeMain() {
+ ModelAndView mav = new ModelAndView("fims/sndb/sndb01240-main");
+
+ // 사용자 정보
+ FimsUser fimsUser = (FimsUser)currentUser().getUser();
+
+ // View(jsp)에서 사용할 공통코드를 조회
+ Map> commonCodes = getCodesOf("FIM047", "FIM054");
+
+ return mav.addObject("pageName", "sndb01240") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
+ .addObject("infoPrefix", "svbtc") // prefix
+ .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
+ .addObject("sggCd", fimsUser.getOrgID()) // 시군구 코드(SGG_CD)
+ .addObject("taskListForSgg", stngBean.filterTaskSectionCodeForSgg(commonCodes.get("FIM054"))) // 시군구에서 사용하는 업무 목록
+ .addObject("FIM047List", commonCodes.get("FIM047")) // 발송 구분 코드(SNDNG_SE_CD)
+ ;
+ }
+
+ /**공시송달 현황 목록을 조회하여 반환한다.
+ * {@link SndngService#getSndngList(SndngQuery)} 참고
+ * @param req 발송 대장 조회 조건
+ * @return jsonView
+ * {
+ * "sndngList": [공시송달 현황 목록]
+ * "sndngStart": 공시송달 현황 목록 시작 인덱스
+ * "sndngFetch": 한 번에 가져오는 공시송달 현황 목록 수
+ * "sndngTotal": 조회 결과 찾은 전체 공시송달 현황 수
+ * }
+ */
+ @Task
+ @RequestMapping(name="공시송달 목록 조회", value=METHOD_URL.getServiceByPublicNoticeList)
+ public ModelAndView getServiceByPublicNoticeList(SndbQuery req) {
+ if (!"xls".equals(req.getDownload())) {
+ List> result = svbtcService.getSvbtcList(setFetchSize(req));
+ return setCollectionInfo(new ModelAndView("jsonView"), result, "svbtc");
+ } else {
+ // 현재 날짜 구하기
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
+ String dateTime = dateFormat.format(System.currentTimeMillis());
+
+ List 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 list = svbtcService.getSvbtcList(req.setFetchSize(0));
+
+ Map valueMap = new HashMap();
+ valueMap.put("업무구분", format.of("TASK_SE_NM").style(center));
+ valueMap.put("발송구분", format.of("SNDNG_SE_NM").style(center));
+ valueMap.put("공시송달일자", FormatMaker.yyyy_mm_dd(format, "SVBTC_YMD").style(dateYMD));
+ valueMap.put("공시송달종료일자", FormatMaker.yyyy_mm_dd(format, "SVBTC_END_YMD").style(dateYMD));
+ valueMap.put("총건수", format.of("TNOCS").style(numeric));
+ valueMap.put("문서번호", format.of("DOC_NO"));
+ valueMap.put("제목", format.of("TTL_NM"));
+ valueMap.put("기타내용", format.of("ETC_CN"));
+ 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"));
+ }
+ }
+
+ /**공시송달 발송 현황 - 공시송달 상세 정보 화면(sndb/sndb01/250-info)을 연다.
+ * @param svbtcId 공시송달 ID
+ * @return fims/sndb/sndb01250-info 또는 jsonView
+ * {
+ * "sndngDtls": [발송 상세 목록]
+ * }
+ */
+ @Task
+ @RequestMapping(name="공시송달 상세 화면", value=METHOD_URL.getServiceByPublicNoticeDetailInfo)
+ public ModelAndView getServiceByPublicNoticeDetailInfo(HttpServletRequest hReq, SndbQuery req) {
+ ModelAndView mav = getServiceByPublicNoticeDetailList(req);
+
+ mav.setViewName("fims/sndb/sndb01250-info");
+
+ return mav
+ .addObject("openerPageName", hReq.getParameter("openerPageName")) // 호출한 Jsp PageName
+ .addObject("callPurpose", req.getCallPurpose()) // 호출 용도
+ .addObject("pageName", "sndb01250") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
+ .addObject("infoPrefix", "svbtcDtl") // prefix
+ .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
+ .addObject("mainQuery", toJson(req)) // 검색 조건
+ .addObject("svbtcDtlList", toJson(mav.getModel().get("svbtcDtlList"))) // 자료
+ ;
+ }
+
+ /**공시송달 발송 현황 - 공시송달 상세 목록을 조회하여 반환한다.
+ * {@link SndngService#getSndngList(SndngQuery)} 참고
+ * @param req 발송 대장 조회 조건
+ * @return jsonView
+ * {
+ * "sndngDtlList": [공시송달 상세 목록]
+ * "sndngDtlStart": 공시송달 상세 목록 시작 인덱스
+ * "sndngDtlFetch": 한 번에 가져오는 공시송달 상세 목록 수
+ * "sndngDtlTotal": 조회 결과 찾은 전체 공시송달 상세 수
+ * }
+ */
+ @Task
+ @RequestMapping(name="공시송달 상세 목록 조회", value=METHOD_URL.getServiceByPublicNoticeDetailList)
+ public ModelAndView getServiceByPublicNoticeDetailList(SndbQuery req) {
+ if (!"xls".equals(req.getDownload())) {
+ List> result = svbtcService.getSvbtcDtls(req); // 공시송달자료는 일괄조회 하자. List> result = svbtcService.getSvbtcDtlList(setFetchSize(req));
+ return setCollectionInfo(new ModelAndView("jsonView"), result, "svbtcDtl");
+ } else {
+ // 현재 날짜 구하기
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
+ String dateTime = dateFormat.format(System.currentTimeMillis());
+
+ List 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 list = svbtcService.getSvbtcDtlList(req.setFetchSize(0));
+
+ Map valueMap = new HashMap();
+ valueMap.put("발송상태", format.of("SNDNG_DTL_STTS_NM").style(center));
+ valueMap.put("공시송달일자", FormatMaker.yyyy_mm_dd(format, "SVBTC_YMD").style(dateYMD));
+ valueMap.put("등기번호", format.of("RG_NO").style(center));
+ valueMap.put("발송일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_YMD").style(dateYMD));
+ valueMap.put("발송종료일자", FormatMaker.yyyy_mm_dd(format, "SNDNG_END_YMD").style(dateYMD));
+ valueMap.put("성명", format.of("RCPN_NM"));
+ valueMap.put("우편번호", format.of("RCPN_ZIP").style(center));
+ valueMap.put("주소", format.of("RCPN_ADDR"));
+ valueMap.put("상세주소", format.of("RCPN_DTL_ADDR"));
+ valueMap.put("배달일자", FormatMaker.yyyy_mm_dd(format, "DLVR_YMD").style(dateYMD));
+ valueMap.put("배달시각", format.of("DLVR_TM").style(center));
+ valueMap.put("미배달사유", format.of("UNDLVR_RSN_NM"));
+ valueMap.put("수령인", format.of("ACTL_RCPN_NM"));
+ valueMap.put("수령인관계", format.of("RCPN_REL_NM"));
+ valueMap.put("단속일시", format.of("CRDN_DT").style(center));
+ valueMap.put("차량번호", format.of("VHRNO"));
+ valueMap.put("단속법정동", format.of("CRDN_STDG_NM"));
+ valueMap.put("단속장소", format.of("CRDN_PLC"));
+ valueMap.put("회계연도", format.of("FYR").style(center));
+ valueMap.put("부과번호", format.of("LEVY_NO").style(center));
+ valueMap.put("부과일자", FormatMaker.yyyy_mm_dd(format, "LEVY_YMD").style(dateYMD));
+ valueMap.put("납기일자", FormatMaker.yyyy_mm_dd(format, "DUDT_YMD").style(dateYMD));
+ valueMap.put("과태료금액", format.of("FFNLG_AMT").style(numeric));
+ valueMap.put("본세", format.of("PCPTAX").style(numeric));
+ valueMap.put("가산금", format.of("ADAMT").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));
+ 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"));
+ }
+ }
+
+ /** 공시송달 한글 파일로 작성한다.
+ * @return 공시송달 hwp파일
+ */
+ @Task
+ @RequestMapping(name="공시송달 한글 저장", value=METHOD_URL.makeSvbtcFileFromHwpFormat)
+ public ModelAndView makeSvbtcFileFromHwpFormat(SndbQuery req) {
+ UserInfo userInfo = currentUser();
+ ogdpBean.initUserInfo(userInfo);
+ Print print = new Print();
+ print.setPrintRequestUserInfo(userInfo);
+
+ FimsPrintOption printOption = new FimsPrintOption();
+
+ req.setSggCd((String)userInfo.getInfo().get("sggCd"));
+ req.setDeptCd((String)userInfo.getInfo().get("deptCd"));
+ req.setOrderBy("SV.SVBTC_ID, SD.SNDNG_DTL_ID");
+ List dataObjectList = svbtcBean.getSvbtcPrint(req);
+
+ SvbtcList hwpFormat = new SvbtcList(print, printOption, dataObjectList);
+ HashMap result = hwpFormat.makeFile().andDownload();
+ ModelAndView mav = new ModelAndView("downloadView");
+ mav.addAllObjects(result);
+
+ return mav;
+ }
+
+ /**지정한 ID의 공시송달 정보를 반환한다.
+ * @param svbtcId 공시송달 ID
+ * @return fims/sndb/sndb01260-info 또는 jsonView
+ * {
+ * "svbtcInfo": 공시송달 정보
+ * }
+ */
+ @Task
+ @RequestMapping(name="공시송달 정보", value=METHOD_URL.getServiceByPublicNoticeInfo)
+ public ModelAndView getServiceByPublicNoticeInfo(HttpServletRequest hReq, SndbQuery req) {
+ // 공시송달 정보 조회
+ DataObject info = svbtcService.getSvbtcInfo(req);
+
+ // 등록을 호출하였지만 등록된 공시송달 ID가 있는지 확인.
+ if (req.getCallPurpose().equals("create") && !info.string("SVBTC_ID").equals("")) {
+ ModelAndView mav = new ModelAndView("jsonView");
+
+ return mav.addObject("rtnMsg", "이미 등록된 공시송달 정보가 있습니다.");
+ } else {
+ boolean json = jsonResponse();
+ ModelAndView mav = new ModelAndView(json ? "jsonView" : "fims/sndb/sndb01260-info");
+
+ // View(jsp)에서 사용할 공통코드를 조회
+ Map> commonCodes = getCodesOf("FIM047", "FIM054");
+
+ addCodes(commonCodes, mav, "FIM047", "FIM054");
+
+ return mav
+ .addObject("openerPageName", hReq.getParameter("openerPageName")) // 호출한 Jsp PageName
+ .addObject("callPurpose", req.getCallPurpose()) // 호출 용도
+ .addObject("pageName", "sndb01260") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
+ .addObject("infoPrefix", "svbtc") // prefix
+ .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
+ .addObject("mainQuery", json ? req : toJson(req)) // Query
+ .addObject("svbtcInfo", json ? info : toJson(info)) // 공시송달 정보
+ ;
+ }
+ }
+
+ /**공시송달 대장에 공시송달 정보를 등록한다.
+ * @param svbtc 공시송달 정보
+ * @return jsonView
+ * {
+ * "saved": 수정되었으면 true, 그렇지 않으면 false
+ * }
+ */
+ @Task
+ @RequestMapping(name="공시송달 등록", value=METHOD_URL.createServiceByPublicNotice)
+ public ModelAndView createServiceByPublicNotice(SndbQuery req, Svbtc svbtc) {
+ boolean saved = false;
+ String rtnMsg = svbtcService.createSvbtc(req, svbtc);
+
+ if (rtnMsg.contains("[S]")) {
+ saved = true;
+ } else {
+ saved = false;
+ }
+
+ return new ModelAndView("jsonView")
+ .addObject("saved", saved)
+ .addObject("rtnMsg", rtnMsg);
+ }
+
+ /**공시송달 대장에 공시송달 정보를 수정한다.
+ * @param svbtc 공시송달 정보
+ * @return jsonView
+ * {
+ * "saved": 수정되었으면 true, 그렇지 않으면 false
+ * }
+ */
+ @Task
+ @RequestMapping(name="공시송달 수정", value=METHOD_URL.updateServiceByPublicNotice)
+ public ModelAndView updateServiceByPublicNotice(Svbtc svbtc) {
+ boolean saved = false;
+ String rtnMsg = svbtcService.updateSvbtc(svbtc);
+
+ if (rtnMsg.contains("[S]")) {
+ saved = true;
+ } else {
+ saved = false;
+ }
+
+ return new ModelAndView("jsonView")
+ .addObject("saved", saved)
+ .addObject("rtnMsg", rtnMsg);
+ }
+
+ /**지정한 공시송달 ID에 해당하는 공시송달 대장을 제거한다.
+ * @param svbtcId 공시송달 ID
+ * @return jsonView
+ * {
+ * "affected": 저장된 정보수
+ * "saved": 저장되었으면 true, 그렇지 않으면 false
+ * }
+ */
+ @Task
+ @RequestMapping(name="공시송달 삭제", value=METHOD_URL.removeServiceByPublicNotice)
+ public ModelAndView removeServiceByPublicNotice(Svbtc svbtc) {
+ boolean saved = false;
+ String rtnMsg = "";
+
+ if (svbtc.getSvbtcIds() == null || svbtc.getSvbtcIds().length < 1) {
+ rtnMsg = svbtcService.removeSvbtc(svbtc);
+ } else {
+ // 공시송달 Ids 만큼 삭제 반복..
+ for (String svbtcId : svbtc.getSvbtcIds()) {
+ Svbtc deltSvbtc = new Svbtc();
+ deltSvbtc.setSvbtcId(svbtcId);
+ deltSvbtc.setDelRsn(svbtc.getDelRsn());
+
+ // 공시송달 삭제 호출
+ rtnMsg = svbtcService.removeSvbtc(deltSvbtc);
+ if (!rtnMsg.contains("[S]")) // 오류가 발생하였으면 종료..
+ break;
+ }
+ }
+
+ if (rtnMsg.contains("[S]")) {
+ saved = true;
+ } else {
+ saved = false;
+ }
+
+ return new ModelAndView("jsonView")
+ .addObject("saved", saved)
+ .addObject("rtnMsg", rtnMsg);
+ }
+
+ /**지정한 공시송달 ID에 해당하는 공시송달 대장을 제거한다.
+ * @param svbtcId 공시송달 ID
+ * @return jsonView
+ * {
+ * "affected": 저장된 정보수
+ * "saved": 저장되었으면 true, 그렇지 않으면 false
+ * }
+ */
+ @Task
+ @RequestMapping(name="공시송달 개별 삭제", value=METHOD_URL.removeServiceByPublicNoticeEach)
+ public ModelAndView removeServiceByPublicNoticeEach(Svbtc svbtc) {
+ boolean saved = false;
+ String rtnMsg = svbtcService.removeSvbtcEach(svbtc);
+
+ if (rtnMsg.contains("[S]")) {
+ saved = true;
+ } else {
+ saved = false;
+ }
+
+ return new ModelAndView("jsonView")
+ .addObject("saved", saved)
+ .addObject("rtnMsg", rtnMsg);
+ }
+
+ /** 사전통지서를 PDF 파일로 작성한다.
+ * @return 사전통지서 PDF파일
+ */
+ @Task
+ @RequestMapping(name="사전통지서 pdf 파일 생성", value=METHOD_URL.makeAdvanceNoticePdf)
+ public ModelAndView makeAdvanceNoticePdf(SndbQuery req, FimsPrintOption printOption) {
+ ModelAndView mav = new ModelAndView("downloadView");
+
+ List list = sndngDtlService.getSndngTrgtDtlIds(req);
+
+ String[] crdnIds = new String[list.size()];
+
+ for (int iLoop = 0; iLoop < list.size(); iLoop++) {
+ crdnIds[iLoop] = list.get(iLoop).string("CRDN_ID");
+ }
+
+ List dataObjectList = new ArrayList();
+ if(crdnIds.length == 1 && crdnIds[0].equals("sample")) {
+ DataObject sample = new Advntce().createSampleData();
+ dataObjectList.add(sample);
+ } else {
+ SprtQuery sprtQuery = new SprtQuery();
+ sprtQuery.setCrdnIds(crdnIds);
+ dataObjectList = integrationSearchMapper.selectIntegrationDataList(sprtQuery);
+
+ for(int i=0; i < dataObjectList.size(); i++) {
+ DataObject dataObject = dataObjectList.get(i);
+ String crdnId = dataObject.string("CRDN_ID");
+
+ FileQuery fileQuery = new FileQuery();
+ fileQuery.setInfoType(Crdn.INF_TYPE);
+ fileQuery.setInfoKeys(crdnId);
+
+ List fileInfoList = fileBean.getFileList(fileQuery);
+ if (fileInfoList != null && fileInfoList.size() > 0) {
+ for (int j=0; j mosSet = mediaBean.getMosaicList(fileInfoList.get(j).string("FILE_ID"));
+ if (mosSet != null && !mosSet.isEmpty()) {
+ dataObject.set("MOS"+fileInfoList.get(j).string("FILE_ID"), mosSet);
+ }
+ }
+ }
+ }
+ }
+
+ Print print = new Print();
+ UserInfo userInfo = currentUser();
+ ogdpBean.initUserInfo(userInfo);
+ print.setPrintRequestUserInfo(userInfo);
+
+ //출력물 기본 설정
+ OtptStngQuery otptStngQuery = new OtptStngQuery();
+
+ otptStngQuery.setSggCd((String)userInfo.getInfo().get("sggCd"));
+ String paperSeCd = printOption.getPaperSeCd();
+ String taskSeCd = printOption.getTaskSeCd();
+ otptStngQuery.setTaskSeCd(taskSeCd);
+ otptStngQuery.setSndngSeCd("02");
+ otptStngQuery.setPaperSeCd(paperSeCd);
+ DataObject otptBscStng = otptStngMapper.selectOtptBscStng(otptStngQuery);
+ if(otptBscStng == null) {
+ otptBscStng = new DataObject();
+ }
+
+ //출력 요소별 설정
+ List otptArtclStngList = otptStngMapper.selectOtptArtclStngList(otptStngQuery);
+
+ DataObject sggStngInfo = stngBean.getStng("sgg");
+ DataObject deptStngInfo = stngBean.getStng("dept");
+ //
+ Map globalVariable = printOption.getGlobalVariable();
+ if(globalVariable == null) {
+ globalVariable = new HashMap();
+ }
+ globalVariable.put("offcsFilePath", sggStngInfo.string("OFFCS_FILE_PATH"));
+ globalVariable.put("logoFilePath", sggStngInfo.string("LOGO_FILE_PATH"));
+ globalVariable.put("instAddr", sggStngInfo.string("INST_ADDR"));
+ globalVariable.put("instDaddr", sggStngInfo.string("INST_DADDR"));
+ globalVariable.put("instZip", sggStngInfo.string("INST_ZIP"));
+ globalVariable.put("deptTelno", deptStngInfo.string("DEPT_TELNO"));
+ globalVariable.put("deptFxno", deptStngInfo.string("DEPT_FXNO"));
+ if(!otptBscStng.string("BCRN_IMG_PATH").equals("")) {
+ globalVariable.put("bcrnImgPath", otptBscStng.string("BCRN_IMG_PATH"));
+ }
+ printOption.setGlobalVariable(globalVariable);
+
+ Advntce pdfFormat = new Advntce(print,printOption,otptBscStng,otptArtclStngList,paperSeCd,dataObjectList);
+ Map result = pdfFormat.makeFile();
+
+ mav.addAllObjects(result);
+
+ return mav;
+ }
+
+ /** 사전통지 정보로 txt파일,이미지파일을 생성하고 압축파일로 반환한다.
+ * @return 사전통지서 압축파일
+ */
+ @Task
+ @RequestMapping(name="사전통지서 외주 파일 생성", value=METHOD_URL.makeAdvanceNoticeOutsourcing)
+ public ModelAndView makeAdvanceNoticeOutsourcing(SndbQuery req, FimsPrintOption printOption) {
+ ModelAndView mav = new ModelAndView("downloadView");
+
+ String taskSeCd = "";
+
+ List list = sndngDtlService.getSndngTrgtDtlIds(req);
+
+ String[] crdnIds = new String[list.size()];
+
+ for (int iLoop = 0; iLoop < list.size(); iLoop++) {
+ crdnIds[iLoop] = list.get(iLoop).string("CRDN_ID");
+ }
+ SprtQuery sprtQuery = new SprtQuery();
+ sprtQuery.setCrdnIds(crdnIds);
+ List dataObjectList = integrationSearchMapper.selectIntegrationDataList(sprtQuery);
+ for(int i=0; i < dataObjectList.size(); i++) {
+ DataObject sndngDtl = integrationSearchMapper.selectLatestSndngDtlInfo(dataObjectList.get(i).string("CRDN_ID"));
+ dataObjectList.get(i).set("SNDNG_DTL_ID",sndngDtl.string("SNDNG_DTL_ID"));
+ dataObjectList.get(i).set("SNDNG_YMD",sndngDtl.string("SNDNG_YMD"));
+ dataObjectList.get(i).set("OPNN_RANGE",
+ dataObjectList.get(i).string("SNDNG_YMD")+"~"+dataObjectList.get(i).string("DUDT_YMD"));
+ dataObjectList.get(i).set("RG_NO",sndngDtl.string("RG_NO"));
+ }
+
+ for(int i=0; i < dataObjectList.size(); i++) {
+ DataObject dataObject = dataObjectList.get(i);
+
+ if(taskSeCd.equals("")) {
+ taskSeCd = dataObject.string("TASK_SE_CD");
+ }
+
+ FileQuery fileQuery = new FileQuery();
+ fileQuery.setInfoType(Crdn.INF_TYPE);
+ fileQuery.setInfoKeys(dataObject.string("CRDN_ID"));
+ List fileInfoList = fileBean.getFileList(fileQuery);
+
+ if(fileInfoList != null) {
+ int crdnPhotoCnt = fileInfoList.size();
+ for(int j=0; j < fileInfoList.size(); j++) {
+ DataObject fileInfo = fileInfoList.get(j);
+
+ dataObject.set("CRDN_PHOTO"+(j+1), fileInfo.string("FILE_PATH"));
+ dataObject.set("CRDN_PHOTO"+(j+1)+"KEY", fileInfo.string("FILE_ID"));
+ List mosSet = mediaBean.getMosaicList(fileInfo.string("FILE_ID"));
+ if(mosSet != null) {
+ for(int k=0; k < mosSet.size(); k++) {
+ dataObject.set("MOS"+fileInfo.string("FILE_ID"), mosSet);
+ }
+ }
+ }
+ dataObject.set("CRDN_PHOTO_CNT", crdnPhotoCnt);
+ } else {
+ dataObject.set("CRDN_PHOTO_CNT", 0);
+ }
+
+ }
+
+ FimsUser currentUser = (FimsUser) currentUser().getUser();
+ String sggCd = currentUser.getOrgID();
+
+ OutsourcingStngQuery stngQuery = new OutsourcingStngQuery();
+ stngQuery.setSggCd(sggCd);
+ stngQuery.setTaskSeCd(taskSeCd);
+ stngQuery.setSndngSeCd("02");
+ List printStngItems = outsourcingStngBean.getArtclStngList(stngQuery);
+
+ OutsourcingFileMaker osMaker = new OutsourcingFileMaker("사전통지", printOption, printStngItems, dataObjectList);
+
+ Map result = osMaker.makeFile();
+
+ mav.addAllObjects(result);
+
+ return mav;
+ }
+
+ /** 고지서를 PDF 파일로 작성한다.
+ * @return 고지서 PDF파일
+ */
+ @Task
+ @RequestMapping(name="고지서 pdf 파일 생성", value=METHOD_URL.makeNoticeSheetPdf)
+ public ModelAndView makeNoticeSheetPdf(SndbQuery req, FimsPrintOption printOption) {
+ // 고지서 출력 대상 자료 조회
+ List list = sndngDtlService.getSndngTrgtDtlIds(req);
+
+ String[] crdnIds = new String[list.size()];
+ for (int iLoop = 0; iLoop < list.size(); iLoop++) {
+ crdnIds[iLoop] = list.get(iLoop).string("CRDN_ID");
+ }
+
+ UserInfo userInfo = currentUser();
+ ogdpBean.initUserInfo(userInfo);
+
+ ModelAndView mav = new ModelAndView("downloadView");
+
+ // 단속 대장 조회
+ SprtQuery sprtQuery = new SprtQuery();
+ sprtQuery.setCrdnIds(crdnIds);
+
+ ListdataObjectList = integrationSearchMapper.selectIntegrationDataList(sprtQuery);
+
+ for (int i=0; i < dataObjectList.size(); i++) {
+ DataObject dataObject = dataObjectList.get(i);
+ String crdnId = dataObject.string("CRDN_ID");
+
+ FileQuery fileQuery = new FileQuery();
+ fileQuery.setInfoType(Crdn.INF_TYPE);
+ fileQuery.setInfoKeys(crdnId);
+
+ List fileInfoList = fileBean.getFileList(fileQuery);
+ if (fileInfoList != null && fileInfoList.size() > 0) {
+ for (int j=0; j mosSet = mediaBean.getMosaicList(fileInfoList.get(j).string("FILE_ID"));
+ if (mosSet != null && !mosSet.isEmpty()) {
+ dataObject.set("MOS"+fileInfoList.get(j).string("FILE_ID"), mosSet);
+ }
+ }
+ }
+ }
+
+ Print print = new Print();
+ print.setPrintRequestUserInfo(userInfo);
+
+ //출력물 기본 설정
+ OtptStngQuery otptStngQuery = new OtptStngQuery();
+ String paperSeCd = printOption.getPaperSeCd();
+ String taskSeCd = printOption.getTaskSeCd();
+ otptStngQuery.setSggCd((String)userInfo.getInfo().get("sggCd"));
+ otptStngQuery.setTaskSeCd(taskSeCd);
+ otptStngQuery.setSndngSeCd("03");
+ otptStngQuery.setPaperSeCd(paperSeCd);
+ DataObject otptBscStng = otptStngMapper.selectOtptBscStng(otptStngQuery);
+ if(otptBscStng == null) {
+ otptBscStng = new DataObject();
+ }
+ //출력 요소별 설정
+ List otptArtclStngList = otptStngMapper.selectOtptArtclStngList(otptStngQuery);
+
+ DataObject sggStngInfo = stngBean.getStng("sgg");
+ DataObject deptStngInfo = stngBean.getStng("dept");
+ //
+ Map globalVariable = printOption.getGlobalVariable();
+ if(globalVariable == null) {
+ globalVariable = new HashMap();
+ }
+ globalVariable.put("offcsFilePath", sggStngInfo.string("OFFCS_FILE_PATH"));
+ globalVariable.put("logoFilePath", sggStngInfo.string("LOGO_FILE_PATH"));
+ globalVariable.put("instAddr", sggStngInfo.string("INST_ADDR"));
+ globalVariable.put("instDaddr", sggStngInfo.string("INST_DADDR"));
+ globalVariable.put("instZip", sggStngInfo.string("INST_ZIP"));
+ globalVariable.put("deptTelno", deptStngInfo.string("DEPT_TELNO"));
+ globalVariable.put("deptFxno", deptStngInfo.string("DEPT_FXNO"));
+ if(!otptBscStng.string("BCRN_IMG_PATH").equals("")) {
+ globalVariable.put("bcrnImgPath", otptBscStng.string("BCRN_IMG_PATH"));
+ }
+ printOption.setGlobalVariable(globalVariable);
+
+ Nht pdfFormat = new Nht(print,printOption,otptBscStng,otptArtclStngList,paperSeCd,dataObjectList);
+
+ Map result = pdfFormat.makeFile();
+
+ mav.addAllObjects(result);
+
+ return mav;
+ }
+
+ /** 고지서 정보로 txt파일,이미지파일을 생성하고 압축파일로 반환한다.
+ * @return 고지서 압축파일
+ */
+ @Task
+ @RequestMapping(name="고지서 외주 파일 생성", value=METHOD_URL.makeNoticeSheetOutsourcing)
+ public ModelAndView makeNoticeSheetOutsourcing(SndbQuery req, FimsPrintOption printOption) {
+ // 고지서 출력 대상 자료 조회
+ List list = sndngDtlService.getSndngTrgtDtlIds(req);
+
+ String[] crdnIds = new String[list.size()];
+ for (int iLoop = 0; iLoop < list.size(); iLoop++) {
+ crdnIds[iLoop] = list.get(iLoop).string("CRDN_ID");
+ }
+
+ UserInfo userInfo = currentUser();
+ ogdpBean.initUserInfo(userInfo);
+
+ ModelAndView mav = new ModelAndView("downloadView");
+
+ String taskSeCd = req.getTaskSeCd();
+
+ // 단속 대장 조회
+ SprtQuery sprtQuery = new SprtQuery();
+ sprtQuery.setCrdnIds(crdnIds);
+
+ List dataObjectList = integrationSearchMapper.selectIntegrationDataList(sprtQuery);
+
+ for (int i=0; i < dataObjectList.size(); i++) {
+ DataObject dataObject = dataObjectList.get(i);
+
+ if (taskSeCd.equals("")) {
+ taskSeCd = dataObject.string("TASK_SE_CD");
+ }
+
+ FileQuery fileQuery = new FileQuery();
+ fileQuery.setInfoType(Crdn.INF_TYPE);
+ fileQuery.setInfoKeys(dataObject.string("CRDN_ID"));
+ List fileInfoList = fileBean.getFileList(fileQuery);
+
+ if (fileInfoList != null) {
+ int crdnPhotoCnt = fileInfoList.size();
+ for (int j=0; j < fileInfoList.size(); j++) {
+ DataObject fileInfo = fileInfoList.get(j);
+ dataObject.set("CRDN_PHOTO"+(j+1), fileInfo.string("FILE_PATH"));
+ dataObject.set("CRDN_PHOTO"+(j+1)+"KEY", fileInfo.string("FILE_ID"));
+
+ List mosSet = mediaBean.getMosaicList(fileInfo.string("FILE_ID"));
+ if (mosSet != null) {
+ for (int k=0; k < mosSet.size(); k++) {
+ dataObject.set("MOS"+fileInfo.string("FILE_ID"), mosSet);
+ }
+ }
+ }
+ dataObject.set("CRDN_PHOTO_CNT", crdnPhotoCnt);
+ } else {
+ dataObject.set("CRDN_PHOTO_CNT", 0);
+ }
+ }
+
+ FimsUser currentUser = (FimsUser) currentUser().getUser();
+ String sggCd = currentUser.getOrgID();
+
+ OutsourcingStngQuery stngQuery = new OutsourcingStngQuery();
+ stngQuery.setSggCd(sggCd);
+ stngQuery.setTaskSeCd(taskSeCd);
+ stngQuery.setSndngSeCd("03");
+
+ List printStngItems = outsourcingStngBean.getArtclStngList(stngQuery);
+
+ OutsourcingFileMaker osMaker = new OutsourcingFileMaker("고지서", printOption, printStngItems, dataObjectList);
+
+ Map result = osMaker.makeFile();
+
+ mav.addAllObjects(result);
+
+ return mav;
+ }
+
+ /**과태료 대장 단속 정보 등록를 등록한다.
+ * @param req 발송 대장 조회 조건
+ * @return jsonView
+ * {
+ * "saved": 등록되었으면 true, 그렇지 않으면 false
+ * }
+ */
+ @Task({"ECA","DPV","PES","DVS"})
+ @RequestMapping(name="세외수입 과태료 대장 단속 정보 등록", value=METHOD_URL.setNonTaxReceiptIndividualA01List)
+ public ModelAndView setNonTaxReceiptIndividualA01List(SndbQuery req, Sndng sndng) {
+ boolean saved = false;
+ String rtnMsg = "";
+
+ List dtlList = sndngDtlService.getSndngTrgtDtlIds(req);
+
+ // 발송상세 Ids 만큼 반복..
+ for (int iLoop = 0; iLoop < dtlList.size(); iLoop++) {
+ SndngDtl sndngDtl = new SndngDtl();
+
+ sndngDtl.setSndngDtlId(dtlList.get(iLoop).string("SNDNG_DTL_ID"));
+ sndngDtl.setCrdnId(dtlList.get(iLoop).string("CRDN_ID"));
+ sndngDtl.setLinkTrgtCd(dtlList.get(iLoop).string("LINK_TRGT_CD"));
+ sndngDtl.setLinkMngKey(dtlList.get(iLoop).string("LINK_MNG_KEY"));
+ sndngDtl.setSndngDtlSttsCd(dtlList.get(iLoop).string("SNDNG_DTL_STTS_CD"));
+ sndngDtl.setDelYn("N");
+ sndngDtl.setSndngYmd(sndng.getSndngYmd());
+
+ rtnMsg = sndngDtlService.setNxrpIndivA01List(sndngDtl);
+ if (rtnMsg.contains("[S]")) {
+ saved = true;
+ } else {
+ saved = false;
+ }
+ }
+
+ return new ModelAndView("jsonView")
+ .addObject("saved", saved)
+ .addObject("rtnMsg", rtnMsg);
+ }
+
+ /**과태료 대장 등록 자료 상세 조회(실시간)한다.
+ * @param req 발송 대장 조회 조건
+ * @return jsonView
+ * {
+ * "saved": 등록되었으면 true, 그렇지 않으면 false
+ * }
+ */
+ @Task({"ECA","DPV","PES","DVS"})
+ @RequestMapping(name="세외수입 과태료 대장 등록 자료 상세 조회", value=METHOD_URL.getNonTaxReceiptIndividualA03List)
+ public ModelAndView getNonTaxReceiptIndividualA03List(SndbQuery req) {
+ boolean saved = false;
+ String rtnMsg = "";
+
+ List dtlList = sndngDtlService.getSndngTrgtDtlIds(req);
+
+ // 발송상세 Ids 만큼 반복..
+ for (int iLoop = 0; iLoop < dtlList.size(); iLoop++) {
+ SndngDtl sndngDtl = new SndngDtl();
+
+ sndngDtl.setSndngDtlId(dtlList.get(iLoop).string("SNDNG_DTL_ID"));
+ sndngDtl.setCrdnId(dtlList.get(iLoop).string("CRDN_ID"));
+ sndngDtl.setLinkTrgtCd(dtlList.get(iLoop).string("LINK_TRGT_CD"));
+ sndngDtl.setLinkMngKey(dtlList.get(iLoop).string("LINK_MNG_KEY"));
+ sndngDtl.setSndngDtlSttsCd(dtlList.get(iLoop).string("SNDNG_DTL_STTS_CD"));
+ sndngDtl.setDelYn("N");
+
+ rtnMsg = sndngDtlService.getNxrpIndivA03List(sndngDtl);
+ if (rtnMsg.contains("[S]")) {
+ saved = true;
+ } else {
+ saved = false;
+ }
+ }
+
+ return new ModelAndView("jsonView")
+ .addObject("saved", saved)
+ .addObject("rtnMsg", rtnMsg);
+ }
+
+ /**과태료 대장 등록 자료 상세 조회(실시간)한다.
+ * @param req 발송 대장 조회 조건
+ * @return jsonView
+ * {
+ * "saved": 등록되었으면 true, 그렇지 않으면 false
+ * }
+ */
+ @Task
+ @RequestMapping(name="세외수입 체납상세 세목정보 조회", value=METHOD_URL.getNonTaxReceiptSpecialB01List)
+ public ModelAndView getNonTaxReceiptSpecialB01List(SndbQuery req) {
+ boolean saved = false;
+ String rtnMsg = "";
/*
- List dtlList = sndngDtlService.getSndngTrgtDtlIds(req);
-
- // 발송상세 Ids 만큼 반복..
- for (int iLoop = 0; iLoop < dtlList.size(); iLoop++) {
- SndngDtl sndngDtl = new SndngDtl();
-
- sndngDtl.setSndngDtlId(dtlList.get(iLoop).string("SNDNG_DTL_ID"));
- sndngDtl.setCrdnId(dtlList.get(iLoop).string("CRDN_ID"));
- sndngDtl.setLinkTrgtCd(dtlList.get(iLoop).string("LINK_TRGT_CD"));
- sndngDtl.setLinkMngKey(dtlList.get(iLoop).string("LINK_MNG_KEY"));
- sndngDtl.setSndngDtlSttsCd(dtlList.get(iLoop).string("SNDNG_DTL_STTS_CD"));
- sndngDtl.setDelYn("N");
-
- rtnMsg = sndngDtlService.getNxrpIndivA03List(sndngDtl);
- if (rtnMsg.contains("[S]")) {
- saved = true;
- } else {
- saved = false;
- }
- }
+ List dtlList = sndngDtlService.getSndngTrgtDtlIds(req);
+
+ // 발송상세 Ids 만큼 반복..
+ for (int iLoop = 0; iLoop < dtlList.size(); iLoop++) {
+ SndngDtl sndngDtl = new SndngDtl();
+
+ sndngDtl.setSndngDtlId(dtlList.get(iLoop).string("SNDNG_DTL_ID"));
+ sndngDtl.setCrdnId(dtlList.get(iLoop).string("CRDN_ID"));
+ sndngDtl.setLinkTrgtCd(dtlList.get(iLoop).string("LINK_TRGT_CD"));
+ sndngDtl.setLinkMngKey(dtlList.get(iLoop).string("LINK_MNG_KEY"));
+ sndngDtl.setSndngDtlSttsCd(dtlList.get(iLoop).string("SNDNG_DTL_STTS_CD"));
+ sndngDtl.setDelYn("N");
+
+ rtnMsg = sndngDtlService.getNxrpIndivA03List(sndngDtl);
+ if (rtnMsg.contains("[S]")) {
+ saved = true;
+ } else {
+ saved = false;
+ }
+ }
*/
- saved = true;
- rtnMsg = "[S]";
+ saved = true;
+ rtnMsg = "[S]";
- return new ModelAndView("jsonView")
- .addObject("saved", saved)
- .addObject("rtnMsg", rtnMsg);
- }
+ return new ModelAndView("jsonView")
+ .addObject("saved", saved)
+ .addObject("rtnMsg", rtnMsg);
+ }
}
diff --git a/src/main/resources/sql/mapper/fims/sndb/sndng-mapper.xml b/src/main/resources/sql/mapper/fims/sndb/sndng-mapper.xml
index d81ec3f3..ac2c8141 100644
--- a/src/main/resources/sql/mapper/fims/sndb/sndng-mapper.xml
+++ b/src/main/resources/sql/mapper/fims/sndb/sndng-mapper.xml
@@ -284,7 +284,7 @@
)
- AND C.CRDN_ID = #{crdnId}
+ AND C.CRDN_ID = #{crdnId}
AND C.CRDN_STTS_CD = #{crdnSttsCd}
@@ -296,7 +296,7 @@
AND LE.LEVY_EXCL_YMD #{schLevyExclYmdTo}
- AND LE.LEVY_EXCL_RSN_CD #{schLevyExclRsnCd}
+ AND LE.LEVY_EXCL_RSN_CD = #{schLevyExclRsnCd}
AND C.CRDN_YMD =]]> #{schCrdnYmdFrom}
@@ -305,7 +305,7 @@
AND C.CRDN_YMD #{schCrdnYmdTo}
- AND C.VHRNO = #{schVhrno}
+ AND C.VHRNO = #{schVhrno}
AND P.RTPYR_NO = #{schRtpyrNo}
@@ -343,12 +343,12 @@
- AND LE.RGTR = #{schRgtrCd}
+ AND LE.RGTR = #{schRgtrCd}
- AND LE.MDFR = #{schRgtrCd}
+ AND LE.MDFR = #{schRgtrCd}