<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="i2c.biz.admin.srvc.userMng.dao.UserInfoDAO">
    <resultMap id="snsUserVO"     type="i2c.biz.admin.srvc.userMng.vo.SnsUserVO"     />    
    
    <parameterMap id="snsUserVO"      type="i2c.biz.admin.srvc.userMng.vo.SnsUserVO"     />
    
    <sql id="searchUser">
   	 	<if test="searchSdate != null and searchSdate !='' and searchEdate !=null and searchEdate !='' ">
      		AND SUBSTR(SU.CRT_DTTM, 1,4) || '-' || SUBSTR(SU.CRT_DTTM, 5,2) || '-' || SUBSTR(SU.CRT_DTTM, 7,2) BETWEEN #{searchSdate} AND #{searchEdate}
      	</if>
	      
    	<if test="searchText != null and searchText !=''">
          <if test="searchSelect == 'usrNm'">
          	AND SU.USR_NM LIKE '%'||#{searchText} ||'%'
          </if>
          <if test="searchSelect == 'loginId'">
          	AND SU.LOGIN_ID LIKE '%'||#{searchText} ||'%'
          </if>
          <if test="searchSelect == 'insttBsnmId'">
	          AND
	          	SU.DEPT_ID IN (
	            SELECT
	            	DEPT_CD
	            FROM 
	            	EXT_DEPARTMENT E
	            WHERE
	            	E.DEPT_NM LIKE '%'||#{searchText}||'%' 
	            )
	      </if>
          <if test="searchSelect == 'phnNum'">
          	AND SU.PHN_NUM LIKE  '%' ||  #{searchText} || '%' 
          </if>
          <if test="searchSelect == 'email'">
          	AND SU.EMAIL LIKE  '%' ||  #{searchText} || '%'
          </if>
      </if>
      
      <if test="searchAuthType != null and searchAuthType !=''">
      	AND SU.AUTH_CODE IN 
      	<foreach collection="searchAuthType" item="item" index="index" separator="," open="(" close=")">
            #{item}
        </foreach>
      </if>
      
      <if test="searchUseStopYn != null and searchUseStopYn !=''">
      	<if test="searchUseStopYn == 'AA'">
      		AND SU.USE_STOP_YN = 'N'
      	</if>
      	<if test="searchUseStopYn == 'BB'">
      		AND SU.USE_STOP_YN = 'Y'
      	</if>
      </if>
     </sql>
    
    <select id="selectUserCount" parameterMap="snsUserVO" resultType="int">
        /* [i2c.biz.admin.srvc.userMng.dao.UserApplyDAO.selectUserCount] 회원 건수 */
        SELECT 
        	COUNT(0)
        FROM SNS_USER SU
             LEFT OUTER JOIN EXT_DEPARTMENT ED ON ED.DEPT_CD = SU.DEPT_ID
             LEFT OUTER JOIN COMTNAUTHORINFO AUTH ON AUTH.AUTHOR_CODE = SU.AUTH_CODE
        WHERE 1 = 1
          AND (SU.SYS_ADMIN_YN != 'Y' OR SU.SYS_ADMIN_YN IS NULL)
        <include refid="searchUser"/>
    </select>
    
    <select id="selectUserList" parameterMap="snsUserVO" resultMap="snsUserVO">
        /* [i2c.biz.admin.srvc.userMng.dao.UserApplyDAO.selectUserList] 회원 목록 */
        SELECT *
        FROM (
            SELECT ROWNUM RNUM, B.*            	 
              FROM (
                SELECT 
                	USR_ID USRID,
                	LOGIN_ID LOGINID,
                	USR_NM USRNM,
                	PHN_NUM PHNNUM,
                	EMAIL EMAIL,
                	USE_STOP_YN USESTOPYN,
                	SUBSTR(SU.CRT_DTTM, 1,4) || '-' || SUBSTR(SU.CRT_DTTM, 5,2) || '-' || SUBSTR(SU.CRT_DTTM, 7,2) CRTDTTM,
                	SUBSTR(LST_LOGIN_DTTM, 1,4) || '-' || SUBSTR(LST_LOGIN_DTTM, 5,2) || '-' || SUBSTR(LST_LOGIN_DTTM, 7,2) LSTLOGINDTTM,
                	AUTH_CODE AUTHCODE,
                	ED.DEPT_NM DEPT_CODE_NM,
                	APPROVAL APPROVAL,
                	AUTH.AUTHOR_NM AUTHNAME
                	, SU.CRT_DTTM
                FROM SNS_USER SU
               		 LEFT OUTER JOIN EXT_DEPARTMENT ED ON ED.DEPT_CD = SU.DEPT_ID
                	 LEFT OUTER JOIN COMTNAUTHORINFO AUTH ON AUTH.AUTHOR_CODE = SU.AUTH_CODE
                WHERE 1 = 1
                  AND (SU.SYS_ADMIN_YN != 'Y' OR SU.SYS_ADMIN_YN IS NULL)
                <include refid="searchUser"/>
                ORDER BY SU.CRT_DTTM
            ) B
        )
        <![CDATA[
		 WHERE  RNUM  > #{firstIndex}
           AND  RNUM <= #{firstIndex} + #{recordCountPerPage}
		   ]]> 
		 ORDER BY RNUM
		 
    </select>
    
    <insert id="insertUserInfo" parameterMap="snsUserVO">
        /* [i2c.biz.admin.srvc.userMng.dao.UserInfoDAO.insertUserInfo] 계정생성 */
        INSERT INTO SNS_USER
			(
			usr_id, usr_nm, email, login_id, login_passwd, 
			use_stop_yn, use_stop_dttm, sys_admin_yn,
			phn_num, crt_usr_id, crt_dttm, mod_usr_id, mod_dttm, 
			dept_id, dept_nm, 
			temp_passwd_yn, auth_code,
			instt_bsnm_id, instt_bsnm_type, sport_bsns_id,
			approval, approval_dttm,
			sexdstn, conn_ip
			)
		VALUES 
			(
			#{usrId}, #{usrNm}, #{email},#{loginId}, #{loginPasswd}, 
			#{useStopYn}, #{useStopDttm},#{sysAdminYn},
			#{phnNum}, #{crtUsrId}, TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS'), #{modUsrId}, TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS'), 
			#{dept_code}, #{dept_code_nm},
			#{tempPasswdYn}, #{authCode} ,
			#{insttBsnmId}, #{insttBsnmType}, #{sportBsnsId},
			#{approval}, #{approvalDttm},
			#{sexdstn}, #{connIp}
			)
    </insert>
    
    <update id="updateUserInfo" parameterMap="snsUserVO">
        /* [i2c.biz.admin.srvc.userMng.dao.UserInfoDAO.updateUserInfo] 계정 수정 */
        UPDATE SNS_USER SET
        	usr_nm = #{usrNm},
			email = #{email},
			use_stop_yn = #{useStopYn},
			use_stop_dttm = #{useStopDttm},
			sys_admin_yn = #{sysAdminYn},
			phn_num = #{phnNum},
			mod_usr_id = #{modUsrId},
			mod_dttm = #{modDttm},
			dept_id = #{dept_code},
			dept_nm = #{dept_code_nm},
			auth_code = #{authCode}, 
			instt_bsnm_id = #{insttBsnmId}, 
			instt_bsnm_type = #{insttBsnmType},
			sport_bsns_id = #{sportBsnsId},
			approval = #{approval},
			approval_dttm = #{approvalDttm},
			sexdstn = #{sexdstn},
			conn_ip = #{connIp}
			<if test='useStopYn == "N"'>
			, LOGIN_FAIL_COUNT = 0 /* 사용중지 해제 時 로그인 실패 카운트 초기화 */
			</if>
		WHERE
			usr_id = #{usrId}
    </update>
    
    <select id="selectUserInfo" parameterMap="snsUserVO" resultMap="snsUserVO">
        /* [i2c.biz.admin.srvc.userMng.dao.UserInfoDAO.selectUserInfo] 계정 조회 */
        SELECT
        	usr_id usrId, 
        	usr_nm usrNm, 
        	email email, 
        	login_id loginId, 
        	LOGIN_PASSWD loginPasswd, 
        	use_stop_yn useStopYn, 
			sys_admin_yn sysAdminYn,
			phn_num phnNum,
			dept_id dept_code, 
			FN_GET_USR_DEPT_NM(SU.USR_ID) dept_code_nm, 
			auth_code authCode,
			SU.sport_bsns_id sportBsnsId,
			approval approval, 
			sexdstn sexdstn, 
			conn_ip connIp,
			AUTH.AUTHOR_NM AUTHNAME
			<!-- 20180713 조직도 분기 : 내부/외부 유저 구분 -->
			, NVL2(
			  (SELECT ED.DEPT_ID
	             FROM EXT_DEPARTMENT ED
	            WHERE ED.DEPT_ID = SU.DEPT_ID
               	START WITH ED.UP_DEPT_CD = '-1'
           	  CONNECT BY PRIOR ED.DEPT_ID = ED.UP_DEPT_CD)
           	  , 'Y', 'N')                                  inDeptAt
		FROM
			SNS_USER SU
			LEFT OUTER JOIN COMTNAUTHORINFO AUTH ON AUTH.AUTHOR_CODE = SU.AUTH_CODE
		WHERE
			usr_id = #{usrId}
    </select>
    
    <update id="updateUserStopAt" parameterMap="snsUserVO">
        /* [i2c.biz.admin.srvc.userMng.dao.UserInfoDAO.updateUserStopAt] 계정 수정 */
        UPDATE SNS_USER 
           SET USE_STOP_YN   = #{useStopYn}
			 , USE_STOP_DTTM = #{useStopDttm}
			<if test='useStopYn == "N"'>
			 , LOGIN_FAIL_COUNT = 0 /* 사용중지 해제 時 로그인 실패 카운트 초기화 */
			</if>
		WHERE
			usr_id = #{usrId}
    </update>   
	
	<select id="viewSnsUserByEmail" parameterType="Map" resultType="i2c.cmm.base.CommonResultMap">
		/* i2c.biz.admin.srvc.userMng.dao.UserInfoDAO.viewSnsUserByEmail */
		SELECT
			email, usr_id
		FROM
			SNS_USER
		WHERE
			email = #{email}
			and rownum = 1
	</select>
	
	<select id="selectDepartment" parameterType="Map" resultType="i2c.cmm.base.CommonResultMap">
		/* i2c.biz.admin.srvc.userMng.dao.UserInfoDAO.selectDepartment */
		SELECT
			biz_id
		FROM
			EXT_DEPARTMENT
		WHERE
			DEPT_CD = #{dept_cd}
			and rownum = 1
	</select>
	
	<update id="initPassword" parameterMap="snsUserVO">
		/* i2c.biz.admin.srvc.userMng.dao.UserInfoDAO.initPassword 비밀번호초기화*/
		UPDATE SNS_USER SET
			PASSWD_MOD_DTTM = #{passwdModDttm},
			TEMP_PASSWD_YN  = 'Y',
			LOGIN_PASSWD = #{loginPasswd},
			PREV_PASSWD     = #{prevPasswd}
		WHERE
			usr_id = #{usrId}
	</update>
	
	<select id="selectPwdCycle" parameterType="Map" resultType="i2c.cmm.base.CommonResultMap">
		/* [i2c.biz.admin.srvc.userMng.UserInfoDAO.selectPwdCycle */
		SELECT
			CD_NM
		FROM
			SNS_COMMON_CODE A
		WHERE
			UP_CD = #{up_cd}
			AND CD = #{cd}
	</select>
	
	<update id="updateAdminPwdCycle" parameterType="Map">
		/* [i2c.biz.admin.srvc.userMng.UserInfoDAO.updateAdminPwdCycle] 비밀번호주기변경처리. */
		UPDATE SNS_COMMON_CODE
			SET CD_NM = #{cd_nm}
		WHERE
			UP_CD = #{up_cd}
			AND CD = #{cd}
	</update>
</mapper>