UserMessageMapper.xml 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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. um.personalized_content AS content, <!-- 渲染后的内容 -->
  48. DATE_FORMAT(um.create_time, '%H:%i') AS create_time,
  49. um.is_read AS isRead,
  50. um.personalized_jump_page AS jumpUrl <!-- 点击跳转地址 -->
  51. FROM user_message um
  52. INNER JOIN message_content mc ON um.message_content_id = mc.id
  53. WHERE um.user_id = #{dto.userId}
  54. AND um.is_delete = 0
  55. AND mc.category_code = #{dto.categoryCode} <!-- 核心过滤条件 -->
  56. ORDER BY um.create_time DESC
  57. </select>
  58. </mapper>