You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

401 lines
14 KiB
Java

package cokr.xit.fims.crdn.web;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.apache.poi.ss.usermodel.CellStyle;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import cokr.xit.base.code.CommonCode;
import cokr.xit.base.docs.xls.CellDef;
import cokr.xit.base.docs.xls.Comment;
import cokr.xit.base.docs.xls.Format;
import cokr.xit.base.docs.xls.Style;
import cokr.xit.base.docs.xls.XLSWriter;
import cokr.xit.base.file.service.FileQuery;
import cokr.xit.base.file.service.bean.FileBean;
import cokr.xit.base.user.dao.UserMapper;
import cokr.xit.base.web.ApplicationController;
import cokr.xit.fims.base.FimsUser;
import cokr.xit.fims.cmmn.service.bean.StngBean;
import cokr.xit.fims.cmmn.xls.FormatMaker;
import cokr.xit.fims.cmmn.xls.StyleMaker;
import cokr.xit.fims.crdn.Crdn;
import cokr.xit.fims.crdn.CrdnQuery;
2 years ago
import cokr.xit.fims.crdn.dao.CrdnStngMapper;
import cokr.xit.fims.crdn.service.CrdnService;
import cokr.xit.fims.crdn.service.CrdnStngService;
import cokr.xit.fims.task.Task;
import cokr.xit.foundation.data.DataObject;
/** .<br />
* { }/crdn/crdn06 .
* @author leebj
*/
@Controller
@RequestMapping(name="단속 관리", value=Crdn06Controller.CLASS_URL)
public class Crdn06Controller extends ApplicationController {
public static final String CLASS_URL = "/crdn/crdn06";
2 years ago
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"
, getCrackdownInfo = "/020/info.do"
, updateCrackdown = "/020/update.do"
, getCrackdownStatusInfo = "/030/info.do"
, updateCrackdownStatus = "/030/update.do"
2 years ago
;
}
@Resource(name="crdnService")
private CrdnService crdnService;
@Resource(name="crdnStngService")
private CrdnStngService crdnStngService;
@Resource(name="userMapper")
protected UserMapper userMapper;
2 years ago
@Resource(name="crdnStngMapper")
protected CrdnStngMapper crdnStngMapper;
@Resource(name = "fileBean")
private FileBean fileBean;
@Resource(name = "stngBean")
private StngBean stngBean;
/** .
* @return fims/crdn/crdn06010-main
*/
@RequestMapping(name="단속 관리 메인", value=METHOD_URL.crackdownManagementMain)
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
*/
@Task
@RequestMapping(name="단속자료 목록", value=METHOD_URL.getCrackdownList)
public ModelAndView getCrackdownList(CrdnQuery query) {
setFetchSize(query);
FimsUser currentUser = (FimsUser) currentUser().getUser();
2 years ago
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().worksheet(0);
Format format = new Format(xlsx);
Comment comment = new Comment(xlsx);
CellStyle center = format.cellStyle(Style.CENTER);
CellStyle left = format.cellStyle(Style.LEFT);
CellStyle numeric = format.n_nn0();
CellStyle dateYMD = format.yyyy_mm_dd();
CellStyle dateDT = format.yyyy_mm_dd_hh_mm_ss();
Map<String,Object> valueMap = new HashMap<String,Object>();
for(CellDef def : cellDefs) {
switch(def.getLabel()) {
case "자료출처"->{ valueMap.put("자료출처", format.of("CRDN_INPT_SE_NM").style(center)); }
case "차량번호"->{ valueMap.put("차량번호", left); }
case "위반일시"->{ valueMap.put("위반일시", FormatMaker.yyyy_mm_dd_hh_mm_ss(format,"CRDN_YMD_TM").style(dateDT)); }
case "단속장소"->{ valueMap.put("단속장소", left); }
case "사진건수"->{ valueMap.put("사진건수", center); }
case "스티커번호"->{ valueMap.put("스티커번호", left); }
case "장애차량확인"->{ valueMap.put("장애차량확인", format.of("PRK_PSBLTY_RSLT_NM").style(center)); }
case "처리상태"->{ valueMap.put("처리상태", format.of("CRDN_STTS_NM").style(center)); }
case "제외사유"->{ valueMap.put("제외사유", format.of("LEVY_EXCL_RSN_NM").style(center)); }
case "제외처리일자"->{ valueMap.put("제외처리일자", FormatMaker.yyyy_mm_dd(format,"LEVY_EXCL_YMD").style(dateYMD)); }
case "제외내역"->{ valueMap.put("제외내역", left); }
case "사진1"->{ valueMap.put("사진1", FormatMaker.photoCellForApproval(format, comment, "CRDN_PHOTO_PATH1")); }
case "사진2"->{ valueMap.put("사진2", FormatMaker.photoCellForApproval(format, comment, "CRDN_PHOTO_PATH2")); }
}
}
CellDef.setValues(cellDefs, valueMap);
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"));
}
}
}
}
xlsx.cell(0, 0).value("단속자료 목록").value(center).merge(0, cellDefs.size()-1);
xlsx.cell(3, 0).rowValues(CellDef.header(cellDefs, () -> StyleMaker.headerStyle(xlsx)));
xlsx.cell(4, 0).values(list, CellDef.values(cellDefs.stream().map(i -> {if(i.getValue() instanceof Format) {i.setField(null);}; return i;}).toList()));
ModelAndView mav = new ModelAndView("downloadView");
mav.addObject("download", xlsx.getDownloadable().setFilename("단속자료 목록.xlsx"));
mav.addObject("downloadData", list);
mav.addObject("dataNames", cellDefs.stream().map(CellDef::getLabel).toList());
return mav;
}
return setCollectionInfo(new ModelAndView("jsonView"), crdnService.getCrackdownList(query),"","");
}
/** ID .
* @param crdnID ID
* @return jsonView
* <pre><code> {
* "affected":
* "saved": true, false
* }</code></pre>
*/
@Task
@RequestMapping(name="단속자료 삭제", value=METHOD_URL.removeCrackdown)
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>
*/
@Task
@RequestMapping(name="단속자료 납부자 삭제", value=METHOD_URL.removeCrackdownPayer)
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
*/
@Task
@RequestMapping(name="단속 건수 조회", value=METHOD_URL.countCrdn)
public ModelAndView countCrdn(CrdnQuery crdnQuery) {
ModelAndView mav = new ModelAndView("jsonView");
int crdnCount = crdnService.countCrdn(crdnQuery);
mav.addObject("crdnCount", crdnCount);
return mav;
}
/** ID (info) .
* @param query
* @return fims/crdn/crdn06020-info jsonView
* <pre>{
* "crdnInfo":
* }</pre>
*/
@Task
@RequestMapping(name="단속자료 상세 조회", value=METHOD_URL.getCrackdownInfo)
public ModelAndView getCrackdownInfo(HttpServletRequest hReq, CrdnQuery query) {
DataObject crdnInfo = crdnService.getCrackdownInfo(query);
boolean json = jsonResponse();
ModelAndView mav = new ModelAndView(json ? "jsonView" : "fims/crdn/crdn06020-info");
// 법정동
FimsUser currentUser = (FimsUser) currentUser().getUser();
2 years ago
String sggCd = currentUser.getOrgID();
2 years ago
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("CMN006", "FIM011","FIM053","LVS005",vltnByTask);
mav.addObject("CMN006List", commonCodes.get("CMN006"));
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") // jsp pageName
.addObject("infoPrefix", "crdn") // prefix
.addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
.addObject("crdnInfo", json ? crdnInfo : toJson(crdnInfo))
;
}
/** ID .
* @param crdnID ID
* @return jsonView
* <pre><code> {
* "affected":
* "saved": true, false
* }</code></pre>
*/
@Task
@RequestMapping(name="단속자료 수정", value=METHOD_URL.updateCrackdown)
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>
*/
@Task
@RequestMapping(name="단속자료 상태 조회", value=METHOD_URL.getCrackdownStatusInfo)
public ModelAndView getCrackdownStatusInfo(HttpServletRequest hReq, 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") // jsp pageName
.addObject("infoPrefix", "crdnSttsCd") // prefix
.addObject("infoPrefixUrl", CLASS_URL) // prefixUrl
.addObject("FIM010List", commonCodes.get("FIM010")) // 단속 처리 상태 코드(CRDN_STTS_CD)
.addObject("crdnSttsCdInfo", json ? crdnInfo : toJson(crdnInfo))
;
}
/** ID .
* @param crdnID ID
* @return jsonView
* <pre><code> {
* "affected":
* "saved": true, false
* }</code></pre>
*/
@Task
@RequestMapping(name="단속처리상태 수정", value=METHOD_URL.updateCrackdownStatus)
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);
}
}