package kcg.faics.report.service.impl;

import java.util.HashMap;
import java.util.List;

import kcg.faics.cmmn.vo.CodeVO;
import kcg.faics.member.vo.MemberVO;
import kcg.faics.report.vo.ReportApproveVO;
import kcg.faics.report.vo.ReportJudgeVO;
import kcg.faics.report.vo.ReportSearchVO;
import kcg.faics.report.vo.ReportVO;
import kcg.faics.sec.LoginUserVO;

import org.springframework.stereotype.Repository;

import egovframework.rte.psl.dataaccess.EgovAbstractMapper;

/**
 * 견문 평가를 관리하는 맵퍼
 * @author 하영지
 * @since 2016. 10. 6.
 */
@Repository("reportJudgeMapper")
public class ReportJudgeMapper extends EgovAbstractMapper {

	/**
	 * 평가 종류를 반환한다.
	 * @return List<CodeVO>
	 * @throws Exception 기본예외처리
	 */
	public List<CodeVO> selectJudgeCode() throws Exception {
		return selectList("ReportJudge.selectJudgeCode");
	}

	/**
	 * 평가 정보를 반환한다.
	 * 
	 * @param juseq 견문 평가 객체
	 * @return 평가
	 * @throws Exception 기본예외처리
	 */
	public ReportJudgeVO selectOne(final int juseq) throws Exception {
		return selectOne("ReportJudge.selectOne", juseq);
	}
	
	/**
	 * 평가명을 반환한다.
	 * 
	 * @param judgeCode 평가코드
	 * @return 평가명
	 * @throws Exception 기본예외처리
	 */
	public String getJudgeName(final int judgeCode) throws Exception {
		return selectOne("ReportJudge.getJudgeName", judgeCode);
	}

	/**
	 * 견문 결재 정보를 반환한다.
	 * 
	 * @param loginUserVO 접속한 사용자 객체
	 * @return 결문 결재 정보
	 */
	public MemberVO selectApprove(final LoginUserVO loginUserVO) {
		return selectOne("ReportJudge.selectApprove", loginUserVO);
	}
	
	/**
	 * 견문 평가 입력
	 * @param reportJudgeVO 견문 평가 객체
	 * @return 성공:1
	 * @throws Exception 기본예외처리
	 */
	public int insert(final ReportJudgeVO reportJudgeVO) throws Exception {
		int result = 0;
		try {
			result = insert("ReportJudge.insert", reportJudgeVO);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return reportJudgeVO.getJuInseq();
	}
	
	/**
	 * 견문 평가 수정
	 * @param reportJudgeVO 견문 평가 객체
	 * @return 성공:1
	 * @throws Exception 기본예외처리
	 */
	public int update(final ReportJudgeVO reportJudgeVO) throws Exception {
		return update("ReportJudge.update", reportJudgeVO);
	}
	
	/**
	 * 견문의 결재 대기 목록을 반환한다.
	 * 
	 * @param reportSearchVO 견문 검색 객체
	 * @return 견문 결재 대기 목록
	 */
	public List<ReportVO> selectWaitList(final ReportSearchVO reportSearchVO) {
		return selectList("Report.selectWaitList", reportSearchVO);
	}

	/**
	 * 견문의 결재 대기 전체 목록을 반환한다.
	 * 
	 * @param reportSearchVO 견문 검색 객체
	 * @return 견문 결재 대기 전체 목록
	 */
	public List<ReportVO> selectWaitListAll(final ReportSearchVO reportSearchVO) {
		return selectList("Report.selectWaitListAll", reportSearchVO);
	}
	
	/**
	 * 견문의 결재 대기 목록 전체 갯수를 반환한다.
	 * 
	 * @param reportSearchVO 견문 검색조건 vo
	 * @return 견문 임시저장목록 결과 갯수
	 */
	public int selectWaitListCnt(final ReportSearchVO reportSearchVO) {
		return selectOne("Report.selectWaitListCnt", reportSearchVO);
	}
	
	/**
	 * 견문 처리 목록을 반환한다.
	 * 
	 * @param reportSearchVO 견문 검색 객체
	 * @return 견문 처리 목록
	 * @throws Exception 기본 예외 처리
	 */
	public List<ReportVO> selectApproveList(final ReportSearchVO reportSearchVO) throws Exception {
		return selectList("Report.selectAprList", reportSearchVO);
	}
	
	/**
	 * 견문 처리 목록 갯수를 반환한다.
	 * 
	 * @param reportSearchVO 견문 검색 객체
	 * @return 견문 처리 목록 갯수
	 * @throws Exception 기본 예외 처리
	 */
	public int selectApproveListCnt(final ReportSearchVO reportSearchVO) throws Exception {
		return selectOne("Report.selectAprListCnt", reportSearchVO);
	}
	
	/**
	 * 견문 처리 전체 목록을 반환한다.
	 * 
	 * @param reportSearchVO 견문 검색 객체
	 * @return 견문 처리 전체 목록
	 * @throws Exception 기본 예외 처리
	 */
	public List<ReportVO> selectApproveListAll(final ReportSearchVO reportSearchVO) throws Exception {
		return selectList("Report.selectAprListAll", reportSearchVO);
	} 

	/**
	 * 내 실적 조회 목록을 반환한다.
	 * 
	 * @param reportSearchVO 견문 검색 객체
	 * @return 내 실적 조회 목록
	 * @throws Exception 기본 예외 처리
	 */
	public List<ReportVO> selectMyList(final ReportSearchVO reportSearchVO) throws Exception {
		return selectList("Report.selectMyList", reportSearchVO);
	}
	
	/**
	 * 내 실적 조회 목록 갯수를 반환한다.
	 * 
	 * @param reportSearchVO 견문 검색 객체
	 * @return 내 실적 조회 목록 갯수
	 * @throws Exception 기본 예외 처리
	 */
	public int selectMyListCnt(final ReportSearchVO reportSearchVO) throws Exception {
		return selectOne("Report.selectMyListCnt", reportSearchVO);
	}
	
	/**
	 * 내 실적 조회 전체 목록을 반환한다.
	 * 
	 * @param reportSearchVO 견문 검색 객체
	 * @return 내 실적 조회 전체 목록
	 * @throws Exception 기본 예외 처리
	 */
	public List<ReportVO> selectMyListAll(final ReportSearchVO reportSearchVO) throws Exception {
		return selectList("Report.selectMyListAll", reportSearchVO);
	}
	
	/**
	 * 분야별 통계를 조회한다.
	 * 
	 * @param reportSearchVO 견문 검색 객체
	 * @return 분야별통계
	 * @throws Exception 기본 예외 처리
	 */
	public List<HashMap<String, String>> statsCategory(final ReportSearchVO reportSearchVO) throws Exception {
		return selectList("ReportJudge.statsCategory", reportSearchVO);
	}

	/**
	 * 평가별 통계를 조회한다.
	 * 
	 * @param reportSearchVO 견문 검색 객체
	 * @return 평가별통계
	 * @throws Exception 기본 예외 처리
	 */
	public List<HashMap<String, String>> statsJudge(final ReportSearchVO reportSearchVO) throws Exception {
		return selectList("ReportJudge.statsJudge", reportSearchVO);
	}
		
}
