package cokr.xit.fims.excl.service.bean;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Component;

import cokr.xit.fims.excl.LevyExcl;
import cokr.xit.fims.cmmn.CrdnSttsHstry;
import cokr.xit.fims.cmmn.service.bean.CrdnSttsHstryBean;
import cokr.xit.fims.crdn.Crdn;
import cokr.xit.fims.excl.ExclQuery;
import cokr.xit.fims.excl.dao.LevyExclMapper;
import cokr.xit.foundation.AbstractComponent;
import cokr.xit.foundation.data.DataObject;

/**부과제외 대장 정보 관리 Bean
 *
 * <p>상세 설명: 부과제외 대장 DAO(Excl01Mapper)를 사용해 업무 기능을 구현한 클래스
 *
 * <pre>
 * ============ 변경 이력 ============
 * 2023-06-23	JoJH 최초 작성
 * ================================
 * </pre>
 */
@Component("excl01Bean")
public class Excl01Bean extends AbstractComponent {

	/** 부과제외 대장 정보 DAO */
	@Resource(name = "levyExclMapper")
	private LevyExclMapper levyExclMapper;

	/** 단속 상태 이력 정보 Bean */
	@Resource(name = "crdnSttsHstryBean")
	private CrdnSttsHstryBean crdnSttsHstryBean;

	/**지정한 조건에 따라 부과제외 대장 목록을 조회하여 반환한다.
	 * @param req 부과제외 대장 조회 조건
	 * @return 부과제외 대장 목록
	 */
	public List<DataObject> getLevyExclList(ExclQuery req) {
		if (req.getOrderBy() == null) {
			req.setOrderBy("REG_DT");
		}

		return levyExclMapper.selectLevyExclList(req);
	}

	/**지정한 조건에 따라 부과제외 이력 객체들을 반환한다.
	 * @param req 단속 상태 이력 조회 조건
	 * @return 단속 상태 이력 객체 목록
	 */
	public List<DataObject> getLevyExcls(ExclQuery req) {
		if (req.getOrderBy() == null) {
			req.setOrderBy("REG_DT DESC, LEVY_EXCL_ID DESC");
		}

		return levyExclMapper.selectLevyExcls(req);
	}

	/**지정한 부과제외 ID의 부과제외 정보를 반환한다.<br />
	 * @param levyExclId 부과제외 ID
	 * @return 부과제외 정보
	 */
	public DataObject getLevyExclInfo(ExclQuery req) {
		return levyExclMapper.selectLevyExclInfo(req);
	}

	/**지정한 단속 ID의 단속 정보를 반환한다.<br />
	 * @param crndId 단속 ID
	 * @return 단속 정보
	 */
	public DataObject getCrdnInfo(ExclQuery req) {
		DataObject dataCrdn = levyExclMapper.selectCrdn(req);					// 단속 조회

		if (req.getCallPurpose().equals("create")) {
			dataCrdn.set("LEVY_EXCL_YMD", dataCrdn.get("TODAY"));				// 부과 제외 일자
			dataCrdn.set("LEVY_EXCL_SE_CD", req.getLevyExclSeCd());				// 부과 제외 구분 코드
		}

		return dataCrdn;
	}

