package incheon.res.rdm.cs.digdoc.web;


import incheon.com.cmm.api.DefaultApiResponse;
import incheon.com.cmm.context.RequestContext;
import incheon.com.cmm.exception.BusinessException;
import incheon.com.security.vo.LoginVO;
import incheon.com.security.vo.UserRoleVO;
import incheon.res.com.excel.web.CommonExcelView;
import incheon.res.mng.cd.code.service.MngCdCodeService;
import incheon.res.mng.cd.code.vo.MngCdCodeVO;
import incheon.res.rdm.com.code.service.RdmComCodeService;
import incheon.res.rdm.com.digplan.service.RdmComDigplanService;
import incheon.res.rdm.com.digplan.vo.RdmComDigplanVO;
import incheon.res.rdm.com.levy.vo.LevyAcceptVO;
import incheon.res.rdm.com.msgnlog.service.RdmComMsgnlogService;
import incheon.res.rdm.com.msgnlog.vo.RdmComMsgnlog;
import incheon.res.rdm.com.msgnlog.vo.RdmComMsgnlogVO;
import incheon.res.rdm.com.peracc.service.RdmComPeraccService;
import incheon.res.rdm.com.peracc.vo.RdmComPeraccVO;
import incheon.res.rdm.com.perinfo.service.RdmComPerinfoService;
import incheon.res.rdm.com.perinfo.vo.RdmComPerinfoVO;
import incheon.res.rdm.dc.archamd.service.RdmDcArchamdService;
import incheon.res.rdm.dc.archamd.vo.RdmDcArchamd;
import incheon.res.rdm.dc.archamd.vo.RdmDcArchamdVO;
import incheon.res.rdm.dp.confirm.service.RdmDpConfirmService;
import incheon.res.rdm.dp.confirm.vo.RdmDpConfirmVO;
import incheon.res.rdm.dp.levy.service.RdmDpLevyService;
import incheon.res.rdm.oe.gfc.service.RdmOeGfcService;
import incheon.res.rdm.oe.gfc.vo.RdmOeGfcVO;
import org.egovframe.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.util.*;

@Controller
@RequestMapping("${api.rps-path}")
public class RdmCsDigdocController {

	@Resource
	private RdmComPeraccService rdmComPeraccService;
	@Resource
	private RdmComCodeService rdmComCodeService;
	@Resource
	private RdmComDigplanService rdmComDigplanService;
	@Resource
	private RdmComPerinfoService rdmComPerinfoService;
	@Resource
	private RdmDpConfirmService rdmDpConfirmService;
	@Resource
	protected RdmDcArchamdService rdmDcArchamdService;
	@Resource
	private RdmComMsgnlogService rdmComMsgnlogService;
	@Resource
	private RdmOeGfcService rdmOeGfcService;
	@Resource
	private RdmDpLevyService rdmDpLevyService;
	@Resource
	private MngCdCodeService mngCdCodeService;


	/**
	 * 도로굴착대장 목록화면 이동
	 * @param page
	 * @param vo
	 * @param model
	 * @return
	 * @throws Exception
	 */
	@RequestMapping(value = "/RdmCsDigdocL010.do")
	public String selectDigdocList2(
			@ModelAttribute("loginUser") LoginVO loginVO,
			@RequestParam(defaultValue = "1") int pageIndex,
			@ModelAttribute("rdmComPeraccVO")RdmComPeraccVO vo,
			ModelMap model
	) throws Exception {

		String mngCde = loginVO.getRoadMngInstCd();

		List<UserRoleVO> rpsRoles = new ArrayList<>();

		for (UserRoleVO role : loginVO.getUserRoles()) {
			if (role != null && role.getSysCd() != null && "RPS".equals(role.getSysCd())) {
				rpsRoles.add(role);
			}
		}

		String userAuthrt = rpsRoles.get(0).getRoleCd();
		vo.setUserAuthrtSe(userAuthrt);

		vo.setPageIndex(pageIndex);

		PaginationInfo paginationInfo = new PaginationInfo();
		paginationInfo.setCurrentPageNo(pageIndex);
		paginationInfo.setRecordCountPerPage(vo.getRecordCountPerPage());
		paginationInfo.setPageSize(vo.getPageSize());

		vo.setFirstIndex(paginationInfo.getFirstRecordIndex());
		vo.setLastIndex(paginationInfo.getLastRecordIndex());
		vo.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());

