package kcg.imis.report.service;

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

import kcg.imis.cmmn.vo.CodeVO;
import kcg.imis.member.vo.MemberVO;
import kcg.imis.report.vo.ReportJudgeVO;
import kcg.imis.report.vo.ReportSearchVO;
import kcg.imis.report.vo.ReportVO;

/**
  * @FileName : ReportJudgeService.java
  * @Project : 국제해양프로젝트
  * @Date : 2018. 3. 29. 
  * @작성자 : Moon
  * @변경이력 : 
  * @프로그램 설명 :
 */
public interface ReportJudgeService {

	/**
	 * 견문 평가 정보를 반환한다.
	 * 
	 * @param juseq 견문 평가 시퀀스
	 * @return 견문 평가 객체
	 * @throws Exception 기본예외처리
	 */
	ReportJudgeVO selectOne(int juseq) throws Exception;
	
	/**
	 * 평가코드명을 반환한다.
	 * 
	 * @param judgeCode 평가코드
	 * @return 평가명
	 * @throws Exception 기본예외처리 
	 */
	String getJudgeStr(int judgeCode) throws Exception;

	/**
	 * 견문 평가를 입력한다.
	 * @param reportJudgeVO 견문 평가 객체
	 * @return 성공 : 1
	 * @throws Exception 기본 예외 처리
	 */
	int insert(ReportJudgeVO reportJudgeVO) throws Exception;

	/**
	 * 견문 평가를 수정한다.
	 * @param reportJudgeVO 견문 평가 객체
	 * @return 성공 : 1
	 * @throws Exception 기본 예외 처리
	 */
	int update(ReportJudgeVO reportJudgeVO) throws Exception;
	

	/**
	 * 견문 결재 정보를 반환한다.
	 * @return 견문 결재 정보
	 * @throws Exception 기본예외처리
	 */
	MemberVO selectApprove() throws Exception;
	
	/**
	 * 견문을 결재한다.
	 * 
	 * @param reportVO 견문 객체
	 * @return 성공:1
	 * @throws Exception 기본예외처리
	 */
	HashMap<String, Object> approve(ReportVO reportVO) throws Exception;

	/**
	 * 견문 처리 목록 목록을 반환한다.
	 * 
	 * @param reportSearchVO 견문 검색 객체
	 * @return 내 실적 조회 목록
	 */
	List<ReportVO> selectWaitList(ReportSearchVO reportSearchVO);
	/**
	 * 견문 처리 목록 전체 목록을 반환한다.
	 * 
	 * @param reportSearchVO 견문 검색 객체
	 * @return 내 실적 조회 전체 목록
	 */
	List<ReportVO> selectWaitListAll(ReportSearchVO reportSearchVO);
	/**
	 * 견문 처리 목록 갯수를 반환한다.
	 * 
	 * @param reportSearchVO 견문 검색 객체
	 * @return 내 실적 조회 목록 갯수
	 */
	int selectWaitListCnt(ReportSearchVO reportSearchVO);
	
	/**
	 * 견문 처리 목록을 반환한다.
	 * 
	 * @param reportSearchVO 견문 검색 객체
	 * @return 견문 처리 목록
	 * @throws Exception 기본예외처리
	 */
	List<ReportVO> selectApproveList(ReportSearchVO reportSearchVO) throws Exception;
	
	/**
	 * 견문 처리 목록 갯수를 반환한다.
	 * 
	 * @param reportSearchVO 견문 검색 객체
	 * @return 견문 처리 목록 갯수
	 * @throws Exception 기본예외처리
	 */
	int selectApproveListCnt(final ReportSearchVO reportSearchVO) throws Exception;

	/**
	 * 견문 처리 전체 목록을 반환한다.
	 * 
	 * @param reportSearchVO 견문 검색 객체
	 * @return 견문 처리 목록
	 * @throws Exception 기본예외처리
	 */
	List<ReportVO> selectApproveListAll(ReportSearchVO reportSearchVO) throws Exception;
	
	/**
	 * 내 실적 조회 목록을 반환한다.
	 * 
	 * @param reportSearchVO 견문 검색 객체
	 * @return 견문 처리 목록
	 * @throws Exception 기본예외처리
	 */
	List<ReportVO> selectMyList(ReportSearchVO reportSearchVO) throws Exception;
	
	/**
	 * 내 실적 조회 목록 갯수를 반환한다.
	 * 
	 * @param reportSearchVO 견문 검색 객체
	 * @return 견문 처리 목록 갯수
	 * @throws Exception 기본예외처리
	 */
	int selectMyListCnt(final ReportSearchVO reportSearchVO) throws Exception;

	/**
	 * 내 실적 조회 목록을 반환한다.
	 * 
	 * @param reportSearchVO 견문 검색 객체
	 * @return 견문 처리 목록
	 * @throws Exception 기본예외처리
	 */
	List<ReportVO> selectMyListAll(ReportSearchVO reportSearchVO) throws Exception;

	/**
	 * 분야별 통계를 조회한다.
	 * 
	 * @param reportSearchVO 견문 검색 객체
	 * @return 분야별통계
	 * @throws Exception 기본예외처리
	 */
	List<HashMap<String, String>> statsCategory(ReportSearchVO reportSearchVO) throws Exception;

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