SysNoticeReadMapper.xml 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.goldenwater.system.mapper.SysNoticeReadMapper">
  6. <resultMap type="SysNoticeRead" id="SysNoticeReadResult">
  7. <id property="readId" column="read_id" />
  8. <result property="noticeId" column="notice_id" />
  9. <result property="userId" column="user_id" />
  10. <result property="readTime" column="read_time" />
  11. </resultMap>
  12. <!-- 新增已读记录 -->
  13. <insert id="insertNoticeRead" parameterType="SysNoticeRead">
  14. insert ignore into sys_notice_read (notice_id, user_id, read_time)
  15. values (#{noticeId}, #{userId}, sysdate())
  16. </insert>
  17. <!-- 查询未读数量:正常状态公告 减去 当前用户已读数 -->
  18. <select id="selectUnreadCount" resultType="int">
  19. select count(*) from sys_notice n
  20. where n.status = '0' and not exists (select 1 from sys_notice_read r where r.notice_id = n.notice_id and r.user_id = #{userId})
  21. </select>
  22. <!-- 查询是否已读 -->
  23. <select id="selectIsRead" resultType="int">
  24. select count(*) from sys_notice_read where notice_id = #{noticeId} and user_id = #{userId}
  25. </select>
  26. <!-- 查询带已读状态的公告列表(直接在SQL中限制条数) -->
  27. <select id="selectNoticeListWithReadStatus" resultType="SysNotice">
  28. select
  29. n.notice_id as noticeId,
  30. n.notice_title as noticeTitle,
  31. n.notice_type as noticeType,
  32. n.status,
  33. n.create_by as createBy,
  34. n.create_time as createTime,
  35. case when r.notice_id is not null then true else false end as isRead
  36. from sys_notice n
  37. left join sys_notice_read r
  38. on r.notice_id = n.notice_id and r.user_id = #{userId}
  39. where n.status = '0'
  40. order by n.notice_id desc
  41. limit #{limit}
  42. </select>
  43. <!-- 批量标记已读 -->
  44. <insert id="insertNoticeReadBatch">
  45. insert ignore into sys_notice_read (notice_id, user_id, read_time)
  46. values
  47. <foreach collection="noticeIds" item="noticeId" separator=",">
  48. (#{noticeId}, #{userId}, sysdate())
  49. </foreach>
  50. </insert>
  51. <!-- 删除公告时清理已读记录 -->
  52. <delete id="deleteByNoticeIds">
  53. delete from sys_notice_read where notice_id in
  54. <foreach collection="noticeIds" item="noticeId" open="(" separator="," close=")">
  55. #{noticeId}
  56. </foreach>
  57. </delete>
  58. </mapper>