package incheon.res.rdm.dp.review.service.impl;



import incheon.com.cmm.context.RequestContext;
import incheon.com.security.vo.LoginVO;
import incheon.res.rdm.com.minwon.MinwonService;
import incheon.res.rdm.com.minwon.mapper.RdmComMinwonMapper;
import incheon.res.rdm.com.minwon.vo.RdmComMinwonVO;
import incheon.res.rdm.com.msgnlog.service.RdmComMsgnlogService;
import incheon.res.rdm.com.msgnlog.vo.RdmComMsgnlogVO;
import incheon.res.rdm.dp.confirm.mapper.RdmDpConfirmMapper;
import incheon.res.rdm.dp.confirm.vo.RdmDpConfirm;
import incheon.res.rdm.dp.confirm.vo.RdmDpConfirmVO;
import incheon.res.rdm.dp.levy.mapper.RdmDpLevyMapper;
import incheon.res.rdm.dp.levy.vo.RdmDpLevy;
import incheon.res.rdm.dp.levy.vo.RdmDpLevyVO;
import incheon.res.rdm.dp.review.mapper.RdmDpReviewMapper;
import incheon.res.rdm.dp.review.service.RdmDpReviewService;
import incheon.res.rdm.dp.review.vo.RdmDpReview;
import incheon.res.rdm.dp.review.vo.RdmDpReviewVO;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;



@Service
public class RdmDpReviewServiceImpl extends EgovAbstractServiceImpl implements RdmDpReviewService {

	protected Log log = LogFactory.getLog(this.getClass());

	@Resource
    private RdmDpReviewMapper rdmDpReviewMapper;
	@Resource
    private RdmDpLevyMapper rdmDpLevyMapper;
	@Resource
    private RdmComMinwonMapper rdmComMinwonMapper;
	@Resource
    private RdmDpConfirmMapper rdmDpConfirmMapper;
	@Resource
    protected RdmComMsgnlogService rdmComMsgnlogService;
	@Resource
	protected MinwonService minwonService;


	/**
	 * @MethodDESC : 불허
	 */
	@Override
	public String updateNonPermission(RdmDpReviewVO vo) throws Exception {

		String message ="succ";

		try{
			LoginVO loginVO = RequestContext.getCurrentUser();
			String userAcntMngNo = loginVO.getUserUnqId();
			String usrIde = loginVO.getUserId();
			String roadDggMngNo = vo.getRoadDggMngNo();

			//신청자가 공무원이 아니면(면제기관)
			if(!"UAT002".equals(vo.getUserAuthrt())){
				if(vo.getCvlcptRcptNo().trim().equals("")){
					message = "민원접수번호가 없습니다.";
					return message;
				}
				// 새올 연계
				minwonService.updateComplete(vo.getCvlcptRcptNo(), vo.getMngInstCd());

			}else{
				//새올민원결과 처리내역 등록 로그
				SimpleDateFormat ymd = new SimpleDateFormat("yyyyMMdd");
				Date currentTime = new Date();
				String strYmd = ymd.format(currentTime);

				RdmComMinwonVO minwonVO = new RdmComMinwonVO();
				minwonVO.setRoadDggMngNo(roadDggMngNo);
				minwonVO.setPrcrUserId(usrIde);
				minwonVO.setPrcsRbprsnUserId("");
				minwonVO.setActlPrcsYmd(strYmd);
				minwonVO.setInldrDcsnYmd("");
				minwonVO.setInldrDcsnDsctn("");
				minwonVO.setPrcsDsctn("");
				minwonVO.setPrcsBss("");
				minwonVO.setAltrvPrsentCn("");
				rdmComMinwonMapper.updateCggiinnerComplete(minwonVO);

				//세외수입고지서부과 연계등록로그 (내부사용자는 면제기 때문에 단순 로그용으로 저장)
				RdmDpLevyVO levyVO = new RdmDpLevyVO();
				levyVO.setRoadDggMngNo(vo.getRoadDggMngNo());
				levyVO.setLevyKnd("LET004");
				levyVO.setLevyNo("000000000000000000000");
				levyVO.setLevyAmt("0");
				levyVO.setTrigAlotmKnd("AMT001");
				levyVO.setNhtNo("99999999999");
				levyVO.setDudtIsePayTerm("99991230");
				levyVO.setUserAcntMngNo(userAcntMngNo);

				RdmDpLevy levy = rdmDpLevyMapper.selectLevyDt(levyVO);
				if(levy == null){
					rdmDpLevyMapper.insertLevy(levyVO);
				}else{
					rdmDpLevyMapper.updateLevy(levyVO);
				}
			}
			//불허 업데이트
			rdmDpReviewMapper.updateNonpermission(vo);

			//로그저장
			RdmComMsgnlogVO msgLogVO = new RdmComMsgnlogVO();
			msgLogVO.setStateCde("RDH210");
			msgLogVO.setSeUserAcntMngNo(userAcntMngNo);
			msgLogVO.setRoadDggMngNo(roadDggMngNo);
			msgLogVO.setRoadDggPrcsStts(vo.getTmpRoadDggPrcsStts());
			rdmComMsgnlogService.insertDigMsgNLog2(msgLogVO);

		}catch(IllegalStateException e){
			log.error("시군구민원 완료 처리중 오류가 발생하였습니다." , e);
		}

		return message;
	}