	/**부과제외 대장 정보를 등록한다.
	 * @param excl 부과제외 대장
	 * @return 저장 여부
	 * <ul><li>저장됐으면 true</li>
	 *     <li>그렇지 않으면 false</li>
	 * </ul>
	 */
	public String createLevyExcl(LevyExcl levyExcl) {
		// 변수 선언
		boolean retSuccess = false;						// DB 처리 결과
		String retMessage = "";							// 처리 결과 메시지
		String newCrdnSttsCd = "";						// 신규 단속 상태 코드(CRDN_STTS_CD)

		// 단속 ID로 단속, 부과제외 정보 조회
		DataObject infoCrdnLevyExcl = levyExclMapper.selectCrdnInfo(levyExcl.getCrdnId());

		// 부과제외 ID가 있다면 이미 부과제외 자료가 존재하므로 종료..
		if (!infoCrdnLevyExcl.string("LEVY_EXCL_ID").equals("")) {
			retMessage = "[F] 작업 중 이미 등록된 자료가 존재합니다.";
			return retMessage;
		}
		// 단속 상태 코드(CRDN_STTS_CD) 확인..
		if (levyExcl.getLevyExclSeCd().equals("1") || levyExcl.getLevyExclSeCd().equals("2")) {		// 비부과(서손), 계고
			// 단속 상태 코드가 부과(51) 보다 크다면, 비부과 또는 계고 등록을 할 수 없다. 종료..
			if (infoCrdnLevyExcl.number("CRDN_STTS_CD").intValue() >= 51) {
				retMessage = "[F] 작업 중 오류가 발생하였습니다.<br>현재 자료의 단속 상태가 " + infoCrdnLevyExcl.string("CRDN_STTS_NM") + " 상태 입니다.";
				return retMessage;
			}
		} else if (levyExcl.getLevyExclSeCd().equals("5")) {
			// 단속 상태 코드가 부과(51) 보다 작다면, 전액감액 등록 할 수 없다. 종료.. 전액감액 등록은 부과이후...
			if (infoCrdnLevyExcl.number("CRDN_STTS_CD").intValue() < 51) {
				// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
				retMessage = "[F] 작업 중 오류가 발생하였습니다.<br>현재 자료의 단속 상태가 " + infoCrdnLevyExcl.string("CRDN_STTS_NM") + " 상태 입니다.";
				return retMessage;
			}
		}
		// 단속 민원(TB_CRDN_CVLCPT) 민원 처리 확인
		if (!infoCrdnLevyExcl.string("CVLCPT_LINK_ID").equals("")) {
			if (infoCrdnLevyExcl.string("CVLCPT_PRCS_CD").equals("00")) {
				// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
				retMessage = "[F] 작업 중 단속 민원 자료가 처리 되지 않았습니다.<br>단속 민원 업무를 먼저 처리 하시기 바랍니다.<br>";
				return retMessage;
			}
		}

		// 단속 상태 코드 설정.
		if (levyExcl.getLevyExclSeCd().equals("1")) {							// 비부과
			newCrdnSttsCd = "81";            // 비부과(서손)
		} else if (levyExcl.getLevyExclSeCd().equals("2")) {					// 계고
			newCrdnSttsCd = "83";            // 계고
		} else if (levyExcl.getLevyExclSeCd().equals("5")) {					// 전액감액
			newCrdnSttsCd = "80";            // 부과취소
		}

		// 부과제외(TB_LEVY_EXCL) 대장을 등록 한다.
		retSuccess = levyExclMapper.insert(levyExcl);
		if (!retSuccess) {
			// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
			throw new RuntimeException("부과제외 대장 등록에 실패하였습니다.");
		}

		// 단속상태이력(TB_CRDN_STTS_HSTRY)
		CrdnSttsHstry crdnSttsHstry = new CrdnSttsHstry();

		crdnSttsHstry.setCrdnId(infoCrdnLevyExcl.string("CRDN_ID"));
		crdnSttsHstry.setBfrSttsCd(infoCrdnLevyExcl.string("CRDN_STTS_CD"));
		crdnSttsHstry.setBfrSttsChgDt(infoCrdnLevyExcl.string("CRDN_STTS_CHG_DT"));
		crdnSttsHstry.setCrdnSttsCd(newCrdnSttsCd);
		crdnSttsHstry.setTaskDtlId(levyExcl.getLevyExclId());

		// 단속 상태 이력(TB_CRDN_STTS_HSTRY) 대장에 등록 한다.
		retSuccess = crdnSttsHstryBean.createHstryUpdateCrdnSttsCd(crdnSttsHstry);
		if (!retSuccess) {
			// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
			throw new RuntimeException("부과제외 등록 중 단속 대장의 단속상태코드 변경에 실패하였습니다.");
		}

		// 전액 감액일 경우 부과(TB_LEVY)에 감액금액 입력이 필요..
		if (levyExcl.getLevyExclSeCd().equals("5")) {

		}

		retMessage = "[S] 작업이 정상 처리 되었습니다.";

		return retMessage;
	}

	/**부과제외 대장 정보를 수정한다.
	 * @param excl 부과제외 대장
	 * @return 저장 여부
	 * <ul><li>저장됐으면 true</li>
	 *     <li>그렇지 않으면 false</li>
	 * </ul>
	 */
	public String updateLevyExcl(LevyExcl levyExcl) {
		// 변수 선언
		boolean retSuccess = false;						// DB 처리 결과
		String retMessage = "";							// 처리 결과 메시지

		// 부과제외(TB_LEVY_EXCL) 대장을 수정 한다.
		retSuccess = levyExclMapper.update(levyExcl);
		if (!retSuccess) {
			// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
			throw new RuntimeException("부과제외 대장 수정에 실패하였습니다.");
		}

		retMessage = "[S] 작업이 정상 처리 되었습니다.";

		return retMessage;
	}