		if(vo.getCstrnBgngYmdSe() == null || vo.getCstrnBgngYmdSe().equals("")){
			Calendar cal = Calendar.getInstance();
			cal.setTime(new Date());
			cal.add(cal.MONTH, -3);
			String cosYmdSe = new java.text.SimpleDateFormat ("yyyyMMdd").format(cal.getTime());
			vo.setCstrnBgngYmdSe(cosYmdSe);

			Calendar cal2 = Calendar.getInstance();
			cal2.setTime(new Date());
			String coeYmdSe = new java.text.SimpleDateFormat ("yyyyMMdd").format(cal2.getTime());
			vo.setCstrnEndYmdSe(coeYmdSe);
		}

		vo.setCstrnBgngYmdSe(vo.getCstrnBgngYmdSe().replaceAll("-", ""));
		vo.setCstrnEndYmdSe(vo.getCstrnEndYmdSe().replaceAll("-", ""));

		vo.setExseStpoDngCd(vo.getStdgEmdCdSe());

		if(vo.getYmdTypSe() == null || "".equals(vo.getYmdTypSe())){
			vo.setYmdTypSe("regDt");
		}

		if(vo.getCstrnYmdSe() == null || "".equals(vo.getCstrnYmdSe())){
			vo.setCstrnYmdSe("3");
		}

		boolean mngYn = false;

		for (UserRoleVO role : rpsRoles) {
			if (role.getRoleCd() != null) {
				String roleCd = role.getRoleCd();
				if ("UAT009".equals(roleCd) || "UAT008".equals(roleCd)) {
					mngYn = true;
					break;
				}
			}
		}

		vo.setMngYn(mngYn);

		List stdgEmdCdList = null;

		if(!mngYn){
			vo.setMngInstCdSe(mngCde);
			stdgEmdCdList = rdmComCodeService.selectDocdList("Y");
		}

		Map<String, Object> map = rdmComPeraccService.selectPeraccAllList(vo);	//DAO로 부터 가져온 결과 값을 담다두는 객체
		int totCnt = Integer.valueOf((Integer)map.get("resultCnt"));			//검색 조건으로 부터 리스트 총 카운트를 받아두는 객체
		paginationInfo.setTotalRecordCount(totCnt);

		List roadDggPrcsSttsList = rdmComCodeService.getCodeList("RDH", "RMT_RDIG_MT", "Y");

		//관리기관 정보
		List guifCodeList = rdmComCodeService.selectGuifList("Y");

		model.addAttribute("guifCodeList", guifCodeList);
		model.addAttribute("stdgEmdCdList", stdgEmdCdList);
		model.addAttribute("resultData", map.get("resultList"));
		model.addAttribute("paginationInfo", paginationInfo);
		model.addAttribute("resultCnt", totCnt);
		model.addAttribute("searchVo", vo);
		model.addAttribute("roadDggPrcsSttsList", roadDggPrcsSttsList);

