package kcg.faics.member.service.impl;

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

import kcg.faics.member.UserType;
import kcg.faics.member.vo.ExMemberVO;
import kcg.faics.member.vo.MemberSearchVO;
import kcg.faics.member.vo.MemberVO;

import org.springframework.stereotype.Repository;

import egovframework.rte.psl.dataaccess.EgovAbstractMapper;

/** 
 * 사용자 Mapper 클래스.
 * 
 * MemberMapper.java
 * @author 임새미 
 * @since 2016. 10. 28.
 *
 *  	 수정일                     수정자                                       수정내용
 *  -------------	--------	---------------------------
 *  2016. 10. 28. 	    임새미				       최초생성
 * 
 */
@Repository("memberMapper")
public class MemberMapper extends EgovAbstractMapper {

	/**
	 * 선택한 사용자의 정보를 반환한다.
	 * 
	 * @param dataVO userid 
	 * @return 선택한 사용자 정보 반환
	 * @throws Exception 기본 예외 처리
	 */
	public MemberVO getMember(final MemberVO dataVO) {
		return selectOne("Member.getMember", dataVO);
	}

	/**
	 * 외사경찰 정보를 반환한다.
	 * 
	 * @param dataVO 사용자 VO
	 * @return 외사경찰 정보
	 */
	public MemberVO selectFaMember(final MemberVO dataVO) {
		dataVO.setUsertype(UserType.FA);
		return selectOne("Member.getMember", dataVO);
	}
	
	/**
	 * 일반경찰 목록(no paging)을 반환한다.
	 * 
	 * @param searchVO
	 *            검색정보 객체
	 * @return 게시물 리스트
	 * @throws Exception
	 *             기본 예외 처리
	 */
	public List<MemberVO> getCmmnListAll(final MemberSearchVO searchVO) {
		return selectList("Member.getCmmnListAll", searchVO);
	}
	
	/**
	 * 일반 사용자리스트를 반환한다.
	 * 
	 * @param searchVO 검색, 페이지 정보 객체
	 * @return 게시물 리스트
	 * @throws Exception 기본 예외 처리
	 */
	public List<MemberVO> getCmmnMemberList(final MemberSearchVO searchVO) {
		return selectList("Member.getCmmnMemberList", searchVO);
	}

	/**
	 * 외사경찰 목록(no paging)을 반환한다.
	 * 
	 * @param searchVO
	 *            검색정보 객체
	 * @return 게시물 리스트
	 * @throws Exception
	 *             기본 예외 처리
	 */
	public List<MemberVO> getFaListAll(final MemberSearchVO searchVO) throws Exception {
		return selectList("Member.getFaListAll", searchVO);
	}
	
	/**
	 * 외사경찰 사용자리스트를 반환한다.
	 * 
	 * @param searchVO 검색, 페이지 정보 객체
	 * @return 게시물 리스트
	 * @throws Exception 기본 예외 처리
	 */
	public List<MemberVO> getFaMemberList(final MemberSearchVO searchVO) {
		return selectList("Member.getFaMemberList", searchVO);
	}
	
	/**
	 * 검색 키워드에 따른 총 사용자 목록을 조회한다.
	 * 
	 * @param searchVO 검색, 페이지 정보 객체
	 * @return 사용자 수
	 * @exception Exception 기본 예외 처리
	 */
	public int selectListCnt(final MemberSearchVO searchVO) {
		return (Integer) selectOne("Member.selectListCnt", searchVO);
	}

	/**
	 * 전체 사용자 수 를 가져온다.
	 * 
	 * @param searchVO 검색, 페이지 정보 객체
	 * @return 사용자 수
	 * @throws Exception 기본 예외 처리
	 */
	public int selectTotalCnt(final MemberSearchVO searchVO) {
		return (Integer) selectOne("Member.selectTotalCnt", searchVO);
	}