	/**부과제외 대장 정보를 삭제한다.
	 * @param excl 부과제외 대장
	 * @return 저장 여부
	 * <ul><li>저장됐으면 true</li>
	 *     <li>그렇지 않으면 false</li>
	 * </ul>
	 */
	public String removeLevyExcl(LevyExcl levyExcl) {
		// 변수 선언
		boolean retSuccess = false;						// DB 처리 결과
		String retMessage = "";							// 처리 결과 메시지
		String newHstrySttsCd = "";						// 신규 상태 코드

		// 단속 ID로 단속, 부과제외 정보 조회
		ExclQuery req = new ExclQuery();

		req.setLevyExclId(levyExcl.getLevyExclId());
		req.setDelYn("N");

		DataObject infoCrdnLevyExcl = levyExclMapper.selectCrdn(req);

		// 부과제외 ID가 조회되지 않았다면 종료..
		if (infoCrdnLevyExcl.string("LEVY_EXCL_ID").equals("")) {
			retMessage = "[F] 작업 중 자료가 존재하지 않습니다.";
			return retMessage;
		}
		// 단속 상태 코드(CRDN_STTS_CD) 확인..
		if (infoCrdnLevyExcl.string("LEVY_EXCL_SE_CD").equals("1") && !infoCrdnLevyExcl.string("CRDN_STTS_CD").equals("81")) {			// 비부과(서손)
			retMessage = "[F] 작업 중 오류가 발생하였습니다.<br>현재 자료의 단속 상태가 " + infoCrdnLevyExcl.string("CRDN_STTS_NM") + " 이(가) 아닙니다.";
			return retMessage;
		} else if (infoCrdnLevyExcl.string("LEVY_EXCL_SE_CD").equals("2") && !infoCrdnLevyExcl.string("CRDN_STTS_CD").equals("83")) {	// 계고
			retMessage = "[F] 작업 중 오류가 발생하였습니다.<br>현재 자료의 단속 상태가 " + infoCrdnLevyExcl.string("CRDN_STTS_NM") + " 이(가) 아닙니다.";
			return retMessage;
		} else if (infoCrdnLevyExcl.string("LEVY_EXCL_SE_CD").equals("5") && !infoCrdnLevyExcl.string("CRDN_STTS_CD").equals("80")) {	// 부과취소
			retMessage = "[F] 작업 중 오류가 발생하였습니다.<br>현재 자료의 단속 상태가 " + infoCrdnLevyExcl.string("CRDN_STTS_NM") + " 이(가) 아닙니다.";
			return retMessage;
		}

		// 부과제외(TB_LEVY_EXCL) 대장을 삭제 한다.
		retSuccess = levyExclMapper.delete(levyExcl);
		if (!retSuccess) {
			// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
			throw new RuntimeException("부과제외 대장 삭제에 실패하였습니다.");
		}

		if (infoCrdnLevyExcl.string("CRDN_STTS_CD").equals("81")) {				// 비부과(서손)
			newHstrySttsCd = "91";
		} else if (infoCrdnLevyExcl.string("CRDN_STTS_CD").equals("83")) {		// 계고
			newHstrySttsCd = "93";
		}

		// 단속 상태 이력(TB_CRDN_STTS_HSTRY) 대장을 삭제 한다.
		retSuccess = crdnSttsHstryBean.removeHstryUpdateCrdnSttsCd(infoCrdnLevyExcl.string("CRDN_ID"), newHstrySttsCd);
		if (!retSuccess) {
			// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
			throw new RuntimeException("부과제외 삭제 중 단속 대장의 단속상태코드 수정에 실패하였습니다.");
		}

		// 부과제외 구분이 비부과(서손)일 경우
		if (infoCrdnLevyExcl.string("LEVY_EXCL_SE_CD").equals("1")) {
            // 표지정보 확인여부가 조회미대상이면 ->  미확인 으로
            // 혹시 차적조회가 안되었으면? 놔두자 차적조회되면 그 때 표지정보 BJ_Send가 처리할테니
			if (infoCrdnLevyExcl.string("PARKNG_PSBLTY_RSLT_CD").equals("9")) {			// 주차 가능 결과 코드 - 9 조회 미대상
        		Crdn crdn = new Crdn();            								// 단속(TB_CRDN) 대장

        		crdn.setCrdnId(levyExcl.getCrdnId());							// 단속 ID
        		crdn.setParkngPsbltyRsltCd("0");								// 주차 가능 결과 코드 - 0 미확인

				retSuccess = levyExclMapper.updateParkngPsbltyRsltCd(crdn);
				if (!retSuccess) {
					// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
					throw new RuntimeException("부과제외 삭제 중 단속 대장의 표지정보 수정에 실패하였습니다.");
				}
			}
		}

		retMessage = "[S] 작업이 정상 처리 되었습니다.";

		return retMessage;
	}

}


