package incheon.res.rdm.dc.archamd.service.impl;


import incheon.com.cmm.context.RequestContext;
import incheon.com.security.vo.LoginVO;
import incheon.res.com.util.ComDateUtil;
import incheon.res.rdm.com.msgnlog.service.RdmComMsgnlogService;
import incheon.res.rdm.com.msgnlog.vo.RdmComMsgnlogVO;
import incheon.res.rdm.dc.archamd.mapper.RdmDcArchamdMapper;
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 org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
import org.egovframe.rte.fdl.property.EgovPropertyService;
import org.egovframe.rte.psl.dataaccess.util.EgovMap;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.Iterator;
import java.util.List;


@Service
public class RdmDcArchamdServiceImpl extends EgovAbstractServiceImpl implements RdmDcArchamdService {
	protected Log log = LogFactory.getLog(this.getClass());

	@Resource
	private RdmDcArchamdMapper rdmDcArchamdMapper;
	@Resource
	private RdmComMsgnlogService rdmComMsgnlogService;
    @Resource(name = "propertiesService")
    protected EgovPropertyService propertiesService;
    

	
    /**
	 * @MethodDESC : 공사변경 가능 목록 조회
	 */
	public List selectArchamdList(RdmDcArchamdVO vo) throws Exception{
		return rdmDcArchamdMapper.selectArchamdList(vo);
	}
	
	/**
	 * @MethodDESC : 카운트 조회
	 */
	public int countList(RdmDcArchamdVO vo) throws Exception{
		return rdmDcArchamdMapper.countList(vo);
	}
	
	/**
	 * @MethodDESC : 상세조회
	 */
	public RdmDcArchamd selectArchamd(RdmDcArchamdVO vo) throws Exception{
		return rdmDcArchamdMapper.selectArchamd(vo);
	}
	
	/**
	 * @MethodDESC : 굴착규모 정보
	 */
	public List selectArchamdPcifList(RdmDcArchamdVO vo) throws Exception{
		return rdmDcArchamdMapper.selectArchamdPcifList(vo);
	}
	
	/**
	 * @MethodDESC : 굴착예정지 정보
	 */
	public List selectArchamdCpecList(RdmDcArchamdVO vo) throws Exception{
		return rdmDcArchamdMapper.selectArchamdCpecList(vo);
	}
	
	/**
	 * @MethodDESC : 접수처리
	 */
	public int receiveArchamd(RdmDcArchamdVO vo) throws Exception{

		LoginVO loginVO = RequestContext.getCurrentUser();


		RdmDcArchamd rdmDcArchamdVO = null;
		try{
			rdmDcArchamdVO  = rdmDcArchamdMapper.selectArchamd(vo);
			//접수요청 상태가 아닐경우
			if(!("CDI002".equals(rdmDcArchamdVO.getChgPrcsStts()))){
				throw new Exception("");
			}
		}catch(RuntimeException e){
			log.error("해당 내용이 삭제되었거나 상태가 변경되어 요청내용을 처리 할 수 없습니다.");
		}
		
		vo.setChgPrcsStts("CDI003");
		int result = rdmDcArchamdMapper.receiveArchamd(vo);

		String userAcntMngNo = loginVO.getUserUnqId();
		String roadDggMngNo = rdmDcArchamdVO.getRoadDggMngNo();
		String roadDggPrcsStts = rdmDcArchamdVO.getRoadDggPrcsStts();

		//로그저장
		RdmComMsgnlogVO rdmComMsgnlogVO = new RdmComMsgnlogVO();
		rdmComMsgnlogVO.setStateCde("RDH463");
		rdmComMsgnlogVO.setSeUserAcntMngNo(userAcntMngNo);
		rdmComMsgnlogVO.setRoadDggMngNo(roadDggMngNo);
		rdmComMsgnlogVO.setRoadDggPrcsStts(roadDggPrcsStts);
		rdmComMsgnlogVO.setRoadDggMngNm(vo.getRoadDggMngNm());
		rdmComMsgnlogService.insertDigMsgNLog2(rdmComMsgnlogVO);

		return result;
	}
	
