|
|
|
|
package cokr.xit.fims.crdn.web;
|
|
|
|
|
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
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.service.FileQuery;
|
|
|
|
|
import cokr.xit.base.file.service.bean.FileBean;
|
|
|
|
|
import cokr.xit.base.file.xls.XLSWriter;
|
|
|
|
|
import cokr.xit.base.file.xls.XLSWriter.CellDef;
|
|
|
|
|
import cokr.xit.base.file.xls.XLSWriter.CommentSupport;
|
|
|
|
|
import cokr.xit.base.file.xls.XLSWriter.Styler;
|
|
|
|
|
import cokr.xit.base.user.ManagedUser;
|
|
|
|
|
import cokr.xit.base.user.dao.UserMapper;
|
|
|
|
|
import cokr.xit.base.web.ApplicationController;
|
|
|
|
|
import cokr.xit.fims.cmmn.CellDecorator;
|
|
|
|
|
import cokr.xit.fims.cmmn.CmmnUtil;
|
|
|
|
|
import cokr.xit.fims.cmmn.service.bean.StngBean;
|
|
|
|
|
import cokr.xit.fims.crdn.Crdn;
|
|
|
|
|
import cokr.xit.fims.crdn.CrdnQuery;
|
|
|
|
|
import cokr.xit.fims.crdn.dao.CrdnStngMapper;
|
|
|
|
|
import cokr.xit.fims.crdn.service.CrdnService;
|
|
|
|
|
import cokr.xit.fims.crdn.service.CrdnStngService;
|
|
|
|
|
import cokr.xit.foundation.data.DataObject;
|
|
|
|
|
|
|
|
|
|
/**단속 관리 서비스 웹 컨트롤러.<br />
|
|
|
|
|
* {웹 컨텍스트}/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"
|
|
|
|
|
, removeCrackdownPayer = "/010/removeCrdnPayer.do"
|
|
|
|
|
, countCrdn = "/010/nocs.do"
|
|
|
|
|
, sendCrdn = "/010/sendCrdn.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="crdnStngMapper")
|
|
|
|
|
protected CrdnStngMapper crdnStngMapper;
|
|
|
|
|
|
|
|
|
|
@Resource(name = "fileBean")
|
|
|
|
|
private FileBean fileBean;
|
|
|
|
|
|
|
|
|
|
@Resource(name = "stngBean")
|
|
|
|
|
private StngBean stngBean;
|
|
|
|
|
|
|
|
|
|
/** 단속 관리 메인화면을 연다.
|
|
|
|
|
* @return fims/crdn/crdn06010-main
|
|
|
|
|
*/
|
|
|
|
|
public ModelAndView crackdownManagementMain(String openType, String taskSeCd) {
|
|
|
|
|
ModelAndView mav = new ModelAndView();
|
|
|
|
|
mav.setViewName("fims/crdn/crdn06010-main");
|
|
|
|
|
mav.addObject("pageName", "crdn06010" + ifEmpty(openType, ()-> ""));
|
|
|
|
|
if(!ifEmpty(taskSeCd, ()-> "").equals("")) {
|
|
|
|
|
mav.addObject("taskSeCd", taskSeCd);
|
|
|
|
|
}
|
|
|
|
|
Map<String, List<CommonCode>> 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"));
|
|
|
|
|
mav.addObject("TaskListForSgg", stngBean.filterTaskSectionCodeForSgg(commonCodes.get("FIM054")));
|
|
|
|
|
addCodes(commonCodes, mav, "FIM002", "FIM003", "FIM010", "FIM022", "FIM026", "FIM034");
|
|
|
|
|
return mav;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**단속자료 목록을 조회한다.<br />
|
|
|
|
|
* {@link CrdnService#getCrackdownList(CrdnQuery)} 참고
|
|
|
|
|
* @param query 단속자료 목록 조회 조건
|
|
|
|
|
* @return jsonView
|
|
|
|
|
*/
|
|
|
|
|
public ModelAndView getCrackdownList(CrdnQuery query) {
|
|
|
|
|
setFetchSize(query);
|
|
|
|
|
|
|
|
|
|
ManagedUser currentUser = (ManagedUser) currentUser().getUser();
|
|
|
|
|
String sggCd = currentUser.getOrgID();
|
|
|
|
|
query.setSggCd(sggCd);
|
|
|
|
|
|
|
|
|
|
if("xls".equals(query.getDownload())) {
|
|
|
|
|
List<CellDef> cellDefs = fromJson(query.getCellDefs(), CellDef.listType());
|
|
|
|
|
|
|
|
|
|
if(ifEmpty(query.getIncludePhoto(), () -> "").equals("Y")) {
|
|
|
|
|
cellDefs.add((new CellDef()).setLabel("사진1").setWidth(18).setField("CRDN_PHOTO_PATH1"));
|
|
|
|
|
cellDefs.add((new CellDef()).setLabel("사진2").setWidth(18).setField("CRDN_PHOTO_PATH2"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
XLSWriter xlsx = new XLSWriter()
|
|
|
|
|
.setFilename("단속자료 목록.xlsx")
|
|
|
|
|
.worksheet(0);
|
|
|
|
|
|
|
|
|
|
CellStyle center = xlsx.cellStyle(Styler.CENTER);
|
|
|
|
|
CellStyle dateYMD = xlsx.yyyy_mm_dd();
|
|
|
|
|
CellStyle dateDT = xlsx.yyyy_mm_dd_hh_mm_ss();
|
|
|
|
|
|
|
|
|
|
List<DataObject> list = crdnService.getCrackdownList(query.setFetchSize(0));
|
|
|
|
|
if(ifEmpty(query.getIncludePhoto(), () -> "").equals("Y")) {
|
|
|
|
|
for(DataObject crdn : list) {
|
|
|
|
|
String crdnId = crdn.string("CRDN_ID");
|
|
|
|
|
FileQuery fileQuery = new FileQuery();
|
|
|
|
|
fileQuery.setInfoType(Crdn.INF_TYPE);
|
|
|
|
|
fileQuery.setInfoKeys(crdnId);
|
|
|
|
|
List<DataObject> fileInfoList = fileBean.getFileList(fileQuery);
|
|
|
|
|
|
|
|
|
|
if(fileInfoList != null && fileInfoList.size() > 0) {
|
|
|
|
|
for(int j=0; (j < fileInfoList.size()) && (j < 2); j++) {
|
|
|
|
|
crdn.set("CRDN_PHOTO_PATH"+(j+1), fileInfoList.get(j).string("FILE_PATH"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Map<String,Object> valueMap = new HashMap<String,Object>();
|
|
|
|
|
valueMap.put("자료출처", xlsx.style("CRDN_INPT_SE_NM", center));
|
|
|
|
|
valueMap.put("위반일시", xlsx.format(o -> xlsx.str2datetime(o.get("CRDN_YMD_TM"))).style(dateDT));
|
|
|
|
|
valueMap.put("사진건수", xlsx.style("ATCH_FILE_CNT", center));
|
|
|
|
|
valueMap.put("장애차량확인", xlsx.style("PARKNG_PSBLTY_RSLT_NM", center));
|
|
|
|
|
valueMap.put("처리상태", xlsx.style("CRDN_STTS_NM", center));
|
|
|
|
|
valueMap.put("제외사유", xlsx.style("LEVY_EXCL_RSN_NM", center));
|
|
|
|
|
valueMap.put("제외처리일자", xlsx.format(o -> xlsx.str2date(o.get("LEVY_EXCL_YMD"))).style(dateYMD));
|
|
|
|
|
|
|
|
|
|
if(ifEmpty(query.getIncludePhoto(), () -> "").equals("Y")) {
|
|
|
|
|
CommentSupport commentSupport = new CommentSupport(xlsx);
|
|
|
|
|
|
|
|
|
|
CellDecorator col1 = CmmnUtil.photoCellForApproval(commentSupport, "CRDN_PHOTO_PATH1");
|
|
|
|
|
CellDecorator col2 = CmmnUtil.photoCellForApproval(commentSupport, "CRDN_PHOTO_PATH2");
|
|
|
|
|
|
|
|
|
|
valueMap.put("사진1", xlsx.format(col1.value()).onCell(col1.memo()));
|
|
|
|
|
valueMap.put("사진2", xlsx.format(col2.value()).onCell(col2.memo()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CellDef.setValues(cellDefs, valueMap);
|
|
|
|
|
|
|
|
|
|
xlsx.cell(0, 0)
|
|
|
|
|
.value("단속자료 목록", center)
|
|
|
|
|
.merge(0, cellDefs.size()-1)
|
|
|
|
|
.cell(3, 0)
|
|
|
|
|
.rowValues(CellDef.header(cellDefs, () -> CmmnUtil.headerStyle(xlsx)))
|
|
|
|
|
.cell(4, 0)
|
|
|
|
|
.values(list, CellDef.values(cellDefs));
|
|
|
|
|
|
|
|
|
|
return new ModelAndView("xlsView").addObject("xls", xlsx)
|
|
|
|
|
.addObject("downloadData", list).addObject("dataNames", cellDefs.stream().map(CellDef::getLabel).toList());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return setCollectionInfo(new ModelAndView("jsonView"), crdnService.getCrackdownList(query),"","");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**지정한 단속 ID에 해당하는 단속 대장를 제거한다.
|
|
|
|
|
* @param crdnID 단속 ID
|
|
|
|
|
* @return jsonView
|
|
|
|
|
* <pre><code> {
|
|
|
|
|
* "affected": 저장된 정보수
|
|
|
|
|
* "saved": 저장되었으면 true, 그렇지 않으면 false
|
|
|
|
|
* }</code></pre>
|
|
|
|
|
*/
|
|
|
|
|
public ModelAndView removeCrackdown(Crdn crdn) {
|
|
|
|
|
boolean saved = false;
|
|
|
|
|
String rtnMsg = crdnService.removeCrackdown(crdn);
|
|
|
|
|
|
|
|
|
|
if (rtnMsg.contains("[S]")) {
|
|
|
|
|
saved = true;
|
|
|
|
|
} else {
|
|
|
|
|
saved = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return new ModelAndView("jsonView")
|
|
|
|
|
.addObject("saved", saved)
|
|
|
|
|
.addObject("rtnMsg", rtnMsg);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**지정한 단속 ID에 해당하는 납부자 ID를 제거한다.
|
|
|
|
|
* @param crdnID 단속 ID
|
|
|
|
|
* @return jsonView
|
|
|
|
|
* <pre><code> {
|
|
|
|
|
* "affected": 저장된 정보수
|
|
|
|
|
* "saved": 저장되었으면 true, 그렇지 않으면 false
|
|
|
|
|
* }</code></pre>
|
|
|
|
|
*/
|
|
|
|
|
public ModelAndView removeCrackdownPayer(Crdn crdn) {
|
|
|
|
|
boolean saved = false;
|
|
|
|
|
String rtnMsg = crdnService.removeCrackdownPayer(crdn);
|
|
|
|
|
|
|
|
|
|
if (rtnMsg.contains("[S]")) {
|
|
|
|
|
saved = true;
|
|
|
|
|
} else {
|
|
|
|
|
saved = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return new ModelAndView("jsonView")
|
|
|
|
|
.addObject("saved", saved)
|
|
|
|
|
.addObject("rtnMsg", rtnMsg);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**지정한 조회조건으로 단속 건수를 반환한다.
|
|
|
|
|
* @param CrdnQuery 조회조건
|
|
|
|
|
* @return jsonView
|
|
|
|
|
*/
|
|
|
|
|
public ModelAndView countCrdn(CrdnQuery crdnQuery) {
|
|
|
|
|
ModelAndView mav = new ModelAndView("jsonView");
|
|
|
|
|
|
|
|
|
|
int crdnCount = crdnService.countCrdn(crdnQuery);
|
|
|
|
|
|
|
|
|
|
mav.addObject("crdnCount", crdnCount);
|
|
|
|
|
|
|
|
|
|
return mav;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**단속자료를 압축파일로 생성하여 세외수입으로 전송한다.
|
|
|
|
|
* @param crdnIds 단속ID 목록
|
|
|
|
|
* @return jsonView
|
|
|
|
|
* <pre><code> {
|
|
|
|
|
* "affected": 저장된 정보수
|
|
|
|
|
* "saved": 저장되었으면 true, 그렇지 않으면 false
|
|
|
|
|
* }</code></pre>
|
|
|
|
|
*/
|
|
|
|
|
public ModelAndView sendCrdn(String... crdnIds) {
|
|
|
|
|
ModelAndView mav = new ModelAndView("jsonView");
|
|
|
|
|
boolean saved = false;
|
|
|
|
|
String rtnMsg = crdnService.sendCrdn(crdnIds);
|
|
|
|
|
if(rtnMsg.contains("[S]")) {
|
|
|
|
|
saved = true;
|
|
|
|
|
}
|
|
|
|
|
mav.addObject("saved", saved);
|
|
|
|
|
mav.addObject("rtnMsg", rtnMsg);
|
|
|
|
|
return mav;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**지정한 ID의 단속 정보(info)를 반환한다.
|
|
|
|
|
* @param query 단속 대장 조회 조건
|
|
|
|
|
* @return fims/crdn/crdn06020-info 또는 jsonView
|
|
|
|
|
* <pre>{
|
|
|
|
|
* "crdnInfo": 단속 정보
|
|
|
|
|
* }</pre>
|
|
|
|
|
*/
|
|
|
|
|
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 = (ManagedUser) currentUser().getUser();
|
|
|
|
|
String sggCd = currentUser.getOrgID();
|
|
|
|
|
List<String> stdgNmList = crdnStngMapper.selectStdgNmList(sggCd);
|
|
|
|
|
mav.addObject("stdgNmList", stdgNmList);
|
|
|
|
|
|
|
|
|
|
// 공통코드 - 위반 내역 코드
|
|
|
|
|
String vltnByTask = "";
|
|
|
|
|
|
|
|
|
|
switch(query.getTaskSeCd()) {
|
|
|
|
|
case "PVS" -> { vltnByTask = "FIM004"; }
|
|
|
|
|
case "BPV" -> { vltnByTask = "FIM005"; }
|
|
|
|
|
case "DPV" -> { vltnByTask = "FIM006"; }
|
|
|
|
|
case "ECA" -> { vltnByTask = "FIM061"; }
|
|
|
|
|
case "PES" -> { vltnByTask = "FIM064"; }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Map<String, List<CommonCode>> 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<DataObject> 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" -> { }
|
|
|
|
|
case "PES" -> { }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return mav
|
|
|
|
|
.addObject("pageName", "crdn06020") //
|
|
|
|
|
.addObject("crdnInfo", json ? crdnInfo : toJson(crdnInfo))
|
|
|
|
|
;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**지정한 단속 ID에 해당하는 단속 대장를 수정한다.
|
|
|
|
|
* @param crdnID 단속 ID
|
|
|
|
|
* @return jsonView
|
|
|
|
|
* <pre><code> {
|
|
|
|
|
* "affected": 저장된 정보수
|
|
|
|
|
* "saved": 저장되었으면 true, 그렇지 않으면 false
|
|
|
|
|
* }</code></pre>
|
|
|
|
|
*/
|
|
|
|
|
public ModelAndView updateCrackdown(Crdn crdn) {
|
|
|
|
|
boolean saved = false;
|
|
|
|
|
String rtnMsg = crdnService.updateCrackdown(crdn);
|
|
|
|
|
|
|
|
|
|
if (rtnMsg.contains("[S]")) {
|
|
|
|
|
saved = true;
|
|
|
|
|
} else {
|
|
|
|
|
saved = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return new ModelAndView("jsonView")
|
|
|
|
|
.addObject("saved", saved)
|
|
|
|
|
.addObject("rtnMsg", rtnMsg);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**지정한 ID의 단속 처리 상태 정보(info)를 반환한다.
|
|
|
|
|
* @param query 단속 대장 조회 조건
|
|
|
|
|
* @return fims/crdn/crdn06030-info 또는 jsonView
|
|
|
|
|
* <pre>{
|
|
|
|
|
* "crdnInfo": 단속 정보
|
|
|
|
|
* }</pre>
|
|
|
|
|
*/
|
|
|
|
|
public ModelAndView getCrackdownStatusInfo(CrdnQuery query) {
|
|
|
|
|
DataObject crdnInfo = crdnService.getCrackdownInfo(query);
|
|
|
|
|
|
|
|
|
|
boolean json = jsonResponse();
|
|
|
|
|
|
|
|
|
|
ModelAndView mav = new ModelAndView(json ? "jsonView" : "fims/crdn/crdn06030-info");
|
|
|
|
|
|
|
|
|
|
Map<String, List<CommonCode>> 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
|
|
|
|
|
* <pre><code> {
|
|
|
|
|
* "affected": 저장된 정보수
|
|
|
|
|
* "saved": 저장되었으면 true, 그렇지 않으면 false
|
|
|
|
|
* }</code></pre>
|
|
|
|
|
*/
|
|
|
|
|
public ModelAndView updateCrackdownStatus(Crdn crdn) {
|
|
|
|
|
boolean saved = false;
|
|
|
|
|
String rtnMsg = crdnService.updateCrackdownStatus(crdn);
|
|
|
|
|
|
|
|
|
|
if (rtnMsg.contains("[S]")) {
|
|
|
|
|
saved = true;
|
|
|
|
|
} else {
|
|
|
|
|
saved = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return new ModelAndView("jsonView")
|
|
|
|
|
.addObject("saved", saved)
|
|
|
|
|
.addObject("rtnMsg", rtnMsg);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|