/**부과제외 대장 정보를 등록한다.
public boolean createLevyExcl(LevyExcl levyExcl) {
	// 변수 선언
	boolean retSuccess = false;												// DB 처리 결과
	String newCrdnSttsCd = "";												// 신규 단속 상태 코드(CRDN_STTS_CD)
	String newCvlcptPrcsCd = "";											// 신규 민원 처리 코드(CVLCPT_PRCS_CD)
	String newCvlcptTrsmCd = "";											// 민원 전송 코드(CVLCPT_TRSM_CD)

	// 단속 ID로 단속, 부과제외 정보 조회
	DataObject infoCrdnLevyExcl = levyExclMapper.selectCrdnInfo(levyExcl.getCrdnId());

	// 부과제외 ID가 있다면 이미 부과제외 자료가 존재하므로 종료..
	if (!infoCrdnLevyExcl.string("LEVY_EXCL_ID").equals("")) {
		// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
		throw new RuntimeException("부과제외 정보가 이미 존재합니다.");
	}
	// 단속 상태 코드(CRDN_STTS_CD) 확인..
	if (levyExcl.getLevyExclSeCd().equals("1") || levyExcl.getLevyExclSeCd().equals("2")) {		// 비부과(서손), 계고
		// 단속 상태 코드가 부과(51) 보다 크다면, 비부과 또는 계고를 등록 할 수 없다. 종료..
		if (infoCrdnLevyExcl.number("CRDN_STTS_CD").intValue() > 50) {
			// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
			throw new RuntimeException("단속 상태가 " + infoCrdnLevyExcl.string("CRDN_STTS_NM") + " 상태 입니다");
		}
	} else if (levyExcl.getLevyExclSeCd().equals("5")) {
		// 단속 상태 코드가 부과(51) 보다 작다면, 전액감액 등록 할 수 없다. 종료.. 전액감액 등록은 부과이후...
		if (infoCrdnLevyExcl.number("CRDN_STTS_CD").intValue() < 51) {
			// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
			throw new RuntimeException("단속 상태가 " + infoCrdnLevyExcl.string("CRDN_STTS_NM") + " 상태 입니다");
		}
	}

	// 단속 상태 코드 설정.
	if (levyExcl.getLevyExclSeCd().equals("1")) {							// 비부과
		newCrdnSttsCd = "81";            // 비부과(서손)
	} else if (levyExcl.getLevyExclSeCd().equals("2")) {					// 계고
		newCrdnSttsCd = "83";            // 계고
	} else if (levyExcl.getLevyExclSeCd().equals("5")) {					// 전액감액
		newCrdnSttsCd = "80";            // 부과취소
	}

	// 부과제외(TB_LEVY_EXCL) 대장을 등록 한다.
	retSuccess = levyExclMapper.insert(levyExcl);
	if (!retSuccess) {
		// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
		throw new RuntimeException("부과제외 대장 등록에 실패하였습니다.");
	}

	// 단속상태이력(TB_CRDN_STTS_HSTRY)
	CrdnSttsHstry crdnSttsHstry = new CrdnSttsHstry();

	crdnSttsHstry.setCrdnId(infoCrdnLevyExcl.string("CRDN_ID"));
	crdnSttsHstry.setBfrSttsCd(infoCrdnLevyExcl.string("CRDN_STTS_CD"));
	crdnSttsHstry.setBfrSttsChgDt(infoCrdnLevyExcl.string("CRDN_STTS_CHG_DT"));
	crdnSttsHstry.setCrdnSttsCd(newCrdnSttsCd);
	crdnSttsHstry.setTaskDtlId(levyExcl.getLevyExclId());

	// 단속 상태 이력(TB_CRDN_STTS_HSTRY) 대장에 등록 한다.
	retSuccess = crdnSttsHstryBean.createHstryUpdateCrdnSttsCd(crdnSttsHstry);
	if (!retSuccess) {
		// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
		throw new RuntimeException("부과제외 등록 중 단속대장의 단속상태코드 변경에 실패하였습니다.");
	}

	// 비부과(서손)일 경우 단속민원(TB_CRDN_CVLCPT) 자료 처리
	if (levyExcl.getLevyExclSeCd().equals("1")) {
		// 단속민원ID가 있다면..
		if (!infoCrdnLevyExcl.string("CVLCPT_LINK_ID").equals("")) {
			// 자동등록 자료만 단속민원(TB_CRDN_CVLCPT) 답변 부분을 처리
			if (infoCrdnLevyExcl.string("CRDN_REG_SE_CD").equals("02")) {
				// 단속민원(TB_CRDN_CVLCPT) 대장
				CrdnCvlcpt crdnCvlcpt = new CrdnCvlcpt();

				crdnCvlcpt.setCvlcptLinkId(infoCrdnLevyExcl.string("CVLCPT_LINK_ID"));	// 민원 연계 ID

				// 답변내용을 초기화, 답변대상이었다가 답변내용보기를 했다가 서손처리하면 답변내용이 이미 세팅되어 있으므로 초기화해야 한다.
	            // 서손사유 수정시도 답변내용보기를 했을 수 있으므로 초기화해야 한다.
	            // 서손취소시도 답변내용이 부과 기본 내용으로 바꾸이야 하므로 초기화해야 한다.
				// 단속민원 민원처리결과내용 수정
				retSuccess = levyExclMapper.updateCvlcptPrcsRsltCn(crdnCvlcpt);
				if (!retSuccess) {
					// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
					throw new RuntimeException("부과제외 등록 중 단속민원대장의 민원처리결과내용 초기화에 실패하였습니다.");
				}

                // 답변완료 후 서손처리에 대해서는 답변 상태를 업데이트 하지 않는다
				// 전송대상, 전송 미대상 자료에 대해서 업데이트한다.
				if (infoCrdnLevyExcl.string("CVLCPT_TRSM_CD").equals("01")
						|| infoCrdnLevyExcl.string("CVLCPT_TRSM_CD").equals("02")
						|| infoCrdnLevyExcl.string("CVLCPT_TRSM_CD").equals("03")) {
					// 민원 답변 문구(TB_CVLCPT_ANS_WORDS) 대장 조회
					DataObject infoCvlcptAnsWords = levyExclMapper.selectCvlcptAnsWordsInfo(levyExcl.getLevyExclRsnCd());

					// 비부과(서손)사유가 민원 답변대상인가? 민원 답변 문구(TB_CVLCPT_ANS_WORDS) 대장에 답변 사유 코드가 존재한다면..
					if (!infoCvlcptAnsWords.string("ANS_WORDS_ID").equals("")) {
						newCvlcptPrcsCd = "04";								// 민원 처리 코드 - 불수용(과태료 부과제외)
						newCvlcptTrsmCd = "01";								// 민원 전송 코드 - 전송 대상
					} else  {
						newCvlcptPrcsCd = "07";								// 민원 처리 코드 - 비부과(서손)사유가 답변 미대상
						newCvlcptTrsmCd = "03";								// 민원 전송 코드 - 비부과(서손)사유가 전송 미대상
					}

					// 현재 날짜 구하기
			        LocalDate now = LocalDate.now();
			        // 포맷 정의
			        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");	// yyyy년 MM월 dd일 HH시 mm분 ss초
			        // 포맷 적용
			        String formatedNow = now.format(formatter);

					// 단속민원(TB_CRDN_CVLCPT) 대장을 수정 한다.
					crdnCvlcpt.setCvlcptPrcsCd(newCvlcptPrcsCd);									// 민원 처리 코드
					crdnCvlcpt.setCvlcptPrcsSumry(infoCvlcptAnsWords.string("PRCS_SUMRY"));			// 민원 처리 요약
					crdnCvlcpt.setCvlcptPrcsRsltCn(infoCvlcptAnsWords.string("PRCS_RSLT_CN"));		// 민원 처리 결과 내용
					crdnCvlcpt.setCvlcptPrcsCmptnDt(formatedNow);									// 민원 처리 완료 일시
					crdnCvlcpt.setCvlcptPrcsPic(UserInfo.current().getId());						// 민원 처리 담당자
					crdnCvlcpt.setCvlcptTrsmCd(newCvlcptTrsmCd);									// 민원 전송 코드

					// 단속민원 민원처리코드 수정
					retSuccess = levyExclMapper.updateCrdnCvlcpt(crdnCvlcpt);
					if (!retSuccess) {
						// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
						throw new RuntimeException("부과제외 등록 중 단속민원대장의 민원답변 수정에 실패하였습니다.");
					}
				}
			}	// if (infoCrdnLevyExcl.string("CRDN_REG_SE_CD").equals("02"))
		}	// 단속민원ID가 있다면..

		// 표지정보 확인여부가 미확인이면 -> 조회미대상 으로
        if (infoCrdnLevyExcl.string("PARKNG_PSBLTY_RSLT_CD").equals("0")) {
        	// 단속(TB_CRDN) 대장
    		Crdn crdn = new Crdn();

    		crdn.setCrdnId(levyExcl.getCrdnId());						// 단속 ID
    		crdn.setParkngPsbltyRsltCd("9");							// 주차 가능 결과 코드

			retSuccess = levyExclMapper.updateParkngPsbltyRsltCd(crdn);
			if (!retSuccess) {
				// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
				throw new RuntimeException("부과제외 등록 중 단속대장의 표지정보확인여부 수정에 실패하였습니다.");
			}
		}

		// 단속 ID로 발송 상세(TB_SNDNG_DTL) 대장 정보 조회
		DataObject infoSndngDtl = levyExclMapper.selectSndngDtlInfo(levyExcl.getCrdnId(), "1");

		if (infoSndngDtl != null) {
        	// 발송 상세(TB_SNDNG_DTL) 대장
			SndngDtl sndngDtl = new SndngDtl();

			sndngDtl.setCrdnId(levyExcl.getCrdnId());					// 단속 ID

			// 발송상세 수납코드를 수정
			retSuccess = levyExclMapper.updateRcvmtCd(sndngDtl);
			if (!retSuccess) {
				// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
				throw new RuntimeException("부과제외 등록 중 발송상세대장의 수납코드 수정에 실패하였습니다.");
			}
		}
	// 계고
	} else if (levyExcl.getLevyExclSeCd().equals("2")) {

	// 전액감액
	} else if (levyExcl.getLevyExclSeCd().equals("5")) {
		// 부과(TB_LEVY)에 감액금액 입력이 필요..
	}

	return true;
}
*/

