UserMessageMapper.xml 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.ylx.message.mapper.UserMessageMapper">
  4. <!-- 结果映射(可选,字段名与VO属性一致时可省略) -->
  5. <resultMap id="CategoryCardResultMap" type="com.ylx.message.domain.vo.MessageCategoryVO">
  6. <result column="category_code" property="categoryCode"/>
  7. <result column="title" property="title"/>
  8. <result column="summary" property="summary"/>
  9. <result column="create_time" property="createTime"/>
  10. <result column="is_read" property="isRead"/>
  11. <result column="jump_page" property="jumpPage"/>
  12. <result column="msg_id" property="latestMsgId"/>
  13. </resultMap>
  14. <!-- 核心查询:按分类取最新一条消息 -->
  15. <select id="selectLatestByCategory" resultMap="CategoryCardResultMap">
  16. SELECT
  17. t.category_code,
  18. t.title,
  19. t.summary,
  20. DATE_FORMAT(t.create_time, '%H:%i') AS create_time,
  21. t.is_read,
  22. t.jump_page,
  23. t.msg_id
  24. FROM (
  25. SELECT
  26. mc.category_code,
  27. d.dict_label AS title,
  28. mc.jump_page,
  29. SUBSTRING(um.personalized_content, 1, 50) AS summary,
  30. um.create_time,
  31. um.is_read,
  32. um.id AS msg_id,
  33. ROW_NUMBER() OVER (PARTITION BY mc.category_code ORDER BY um.create_time DESC) AS rn
  34. FROM user_message um
  35. INNER JOIN message_content mc ON um.message_content_id = mc.id
  36. LEFT JOIN sys_dict_data d ON d.dict_type = 'msg_category' AND d.dict_value = mc.category_code
  37. WHERE um.user_id = #{userId}
  38. AND um.is_delete = 0
  39. AND mc.is_delete = 0
  40. ) t
  41. WHERE t.rn = 1
  42. ORDER BY t.create_time DESC
  43. </select>
  44. <select id="selectMessageListByCategory" resultType="com.ylx.message.domain.vo.MessageDetailVO">
  45. SELECT
  46. um.id,
  47. mc.title AS title, <!-- 从配置表获取标题 -->
  48. um.personalized_content AS content, <!-- 渲染后的内容 -->
  49. um.create_time AS createTime,
  50. um.is_read AS isRead,
  51. mc.jump_page AS jumpUrl <!-- 点击跳转地址 -->
  52. FROM user_message um
  53. INNER JOIN message_content mc ON um.message_content_id = mc.id
  54. WHERE um.user_id = #{dto.userId}
  55. AND um.is_delete = 0
  56. AND mc.category_code = #{dto.categoryCode} <!-- 核心过滤条件 -->
  57. ORDER BY um.create_time DESC
  58. </select>
  59. </mapper>