package incheon.res.rdm.dd.council.service.impl;

import incheon.com.cmm.context.RequestContext;
import incheon.com.security.vo.LoginVO;
import incheon.res.rdm.com.msgnlog.service.RdmComMsgnlogService;
import incheon.res.rdm.com.msgnlog.vo.RdmComMsgnlogVO;
import incheon.res.rdm.com.pjtplan.mapper.RdmComPjtplanMapper;
import incheon.res.rdm.com.pjtplan.vo.RdmComPjtplanVO;
import incheon.res.rdm.com.unitcst.mapper.RdmComUnitcstMapper;
import incheon.res.rdm.com.unitcst.mapper.RmtBiphDtMapper;
import incheon.res.rdm.com.unitcst.vo.RdmComUnitcst;
import incheon.res.rdm.com.unitcst.vo.RdmComUnitcstVO;
import incheon.res.rdm.com.unitcst.vo.RmtBiphDtVO;
import incheon.res.rdm.dd.council.service.RdmDdCouncilService;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
import org.egovframe.rte.psl.dataaccess.util.EgovMap;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;

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

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

	@Resource
	private RdmComUnitcstMapper rdmComUnitcstMapper;
	@Resource
	private RdmComPjtplanMapper rdmComPjtplanMapper;
	@Resource
	private RdmComMsgnlogService rdmComMsgnlogService;
	@Resource
	private RmtBiphDtMapper rmtBiphDtMapper;


	/**
	 * @MethodDESC : 심의완료 처리
	 */
	@Override
	public int updateCouncilFinish(RdmComPjtplanVO vo) throws Exception{
		int result = 1;
		try{

			LoginVO loginVO = RequestContext.getCurrentUser();
			String sessionUserId = loginVO.getUserUnqId();

			//심의완료 상태코드
			String bpaCde = "BPA008";
			vo.setBizPlanPrcsStts(bpaCde);
			
			RdmComUnitcstVO rdmComUnitcstVO = new RdmComUnitcstVO();
			rdmComUnitcstVO.setBizPlanAplyMngNo(vo.getBizPlanAplyMngNo());

			//사업계획서 상태 변경
			rdmComPjtplanMapper.updatePjtplanState(vo);
			
			//사업계획서 심의완료일 입력
			rdmComPjtplanMapper.updateDbcYmd(vo);
			
			//변경이력 추가
			insertHistory(vo);

			RdmComMsgnlogVO rdmComMsgnlogVO = new RdmComMsgnlogVO();
			rdmComMsgnlogVO.setStateCde("BPA065");
			rdmComMsgnlogVO.setSeUserAcntMngNo(sessionUserId);
			rdmComMsgnlogVO.setBizPlanAplyMngNo(vo.getBizPlanAplyMngNo());
			rdmComMsgnlogVO.setBizPlanPrcsStts(vo.getBizPlanPrcsStts());
			rdmComMsgnlogService.insertPlanMsgNLog2(rdmComMsgnlogVO);

		}catch (NullPointerException npe) {
			result = 0;
			log.error("필수 데이터 누락으로 처리 실패");
		} catch (DataAccessException dae) {
			result = 0;
			log.error("데이터베이스 처리 중 오류 발생");
		} catch (RuntimeException re) {
			result = 0;
			log.error("시스템 실행 중 예외 발생");
		}
		return result;
	}
	
	/**
	 * @MethodDESC : 심의완료 취소처리
	 */
	@Override
	public int updateCouncilCancel(RdmComPjtplanVO vo) throws Exception{
		int result = 1;
		try{

			LoginVO loginVO = RequestContext.getCurrentUser();
			String sessionUserId = loginVO.getUserUnqId();

			//심의조정 상태코드
			String bpaCde = "BPA007";
			vo.setBizPlanPrcsStts(bpaCde);
			
			//사업계획서 상태 변경
			rdmComPjtplanMapper.updatePjtplanState(vo);
			
			//변경이력 삭제
			deleteHistory(vo);

			RdmComMsgnlogVO rdmComMsgnlogVO = new RdmComMsgnlogVO();
			rdmComMsgnlogVO.setStateCde("BPA066");
			rdmComMsgnlogVO.setSeUserAcntMngNo(sessionUserId);
			rdmComMsgnlogVO.setBizPlanAplyMngNo(vo.getBizPlanAplyMngNo());
			rdmComMsgnlogVO.setBizPlanPrcsStts(vo.getBizPlanPrcsStts());
			rdmComMsgnlogService.insertPlanMsgNLog2(rdmComMsgnlogVO);

		}catch (NullPointerException npe) {
			result = 0;
			log.error("필수 데이터 누락으로 처리 실패");
		} catch (DataAccessException dae) {
			result = 0;
			log.error("데이터베이스 처리 중 오류 발생");
		} catch (RuntimeException re) {
			result = 0;
			log.error("시스템 실행 중 예외 발생");
		}
		return result;
	}
	
	/**
	 * @MethodDESC : 사업예정지 변경이력 입력
	 */
	@Override
	public void insertHistory(RdmComPjtplanVO vo) throws Exception{
		String bpaIdn = vo.getBizPlanAplyMngNo();
		RdmComUnitcstVO rdmComUnitcstVO = new RdmComUnitcstVO();
		rdmComUnitcstVO.setBizPlanAplyMngNo(bpaIdn);
		List unitcstList = rdmComUnitcstMapper.selectUnitcstListAll(rdmComUnitcstVO);
		
		Iterator iter = unitcstList.iterator();
		while(iter.hasNext()){
			EgovMap egovMap = (EgovMap)iter.next();
			String bprIdn = egovMap.get("bizIntsptMngNo").toString();
			RdmComUnitcstVO unitcstVO = new RdmComUnitcstVO();
			unitcstVO.setBizIntsptMngNo(bprIdn);
			RdmComUnitcst rdmComUnitcst = rdmComUnitcstMapper.selectHistoryCount(unitcstVO);
			BigDecimal bphSeq = rdmComUnitcst.getCount().add(new BigDecimal(1));
			
			RmtBiphDtVO rmtBiphDtVO = new RmtBiphDtVO();
			BeanUtils.copyProperties(rmtBiphDtVO, egovMap);
			
			rmtBiphDtVO.setChgHstrySe("심의완료");
			rmtBiphDtVO.setChgHstrySn(bphSeq);
			
			rmtBiphDtMapper.insertRmtBiphDt(rmtBiphDtVO);
		}
	}
	
	/**
	 * @MethodDESC : 사업예정지 변경이력 삭제
	 */
	@Override
	public void deleteHistory(RdmComPjtplanVO vo) throws Exception{
		String bpaIdn = vo.getBizPlanAplyMngNo();
		RdmComUnitcstVO rdmComUnitcstVO = new RdmComUnitcstVO();
		rdmComUnitcstVO.setBizPlanAplyMngNo(bpaIdn);
		List unitcstList = rdmComUnitcstMapper.selectUnitcstListAll(rdmComUnitcstVO);
		
		Iterator iter = unitcstList.iterator();
		while(iter.hasNext()){
			EgovMap egovMap = (EgovMap)iter.next();
			String bprIdn = egovMap.get("bizIntsptMngNo").toString();
			RdmComUnitcstVO unitcstVO = new RdmComUnitcstVO();
			unitcstVO.setBizIntsptMngNo(bprIdn);
			RdmComUnitcst rdmComUnitcst = rdmComUnitcstMapper.selectHistoryCount(unitcstVO);
			BigDecimal bphSeq = rdmComUnitcst.getCount();
			RmtBiphDtVO rmtBiphDtVO = new RmtBiphDtVO();
			rmtBiphDtVO.setChgHstrySn(bphSeq);
			rmtBiphDtVO.setBizIntsptMngNo(bprIdn);
			
			rmtBiphDtMapper.deleteRmtBiphDt(rmtBiphDtVO);
		}
	}
	
}