/**부과제외 대장 정보를 수정한다.
	public boolean updateLevyExcl(LevyExcl levyExcl) {
		// 변수 선언
		boolean retSuccess = false;												// DB 처리 결과
		String newCvlcptPrcsCd = "";											// 신규 민원 처리 코드(CVLCPT_PRCS_CD)
		String newCvlcptTrsmCd = "";											// 민원 전송 코드(CVLCPT_TRSM_CD)

		// 부과제외(TB_LEVY_EXCL) 자료 조회
		ExclQuery req = new ExclQuery();

		req.setLevyExclId(levyExcl.getLevyExclId());
		req.setDelYn("N");

		DataObject infoLevyExcl = levyExclMapper.selectLevyExclInfo(req);

		// 부과제외(TB_LEVY_EXCL) 대장을 수정 한다.
		retSuccess = levyExclMapper.update(levyExcl);
		if (!retSuccess) {
			// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
			throw new RuntimeException("부과제외 대장 수정에 실패하였습니다.");
		}

		// 비부과(서손)일 경우 단속민원(TB_CRDN_CVLCPT) 자료 처리
		if (levyExcl.getLevyExclSeCd().equals("1") ) {
	        // 단속민원(TB_CRDN_CVLCPT)에 자료가 있는지 확인
			if (!infoLevyExcl.string("CVLCPT_LINK_ID").equals("")) {
				// 단속 민원 대장
				CrdnCvlcpt crdnCvlcpt = new CrdnCvlcpt();

				crdnCvlcpt.setCvlcptLinkId(infoLevyExcl.string("CVLCPT_LINK_ID"));	// 민원 연계 ID

		        // 답변대상이었다가 답변내용보기를 했다가 서손처리하면 답변내용이 이미 세팅되어 있으므로 초기화해야 한다.
		        // 서손사유 수정시도 답변내용보기를 했을 수 있으므로 초기화해야 한다.
		        // 서손취소시도 답변내용이 부과 기본 내용으로 바꾸이야 하므로 초기화해야 한다.
				retSuccess = levyExclMapper.updateCvlcptPrcsRsltCn(crdnCvlcpt);			// 단속민원 민원처리결과내용 초기화
				if (!retSuccess) {
					// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
					throw new RuntimeException("부과제외 수정 중 단속민원대장의 민원처리결과내용 초기화에 실패하였습니다.");
				}

				// 자동등록 자료만..
				if (infoLevyExcl.string("CRDN_REG_SE_CD").equals("02")) {
					// 민원전송코드가 전송대상(01) 또는 전송미대상(03) 자료만 민원답변 부분을 처리
					if (infoLevyExcl.string("CVLCPT_TRSM_CD").equals("01") || infoLevyExcl.string("CVLCPT_TRSM_CD").equals("03")) {
						// 민원 답변 문구(TB_CVLCPT_ANS_WORDS) 대장 조회
						DataObject infoCvlcptAnsWords = levyExclMapper.selectCvlcptAnsWordsInfo(levyExcl.getLevyExclRsnCd());

						// 비부과(서손)사유가 민원 답변대상인가? 민원 답변 문구(TB_CVLCPT_ANS_WORDS) 대장에 답변 사유 코드가 존재한다면..
						if (infoCvlcptAnsWords != null) {
							newCvlcptPrcsCd = "04";								// 민원 처리 코드 - 불수용(과태료 부과제외)
							newCvlcptTrsmCd = "01";								// 민원 전송 코드 - 전송 대상

							// 답변 문구가 필요해 보임..
						} else  {
							newCvlcptPrcsCd = "07";								// 민원 처리 코드 - 비부과(서손)사유가 답변 미대상
							newCvlcptTrsmCd = "03";								// 민원 전송 코드 - 비부과(서손)사유가 전송 미대상
						}

						// 현재 날짜 구하기
				        LocalDate now = LocalDate.now();
				        // 포맷 정의
				        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");	// yyyy년 MM월 dd일 HH시 mm분 ss초
				        // 포맷 적용
				        String formatedNow = now.format(formatter);

						// 단속민원(TB_CRDN_CVLCPT) 대장을 수정 한다.
				        crdnCvlcpt.setCvlcptPrcsCd(newCvlcptPrcsCd);									// 민원 처리 코드
				        crdnCvlcpt.setCvlcptPrcsSumry(infoCvlcptAnsWords.string("PRCS_SUMRY"));			// 민원 처리 요약
				        crdnCvlcpt.setCvlcptPrcsRsltCn(infoCvlcptAnsWords.string("PRCS_RSLT_CN"));		// 민원 처리 결과 내용
				        crdnCvlcpt.setCvlcptPrcsCmptnDt(formatedNow);									// 민원 처리 완료 일시
				        crdnCvlcpt.setCvlcptPrcsPic(UserInfo.current().getId());						// 민원 처리 담당자
				        crdnCvlcpt.setCvlcptTrsmCd(newCvlcptTrsmCd);									// 민원 전송 코드

						retSuccess = levyExclMapper.updateCrdnCvlcpt(crdnCvlcpt);		// 단속민원 민원처리코드 수정
						if (!retSuccess) {
							// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
							throw new RuntimeException("부과제외 등록 중 단속민원대장의 민원처리코드 수정에 실패하였습니다.");
						}
					}
				}	// 자동등록 자료만..
			}	// 단속민원(TB_CRDN_CVLCPT)에 자료가 있는지 확인
		}	// 비부과(서손)일 경우..

		return true;
	}
*/