	/**
	 * @MethodDESC : 검토완료
	 */
	@Override
	public String updatePermission(RdmDpReviewVO vo) throws Exception {

		String message = "succ";

		try{
			LoginVO loginVO = RequestContext.getCurrentUser();
			String userAcntMngNo = loginVO.getUserUnqId();
			String usrIde = loginVO.getUserId();
			String roadDggMngNo = vo.getRoadDggMngNo();

			//신청자가 공무원이 아니면(면제기관)
			if(!"UAT002".equals(vo.getUserAuthrt())){
				if(vo.getCvlcptRcptNo().trim().equals("")){
					message = "민원접수번호가 없습니다.";
					log.error(message);
					return message;
				}
				// 새올 연계
				minwonService.updateComplete(vo.getCvlcptRcptNo(), vo.getMngInstCd());

			}else{
				//새올민원결과 처리내역 들록로그
				SimpleDateFormat ymd = new SimpleDateFormat("yyyyMMdd");
				Date currentTime = new Date();
				String strYmd = ymd.format(currentTime);

				RdmComMinwonVO rdmComMinwonVO = new RdmComMinwonVO();
				rdmComMinwonVO.setRoadDggMngNo(roadDggMngNo);
				rdmComMinwonVO.setPrcrUserId(usrIde);
				rdmComMinwonVO.setPrcsRbprsnUserId("");
				rdmComMinwonVO.setActlPrcsYmd("");
				rdmComMinwonVO.setInldrDcsnYmd("");
				rdmComMinwonVO.setInldrDcsnDsctn("");
				rdmComMinwonVO.setPrcsDsctn("");
				rdmComMinwonVO.setPrcsBss("");
				rdmComMinwonVO.setAltrvPrsentCn("");
				rdmComMinwonMapper.updateCggiinnerComplete(rdmComMinwonVO);

				//세외수입고지서 부과 연계등록 로그(내부사용자는 면제이기 때문에 단순 로그용으로 저장)
				RdmDpLevyVO levyVO = new RdmDpLevyVO();
				levyVO.setRoadDggMngNo(roadDggMngNo);
				levyVO.setLevyKnd("LET004");
				levyVO.setLevyNo("000000000000000000000");
				levyVO.setLevyAmt("0");
				levyVO.setTrigAlotmKnd("AMT001");
				levyVO.setNhtNo("99999999999");
				levyVO.setDudtIsePayTerm("99991230");
				levyVO.setUserAcntMngNo(userAcntMngNo);

				RdmDpLevy levy = rdmDpLevyMapper.selectLevyDt(levyVO);
				if(levy == null){
					rdmDpLevyMapper.insertLevy(levyVO);
				}else{
					rdmDpLevyMapper.updateLevy(levyVO);
				}

			}
			//허가처리
			rdmDpReviewMapper.updatePermission(vo);

			//허가증에 입력
			RdmDpConfirmVO rdmDpConfirmVO = new RdmDpConfirmVO();
			rdmDpConfirmVO.setRoadDggMngNo(vo.getRoadDggMngNo());
			rdmDpConfirmVO.setRoadDggPrmsnNo(vo.getRoadDggPrmsnNo());
			rdmDpConfirmVO.setUserAcntMngNo(vo.getUserAcntMngNo());
			rdmDpConfirmVO.setRoadKnd(vo.getRoadKnd());
			rdmDpConfirmVO.setRteNm(vo.getRteNm());
			rdmDpConfirmVO.setOcpatPlc(vo.getOcpatPlc());
			rdmDpConfirmVO.setOcpatArea(vo.getOcpatArea());
			rdmDpConfirmVO.setCstrnEra(vo.getCstrnEra());
			rdmDpConfirmVO.setLiceAcnt(userAcntMngNo);

			RdmDpConfirm rdmDpConfirm = rdmDpConfirmMapper.selectConfirm(rdmDpConfirmVO);
			if(rdmDpConfirm != null){
				rdmDpConfirmMapper.deleteConfirm(rdmDpConfirmVO);
			}
			rdmDpConfirmMapper.insertConfirm(rdmDpConfirmVO);

			rdmDpConfirmMapper.updateConfirmPmtDat(rdmDpConfirmVO);

			//로그저장
			RdmComMsgnlogVO msgLogVO = new RdmComMsgnlogVO();
			msgLogVO.setStateCde("UAT002".equals(vo.getUserAuthrt())? "RDH209" : "RDH206");
			msgLogVO.setSeUserAcntMngNo(userAcntMngNo);
			msgLogVO.setRoadDggMngNo(roadDggMngNo);
			msgLogVO.setRoadDggPrcsStts(vo.getTmpRoadDggPrcsStts());
			rdmComMsgnlogService.insertDigMsgNLog2(msgLogVO);

		}catch(IllegalStateException e){
			log.error("시군구민원 완료 처리중 오류가 발생하였습니다.", e);
		}

		return message;
	}

	/**
	 * @MethodDESC : 허가번호 가져오기
	 */
	@Override
	public RdmDpReview selectRdpidn(RdmDpReviewVO vo) throws Exception {

		return rdmDpReviewMapper.selectRdpidn(vo);
	}

}