	/**
	 * 외사 경찰을 추가한다.
	 * 
	 * @param memberVO 사용자 정보 객체
	 * @return 성공 - 1, 실패 - 0
	 * @exception Exception 기본 예외 처리
	 */
	public int insertFaMember(final MemberVO memberVO) {
		return insert("Member.insertFaMember", memberVO);
	}
	
	/**
	 * 외사경찰 정보를 업데이트 한다.
	 * 
	 * @param dataVO 사용자정보 VO
	 * @return 성공 - 1, 실패 - 0
	 */
	public int updateFaMember(final MemberVO dataVO) {
		return (Integer) update("Member.updateFaMember", dataVO);
	}

	/**
	 * 일반경찰 정보를 입력한다.
	 * 
	 * @param dataVO 사용자정보 VO
	 * @return 성공 - 1, 실패 - 0
	 */
	public int insertCmmnMember(final MemberVO dataVO) {
		return (Integer) insert("Member.insertCmmnMember", dataVO);
	}	
	
	/**
	 * 일반경찰 정보를 업데이트 한다.
	 * 
	 * @param dataVO 사용자정보 VO
	 * @return 성공 - 1, 실패 - 0
	 */
	public int updateCmmnMemberInfo(final MemberVO dataVO) {
		return (Integer) update("Member.updateCmmnMemberInfo", dataVO);
	}

	/**
	 * 외사경찰 정보를 삭제한다.
	 * 
	 * @param dataVO
	 *            사용자정보 VO
	 * @return 성공 - 1, 실패 - 0
	 */
	public int deleteFaMemeber(final MemberVO dataVO) {
		return delete("Member.deleteFaMember", dataVO);
	}
	
	/**
	 * 사용자 비밀번호를 업데이트한다.
	 * 
	 * @param dataVO 사용자 정보 VO
	 * @return 성공 - 1, 실패 - 0
	 * @throws Exception 기본 예외 처리
	 */
	public int updatePassword(final MemberVO dataVO) {
		return (Integer) update("Member.updatePassword", dataVO);
	}
	
	/**
	 * 외사경찰의 정원 및 현황을 가져온다.
	 * 
	 * @return 현황리스트
	 * @throws Exception 기본 예외 처리
	 */
	public List<HashMap<String, Object>> getCapacityManagement() {
		return selectList("Member.getCapacityManagement");
	}
	
	/**
	 * 외사경력 현황을 가져온다.
	 * 
	 * @return 외사경력 현황리스트
	 * @throws Exception 기본 예외 처리
	 */
	public List<HashMap<String, Object>> getCareerStatus() {
		return selectList("Member.getCareerStatus");
	}
	
	/**
	 * 한 건의 과거외사경찰 정보를 반환한다.
	 * 
	 * @param searchVO
	 *            검색조건 VO
	 * @return 과거외사경찰 정보
	 */
	public ExMemberVO selectExMemeber(final ExMemberVO searchVO) {
		return selectOne("Member.selectExmemeber", searchVO);
	}
	
	/**
	 * 과거외사경찰 목록을 가져온다.
	 * 
	 * @param memberSearchVO 검색, 페이지 정보 객체
	 * @return 과거외사경찰 리스트
	 * @throws Exception 기본 예외 처리
	 */
	public List<HashMap<String, Object>> exmemberList(final MemberSearchVO memberSearchVO) {
		return selectList("Member.exmemberList", memberSearchVO);
	}
	
	/**
	 * 과거외사경찰 목록을 반환한다.
	 * 
	 * @param memberSearchVO
	 *            검색, 페이지 정보 객체
	 * @return 과거외사경찰 목록
	 * @throws Exception
	 *             기본 예외 처리
	 */
	public List<ExMemberVO> exmemberVoList(final MemberSearchVO memberSearchVO) {
		List<HashMap<String, Object>> map = selectList("Member.exmemberList", memberSearchVO);
		return selectList("Member.exmemberList", memberSearchVO);
	}
	