/**부과제외 대장 정보를 삭제한다.
	public boolean removeLevyExcl(LevyExcl levyExcl) {
		// 변수 선언
		boolean retSuccess = false;												// DB 처리 결과
		String newHstrySttsCd = "";												// 신규 상태 코드

		// 부과제외(TB_LEVY_EXCL) 자료 조회
		ExclQuery req = new ExclQuery();

		req.setLevyExclId(levyExcl.getLevyExclId());
		req.setDelYn("N");

		DataObject infoLevyExcl = levyExclMapper.selectLevyExclInfo(req);

		// 단속 상태 코드(CRDN_STTS_CD) 확인..
		if (infoLevyExcl.string("LEVY_EXCL_SE_CD").equals("1") && !infoLevyExcl.string("CRDN_STTS_CD").equals("81")) {			// 비부과(서손)
			// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
			throw new RuntimeException("현재 단속 상태가 " + infoLevyExcl.string("CRDN_STTS_NM") + " 이(가) 아닙니다.");
		} else if (infoLevyExcl.string("LEVY_EXCL_SE_CD").equals("2") && !infoLevyExcl.string("CRDN_STTS_CD").equals("83")) {	// 계고
			throw new RuntimeException("현재 단속 상태가 " + infoLevyExcl.string("CRDN_STTS_NM") + " 이(가) 아닙니다.");
		} else if (infoLevyExcl.string("LEVY_EXCL_SE_CD").equals("5") && !infoLevyExcl.string("CRDN_STTS_CD").equals("80")) {	// 부과취소
			throw new RuntimeException("현재 단속 상태가 " + infoLevyExcl.string("CRDN_STTS_NM") + " 이(가) 아닙니다.");
		}

		// 부과제외(TB_LEVY_EXCL) 대장을 삭제 한다.
		retSuccess = levyExclMapper.delete(levyExcl);
		if (!retSuccess) {
			// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
			throw new RuntimeException("부과제외 대장 삭제에 실패하였습니다.");
		}

		if (infoLevyExcl.string("CRDN_STTS_CD").equals("81")) {					// 비부과(서손)
			newHstrySttsCd = "91";
		} else if (infoLevyExcl.string("CRDN_STTS_CD").equals("83")) {			// 계고
			newHstrySttsCd = "93";
		}

		// 단속 상태 이력(TB_CRDN_STTS_HSTRY) 대장을 삭제 한다.
		retSuccess = crdnSttsHstryBean.removeHstryUpdateCrdnSttsCd(infoLevyExcl.string("CRDN_ID"), newHstrySttsCd);
		if (!retSuccess) {
			// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
			throw new RuntimeException("부과제외 삭제 중 단속대장의 단속상태코드 수정에 실패하였습니다.");
		}

		// 부과제외 구분이 비부과(서손)일 경우 단속민원(TB_CRDN_CVLCPT) 자료 처리
		if (infoLevyExcl.string("LEVY_EXCL_SE_CD").equals("1")) {
	        // 단속민원(TB_CRDN_CVLCPT)에 자료가 있는지 확인
			if (!infoLevyExcl.string("CVLCPT_LINK_ID").equals("")) {
				// 자동등록 자료만 민원답변 부분을 처리
				if (infoLevyExcl.string("CRDN_REG_SE_CD").equals("02")) {
					// 비부과(서손) 취소하는데, 단속민원 전송상태가 전송대상(01) 또는 전송미대상(03), 전송요청(04) 자료이면 초기상태(전송대상)로 되돌린다
					if (infoLevyExcl.string("CVLCPT_TRSM_CD").equals("01")
							|| infoLevyExcl.string("CVLCPT_TRSM_CD").equals("03")
							|| infoLevyExcl.string("CVLCPT_TRSM_CD").equals("04")) {
						CrdnCvlcpt crdnCvlcpt = new CrdnCvlcpt();

						crdnCvlcpt.setCvlcptLinkId(infoLevyExcl.string("CVLCPT_LINK_ID"));
						crdnCvlcpt.setCvlcptPrcsCd("00");						// 민원 처리 코드 - 00 접수
						crdnCvlcpt.setCvlcptPrcsSumry("");						// 민원 처리 요약
						crdnCvlcpt.setCvlcptPrcsRsltCn("");						// 민원 처리 결과 내용
						crdnCvlcpt.setCvlcptPrcsCmptnDt("");					// 민원 처리 완료 일시
						crdnCvlcpt.setCvlcptPrcsPic("");						// 민원 처리 담당자
						crdnCvlcpt.setCvlcptTrsmCd("01");						// 민원 전송 코드 - 01 전송대상

						// 민원답변 정보 초기화
						retSuccess = levyExclMapper.updateCrdnCvlcpt(crdnCvlcpt);
						if (!retSuccess) {
							// 예외를 발생시켜서 오류메세지를 보내고 DB Rollback
							throw new RuntimeException("부과제외 삭제 중 단속민원대장의 민원답변 초기화에 실패하였습니다.");
						}
					}
				}	// 자동등록 자료만 민원답변 부분을 처리
			}	// 단속민원(TB_CRDN_CVLCPT)에 자료가 있는지 확인

            // 표지정보 확인여부가 조회미대상이면 ->  미확인 으로
            // 혹시 차적조회가 안되었으면? 놔두자 차적조회되면 그 때 표지정보 BJ_Send가 처리할테니
			if (infoLevyExcl.string("PARKNG_PSBLTY_RSLT_CD").equals("9")) {		// 주차 가능 결과 코드 - 9 조회 미대상
        		Crdn crdn = new Crdn();            								// 단속(TB_CRDN) 대장

        		crdn.setCrdnId(levyExcl.getCrdnId());							// 단속 ID
        		crdn.setParkngPsbltyRsltCd("0");								// 주차 가능 결과 코드 - 0 미확인

				retSuccess = levyExclMapper.updateParkngPsbltyRsltCd(crdn);
			}
		}	// 부과제외 구분이 비부과(서손)일 경우

		return true;
	}
*/

