From 8b641e44f9a46bd5fdde5b626bd79512d3d29780 Mon Sep 17 00:00:00 2001 From: JoJH Date: Mon, 11 Nov 2024 14:48:27 +0900 Subject: [PATCH] =?UTF-8?q?=EB=B6=80=EA=B3=BC=20=EC=88=98=EC=A0=95.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xit/fims/levy/web/Levy01Controller.java | 587 +++++++++--------- .../xit/fims/levy/web/Levy02Controller.java | 492 +++++++-------- 2 files changed, 541 insertions(+), 538 deletions(-) diff --git a/src/main/java/cokr/xit/fims/levy/web/Levy01Controller.java b/src/main/java/cokr/xit/fims/levy/web/Levy01Controller.java index 478e6633..fb5a421e 100644 --- a/src/main/java/cokr/xit/fims/levy/web/Levy01Controller.java +++ b/src/main/java/cokr/xit/fims/levy/web/Levy01Controller.java @@ -36,7 +36,7 @@ import cokr.xit.foundation.data.DataObject; * *
  * ============ 변경 이력 ============
- * 2023-08-30	JoJH 최초 작성
+ * 2023-08-30    JoJH 최초 작성
  * ================================
  * 
*/ @@ -44,300 +44,299 @@ import cokr.xit.foundation.data.DataObject; @RequestMapping(name="부과", value=Levy01Controller.CLASS_URL) public class Levy01Controller extends ApplicationController { - public static final String CLASS_URL = "/levy/levy01"; - - public class METHOD_URL { - public static final String - reductionLevyTargetMain = "/010/main.do" // 사전 감경부과 대상 메인 화면 - , getReductionLevyTargetList = "/010/list.do" // 사전 감경부과 대상 대장 목록 조회 - , getReductionLevyTargetInfo = "/020/info.do" // 사전 감경부과 대상 정보 - , createReductionLevyList = "/020/createRdctLevyList.do" // 사전 감경부과 등록 - , levyMain = "/050/main.do" // 부과 관리 메인 화면 - , getLevyList = "/050/list.do" // 부과 대장 목록 조회 - ; - } - - /**부과 대장 서비스*/ - @Resource(name="levyService") - private LevyService levyService; - - /**업무 정보 서비스 */ - @Resource(name="taskBean") - private TaskBean taskBean; - - /**설정 정보 Bean */ - @Resource(name="stngBean") - private StngBean stngBean; - - /**사전 감경부과 대상 메인화면(levy/levy01010-main)을 연다. - * @return - */ - @RequestMapping(name="사전 감경부과 등록 메인", value=METHOD_URL.reductionLevyTargetMain) - public ModelAndView reductionLevyTargetMain() { - ModelAndView mav = new ModelAndView("fims/levy/levy01010-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", "levy01010") // View(jsp)에서 사용할 id 뒤에 붙일 suffix - .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl - .addObject("sggCd", fimsUser.getOrgID()) // 시군구 코드(SGG_CD) - .addObject("taskListForSgg", stngBean.filterTaskSectionCodeForSgg(commonCodes.get("FIM054"))) // 업무 구분 코드(TASK_SE_CD) - ; - } - - /**사전 감경부과 대상 목록을 조회하여 반환한다. - * {@link LevyService#getRdctLevyTrgtList(LevyQuery)} 참고 - * @param req 부과 대장 조회 조건 - * @return jsonView - *
 {
-	 *     "levyList": [부과 대장 목록]
-	 *     "levyStart": 부과 대장 목록 시작 인덱스
-	 *     "levyFetch": 한 번에 가져오는 부과 대장 목록 수
-	 *     "levyTotal": 조회 결과 찾은 전체 부과 대장 수
-	 * }
- */ - @Task({"PVS","BPV"}) - @RequestMapping(name="사전 감경부과 대상 목록 조회", value=METHOD_URL.getReductionLevyTargetList) - public ModelAndView getReductionLevyTargetList(LevyQuery req) { - if (!"xls".equals(req.getDownload())) { - List result = levyService.getRdctLevyTrgtList(setFetchSize(req)); - return setCollectionInfo(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 = levyService.getRdctLevyTrgtList(req.setFetchSize(0)); - - Map valueMap = new HashMap(); - valueMap.put("업무구분", format.of("TASK_SE_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("CRDN_STDG_NM")); - valueMap.put("단속장소", format.of("CRDN_PLC")); - valueMap.put("위반항목", format.of("VLTN_ARTCL")); - valueMap.put("단속원금", format.of("FFNLG_CRDN_AMT").style(numeric)); - valueMap.put("과태료금액", format.of("FFNLG_AMT").style(numeric)); - valueMap.put("처리상태", format.of("CRDN_STTS_NM")); + public static final String CLASS_URL = "/levy/levy01"; + + public class METHOD_URL { + public static final String + reductionLevyTargetMain = "/010/main.do" // 사전 감경부과 대상 메인 화면 + , getReductionLevyTargetList = "/010/list.do" // 사전 감경부과 대상 대장 목록 조회 + , getReductionLevyTargetInfo = "/020/info.do" // 사전 감경부과 대상 정보 + , createReductionLevyList = "/020/createRdctLevyList.do" // 사전 감경부과 등록 + , levyMain = "/050/main.do" // 부과 관리 메인 화면 + , getLevyList = "/050/list.do" // 부과 대장 목록 조회 + ; + } + + /**부과 대장 서비스*/ + @Resource(name="levyService") + private LevyService levyService; + + /**업무 정보 서비스 */ + @Resource(name="taskBean") + private TaskBean taskBean; + + /**설정 정보 Bean */ + @Resource(name="stngBean") + private StngBean stngBean; + + /**사전 감경부과 대상 메인화면(levy/levy01010-main)을 연다. + * @return + */ + @RequestMapping(name="사전 감경부과 등록 메인", value=METHOD_URL.reductionLevyTargetMain) + public ModelAndView reductionLevyTargetMain() { + ModelAndView mav = new ModelAndView("fims/levy/levy01010-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", "levy01010") // View(jsp)에서 사용할 id 뒤에 붙일 suffix + .addObject("prefixUrl", CLASS_URL) // prefixUrl + .addObject("sggCd", fimsUser.getOrgID()) // 시군구 코드(SGG_CD) + .addObject("taskListForSgg", stngBean.filterTaskSectionCodeForSgg(commonCodes.get("FIM054"))) // 업무 구분 코드(TASK_SE_CD) + ; + } + + /**사전 감경부과 대상 목록을 조회하여 반환한다. + * {@link LevyService#getRdctLevyTrgtList(LevyQuery)} 참고 + * @param req 부과 대장 조회 조건 + * @return jsonView + *
 {
+     *     "levyList": [부과 대장 목록]
+     *     "levyStart": 부과 대장 목록 시작 인덱스
+     *     "levyFetch": 한 번에 가져오는 부과 대장 목록 수
+     *     "levyTotal": 조회 결과 찾은 전체 부과 대장 수
+     * }
+ */ + @Task({"PVS","BPV"}) + @RequestMapping(name="사전 감경부과 대상 목록 조회", value=METHOD_URL.getReductionLevyTargetList) + public ModelAndView getReductionLevyTargetList(LevyQuery req) { + if (!"xls".equals(req.getDownload())) { + List result = levyService.getRdctLevyTrgtList(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 = levyService.getRdctLevyTrgtList(req.setFetchSize(0)); + + Map valueMap = new HashMap(); + valueMap.put("업무구분", format.of("TASK_SE_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("CRDN_STDG_NM")); + valueMap.put("단속장소", format.of("CRDN_PLC")); + valueMap.put("위반항목", format.of("VLTN_ARTCL")); + valueMap.put("단속원금", format.of("FFNLG_CRDN_AMT").style(numeric)); + valueMap.put("과태료금액", format.of("FFNLG_AMT").style(numeric)); + valueMap.put("처리상태", format.of("CRDN_STTS_NM")); valueMap.put("민원접수일자", FormatMaker.yyyy_mm_dd(format, "CVLCPT_RCPT_YMD").style(dateYMD)); - valueMap.put("민원신청번호", format.of("CVLCPT_APLY_NO").style(center)); - valueMap.put("민원접수번호", format.of("CVLCPT_RCPT_NO").style(center)); - valueMap.put("민원담당자", format.of("CVLCPT_PRCS_PIC_NM").style(center)); + valueMap.put("민원신청번호", format.of("CVLCPT_APLY_NO").style(center)); + valueMap.put("민원접수번호", format.of("CVLCPT_RCPT_NO").style(center)); + valueMap.put("민원담당자", format.of("CVLCPT_PRCS_PIC_NM").style(center)); valueMap.put("민원처리일시", FormatMaker.yyyy_mm_dd(format, "CVLCPT_PRCS_CMPTN_DT").style(dateYMD)); - valueMap.put("민원전송결과", format.of("CVLCPT_TRSM_NM").style(center)); - 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("ZIP").style(center)); - valueMap.put("주소", format.of("ADDR")); - valueMap.put("상세주소", format.of("DTL_ADDR")); - 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")); - } - } - - /**감경 부과 대상 정보(info)를 반환한다. - * @param req 부과 대장 조회 조건 - * @return fims/levy/levy01020-info 또는 jsonView - *
{
-	 *     "rdctLevyYmdInfo": 감경 부과 정보
-	 * }
- */ - @Task({"PVS","BPV"}) - @RequestMapping(name="사전 감경부과 정보 조회", value=METHOD_URL.getReductionLevyTargetInfo) - public ModelAndView getReductionLevyTargetInfo(HttpServletRequest hReq, LevyQuery req) { - // 감경 부과일자 - DataObject info = taskBean.getAdvntceYmdInfo(new CmmnQuery().setSggCd(req.getSggCd()) - .setTaskSeCd(req.getTaskSeCd())); - - boolean json = jsonResponse(); - ModelAndView mav = new ModelAndView(json ? "jsonView" : "fims/levy/levy01020-info"); - - // 이전에 조회되었던 총건수, 금액 - info.put("TNOCS", req.getTnocs()); - info.put("GRAMT_FFNLG_AMT", req.getGramtFfnlgAmt()); - info.put("GRAMT_ADVNTCE_AMT", req.getGramtAdvntceAmt()); - - return mav - .addObject("callPurpose", req.getCallPurpose()) // 호출 용도 - .addObject("pageName", "levy01020") // jsp pageName - .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl - .addObject("mainQuery", json ? req : toJson(req)) // 검색 조건 - .addObject("info", json ? info : toJson(info)) - ; - } - - /**감경부과 대상자료를 부과 대장를 등록한다. - * @param levy 부과 대장 정보 - * @return jsonView - *
 {
-	 *     "saved": 등록되었으면 true, 그렇지 않으면 false
-	 * }
- */ - @Task({"PVS","BPV"}) - @RequestMapping(name="사전 감경부과 대장 등록", value=METHOD_URL.createReductionLevyList) - public ModelAndView createReductionLevyList(LevyQuery req) { - boolean saved = false; - String rtnMsg = levyService.createRdctLevyList(req); - - if (rtnMsg.contains("[S]")) { - saved = true; - } else { - saved = false; - } - - return new ModelAndView("jsonView") - .addObject("saved", saved) - .addObject("rtnMsg", rtnMsg); - } - - /**부과 관리 메인화면(levy/levy01050-main)을 연다. - * @return - */ - @RequestMapping(name="부과 관리 메인", value=METHOD_URL.levyMain) - public ModelAndView levyMain() { - ModelAndView mav = new ModelAndView("fims/levy/levy01050-main"); - - // 사용자 정보 - FimsUser fimsUser = (FimsUser)currentUser().getUser(); - - // View(jsp)에서 사용할 공통코드를 조회 - Map> commonCodes = getCodesOf("FIM010", "FIM046", "FIM054"); - - return mav - .addObject("pageName", "levy01050") // View(jsp)에서 사용할 id 뒤에 붙일 suffix - .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl - .addObject("sggCd", fimsUser.getOrgID()) // 시군구 코드(SGG_CD) - .addObject("taskListForSgg", stngBean.filterTaskSectionCodeForSgg(commonCodes.get("FIM054"))) // 업무 구분 코드(TASK_SE_CD) - .addObject("FIM010List", commonCodes.get("FIM010")) // 단속 상태 코드(CRDN_STTS_CD) - .addObject("FIM046List", commonCodes.get("FIM046")) // 감경 구분 코드(RDCT_SE_CD) - ; - } - - /**부과 대장 목록을 조회하여 반환한다. - * {@link LevyService#getLevyList(LevyQuery)} 참고 - * @param req 부과 대장 조회 조건 - * @return jsonView - *
 {
-	 *     "levyList": [부과 대장 목록]
-	 *     "levyStart": 부과 대장 목록 시작 인덱스
-	 *     "levyFetch": 한 번에 가져오는 부과 대장 목록 수
-	 *     "levyTotal": 조회 결과 찾은 전체 부과 대장 수
-	 * }
- */ - @Task - @RequestMapping(name="부과 대장 목록 조회", value=METHOD_URL.getLevyList) - public ModelAndView getLevyList(LevyQuery req) { - if (!"xls".equals(req.getDownload())) { - List result = levyService.getLevyList(setFetchSize(req)); - return setCollectionInfo(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 = levyService.getLevyList(req.setFetchSize(0)); - - Map valueMap = new HashMap(); - valueMap.put("업무구분", format.of("TASK_SE_NM").style(center)); - valueMap.put("회계연도", format.of("FYR").style(center)); - valueMap.put("회계코드", format.of("ACNTG_SE_CD").style(center)); - valueMap.put("세목코드", format.of("TXITM_CD").style(center)); - valueMap.put("세목명", format.of("TXITM_NM").style(center)); - valueMap.put("부과번호", format.of("LEVY_NO").style(center)); - valueMap.put("분납순번", format.of("ISPY_SN").style(center)); - valueMap.put("부과구분", format.of("LEVY_SE_NM").style(center)); - valueMap.put("통합구분", format.of("UNTY_SE_NM").style(center)); - valueMap.put("감경구분", format.of("RDCT_SE_NM").style(center)); - valueMap.put("부과일자", FormatMaker.yyyy_mm_dd(format, "LEVY_YMD").style(dateYMD)); - valueMap.put("최초납기일자", FormatMaker.yyyy_mm_dd(format, "FRST_DUDT_YMD").style(dateYMD)); - valueMap.put("납기일자", FormatMaker.yyyy_mm_dd(format, "DUDT_YMD").style(dateYMD)); - valueMap.put("과태료금액", format.of("FFNLG_AMT").style(numeric)); - valueMap.put("부과본세", format.of("LEVY_PCPTAX").style(numeric)); - valueMap.put("부과가산금", format.of("LEVY_ADAMT").style(numeric)); - valueMap.put("분납이자", format.of("ISPY_INT").style(numeric)); - valueMap.put("수납본세", format.of("RCVMT_PCPTAX").style(numeric)); - valueMap.put("수납가산금", format.of("RCVMT_ADAMT").style(numeric)); - valueMap.put("감액본세", format.of("RDAMT_PCPTAX").style(numeric)); - valueMap.put("감액가산금", format.of("RDAMT_ADAMT").style(numeric)); - valueMap.put("미납금액", format.of("SUM_AMT").style(numeric)); - valueMap.put("과세물건", format.of("TXTN_THING")); - valueMap.put("체납사유", format.of("NPMNT_RSN_NM")); - valueMap.put("수납일자", FormatMaker.yyyy_mm_dd(format, "RCVMT_YMD").style(dateYMD)); - valueMap.put("압류일자", FormatMaker.yyyy_mm_dd(format, "SZR_YMD").style(dateYMD)); - valueMap.put("압류물건", format.of("SZR_THING")); - valueMap.put("대체압류차량", format.of("RPM_SZR_VHRNO")); - valueMap.put("압류해제일자", FormatMaker.yyyy_mm_dd(format, "SZR_RMV_YMD").style(dateYMD)); - valueMap.put("전자납부번호", format.of("EPAYNO_MASK")); - valueMap.put("은행명", format.of("BANK_NM")); - valueMap.put("가상계좌번호", format.of("VR_ACTNO").style(center)); - valueMap.put("은행명2", format.of("BANK_NM2")); - valueMap.put("가상계좌번호2", format.of("VR_ACTNO2").style(center)); - valueMap.put("은행명3", format.of("BANK_NM3")); - valueMap.put("가상계좌번호3", format.of("VR_ACTNO3").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("CRDN_STDG_NM")); - valueMap.put("단속장소", format.of("CRDN_PLC")); - valueMap.put("위반항목", format.of("VLTN_ARTCL")); - valueMap.put("단속원금", format.of("FFNLG_CRDN_AMT").style(numeric)); - valueMap.put("처리상태", format.of("CRDN_STTS_NM")); - 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("ZIP").style(center)); - valueMap.put("주소", format.of("ADDR")); - valueMap.put("상세주소", format.of("DTL_ADDR")); - 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")); - } - } + valueMap.put("민원전송결과", format.of("CVLCPT_TRSM_NM").style(center)); + 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("ZIP").style(center)); + valueMap.put("주소", format.of("ADDR")); + valueMap.put("상세주소", format.of("DTL_ADDR")); + 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")); + } + } + + /**감경 부과 대상 정보(info)를 반환한다. + * @param req 부과 대장 조회 조건 + * @return fims/levy/levy01020-info 또는 jsonView + *
{
+     *     "rdctLevyYmdInfo": 감경 부과 정보
+     * }
+ */ + @Task({"PVS","BPV"}) + @RequestMapping(name="사전 감경부과 정보 조회", value=METHOD_URL.getReductionLevyTargetInfo) + public ModelAndView getReductionLevyTargetInfo(HttpServletRequest hReq, LevyQuery req) { + // 감경 부과일자 + DataObject info = taskBean.getAdvntceYmdInfo(new CmmnQuery().setSggCd(req.getSggCd()) + .setTaskSeCd(req.getTaskSeCd())); + + boolean json = jsonResponse(); + ModelAndView mav = new ModelAndView(json ? "jsonView" : "fims/levy/levy01020-info"); + + // 이전에 조회되었던 총건수, 금액 + info.put("TNOCS", req.getTnocs()); + info.put("GRAMT_FFNLG_AMT", req.getGramtFfnlgAmt()); + info.put("GRAMT_ADVNTCE_AMT", req.getGramtAdvntceAmt()); + + return mav + .addObject("callPurpose", req.getCallPurpose()) // 호출 용도 + .addObject("pageName", "levy01020") // jsp pageName + .addObject("prefixUrl", CLASS_URL) // prefixUrl + .addObject("mainQuery", json ? req : toJson(req)) // 검색 조건 + .addObject("Info", json ? info : toJson(info)) + ; + } + + /**감경부과 대상자료를 부과 대장를 등록한다. + * @param levy 부과 대장 정보 + * @return jsonView + *
 {
+     *     "saved": 등록되었으면 true, 그렇지 않으면 false
+     * }
+ */ + @Task({"PVS","BPV"}) + @RequestMapping(name="사전 감경부과 대장 등록", value=METHOD_URL.createReductionLevyList) + public ModelAndView createReductionLevyList(LevyQuery req) { + boolean saved = false; + String rtnMsg = levyService.createRdctLevyList(req); + + if (rtnMsg.contains("[S]")) { + saved = true; + } else { + saved = false; + } + + return new ModelAndView("jsonView") + .addObject("saved", saved) + .addObject("rtnMsg", rtnMsg); + } + + /**부과 관리 메인화면(levy/levy01050-main)을 연다. + * @return + */ + @RequestMapping(name="부과 관리 메인", value=METHOD_URL.levyMain) + public ModelAndView levyMain() { + ModelAndView mav = new ModelAndView("fims/levy/levy01050-main"); + + // 사용자 정보 + FimsUser fimsUser = (FimsUser)currentUser().getUser(); + + // View(jsp)에서 사용할 공통코드를 조회 + Map> commonCodes = getCodesOf("FIM010", "FIM046", "FIM054"); + + return mav + .addObject("pageName", "levy01050") // View(jsp)에서 사용할 id 뒤에 붙일 suffix + .addObject("prefixUrl", CLASS_URL) // prefixUrl + .addObject("sggCd", fimsUser.getOrgID()) // 시군구 코드(SGG_CD) + .addObject("taskListForSgg", stngBean.filterTaskSectionCodeForSgg(commonCodes.get("FIM054"))) // 업무 구분 코드(TASK_SE_CD) + .addObject("FIM010List", commonCodes.get("FIM010")) // 단속 상태 코드(CRDN_STTS_CD) + .addObject("FIM046List", commonCodes.get("FIM046")) // 감경 구분 코드(RDCT_SE_CD) + ; + } + + /**부과 대장 목록을 조회하여 반환한다. + * {@link LevyService#getLevyList(LevyQuery)} 참고 + * @param req 부과 대장 조회 조건 + * @return jsonView + *
 {
+     *     "levyList": [부과 대장 목록]
+     *     "levyStart": 부과 대장 목록 시작 인덱스
+     *     "levyFetch": 한 번에 가져오는 부과 대장 목록 수
+     *     "levyTotal": 조회 결과 찾은 전체 부과 대장 수
+     * }
+ */ + @Task + @RequestMapping(name="부과 대장 목록 조회", value=METHOD_URL.getLevyList) + public ModelAndView getLevyList(LevyQuery req) { + if (!"xls".equals(req.getDownload())) { + List result = levyService.getLevyList(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 = levyService.getLevyList(req.setFetchSize(0)); + + Map valueMap = new HashMap(); + valueMap.put("업무구분", format.of("TASK_SE_NM").style(center)); + valueMap.put("회계연도", format.of("FYR").style(center)); + valueMap.put("회계코드", format.of("ACNTG_SE_CD").style(center)); + valueMap.put("세목코드", format.of("TXITM_CD").style(center)); + valueMap.put("세목명", format.of("TXITM_NM").style(center)); + valueMap.put("부과번호", format.of("LEVY_NO").style(center)); + valueMap.put("분납순번", format.of("ISPY_SN").style(center)); + valueMap.put("부과구분", format.of("LEVY_SE_NM").style(center)); + valueMap.put("통합구분", format.of("UNTY_SE_NM").style(center)); + valueMap.put("감경구분", format.of("RDCT_SE_NM").style(center)); + valueMap.put("부과일자", FormatMaker.yyyy_mm_dd(format, "LEVY_YMD").style(dateYMD)); + valueMap.put("최초납기일자", FormatMaker.yyyy_mm_dd(format, "FRST_DUDT_YMD").style(dateYMD)); + valueMap.put("납기일자", FormatMaker.yyyy_mm_dd(format, "DUDT_YMD").style(dateYMD)); + valueMap.put("과태료금액", format.of("FFNLG_AMT").style(numeric)); + valueMap.put("부과본세", format.of("LEVY_PCPTAX").style(numeric)); + valueMap.put("부과가산금", format.of("LEVY_ADAMT").style(numeric)); + valueMap.put("분납이자", format.of("ISPY_INT").style(numeric)); + valueMap.put("수납본세", format.of("RCVMT_PCPTAX").style(numeric)); + valueMap.put("수납가산금", format.of("RCVMT_ADAMT").style(numeric)); + valueMap.put("감액본세", format.of("RDAMT_PCPTAX").style(numeric)); + valueMap.put("감액가산금", format.of("RDAMT_ADAMT").style(numeric)); + valueMap.put("미납금액", format.of("SUM_AMT").style(numeric)); + valueMap.put("과세물건", format.of("TXTN_THING")); + valueMap.put("체납사유", format.of("NPMNT_RSN_NM")); + valueMap.put("수납일자", FormatMaker.yyyy_mm_dd(format, "RCVMT_YMD").style(dateYMD)); + valueMap.put("압류일자", FormatMaker.yyyy_mm_dd(format, "SZR_YMD").style(dateYMD)); + valueMap.put("압류물건", format.of("SZR_THING")); + valueMap.put("대체압류차량", format.of("RPM_SZR_VHRNO")); + valueMap.put("압류해제일자", FormatMaker.yyyy_mm_dd(format, "SZR_RMV_YMD").style(dateYMD)); + valueMap.put("전자납부번호", format.of("EPAYNO_MASK")); + valueMap.put("은행명", format.of("BANK_NM")); + valueMap.put("가상계좌번호", format.of("VR_ACTNO").style(center)); + valueMap.put("은행명2", format.of("BANK_NM2")); + valueMap.put("가상계좌번호2", format.of("VR_ACTNO2").style(center)); + valueMap.put("은행명3", format.of("BANK_NM3")); + valueMap.put("가상계좌번호3", format.of("VR_ACTNO3").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("CRDN_STDG_NM")); + valueMap.put("단속장소", format.of("CRDN_PLC")); + valueMap.put("위반항목", format.of("VLTN_ARTCL")); + valueMap.put("단속원금", format.of("FFNLG_CRDN_AMT").style(numeric)); + valueMap.put("처리상태", format.of("CRDN_STTS_NM")); + 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("ZIP").style(center)); + valueMap.put("주소", format.of("ADDR")); + valueMap.put("상세주소", format.of("DTL_ADDR")); + 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")); + } + } } diff --git a/src/main/java/cokr/xit/fims/levy/web/Levy02Controller.java b/src/main/java/cokr/xit/fims/levy/web/Levy02Controller.java index a25842a7..ee520559 100644 --- a/src/main/java/cokr/xit/fims/levy/web/Levy02Controller.java +++ b/src/main/java/cokr/xit/fims/levy/web/Levy02Controller.java @@ -36,7 +36,7 @@ import cokr.xit.foundation.data.DataObject; * *
  * ============ 변경 이력 ============
- * 2023-08-30	JoJH 최초 작성
+ * 2023-08-30    JoJH 최초 작성
  * ================================
  * 
*/ @@ -44,248 +44,252 @@ import cokr.xit.foundation.data.DataObject; @RequestMapping(name="과태료 감경 관리", value=Levy02Controller.CLASS_URL) public class Levy02Controller extends ApplicationController { - public static final String CLASS_URL = "/levy/levy02"; - - public class METHOD_URL { - public static final String - reductionMain = "/010/main.do" // 과태료 감경 관리 메인 화면 - , getReductionList = "/010/list.do" // 과태료 감경 대장 목록 조회 - , removeReduction = "/010/remove.do" // 과태료 감경 대장 삭제 - , getReductionInfo = "/020/info.do" // 과태료 감경 정보 조회 - , createReduction = "/020/create.do" // 과태료 감경 대장 등럭 - , updateReduction = "/020/update.do" // 과태료 감경 대장 수정 - ; - } - - /**과태료 감경 대장 서비스*/ - @Resource(name="rdctService") - private RdctService rdctService; - - @Resource(name="stngBean") - private StngBean stngBean; - - @Resource(name="userMapper") - protected UserMapper userMapper; - - /**과태료 감경 대장 관리 메인화면(levy/levy02010-main)을 연다. - * 조건없는 {@link #getRdctList(RdctQuery) 과태료 감경 대장 조회 결과}를 포함시킨다. - * @return /rdct/rdct-main - */ - @RequestMapping(name="과태료 감경 관리 대장 메인", value=METHOD_URL.reductionMain) - public ModelAndView reductionMain() { - ModelAndView mav = new ModelAndView("fims/levy/levy02010-main"); - - // 사용자 정보 - FimsUser fimsUser = (FimsUser)currentUser().getUser(); - - // View(jsp)에서 사용할 공통코드를 조회 - Map> commonCodes = getCodesOf("FIM010", "FIM019", "FIM054"); - - return mav - .addObject("pageName", "levy02010") // View(jsp)에서 사용할 id 뒤에 붙일 suffix - .addObject("infoPrefix", "rdct") // prefix - .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl - .addObject("sggCd", fimsUser.getOrgID()) // 시군구 코드(SGG_CD) - .addObject("taskListForSgg", stngBean.filterTaskSectionCodeForSgg(commonCodes.get("FIM054"))) // 업무 구분 코드(TASK_SE_CD) - .addObject("FIM019List", commonCodes.get("FIM019")) // 감경 사유 구분 코드(RDCT_RSN_CD) - ; - } - - /**과태료 감경 대장 목록을 조회하여 반환한다.
- * {@link RdctService#getRdctList(RdctQuery)} 참고 - * @param req 과태료 감경 대장 조회 조건 - * @return jsonView - *
 {
-	 *     "rdctList": [과태료 감경 대장 목록]
-	 *     "rdctStart": 과태료 감경 대장 목록 시작 인덱스
-	 *     "rdctFetch": 한 번에 가져오는 과태료 감경 대장 목록 수
-	 *     "rdctTotal": 조회 결과 찾은 전체 과태료 감경 대장 수
-	 * }
- */ - @Task - @RequestMapping(name="과태료 감경 대장 목록 조회", value=METHOD_URL.getReductionList) - public ModelAndView getRdctList(LevyQuery req) { - if (!"xls".equals(req.getDownload())) { - List result = rdctService.getRdctList(setFetchSize(req)); - return setCollectionInfo(new ModelAndView("jsonView"), result, "rdct"); - } 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 = rdctService.getRdctList(req.setFetchSize(0)); - - Map valueMap = new HashMap(); - valueMap.put("업무구분", format.of("TASK_SE_NM").style(center)); - valueMap.put("감경일자", FormatMaker.yyyy_mm_dd(format, "RDCT_YMD").style(dateYMD)); - valueMap.put("감경사유", format.of("RDCT_RSN_NM")); - valueMap.put("기타내용", format.of("ETC_CN")); - 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("DTL_CRDN_PLC")); - valueMap.put("단속원금", format.of("FFNLG_CRDN_AMT").style(numeric)); - valueMap.put("감경금액", format.of("RDCT_AMT").style(numeric)); - valueMap.put("과태료금액", format.of("FFNLG_AMT").style(numeric)); - valueMap.put("미납금액", format.of("SUM_AMT").style(numeric)); - valueMap.put("처리상태", format.of("CRDN_STTS_NM")); - 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")); - } - } - - /**지정한 ID의 과태료 감경 정보(info)를 반환한다. - * @param req 과태료 감경 대장 조회 조건 - * @return fims/levy/levy02020-info 또는 jsonView - *
{
-	 *     "rdctInfo": 과태료 감경 정보
-	 * }
- */ - @Task - @RequestMapping(name="과태료 감경 정보 조회", value=METHOD_URL.getReductionInfo) - public ModelAndView getRdctInfo(HttpServletRequest hReq, LevyQuery req) { - DataObject info = rdctService.getRdctInfo(req); - - // 등록을 호출하였지만 등록된 감경 ID가 있는지 확인. - if (req.getCallPurpose().equals("create") && !info.string("RDCT_ID").equals("")) { - ModelAndView mav = new ModelAndView("jsonView"); - - return mav.addObject("rtnMsg", "이미 등록된 과태료 감경 정보가 있습니다."); - } else if (req.getCallPurpose().equals("create") && info.string("RTPYR_ID").equals("")) { - ModelAndView mav = new ModelAndView("jsonView"); - - return mav.addObject("rtnMsg", "납부자 정보가 없습니다."); - } else { - boolean json = jsonResponse(); - ModelAndView mav = new ModelAndView(json ? "jsonView" : "fims/levy/levy02020-info"); - - // View(jsp)에서 사용할 공통코드를 조회 - Map> commonCodes = getCodesOf("FIM019"); - - return mav - .addObject("openerPageName", hReq.getParameter("openerPageName")) // 호출한 Jsp PageName - .addObject("callPurpose", req.getCallPurpose()) // 호출 용도 - .addObject("pageName", "levy02020") // jsp pageName - .addObject("infoPrefix", "rdct") // prefix - .addObject("infoPrefixUrl", CLASS_URL) // prefixUrl - .addObject("FIM019List", commonCodes.get("FIM019")) // 감경 사유 구분 코드(RDCT_RSN_CD) - .addObject("rdctInfo", json ? info : toJson(info)) - ; - } - } - - /**과태료 감경 대장를 등록한다. - * @param rdct 과태료 감경 대장 정보 - * @return jsonView - *
 {
-	 *     "saved": 등록되었으면 true, 그렇지 않으면 false
-	 * }
- */ - @Task - @RequestMapping(name="과태료 감경 대장 등록", value=METHOD_URL.createReduction) - public ModelAndView createRdct(Rdct rdct) { - boolean saved = false; - String rtnMsg = rdctService.createRdct(rdct); - - if (rtnMsg.contains("[S]")) { - saved = true; - } else { - saved = false; - } - - return new ModelAndView("jsonView") - .addObject("saved", saved) - .addObject("rtnMsg", rtnMsg); - } - - /**과태료 감경 대장 정보를 수정한다. - * @param rdct 과태료 감경 대장 정보 - * @return jsonView - *
 {
-	 *     "saved": 수정되었으면 true, 그렇지 않으면 false
-	 * }
- */ - @Task - @RequestMapping(name="과태료 감경 대장 수정", value=METHOD_URL.updateReduction) - public ModelAndView updateRdct(Rdct rdct) { - boolean saved = false; - String rtnMsg = rdctService.updateRdct(rdct); - - if (rtnMsg.contains("[S]")) { - saved = true; - } else { - saved = false; - } - - return new ModelAndView("jsonView") - .addObject("saved", saved) - .addObject("rtnMsg", rtnMsg); - } - - /**지정한 과태료 감경 대장를 제거한다. - * @param rdctId 과태료 감경 대장 ID - * @return jsonView - *
 {
-	 *     "affected": 저장된 정보수
-	 *     "saved": 저장되었으면 true, 그렇지 않으면 false
-	 * }
- */ - @Task - @RequestMapping(name="과태료 감경 대장 삭제", value=METHOD_URL.removeReduction) - public ModelAndView removeRdct(Rdct rdct) { - boolean saved = false; - String rtnMsg = ""; - - if (rdct.getRdctIds() == null || rdct.getRdctIds().length < 1) { - rtnMsg = rdctService.removeRdct(rdct); - } else { - // 부과제외 Ids 만큼 반복.. - for (int iLoop = 0; iLoop < rdct.getRdctIds().length; iLoop++) { - rdct.setRdctId(rdct.getRdctIds()[iLoop]); // 감경 ID 설정 - - // 부과제외 삭제 호출 - rtnMsg = rdctService.removeRdct(rdct); - if (!rtnMsg.contains("[S]")) // 오류가 발생하였으면 종료.. - break; - } - } - - if (rtnMsg.contains("[S]")) { - saved = true; - } else { - saved = false; - } - - return new ModelAndView("jsonView") - .addObject("saved", saved) - .addObject("rtnMsg", rtnMsg); - } + public static final String CLASS_URL = "/levy/levy02"; + + public class METHOD_URL { + public static final String + reductionMain = "/010/main.do" // 과태료 감경 관리 메인 화면 + , getReductionList = "/010/list.do" // 과태료 감경 대장 목록 조회 + , removeReduction = "/010/remove.do" // 과태료 감경 대장 삭제 + , getReductionInfo = "/020/info.do" // 과태료 감경 정보 조회 + , createReduction = "/020/create.do" // 과태료 감경 대장 등럭 + , updateReduction = "/020/update.do" // 과태료 감경 대장 수정 + ; + } + + /**과태료 감경 대장 서비스*/ + @Resource(name="rdctService") + private RdctService rdctService; + + @Resource(name="stngBean") + private StngBean stngBean; + + @Resource(name="userMapper") + protected UserMapper userMapper; + + /**과태료 감경 대장 관리 메인화면(levy/levy02010-main)을 연다. + * 조건없는 {@link #getRdctList(RdctQuery) 과태료 감경 대장 조회 결과}를 포함시킨다. + * @return /rdct/rdct-main + */ + @RequestMapping(name="과태료 감경 관리 대장 메인", value=METHOD_URL.reductionMain) + public ModelAndView reductionMain() { + ModelAndView mav = new ModelAndView("fims/levy/levy02010-main"); + + // 사용자 정보 + FimsUser fimsUser = (FimsUser)currentUser().getUser(); + + // View(jsp)에서 사용할 공통코드를 조회 + Map> commonCodes = getCodesOf("FIM019", "FIM054"); + + return mav + .addObject("pageName", "levy02010") // View(jsp)에서 사용할 id 뒤에 붙일 suffix + .addObject("prefixUrl", CLASS_URL) // prefixUrl + .addObject("sggCd", fimsUser.getOrgID()) // 시군구 코드(SGG_CD) + .addObject("taskListForSgg", stngBean.filterTaskSectionCodeForSgg(commonCodes.get("FIM054"))) // 업무 구분 코드(TASK_SE_CD) + .addObject("FIM019List", commonCodes.get("FIM019")) // 감경 사유 구분 코드(RDCT_RSN_CD) + ; + } + + /**과태료 감경 대장 목록을 조회하여 반환한다.
+ * {@link RdctService#getRdctList(RdctQuery)} 참고 + * @param req 과태료 감경 대장 조회 조건 + * @return jsonView + *
 {
+     *     "rdctList": [과태료 감경 대장 목록]
+     *     "rdctStart": 과태료 감경 대장 목록 시작 인덱스
+     *     "rdctFetch": 한 번에 가져오는 과태료 감경 대장 목록 수
+     *     "rdctTotal": 조회 결과 찾은 전체 과태료 감경 대장 수
+     * }
+ */ + @Task + @RequestMapping(name="과태료 감경 대장 목록 조회", value=METHOD_URL.getReductionList) + public ModelAndView getRdctList(LevyQuery req) { + if (!"xls".equals(req.getDownload())) { + List result = rdctService.getRdctList(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 = rdctService.getRdctList(req.setFetchSize(0)); + + Map valueMap = new HashMap(); + valueMap.put("업무구분", format.of("TASK_SE_NM").style(center)); + valueMap.put("감경일자", FormatMaker.yyyy_mm_dd(format, "RDCT_YMD").style(dateYMD)); + valueMap.put("감경사유", format.of("RDCT_RSN_NM")); + valueMap.put("기타내용", format.of("ETC_CN")); + 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("DTL_CRDN_PLC")); + valueMap.put("단속원금", format.of("FFNLG_CRDN_AMT").style(numeric)); + valueMap.put("감경금액", format.of("RDCT_AMT").style(numeric)); + valueMap.put("과태료금액", format.of("FFNLG_AMT").style(numeric)); + valueMap.put("미납금액", format.of("SUM_AMT").style(numeric)); + valueMap.put("처리상태", format.of("CRDN_STTS_NM")); + 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")); + } + } + + /**지정한 ID의 과태료 감경 정보(info)를 반환한다. + * @param req 과태료 감경 대장 조회 조건 + * @return fims/levy/levy02020-info 또는 jsonView + *
{
+     *     "rdctInfo": 과태료 감경 정보
+     * }
+ */ + @Task + @RequestMapping(name="과태료 감경 정보 조회", value=METHOD_URL.getReductionInfo) + public ModelAndView getRdctInfo(HttpServletRequest hReq, LevyQuery req) { + // 상세 정보 조회 + DataObject rdctInfo = rdctService.getRdctInfo(req); + + if (req.getCallPurpose().equals("create")) { // 등록 + if (!rdctInfo.string("RDCT_ID").equals("")) { + ModelAndView mav = new ModelAndView("jsonView"); + return mav.addObject("rtnMsg", "이미 등록된 과태료 감경 정보가 있습니다."); + } else if (rdctInfo.string("RTPYR_ID").equals("")) { + ModelAndView mav = new ModelAndView("jsonView"); + return mav.addObject("rtnMsg", "납부자 정보가 없습니다."); + } + } else if (req.getCallPurpose().equals("update")) { // 수정 + if (rdctInfo.string("RDCT_ID").equals("")) { + ModelAndView mav = new ModelAndView("jsonView"); + return mav.addObject("rtnMsg", "조회된 과태료 감경 정보가 없습니다."); + } + } + + boolean json = jsonResponse(); + ModelAndView mav = new ModelAndView(json ? "jsonView" : "fims/levy/levy02020-info"); + + // View(jsp)에서 사용할 공통코드를 조회 + Map> commonCodes = getCodesOf("FIM019"); + + return mav + .addObject("callPurpose", req.getCallPurpose()) // 호출 용도 + .addObject("pageName", "levy02020") // jsp pageName + .addObject("prefixUrl", CLASS_URL) // prefixUrl + .addObject("FIM019List", commonCodes.get("FIM019")) // 감경 사유 구분 코드(RDCT_RSN_CD) + .addObject("Info", json ? rdctInfo : toJson(rdctInfo)) + ; + } + + /**과태료 감경 대장를 등록한다. + * @param rdct 과태료 감경 대장 정보 + * @return jsonView + *
 {
+     *     "saved": 등록되었으면 true, 그렇지 않으면 false
+     * }
+ */ + @Task + @RequestMapping(name="과태료 감경 대장 등록", value=METHOD_URL.createReduction) + public ModelAndView createRdct(Rdct rdct) { + boolean saved = false; + String rtnMsg = rdctService.createRdct(rdct); + + if (rtnMsg.contains("[S]")) { + saved = true; + } else { + saved = false; + } + + return new ModelAndView("jsonView") + .addObject("saved", saved) + .addObject("rtnMsg", rtnMsg); + } + + /**과태료 감경 대장 정보를 수정한다. + * @param rdct 과태료 감경 대장 정보 + * @return jsonView + *
 {
+     *     "saved": 수정되었으면 true, 그렇지 않으면 false
+     * }
+ */ + @Task + @RequestMapping(name="과태료 감경 대장 수정", value=METHOD_URL.updateReduction) + public ModelAndView updateRdct(Rdct rdct) { + boolean saved = false; + String rtnMsg = rdctService.updateRdct(rdct); + + if (rtnMsg.contains("[S]")) { + saved = true; + } else { + saved = false; + } + + return new ModelAndView("jsonView") + .addObject("saved", saved) + .addObject("rtnMsg", rtnMsg); + } + + /**지정한 과태료 감경 대장를 제거한다. + * @param rdctId 과태료 감경 대장 ID + * @return jsonView + *
 {
+     *     "affected": 저장된 정보수
+     *     "saved": 저장되었으면 true, 그렇지 않으면 false
+     * }
+ */ + @Task + @RequestMapping(name="과태료 감경 대장 삭제", value=METHOD_URL.removeReduction) + public ModelAndView removeRdct(Rdct rdct) { + boolean saved = false; + String rtnMsg = ""; + + if (rdct.getRdctIds() == null || rdct.getRdctIds().length < 1) { + rtnMsg = rdctService.removeRdct(rdct); + } else { + // 감경 IDs 만큼 감경 삭제 반복.. + for (String rdctId : rdct.getRdctIds()) { + Rdct deltRdct = new Rdct(); + deltRdct.setRdctId(rdctId); + deltRdct.setDelRsn(rdct.getDelRsn()); + + // 감경 삭제 호출 + rtnMsg = rdctService.removeRdct(deltRdct); + if (!rtnMsg.contains("[S]")) // 오류가 발생하였으면 종료.. + break; + } + } + + if (rtnMsg.contains("[S]")) { + saved = true; + } else { + saved = false; + } + + return new ModelAndView("jsonView") + .addObject("saved", saved) + .addObject("rtnMsg", rtnMsg); + } }