	/**
	 * 검색 키워드에 따른 총 과거외사경찰 목록을 조회한다.
	 * 
	 * @param searchVO 검색, 페이지 정보 객체
	 * @return 사용자 수
	 * @exception Exception 기본 예외 처리
	 */
	public int selectExmemberListCnt(final MemberSearchVO searchVO) {
		return (Integer) selectOne("Member.selectExmemberListCnt", searchVO);
	}

	/**
	 * 전체 과거외사경찰 사용자 수 를 가져온다.
	 * 
	 * @param searchVO 검색, 페이지 정보 객체
	 * @return 사용자 수
	 * @throws Exception 기본 예외 처리
	 */
	public int selectExmemberTotalCnt(final MemberSearchVO searchVO) {
		return (Integer) selectOne("Member.selectExmemberTotalCnt", searchVO);
	}

	/**
	 * 경력 정보를 추가한다.
	 * 
	 * @param dataVO 사용자정보 VO
	 * @return result : 성공 - 1, 실패 - 0
	 */
	public int updateCareerStat(final MemberVO dataVO) {
		return (Integer) update("Member.updateCareerStat", dataVO);
	}
	
	/**
	 * 경력 정보를 추가한다.
	 * 
	 * @param dataVO 사용자정보 VO
	 * @return result : 성공 - 1, 실패 - 0
	 */
	public int insertCareerStat(final MemberVO dataVO) {
		return (Integer) update("Member.insertCareerStat", dataVO);
	}

	/**
	 * 사용자를 검색한 결과 목록을 반환한다.
	 * 
	 * @param dataVO 멤버 객체 
	 * @return 선택한 사용자 정보 반환
	 * @throws Exception 기본 예외 처리
	 */
	public List<MemberVO> getSearchMember(final MemberSearchVO dataVO) {
		return selectList("Member.getMemberSearchResult", dataVO);
	}

	/**
	 * 일반경찰 정보를 수정한다.
	 * 
	 * @param dataVO 사용자 정보 VO.
	 * @return 성공 - 1, 실패 - 0 
	 */
	public Object updateCmmnMember(final MemberVO dataVO) {
		return update("Member.updateCmmnMember", dataVO);
	}

	/**
	 * 일반경찰 정보를 삭제한다.
	 * 
	 * @param dataVO 사용자 VO
	 * @return 성공 - 1, 실패 - 0 
	 */
	public int deleteCmmnMember(final MemberVO dataVO) {
		return delete("Member.deleteCmmnMember", dataVO);
	}	
	
	/**
	 * 과거외사경찰 정보를 수정한다.
	 * 
	 * @param dataVO
	 *            과거외사경찰 VO
	 * @return 성공 - 1, 실패 - 0
	 */
	public int updateExMember(final ExMemberVO dataVO) {
		return update("Member.updateExMember", dataVO);
	}
	
	/**
	 * 과거외사경찰 정보를 삭제한다.
	 * 
	 * @param dataVO
	 *            과거외사경찰 VO
	 * @return 성공 - 1, 실패 - 0
	 */
	public int deleteExMemeber(final ExMemberVO dataVO) {
		return delete("Member.deleteExMember", dataVO);
	}

	/**
	 * 과거외사경찰 정보를 입력한다.
	 * 
	 * @param dataVO
	 *            과거외사경찰 VO
	 * @return 성공 - 1, 실패 - 0
	 */
	public int insertExMemeber(final ExMemberVO dataVO) {
		return insert("Member.insertExMember", dataVO);
	}
	
	/**
	 * 과거외사경찰 정보를 입력한다.
	 * 
	 * @param dataVO
	 *            외사경찰 VO
	 * @return 성공 - 1, 실패 - 0
	 */
	public int insertExMemeber(final MemberVO dataVO) {
		return insert("Member.insertExMemberByMemberVO", dataVO);
	}
}
