<?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="com.dbnt.sims.fpiMgt.affair.mapper.AffairMapper">
  <sql id="selectAffairBoardWhere">
    <where>
      <if test='affairCategory != null and affairCategory != ""'>
        and a.affair_category = #{affairCategory}
      </if>
      <if test='wrtUserSeq != null and wrtUserSeq != ""'>
        and a.wrt_user_seq = #{wrtUserSeq}
      </if>
      <if test='wrtUserNm != null and wrtUserNm != ""'>
        and a.wrt_user_nm like '%'||#{wrtUserNm}||'%'
      </if>
      <if test='wrtOrgan != null and wrtOrgan != ""'>
        and a.wrt_organ = #{wrtOrgan}
      </if>
      <if test='affairType1 != null and affairType1 != ""'>
        and a.affair_type1 = #{affairType1}
      </if>
      <if test='affairType2 != null and affairType2 != ""'>
        and a.affair_type2 = #{affairType2}
      </if>
      <if test='affairType3 != null and affairType3 != ""'>
        and a.affair_type3 = #{affairType3}
      </if>
      <if test='affairType4 != null and affairType4 != ""'>
        and a.affair_type4 = #{affairType4}
      </if>
      <if test='title != null and title != ""'>
        and a.title like '%'||#{title}||'%'
      </if>
      <if test='affairStatus != null and affairStatus != ""'>
        and c.affair_status = #{affairStatus}
      </if>
      <if test='startDate != null and startDate != ""'>
        and a.wrt_dt >= #{startDate}::date
      </if>
      <if test='endDate != null and endDate != ""'>
        and a.wrt_dt &lt;= #{endDate}::date+1
      </if>
      <if test='ratingOrgan != null and ratingOrgan != ""'>
        and c.rating_organ = #{ratingOrgan}
      </if>
      <if test="downOrganCdList != null">
        and a.wrt_organ in
        <foreach collection="downOrganCdList" item="organCd" separator="," open="(" close=")">
          #{organCd}
        </foreach>
      </if>
      <if test='userType != null and userType != ""'>
        <if test='userType == "normalStayList"'>
          and c.affair_status in ('DST002', 'DST004')
        </if>
        <if test='userType == "normalCommitList"'>
          and c.affair_status in ('DST003', 'DST005', 'DST006')
        </if>
        <if test='userType == "sectionCommitList"'>
          and c.affair_status in ('DST003', 'DST004', 'DST005', 'DST006')
        </if>
        <if test='userType == "headCommitList"'>
          and c.affair_status in ('DST003', 'DST005', 'DST006')
        </if>
        <if test='userType == "managerStayList"'>
          and c.affair_status in ('DST002', 'DST004')
        </if>
        <if test='userType == "managerCommitList"'>
          and c.affair_status in ('DST003', 'DST005', 'DST006')
        </if>
      </if>
    </where>
  </sql>
  <select id="selectAffairBoardList" resultType="AffairBoard" parameterType="AffairBoard">
    select a.affair_key,
           a.affair_type1,
           a.affair_type2,
           a.affair_type3,
           a.affair_type4,
           a.title,
           a.wrt_organ,
           a.wrt_part,
           a.wrt_user_nm,
           a.wrt_user_seq,
           a.wrt_dt,
           b.fileCnt,
           c.affair_status,
           c.affair_rate,
           c.organ_up
    from affair_board a
        left outer join (select affair_key,
                                   count(file_seq) as fileCnt
                            from affair_file
                            group by affair_key) b
            on a.affair_key = b.affair_key
        inner join affair_rating c
            on a.affair_key = c.affair_key
    <include refid="selectAffairBoardWhere"></include>
    order by a.affair_key desc
    limit #{rowCnt} offset #{firstIndex}
  </select>
  <select id="selectAffairBoardCnt" resultType="int" parameterType="AffairBoard">
    select count(*)
    from affair_board a
        inner join affair_rating c
            on a.affair_key = c.affair_key
    <include refid="selectAffairBoardWhere"></include>
  </select>
  <select id="selectHashTags" resultType="string" parameterType="int">
    select aa.hashTags
    from (select a.affair_key,
                 array_to_string(array_agg(b.tag_nm), ' ') as hashTags
          from hash_tag_link a
            inner join hash_tag b on a.tag_key = b.tag_key
          where a.affair_key = #{affairKey}
          group by a.affair_key) aa
  </select>
</mapper>