<?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.ntcn.pushMsg.dao.PushMsgDAO">

    <resultMap id="PushMsgVO" type="i2c.biz.admin.ntcn.pushMsg.vo.PushMsgVO" />
    
    <parameterMap id="PushMsgVO" type="i2c.biz.admin.ntcn.pushMsg.vo.PushMsgVO" />
    
     <sql id="searchQuery">
        <if test="searchCondition == 'SUBJECT'">
         AND PM.SUBJECT LIKE CONCAT('%', #{searchKeyword}, '%')
        </if>
        <if test="searchCondition == 'CONTENTS'">
         AND PM.CONTENTS LIKE CONCAT('%', #{searchKeyword}, '%')
        </if>
        <if test="searchSdate != null and searchSdate !='' and searchEdate !=null and searchEdate !='' ">
	    AND PM.REGIST_DE BETWEEN CONCAT(REPLACE(#{searchSdate}, '-', ''), '000000') AND CONCAT(REPLACE(#{searchEdate}, '-', ''), '235959')
	    </if>
     </sql>
    
     <select id="countPushMsg"  parameterMap="PushMsgVO" resultType="int">
        /* [i2c.biz.admin.ntcn.pushMsg.dao.PushMsgDAO.countPushMsg] 푸쉬메시지 목록 count */
        SELECT
              COUNT(PUSH_MESSAGE_ID)
         FROM PUSH_MESSAGE PM
	        , SNS_POST SP
   	   WHERE PM.PUSH_MESSAGE_ID = SP.TAR_OBJ_ID
	     AND SP.POST_TP = 'PUSH'
	      <include refid="searchQuery"/>
    </select>
    
     <select id="listPushMsg" parameterMap="PushMsgVO"  resultMap="PushMsgVO">
        /* [i2c.biz.admin.ntcn.pushMsg.dao.PushMsgDAO.listPushMsg] 푸쉬메시지 관리 목록 */
          SELECT *
	   FROM (
	       SELECT (@ROWNUM  := @ROWNUM + 1) RNUM, B.*            	 
		    FROM (
	            SELECT 
				      PM.PUSH_MESSAGE_ID
				    , CONCAT(SUBSTR(PM.SEND_DE, 1,4), '-', SUBSTR(PM.SEND_DE, 5,2), '-', SUBSTR(PM.SEND_DE, 7,2), ' ', SUBSTR(PM.SEND_DE, 9,2), ':', SUBSTR(PM.SEND_DE, 11,2) ) SEND_DE
				    , FN_GET_CODE_NM('SEND_STTUS', PM.SEND_STTUS) SEND_STTUS
				    , PM.SUBJECT
				    , PM.CONTENTS
				    , PM.TEMP_SAVE_AT
				    , PM.REGIST_ID
				    , PM.REGISTER
			       , ( SELECT COUNT(SPU.POST_USR_ID)
			             FROM SNS_POST_USER SPU
			            WHERE SPU.POST_ID = SP.POST_ID
			              AND SPU.USR_TP IS NULL
			          ) TARGET_TOTAL
				  FROM PUSH_MESSAGE PM
				     , SNS_POST SP
				  WHERE PM.PUSH_MESSAGE_ID = SP.TAR_OBJ_ID
				    AND SP.POST_TP = 'PUSH'
				     <include refid="searchQuery"/>
				  ORDER BY PM.SEND_DE DESC
	           ) B, (SELECT @ROWNUM := 0 FROM DUAL) ROWNUM
	       ) C        
		ORDER BY RNUM DESC
		LIMIT #{firstIndex}, #{recordCountPerPage}    
     </select>
     
      <select id="selectPushMsg" parameterMap="PushMsgVO"  resultMap="PushMsgVO">
      /* [i2c.biz.admin.ntcn.pushMsg.dao.PushMsgDAO.selectPushMsg] 푸쉬메시지 관리 상세 */
           SELECT 
			      PM.PUSH_MESSAGE_ID
			    , PM.SEND_SE
			    , PM.RECEIVER_TARGET
			    , CONCAT(SUBSTR(PM.SEND_DE, 1,4), '-', SUBSTR(PM.SEND_DE, 5,2), '-', SUBSTR(PM.SEND_DE, 7,2))  SEND_YMD
			    , SUBSTR(PM.SEND_DE, 11,2) SEND_MM
			    , SUBSTR(PM.SEND_DE, 9,2) SEND_HH
			    , FN_GET_CODE_NM('SEND_STTUS', PM.SEND_STTUS) SEND_STTUS
			    , PM.SUBJECT
			    , PM.CONTENTS
			    , PM.LINK_URL
			    , PM.TEMP_SAVE_AT
			    , PM.REGIST_ID
			    , PM.REGISTER
			  FROM PUSH_MESSAGE PM
			  WHERE PUSH_MESSAGE_ID = #{push_message_id}
      </select>
     
     <select id="sendSeList" parameterMap="PushMsgVO" resultMap="PushMsgVO">
          /* [i2c.biz.admin.ntcn.pushMsg.dao.PushMsgDAO.sendSeList] 발송 구분 목록 */
		SELECT 
		       CD
		     , CD_NM
		  FROM 
		      SNS_COMMON_CODE
		 WHERE UP_CD = 'SEND_SE'
		   AND USE_YN = 'Y'
	 </select>	
     
     <insert id="insertPushMsg" parameterType="i2c.biz.admin.ntcn.pushMsg.vo.PushMsgVO">
       /* [i2c.biz.admin.ntcn.pushMsg.dao.PushMsgDAO.insertPushMsg] 푸쉬메시지 등록 */
          INSERT INTO PUSH_MESSAGE (
				     PUSH_MESSAGE_ID
				   , ORG_SID
				   , SEND_DE
				   , SEND_STTUS
				   , SUBJECT
				   , CONTENTS
				   , TEMP_SAVE_AT
				   , REGISTER
				   , SEND_SE
				   , RECEIVER_TARGET
				   , LINK_URL
				   , REGIST_ID
				   , REGIST_DE
				   , UPDT_ID
				   , UPDT_DE
				)
				VALUES (
				     #{push_message_id }
				   , #{org_sid         }
				   , #{send_de         }
				   , #{send_sttus      }
				   , #{subject         }
				   , #{contents        }
				   , #{temp_save_at    }
				   , #{register        }
				   , #{send_se         }
				   , #{receiver_target }
				   , #{link_url        }
				   , #{regist_id}
				   , DATE_FORMAT(SYSDATE(), '%Y%m%d%H%i%s')
				   , #{updt_id}
				   , DATE_FORMAT(SYSDATE(), '%Y%m%d%H%i%s')
				)
    </insert>
    
     <select id="userListCnt"  parameterMap="PushMsgVO" resultType="int">
        /* [i2c.biz.admin.ntcn.pushMsg.dao.PushMsgDAO.userListCnt]  org 회원 목록 count */
        SELECT
              COUNT(SU.USR_ID)
         FROM
              SNS_USER SU
        WHERE 
             ((SU.USE_STOP_YN is NULL) or (SU.USE_STOP_YN = 'N'))
          <if test="searchCondition == 'USRNM'">
          AND SU.USR_NM LIKE CONCAT('%', #{searchKeyword}, '%')
          </if>  
          <if test="searchCondition == 'LOGINID'">
          AND SU.LOGINID LIKE CONCAT('%', #{searchKeyword}, '%')
          </if>
    </select>
    
    <select id="userList" parameterType="Map" resultType="i2c.cmm.base.CommonResultMap">
        /* [i2c.biz.admin.ntcn.pushMsg.dao.PushMsgDAO.userList] org 회원 목록 */
          SELECT *
	   FROM (
	       SELECT (@ROWNUM  := @ROWNUM + 1) RNUM, B.*            	 
		    FROM (
	            SELECT 
				      SU.LOGIN_ID
				    , SU.USR_ID
				    , SU.USR_NM
				    , SU.ORG_SID
				    , (SELECT OI.ORG_NM
				        FROM ORG_INFO OI
				       WHERE OI.ORG_SID = SU.ORG_SID) ORG_NM
				 FROM
				     SNS_USER SU
				WHERE
				     ((SU.USE_STOP_YN is NULL) or (SU.USE_STOP_YN = 'N'))
			    <if test="searchCondition == 'USRNM'">
	            AND SU.USR_NM LIKE CONCAT('%', #{searchKeyword}, '%')
	            </if>  
	            <if test="searchCondition == 'LOGINID'">
	            AND SU.LOGINID LIKE CONCAT('%', #{searchKeyword}, '%')
	            </if>
	           ) B, (SELECT @ROWNUM := 0 FROM DUAL) ROWNUM
	       ) C        
		ORDER BY RNUM DESC
		LIMIT #{firstIndex}, #{recordCountPerPage}
    </select>
    
    <select id="viewPostId" parameterType="String" resultType="i2c.cmm.base.CommonResultMap">
       /* [i2c.biz.admin.ntcn.pushMsg.dao.PushMsgDAO.viewPostId] post_id 불러오기 */
       SELECT
             POST_ID
        FROM
            SNS_POST
       WHERE
            TAR_OBJ_ID = #{push_message_id}
        AND POST_TP = 'PUSH'
    </select>
    
    <select id="pushMsgScheduleInfo" resultType="i2c.cmm.base.CommonResultMap">
      /* [i2c.biz.admin.ntcn.pushMsg.dao.PushMsgDAO.pushMsgScheduleInfo] 예약 푸시 메세지 정보 */
           SELECT 
			      PM.PUSH_MESSAGE_ID
			    , PM.SUBJECT
			    , PM.CONTENTS
			    , PM.SEND_SE
			    , PM.LINK_URL
			    , PM.TEMP_SAVE_AT
			    , PM.RECEIVER_TARGET
			    , FN_GET_USR_NM(PM.REGIST_ID) REGIST_NM
			    , PM.REGISTER
			 FROM PUSH_MESSAGE PM
			WHERE TEMP_SAVE_AT = 'N'
			  AND SEND_STTUS = 'SEND01' 
			  AND PM.SEND_DE = DATE_FORMAT(SYSDATE(),'%Y%m%d%H%i')			  
      </select>
      
      <select id="pushMsgScheduleTargetUser" parameterType="Map" resultType="i2c.cmm.base.CommonResultMap">
       /* [i2c.biz.admin.ntcn.pushMsg.dao.PushMsgDAO.pushMsgScheduleTargetUser] 예약 푸시 메세지 수신자 정보 */
        SELECT 
				SPU.USR_ID 
		  FROM PUSH_MESSAGE PM
		     , SNS_POST SP
		     , SNS_POST_USER SPU
		 WHERE PM.PUSH_MESSAGE_ID = SP.TAR_OBJ_ID
		   AND SP.POST_ID = SPU.POST_ID
		   AND PM.PUSH_MESSAGE_ID = #{push_message_id}
      </select>
      
      <update id="updatePushMsg" parameterType="Map">
       /* [i2c.biz.admin.ntcn.pushMsg.dao.PushMsgDAO.updatePushMsg] 예약 푸시 메세지 발송상태 업데이트 */
        UPDATE PUSH_MESSAGE
           SET SEND_STTUS = #{send_sttus}
		 WHERE PUSH_MESSAGE_ID = #{push_message_id}
      </update>
    
</mapper>