	/**
	 * @MethodDESC : 허가 처리
	 */
	public int approvalArchamd(RdmDcArchamdVO vo) throws Exception{
		String rdiIdn = vo.getRoadDggMngNo();
		BigDecimal chgNum = vo.getChgSn();
		
		RdmDcArchamd rdmDcArchamdVO = null;
		try{
			rdmDcArchamdVO  = rdmDcArchamdMapper.selectArchamd(vo);
			//접수상태가 아닐경우
			if(!("CDI003".equals(rdmDcArchamdVO.getChgPrcsStts()))){
				throw new Exception("");
			}
		}catch(RuntimeException e){
			log.error("해당 내용이 삭제되었거나 상태가 변경되어 요청내용을 처리 할 수 없습니다.");
		}
		
		
		
		vo.setChgPrcsStts("CDI004");
		int result = rdmDcArchamdMapper.finishArchamd(vo);
		
		RdmDcArchamdVO archamdParam = new RdmDcArchamdVO();
		archamdParam.setRoadDggMngNo(rdiIdn);
		archamdParam.setChgSn(chgNum);
		
		//굴착예정지 정보
		List rdmArchamdDigplanList = rdmDcArchamdMapper.selectArchamdCpecList(archamdParam);
		
		if(rdmArchamdDigplanList != null && !rdmArchamdDigplanList.isEmpty()){
			Iterator iter1 = rdmArchamdDigplanList.iterator();
			while(iter1.hasNext()){
				EgovMap egovMap = (EgovMap)iter1.next();
				archamdParam.setChgCstrnBgngYmd(egovMap.get("chgCstrnBgngYmd").toString());
				archamdParam.setChgCstrnEndYmd(egovMap.get("chgCstrnEndYmd").toString());
				archamdParam.setChgOcpatDco(new BigDecimal(egovMap.get("chgOcpatDco").toString()));
				archamdParam.setRoadDggMngNo(egovMap.get("roadDggMngNo").toString());
				archamdParam.setDggPstnMngNo(egovMap.get("dggPstnMngNo").toString());
				result += rdmDcArchamdMapper.updateDipaDt(archamdParam);
			}
		}
		
		EgovMap egovMapTmp = (EgovMap)rdmArchamdDigplanList.get(0);
		
		vo.setCpfcDggBzentyNm(rdmDcArchamdVO.getCpfcDggBzentyNm());
		vo.setCpfcDggBzentyTelno(rdmDcArchamdVO.getCpfcDggBzentyTelno());
		vo.setCpfcRstrBzentyNm(rdmDcArchamdVO.getCpfcRstrBzentyNm());
		vo.setCpfcRstrBzentyTelno(rdmDcArchamdVO.getCpfcRstrBzentyTelno());
		vo.setBgncstPrnmntYmd(rdmDcArchamdVO.getBgncstPrnmntYmd());
		vo.setCmcnTerm(rdmDcArchamdVO.getCmcnTerm());
		String cotDtm = ComDateUtil.dateToTimeStrWithComma(egovMapTmp.get("chgCstrnBgngYmd").toString())+"~"+ComDateUtil.dateToTimeStrWithComma(egovMapTmp.get("chgCstrnEndYmd").toString());
		vo.setCstrnEra(cotDtm);
		result += rdmDcArchamdMapper.updateRdigMt(vo);
		
		//굴착규모(포장정보)
		List rdmArchamdDigsizeList = rdmDcArchamdMapper.selectArchamdPcifList(archamdParam);
		if(rdmArchamdDigsizeList != null && !rdmArchamdDigsizeList.isEmpty()){
			Iterator iter2 = rdmArchamdDigsizeList.iterator();
			while(iter2.hasNext()){
				EgovMap egovMap = (EgovMap)iter2.next();
				archamdParam.setChgPackngKnd(egovMap.get("packngKnd").toString());
				archamdParam.setPackngDsctnSn(new BigDecimal(egovMap.get("packngDsctnSn").toString()));
				archamdParam.setDggPstnMngNo(egovMap.get("dggPstnMngNo").toString());
				result += rdmDcArchamdMapper.updateDippDt(archamdParam);
			}
		}	

		return result;
	}
	
	/**
	 * @MethodDESC : 불허 처리
	 */
	public int disapprovalArchamd(RdmDcArchamdVO vo) throws Exception{
		RdmDcArchamd rdmDcArchamdVO = null;
		try{
			rdmDcArchamdVO  = rdmDcArchamdMapper.selectArchamd(vo);
			//접수상태가 아닐경우
			if(!("CDI003".equals(rdmDcArchamdVO.getChgPrcsStts()))){
				throw new Exception("");
			}
		}catch(RuntimeException e){
			log.error("해당 내용이 삭제되었거나 상태가 변경되어 요청내용을 처리 할 수 없습니다.");
		}
		
		vo.setChgPrcsStts("CDI005");
		int result = rdmDcArchamdMapper.finishArchamd(vo);

		return result;
	}

}