		return "res/rdm/cs/digdoc/RdmCsDigdocL010";
	}

	/**
	 * 도로굴착대장 상세화면 이동
	 * @param rdmComPeraccVO
	 * @param model
	 * @return
	 * @throws Exception
	 */
	@RequestMapping(value = "/RdmCsDigdocR020.do")
	public String selectDigdoc2(
			@ModelAttribute("loginUser") LoginVO loginVO,
			@ModelAttribute("rdmComPeraccVO")RdmComPeraccVO rdmComPeraccVO,
			ModelMap model
	) throws Exception {

		List<UserRoleVO> rpsRoles = new ArrayList<>();

		for (UserRoleVO role : loginVO.getUserRoles()) {
			if (role != null && role.getSysCd() != null && "RPS".equals(role.getSysCd())) {
				rpsRoles.add(role);
			}
		}

		boolean mngYn = false;
		boolean filterYn = false;

		for (UserRoleVO role : rpsRoles) {
			if (role.getRoleCd() != null) {
				String roleCd = role.getRoleCd();
				if ("UAT008".equals(roleCd) || "UAT009".equals(roleCd)) {
					filterYn = true;
				}
				if ("UAT009".equals(roleCd)) {
					mngYn = true;
				}
			}
		}

		rdmComPeraccVO.setMngYn(mngYn);

		//공사개요
		RdmComPerinfoVO perinfoVO = new RdmComPerinfoVO();
		perinfoVO.setRoadDggMngNo(rdmComPeraccVO.getRoadDggMngNo());
		perinfoVO = rdmComPerinfoService.selectPerinfo(perinfoVO);

		if(!(filterYn || loginVO.getRoadMngInstCd().equals(perinfoVO.getMngInstCd()))){
			return "redirect:/rps/RdmCsDigdocL010.do";
		}

		model.addAttribute("perInfo", perinfoVO);

		model.addAttribute("searchVo", rdmComPeraccVO);

		//굴착예정지
		RdmComDigplanVO digPlanVO = new RdmComDigplanVO();
		digPlanVO.setRoadDggMngNo(rdmComPeraccVO.getRoadDggMngNo());
		List digplanList = rdmComDigplanService.selectDigplanList(digPlanVO);
		model.addAttribute("digplanList", digplanList);

		//부과정보
		RdmDpConfirmVO rdmDpConfirmVO = new RdmDpConfirmVO();
		rdmDpConfirmVO.setRoadDggMngNo(rdmComPeraccVO.getRoadDggMngNo());
		ArrayList levyList= (ArrayList)rdmDpConfirmService.selectLevyList(rdmDpConfirmVO);
		model.addAttribute("levyList", levyList);

		//로그정보
		RdmComMsgnlogVO logVo = new RdmComMsgnlogVO();
		logVo.setRoadDggMngNo(rdmComPeraccVO.getRoadDggMngNo());
		ArrayList logList = (ArrayList) rdmComMsgnlogService.selectLogInfo(logVo);
		model.addAttribute("logList", logList);

		RdmDcArchamdVO archVo = new RdmDcArchamdVO();
		archVo.setRoadDggMngNo(rdmComPeraccVO.getRoadDggMngNo());
		archVo.setChgSn(new BigDecimal(1));
		RdmDcArchamd rdmDcArchamdVO = rdmDcArchamdService.selectArchamd(archVo);
		model.addAttribute("rdmDcArchamdVO", rdmDcArchamdVO);

		//수납정보
		LevyAcceptVO lvo = new LevyAcceptVO();
		lvo.setLinkMngKey(rdmComPeraccVO.getRoadDggMngNo());
		ArrayList rtList = (ArrayList)rdmDpLevyService.selectAcceptResult(lvo);
		model.addAttribute("rtList", rtList);

		//굴착예정지
		List resultDigPlan = rdmDcArchamdService.selectArchamdCpecList(archVo);
		model.addAttribute("resultDigPlan", resultDigPlan);

		//수수료결제정보
		if(mngYn){
			RdmOeGfcVO rovo = new RdmOeGfcVO();
			rovo.setRoadDggMngNoSe(perinfoVO.getRoadDggMngNo());
			model.addAttribute("g4cList", rdmOeGfcService.selectG4cListLinked(rovo));
		}

		return "res/rdm/cs/digdoc/RdmCsDigdocR020";
	}

	/**
	 * 상태값 변경 팝업
	 * @param rdmComPeraccVO
	 * @param model
	 * @return
	 * @throws Exception
	 */
	@RequestMapping(value = "/LayerPopRdmCsDigdocU010.do")
	public String rdmCsDigdocU010(@ModelAttribute("rdmComPeraccVO")RdmComPeraccVO rdmComPeraccVO, ModelMap model) throws Exception {

		MngCdCodeVO vo = new MngCdCodeVO();
		vo.setSmbolCdSe("RDH");
		vo.setUseTblNmSe("RMT_RDIG_MT");
		vo.setRecordCountPerPage(40);
		vo.setFirstIndex(0);
		model.addAttribute("codeList", mngCdCodeService.selectCodeList(vo));
		model.addAttribute("vo",rdmComPeraccVO);

		RdmComMsgnlogVO rdmComMsgnlogVO = new RdmComMsgnlogVO();
		rdmComMsgnlogVO.setRoadDggMngNo(rdmComPeraccVO.getRoadDggMngNo());
		RdmComMsgnlog rdmComMsgnlog =  rdmComMsgnlogService.selectDigInfo(rdmComMsgnlogVO);
		model.addAttribute("rdhCde",rdmComMsgnlog.getRoadDggPrcsStts());

		return "res/rdm/cs/digdoc/LayerPopRdmCsDigdocU010";
	}

	/**
	 * 상태값 변경
	 * @param rdmComPeraccVO
	 * @return
	 * @throws Exception
	 */
	@RequestMapping(value = "/RdmCsDigdocU011.do")
	public ResponseEntity<DefaultApiResponse<Map<String, Object>>> rdmCsDigdocU011(
			@ModelAttribute("loginUser") LoginVO loginVO,
			@ModelAttribute RdmComPeraccVO rdmComPeraccVO
	) throws Exception{

		RdmComMsgnlogVO rdmComMsgnlogVO = new RdmComMsgnlogVO();
		rdmComMsgnlogVO.setRoadDggMngNo(rdmComPeraccVO.getRoadDggMngNo());
		RdmComMsgnlog rdmComMsgnlog =  rdmComMsgnlogService.selectDigInfo(rdmComMsgnlogVO);

		RdmComPerinfoVO vo = new RdmComPerinfoVO();

		vo.setRoadDggMngNo(rdmComPeraccVO.getRoadDggMngNo());
		vo.setUserAcntMngNo(loginVO.getUserUnqId());
		vo.setRoadDggPrcsStts(rdmComPeraccVO.getRoadDggPrcsStts());
		vo.setTmpRoadDggPrcsStts(rdmComMsgnlog.getRoadDggPrcsStts());

		int cnt = rdmComPerinfoService.updateRdhcde(vo);

		Map<String, Object> resultMap = new HashMap<String, Object>();

		if(cnt > 0){
			resultMap.put("result","succ");
		}else{
			throw new BusinessException("상태값 변경을 실패했습니다. ",HttpStatus.INTERNAL_SERVER_ERROR);
		}

		return ResponseEntity.ok(DefaultApiResponse.success(resultMap, "상태값이 변경 되었습니다."));
	}

	/**
	 * 엑셀다운로드 (허가서기준)
	 * @param vo
	 * @param request
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@RequestMapping(value = "/RdmCsDigdocL010Excel.do")
	public ModelAndView rdmCsDigdocL010Excel(@ModelAttribute RdmComPeraccVO vo,
											 HttpServletRequest request,
											 HttpServletResponse response) throws Exception {

		LoginVO loginVO = RequestContext.getCurrentUser();
		List<UserRoleVO> rpsRoles = new ArrayList<>();

		for (UserRoleVO role : loginVO.getUserRoles()) {
			if (role != null && role.getSysCd() != null && "RPS".equals(role.getSysCd())) {
				rpsRoles.add(role);
			}
		}

		boolean mngYn = false;

		for (UserRoleVO role : rpsRoles) {
			if (role.getRoleCd() != null) {
				String roleCd = role.getRoleCd();
				if ("UAT009".equals(roleCd) || "UAT008".equals(roleCd)) {
					mngYn = true;
					break;
				}
			}
		}

		if(mngYn){
		}else {
			vo.setMngInstCd(loginVO.getRoadMngInstCd());
		}

		vo.setExseStpoDngCd(vo.getStdgEmdCdSe());

		Map<String, Object> map = rdmComPeraccService.selectPeraccAllListExcel(vo);

		LinkedHashMap<String, String> cellValue = new LinkedHashMap<String, String>();

		cellValue.put( "공사명", "cstrnNm");
		cellValue.put( "진행상태", "roadDggPrcsSttsNm");
		cellValue.put( "일련번호", "roadDggMngNm");
		cellValue.put( "허가번호", "roadDggPrmsnNo");
		cellValue.put( "허가일", "prmsnDt");
		cellValue.put( "시작동명", "exseStpoDngCd");
		cellValue.put( "시작번지", "exseStpoMno");
		cellValue.put( "종료동명", "exseEdpntDngCd");
		cellValue.put( "종료번지", "exseEdpntMno");
		cellValue.put( "업체명", "bzentyNm");
		cellValue.put( "공사명", "cstrnNm");
		cellValue.put( "공사기간", "schYmd");

		cellValue.put( "도로구분", "roadKndNm");
		cellValue.put( "포장재질", "packngKndNm");
		cellValue.put( "폭(m)", "aplyBt");
		cellValue.put( "길이(m)", "aplyPrlg");
		cellValue.put( "면적(㎡)", "appAra");
		cellValue.put( "2차복구면적", "appAra2");
		cellValue.put( "2차복구단가", "danga");
		cellValue.put( "공사종류", "ocpatPrps");

		cellValue.put( "2차복구비", "levyAmt");
		cellValue.put( "부과일", "levyYmd");

		cellValue.put( "착공일", "cmcnBgncstYmd");
		cellValue.put( "준공일", "cmcnCmcnYmd");

		Map<String, Object> model = new HashMap<>();
		model.put("resultList", map.get("resultList"));
		model.put("cellValue", cellValue);
		model.put("excelTitle", "도로굴착_허가서기준");

		//다운로드 완료 후 쿠키셋 (로딩바닫기)
		String token = request.getParameter("downloadToken");
		if (token != null && !token.isEmpty()) {
			javax.servlet.http.Cookie cookie = new javax.servlet.http.Cookie("fileDownloadToken",token);
			cookie.setPath("/");
			cookie.setHttpOnly(false);   // JS에서 읽어야 하므로 false
			cookie.setMaxAge(120);
			response.addCookie(cookie);
		}

		return new ModelAndView(new CommonExcelView(), model);
	}

	/**
	 * 엑셀다운로드 (예정지기준)
	 * @param vo
	 * @param request
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@RequestMapping(value = "/RdmCsDigdocL010ExcelDipa.do")
	public ModelAndView rdmCsDigdocL010ExcelDipa(@ModelAttribute RdmComPeraccVO vo,
												 HttpServletRequest request,
												 HttpServletResponse response) throws Exception {

		LoginVO loginVO = RequestContext.getCurrentUser();
		List<UserRoleVO> rpsRoles = new ArrayList<>();

		for (UserRoleVO role : loginVO.getUserRoles()) {
			if (role != null && role.getSysCd() != null && "RPS".equals(role.getSysCd())) {
				rpsRoles.add(role);
			}
		}

		boolean mngYn = false;

		for (UserRoleVO role : rpsRoles) {
			if (role.getRoleCd() != null) {
				String roleCd = role.getRoleCd();
				if ("UAT009".equals(roleCd) || "UAT008".equals(roleCd)) {
					mngYn = true;
					break;
				}
			}
		}

		if(mngYn){
		}else {
			vo.setMngInstCd(loginVO.getRoadMngInstCd());
		}

		vo.setExseStpoDngCd(vo.getStdgEmdCdSe());

		Map<String, Object> map = rdmComPeraccService.selectPeraccAllListExcelDipa(vo);

		LinkedHashMap<String, String> cellValue = new LinkedHashMap<String, String>();

		cellValue.put( "번호", "roadDggMngNm");
		cellValue.put( "진행상태", "roadDggPrcsSttsNm");
		cellValue.put( "업체명", "bzentyNm");
		cellValue.put( "노선명", "rteNm");
		cellValue.put( "공사구간", "gugAdr");

		cellValue.put( "아스팔트_연장(m)", "aplyPrlgAdd100");
		cellValue.put( "아스팔트_면적(㎡)", "appAraAdd100");

		cellValue.put( "콘크리트_연장(m)", "aplyPrlgAdd110");
		cellValue.put( "콘크리트_면적(㎡)", "appAraAdd110");

		cellValue.put( "보도_연장(m)", "aplyPrlgAdd200");
		cellValue.put( "보도_면적(㎡)", "appAraAdd200");

		cellValue.put( "허가신청일", "regDt");

		cellValue.put( "원인자부담금징수액", "levyAmt");
		cellValue.put( "원인자부담금징수일", "levyYmd");

		cellValue.put( "허가번호", "roadDggPrmsnNo");
		cellValue.put( "허가일", "prmsnDt");
		cellValue.put( "공사기간", "schYmd");

		cellValue.put( "굴착자", "cpfcDggBzentyNm");
		cellValue.put( "복구자", "cpfcRstrBzentyNm");

		cellValue.put( "착공일", "cmcnBgncstYmd");
		cellValue.put( "준공일", "cmcnCmcnYmd");

		Map<String, Object> model = new HashMap<>();
		model.put("resultList", map.get("resultList"));
		model.put("cellValue", cellValue);
		model.put("excelTitle", "도로굴착_예정지기준");

		//다운로드 완료 후 쿠키셋 (로딩바닫기)
		String token = request.getParameter("downloadToken");
		if (token != null && !token.isEmpty()) {
			javax.servlet.http.Cookie cookie = new javax.servlet.http.Cookie("fileDownloadToken",token);
			cookie.setPath("/");
			cookie.setHttpOnly(false);   // JS에서 읽어야 하므로 false
			cookie.setMaxAge(120);
			response.addCookie(cookie);
		}

		return new ModelAndView(new CommonExcelView(), model);
	}

	/**
	 * 감사자료 엑셀다운로드 (복구비기준)
	 * @param vo
	 * @param request
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@RequestMapping(value = "/rdmCsDigdocExcelInspc.do")
	public ModelAndView rdmCsDigdocExcelInspc(@ModelAttribute RdmComPeraccVO vo,
											  HttpServletRequest request,
											  HttpServletResponse response) throws Exception {

		LoginVO loginVO = RequestContext.getCurrentUser();
		List<UserRoleVO> rpsRoles = new ArrayList<>();

		for (UserRoleVO role : loginVO.getUserRoles()) {
			if (role != null && role.getSysCd() != null && "RPS".equals(role.getSysCd())) {
				rpsRoles.add(role);
			}
		}

		boolean mngYn = false;

		for (UserRoleVO role : rpsRoles) {
			if (role.getRoleCd() != null) {
				String roleCd = role.getRoleCd();
				if ("UAT009".equals(roleCd) || "UAT008".equals(roleCd)) {
					mngYn = true;
					break;
				}
			}
		}

		if(mngYn){
		}else {
			vo.setMngInstCd(loginVO.getRoadMngInstCd());
		}

		vo.setExseStpoDngCd(vo.getStdgEmdCdSe());

		if(vo.getCstrnBgngYmdSe() != null){
			vo.setCstrnBgngYmdSe(vo.getCstrnBgngYmdSe().replaceAll("-", ""));
		}
		if(vo.getCstrnEndYmdSe() != null){
			vo.setCstrnEndYmdSe(vo.getCstrnEndYmdSe().replaceAll("-", ""));
		}
		Map<String, Object> map = rdmComPeraccService.selectPeraccAllListExcelInspc(vo);
		List resultList = (List) map.get("resultList");

		LinkedHashMap<String, String> cellValue = new LinkedHashMap<String, String>();
		cellValue.put( "공사명", "cstrnNm");
		cellValue.put( "허가번호", "roadDggPrmsnNo");
		cellValue.put( "허가일시", "prmsnDt");
		cellValue.put( "시작동", "exseStpoDngCd");
		cellValue.put( "시작번지", "exseStpoMno");
		cellValue.put( "시작기타주소", "exseStpoEtcAddr");

		cellValue.put( "종료동", "exseEdpntDngCd");
		cellValue.put( "종료번지", "exseEdpntMno");
		cellValue.put( "종료기타주소", "exseEdpntEtcAddr");

		cellValue.put( "굴착시작위치", "sttAdr");
		cellValue.put( "굴착종료위치", "eddAdr");

		cellValue.put( "업체명", "bzentyNm");
		cellValue.put( "공사기간", "schYmd");

		cellValue.put( "도로종류", "roadKnd");
		cellValue.put( "지하시설물종류", "udgdFcltyKnd");

		cellValue.put( "관로유무", "smallSclPlineSe");
		cellValue.put( "포장종류", "packngKndNm");

		cellValue.put( "굴착폭", "aplyBt");
		cellValue.put( "연장", "aplyPrlg");
		cellValue.put( "면적", "appAra");

		cellValue.put( "2차복구면적", "appAra2");
		cellValue.put( "단가", "danga");
		cellValue.put( "실제부과금액", "price");

		cellValue.put( "공사분류", "cstrnClsf");

		cellValue.put( "작성일자", "regDt");
		cellValue.put( "접수처리일자", "rcptDt");

		cellValue.put( "착공예정일", "cpfcRcptYmd");
		cellValue.put( "착공계접수일", "bgncstPrnmntYmd");

		cellValue.put( "준공계준공일", "cmcnCmcnYmd");
		cellValue.put( "준공계접수일", "cmcnAplyYmd");
		cellValue.put( "준공계처리일", "cmcnPrcsYmd");

		Map<String, Object> model = new HashMap<>();
		model.put("resultList", map.get("resultList"));
		model.put("cellValue", cellValue);
		model.put("excelTitle", "도로굴착감사자료_복구비기준");

		//다운로드 완료 후 쿠키셋 (로딩바닫기)
		String token = request.getParameter("downloadToken");
		if (token != null && !token.isEmpty()) {
			javax.servlet.http.Cookie cookie = new javax.servlet.http.Cookie("fileDownloadToken",token);
			cookie.setPath("/");
			cookie.setHttpOnly(false);   // JS에서 읽어야 하므로 false
			cookie.setMaxAge(120);
			response.addCookie(cookie);
		}

		return new ModelAndView(new CommonExcelView(), model);
	}

	/**
	 * 감사자료 엑셀다운로드 (영구점용료 기준)
	 * @param vo
	 * @param request
	 * @param response
	 * @return
	 * @throws Exception
	 */
	@RequestMapping(value = "/rdmCsDigdocExcelInspcEver.do")
	public ModelAndView rdmCsDigdocExcelInspcEver(@ModelAttribute RdmComPeraccVO vo,
												  HttpServletRequest request,
												  HttpServletResponse response) throws Exception {

		LoginVO loginVO = RequestContext.getCurrentUser();
		List<UserRoleVO> rpsRoles = new ArrayList<>();

		for (UserRoleVO role : loginVO.getUserRoles()) {
			if (role != null && role.getSysCd() != null && "RPS".equals(role.getSysCd())) {
				rpsRoles.add(role);
			}
		}

		boolean mngYn = false;

		for (UserRoleVO role : rpsRoles) {
			if (role.getRoleCd() != null) {
				String roleCd = role.getRoleCd();
				if ("UAT009".equals(roleCd) || "UAT008".equals(roleCd)) {
					mngYn = true;
					break;
				}
			}
		}

		if(mngYn){
		}else {
			vo.setMngInstCd(loginVO.getRoadMngInstCd());
		}

		vo.setExseStpoDngCd(vo.getStdgEmdCdSe());

		if(vo.getCstrnBgngYmdSe() != null){
			vo.setCstrnBgngYmdSe(vo.getCstrnBgngYmdSe().replaceAll("-", ""));
		}
		if(vo.getCstrnEndYmdSe() != null){
			vo.setCstrnEndYmdSe(vo.getCstrnEndYmdSe().replaceAll("-", ""));
		}


		Map<String, Object> map = rdmComPeraccService.selectPeraccAllListExcelInspcEver(vo);

		LinkedHashMap<String, String> cellValue = new LinkedHashMap<String, String>();
		cellValue.put( "공사명", "cstrnNm");
		cellValue.put( "허가번호", "roadDggPrmsnNo");
		cellValue.put( "허가일시", "prmsnDt");
		cellValue.put( "시작동", "exseStpoDngCd");
		cellValue.put( "시작번지", "exseStpoMno");
		cellValue.put( "시작기타주소", "exseStpoEtcAddr");

		cellValue.put( "종료동", "exseEdpntDngCd");
		cellValue.put( "종료번지", "exseEdpntMno");
		cellValue.put( "종료기타주소", "exseEdpntEtcAddr");

		cellValue.put( "굴착시작위치", "sttAdr");
		cellValue.put( "굴착종료위치", "eddAdr");

		cellValue.put( "업체명", "bzentyNm");
		cellValue.put( "공사기간", "schYmd");

		cellValue.put( "도로종류", "roadKnd");
		cellValue.put( "지하시설물종류", "udgdFcltyKnd");

		cellValue.put( "관로유무", "smallSclPlineSe");

		cellValue.put( "환산직경", "aplyDrctArea");
		cellValue.put( "관경", "aplyDiam");
		cellValue.put( "연장", "aplyPrlg");
		cellValue.put( "관갯수", "pipeCo");

		cellValue.put( "단가", "danga");
		cellValue.put( "실제부과금액", "price");

		cellValue.put( "공사분류", "cstrnClsf");

		cellValue.put( "작성일자", "regDt");
		cellValue.put( "접수처리일자", "rcptDt");

		cellValue.put( "착공예정일", "cpfcRcptYmd");
		cellValue.put( "착공계접수일", "bgncstPrnmntYmd");

		cellValue.put( "준공계준공일", "cmcnCmcnYmd");
		cellValue.put( "준공계접수일", "cmcnAplyYmd");
		cellValue.put( "준공계처리일", "cmcnPrcsYmd");

		Map<String, Object> model = new HashMap<>();
		model.put("resultList", map.get("resultList"));
		model.put("cellValue", cellValue);
		model.put("excelTitle", "도로굴착감사자료_영구점용료기준");

		//다운로드 완료 후 쿠키셋 (로딩바닫기)
		String token = request.getParameter("downloadToken");
		if (token != null && !token.isEmpty()) {
			javax.servlet.http.Cookie cookie = new javax.servlet.http.Cookie("fileDownloadToken",token);
			cookie.setPath("/");
			cookie.setHttpOnly(false);   // JS에서 읽어야 하므로 false
			cookie.setMaxAge(120);
			response.addCookie(cookie);
		}

		return new ModelAndView(new CommonExcelView(), model);
	}
}
