package cokr.xit.fims.crdn.web; import java.util.List; import java.util.Map; import javax.annotation.Resource; import org.apache.poi.ss.usermodel.CellStyle; import org.springframework.web.servlet.ModelAndView; import cokr.xit.base.code.CommonCode; import cokr.xit.base.file.xls.XLSWriter; import cokr.xit.base.user.ManagedUser; import cokr.xit.base.user.dao.UserMapper; import cokr.xit.base.web.ApplicationController; import cokr.xit.fims.crdn.Crdn; import cokr.xit.fims.crdn.CrdnQuery; import cokr.xit.fims.crdn.dao.GlobalStngMapper; import cokr.xit.fims.crdn.service.CrdnService; import cokr.xit.fims.crdn.service.CrdnStngService; import cokr.xit.foundation.data.DataObject; /**단속 관리 서비스 웹 컨트롤러.
* {웹 컨텍스트}/crdn/crdn06 로 접근할 수 있다. * @author leebj */ public class Crdn06Controller extends ApplicationController { public static final String CLASS_URL = "/crdn/crdn06"; public class METHOD_URL { public static final String crackdownManagementMain = "/010/main.do" , getCrackdownList = "/010/list.do" , removeCrackdown = "/010/remove.do" , getCrackdownInfo = "/020/info.do" , updateCrackdown = "/020/update.do" , getCrackdownStatusInfo = "/030/info.do" , updateCrackdownStatus = "/030/update.do" ; } @Resource(name="crdnService") private CrdnService crdnService; @Resource(name="crdnStngService") private CrdnStngService crdnStngService; @Resource(name="userMapper") protected UserMapper userMapper; @Resource(name="globalStngMapper") protected GlobalStngMapper globalStngMapper; /** 단속 관리 메인화면을 연다. * @return fims/crdn/crdn06010-main */ public ModelAndView crackdownManagementMain() { ModelAndView mav = new ModelAndView(); mav.setViewName("fims/crdn/crdn06010-main"); mav.addObject("pageName", "crdn06010-main"); Map> commonCodes = getCodesOf("FIM002", "FIM003", "FIM005", "FIM010", "FIM022", "FIM026", "FIM034", "FIM054"); mav.addObject("FIM003List", commonCodes.get("FIM003")); mav.addObject("FIM005List", commonCodes.get("FIM005")); mav.addObject("FIM010List", commonCodes.get("FIM010")); mav.addObject("FIM054List", commonCodes.get("FIM054")); addCodes(commonCodes, mav, "FIM002", "FIM003", "FIM010", "FIM022", "FIM026", "FIM034"); return mav; } /**단속자료 목록을 조회한다.
* {@link CrdnService#getCrackdownList(CrdnQuery)} 참고 * @param query 단속자료 목록 조회 조건 * @return jsonView */ public ModelAndView getCrackdownList(CrdnQuery query) { setFetchSize(query); ManagedUser currentUser = userMapper.getUser(currentUser().getAccount(), currentUser().getInstitute()); String curDeptCode = currentUser.getDeptCode(); String sggCd = globalStngMapper.selectSggCd(curDeptCode); query.setSggCd(sggCd); if("xls".equals(query.getDownload())) { XLSWriter xlsx = new XLSWriter() .setTemplate("template/xls/excl-list-tmpl.xlsx") .setFilename("단속자료 목록.xlsx") .worksheet(0); /* CellStyle header = xlsx.cellStyle(new XLSWriter.Styler() .width(20) .foregroundColor(HSSFColor.HSSFColorPredefined.LIGHT_BLUE.getIndex()) .configure(styler -> { Font font = xlsx.workbook().createFont(); font.setColor(HSSFColor.HSSFColorPredefined.WHITE.getIndex()); styler.font(font); }) ); */ CellStyle numeric = xlsx.n_nn0(); xlsx /* .cell(0, 0) .value("단속자료 목록", XLSWriter.Styler.CENTER) .merge(0, 15) .cell(3, 0) .rowValues(List.of( "업무구분", header, "부과제외일자", header, "부과제외구분", header, "부과제외사유", header, "기타내용", header, "민원신청번호", header, "민원접수번호", header, "민원접수일자", header, "단속일시", header, "차량번호", header, "법정동", header, "단속장소", header, "과태료금액", header, "처리상태", header, "납부자명", header, "납부자생일", header )) */ .cell(4, 0) .values( crdnService.getCrackdownList(query.setFetchSize(0)), "TASK_SE_NM", xlsx.format(r -> xlsx.str2date(r.get("LEVY_EXCL_YMD"))), "LEVY_EXCL_SE_NM", "LEVY_EXCL_RSN_NM", "ETC_CN", "CVLCPT_APLY_NO", "CVLCPT_RCPT_NO", xlsx.format(r -> xlsx.str2date(r.get("CVLCPT_RCPT_YMD"))), xlsx.format(r -> xlsx.str2date(r.get("CRDN_YMD")) + " " + xlsx.str2time(r.get("CRDN_TM"))), "VHRNO", "CRDN_STDG_NM", "CRDN_PLC", xlsx.style("FFNLG_AMT", numeric), "CRDN_STTS_NM", "RTPYR_NM", xlsx.format(r -> xlsx.str2date(r.get("RTPYR_BRDT"))) ); return new ModelAndView("xlsView").addObject("xls", xlsx); } return setCollectionInfo(new ModelAndView("jsonView"), crdnService.getCrackdownList(query),""); } /**지정한 단속 ID에 해당하는 단속 대장를 제거한다. * @param crdnID 단속 ID * @return jsonView *
 {
	 *     "affected": 저장된 정보수
	 *     "saved": 저장되었으면 true, 그렇지 않으면 false
	 * }
*/ public ModelAndView removeCrackdown(Crdn crdn) { boolean saved = false; String retMessage = crdnService.removeCrackdown(crdn); if (retMessage.contains("[S]")) { saved = true; } else { saved = false; } return new ModelAndView("jsonView") .addObject("saved", saved) .addObject("retMessage", retMessage); } /**지정한 ID의 단속 정보(info)를 반환한다. * @param query 단속 대장 조회 조건 * @return fims/crdn/crdn06020-info 또는 jsonView *
{
	 *     "crdnInfo": 단속 정보
	 * }
*/ public ModelAndView getCrackdownInfo(CrdnQuery query) { DataObject crdnInfo = crdnService.getCrackdownInfo(query); boolean json = jsonResponse(); ModelAndView mav = new ModelAndView(json ? "jsonView" : "fims/crdn/crdn06020-info"); // 법정동 ManagedUser currentUser = userMapper.getUser(currentUser().getAccount(), currentUser().getInstitute()); String curDeptCode = currentUser.getDeptCode(); String sggCd = globalStngMapper.selectSggCd(curDeptCode); mav.addObject("stdgNmList", globalStngMapper.selectStdgNmList(sggCd)); // 공통코드 - 위반 내역 코드 String vltnByTask = ""; switch(query.getTaskSeCd()) { case "PVS" -> { vltnByTask = "WEB002"; } case "BPV" -> { vltnByTask = "FIM005"; } case "DPV" -> { vltnByTask = "FIM006"; } case "ECA" -> { vltnByTask = "FIM061"; } } Map> commonCodes = getCodesOf("FIM011","FIM053","LVS005",vltnByTask); mav.addObject("FIM011List", commonCodes.get("FIM011")); mav.addObject("FIM053List", commonCodes.get("FIM053")); mav.addObject("LVS005List", commonCodes.get("LVS005")); mav.addObject("VLTNList", commonCodes.get(vltnByTask)); // 단속조 List teamList = crdnStngService.getTeamList(query); // 단속부가정보(TB_CRDN_ADI) 공통코드 switch(query.getTaskSeCd()) { case "PVS" -> { commonCodes = getCodesOf("FIM002","FIM007","FIM009"); mav.addObject("FIM002List", commonCodes.get("FIM002")); mav.addObject("FIM007List", commonCodes.get("FIM007")); mav.addObject("FIM009List", commonCodes.get("FIM009")); mav.addObject("TeamList", teamList); } case "BPV" -> { commonCodes = getCodesOf("FIM002","FIM009"); mav.addObject("FIM002List", commonCodes.get("FIM002")); mav.addObject("FIM009List", commonCodes.get("FIM009")); mav.addObject("TeamList", teamList); } case "DPV" -> { commonCodes = getCodesOf("FIM034"); mav.addObject("FIM034List", commonCodes.get("FIM034")); } case "ECA" -> { } } return mav .addObject("pageName", "crdn06020") // .addObject("crdnInfo", json ? crdnInfo : toJson(crdnInfo)) ; } /**지정한 단속 ID에 해당하는 단속 대장를 수정한다. * @param crdnID 단속 ID * @return jsonView *
 {
	 *     "affected": 저장된 정보수
	 *     "saved": 저장되었으면 true, 그렇지 않으면 false
	 * }
*/ public ModelAndView updateCrackdown(Crdn crdn) { boolean saved = false; String retMessage = crdnService.updateCrackdown(crdn); if (retMessage.contains("[S]")) { saved = true; } else { saved = false; } return new ModelAndView("jsonView") .addObject("saved", saved) .addObject("retMessage", retMessage); } /**지정한 ID의 단속 처리 상태 정보(info)를 반환한다. * @param query 단속 대장 조회 조건 * @return fims/crdn/crdn06030-info 또는 jsonView *
{
	 *     "crdnInfo": 단속 정보
	 * }
*/ public ModelAndView getCrackdownStatusInfo(CrdnQuery query) { DataObject crdnInfo = crdnService.getCrackdownInfo(query); boolean json = jsonResponse(); ModelAndView mav = new ModelAndView(json ? "jsonView" : "fims/crdn/crdn06030-info"); Map> commonCodes = getCodesOf("FIM010"); return mav .addObject("pageName", "crdn06030") // .addObject("FIM010List", commonCodes.get("FIM010")) // 단속 처리 상태 코드(CRDN_STTS_CD) .addObject("crdnInfo", json ? crdnInfo : toJson(crdnInfo)) ; } /**지정한 단속 ID에 해당하는 단속 처리 상태를 수정한다. * @param crdnID 단속 ID * @return jsonView *
 {
	 *     "affected": 저장된 정보수
	 *     "saved": 저장되었으면 true, 그렇지 않으면 false
	 * }
*/ public ModelAndView updateCrackdownStatus(Crdn crdn) { boolean saved = false; String retMessage = crdnService.updateCrackdownStatus(crdn); if (retMessage.contains("[S]")) { saved = true; } else { saved = false; } return new ModelAndView("jsonView") .addObject("saved", saved) .addObject("retMessage", retMessage); } }