<?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.testor.module.notice.dao.TSysNoticeDao">
    <!-- 开启二级缓存 -->
    <!-- <cache type="org.mybatis.caches.ehcache.LoggingEhcache"/> -->
    <!-- 通用查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.testor.module.notice.model.domain.TSysNotice">
        <id column="id" property="id"/>
        <id column="content" property="content"/>
        <id column="release_unit" property="releaseUnit"/>
        <id column="receiver_obj" property="receiverObj"/>
        <id column="is_read" property="isRead"/>
        <id column="ref_id" property="refId"/>
        <id column="level" property="level"/>
        <id column="tenant_id" property="tenantId"/>
        <id column="process_status" property="processStatus"/>
        <id column="process_id" property="processId"/>
        <id column="parent_id" property="parentId"/>
        <id column="reject_opinion" property="rejectOpinion"/>
        <id column="title" property="title"/>
        <id column="release_time" property="releaseTime"/>
        <id column="accept_obj" property="acceptObj"/>
        <id column="receiver_type" property="receiverType"/>
        <id column="org_id" property="orgId"/>
    </resultMap>

    <!--    获取已读数据-->
    <select id="getRead" parameterType="com.testor.module.notice.model.dto.TSysNoticeParam"
            resultType="com.testor.module.notice.model.domain.TSysNotice">
        select ne.*
        from t_sys_notice ne
        join t_sys_is_read r
        on ne.id = r.article_id
        where FIND_IN_SET (#{orgId},receiver_obj)
        and ne.status != 1 and ne.status != 3
        and ne.process_status = 5
        and ne.process_status != 6
        and r.user_id = #{loginUserId}
        <if test="param.title!=null and param.title!=''">
            AND ne.title LIKE CONCAT('%',#{param.title},'%')
        </if>
        <if test="param.isRead!=null and param.isRead!=''">
            AND r.is_read = #{param.isRead}
        </if>
        <if test="startTime!=null and startTime!='' or endTime!=null and endTime !=''">
            AND ne.release_time between #{startTime} and #{endTime}
        </if>
        <if test="list!=null and list!=''">
            AND ne.level in
            <foreach open="(" close=")" separator="," collection="list" item="item" index="index">
                #{item}
            </foreach>
        </if>
        order by release_time
    </select>

    <!--    获取未读数据-->
    <select id="getUnRead" parameterType="com.testor.module.notice.model.dto.TSysNoticeParam"
            resultType="com.testor.module.notice.model.domain.TSysNotice">
        select *
        from t_sys_notice
        where FIND_IN_SET (#{orgId},receiver_obj)
        and id not in (select r.article_id
        from t_sys_notice ne
        join t_sys_is_read r
        on ne.id = r.article_id
        where r.is_read = '1'
        and r.user_id = #{loginUserId})
        and status != 1 and status != 3
        and process_status = 5
        and process_status != 6
        <if test="param.title!=null and param.title!=''">
            AND title LIKE CONCAT('%',#{param.title},'%')
        </if>
        <if test="startTime!=null and startTime!='' or endTime!=null and endTime !=''">
            AND release_time between #{startTime} and #{endTime}
        </if>
        <if test="list!=null and list!=''">
            AND level in
            <foreach open="(" close=")" separator="," collection="list" item="item" index="index">
                #{item}
            </foreach>
        </if>
        order by release_time
    </select>

<!--    获取首页数据-->
    <select id="getNewsAndNotice" parameterType="com.testor.module.notice.model.dto.TSysNoticeParam"
            resultType="com.testor.module.notice.model.domain.TSysNotice">
        select id ,title ,receiver_obj ,release_time,type from (
          select id ,title  , receiver_obj ,release_time, '新闻' as type  from t_sys_news where process_status = '5' and status ='0'
          union
          select   id ,title , receiver_obj ,release_time, '公告' as type from t_sys_notice where FIND_IN_SET (#{orgId},receiver_obj) and process_status = '5' and status ='0'
      ) aa order by release_time  desc
    </select>
</mapper>