UserDynamicsMapper.xml 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  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.zhentao.mapper.UserDynamicsMapper">
  4. <!-- 结果映射 -->
  5. <resultMap id="DynamicWithUserMap" type="com.zhentao.entity.UserDynamics">
  6. <id property="dynamicId" column="dynamic_id"/>
  7. <result property="userId" column="user_id"/>
  8. <result property="content" column="content"/>
  9. <result property="mediaUrls" column="media_urls"/>
  10. <result property="mediaType" column="media_type"/>
  11. <result property="auditStatus" column="audit_status"/>
  12. <result property="auditRemark" column="audit_remark"/>
  13. <result property="auditTime" column="audit_time"/>
  14. <result property="auditAdminId" column="audit_admin_id"/>
  15. <result property="likeCount" column="like_count"/>
  16. <result property="commentCount" column="comment_count"/>
  17. <result property="favoriteCount" column="favorite_count"/>
  18. <result property="shareCount" column="share_count"/>
  19. <result property="viewCount" column="view_count"/>
  20. <result property="status" column="status"/>
  21. <result property="visibility" column="visibility"/>
  22. <result property="createdAt" column="created_at"/>
  23. <result property="updatedAt" column="updated_at"/>
  24. <result property="isLiked" column="is_liked"/>
  25. <result property="isFavorited" column="is_favorited"/>
  26. <!-- 关联用户信息 -->
  27. <association property="user" javaType="com.zhentao.entity.Users">
  28. <id property="userId" column="user_id"/>
  29. <result property="nickname" column="nickname"/>
  30. <result property="avatarUrl" column="avatar_url"/>
  31. <result property="gender" column="gender"/>
  32. </association>
  33. </resultMap>
  34. <!-- 分页查询动态列表(关联用户信息) -->
  35. <select id="selectDynamicsWithUserInfo" resultMap="DynamicWithUserMap">
  36. SELECT
  37. d.dynamic_id,
  38. d.user_id,
  39. d.content,
  40. CAST(d.media_urls AS CHAR) as media_urls,
  41. d.media_type,
  42. d.audit_status,
  43. d.audit_remark,
  44. d.audit_time,
  45. d.audit_admin_id,
  46. d.like_count,
  47. d.comment_count,
  48. d.favorite_count,
  49. d.share_count,
  50. d.view_count,
  51. d.status,
  52. d.visibility,
  53. d.created_at,
  54. d.updated_at,
  55. u.nickname,
  56. u.avatar_url,
  57. u.gender,
  58. CASE WHEN dl.id IS NOT NULL THEN 1 ELSE 0 END as is_liked,
  59. CASE WHEN df.id IS NOT NULL THEN 1 ELSE 0 END as is_favorited
  60. FROM user_dynamics d
  61. LEFT JOIN users u ON d.user_id = u.user_id
  62. LEFT JOIN dynamic_likes dl ON d.dynamic_id = dl.dynamic_id AND dl.user_id = #{userId}
  63. LEFT JOIN dynamic_favorites df ON d.dynamic_id = df.dynamic_id AND df.user_id = #{userId}
  64. WHERE d.status = 1
  65. <if test="auditStatus != null">
  66. AND d.audit_status = #{auditStatus}
  67. </if>
  68. <if test="visibility != null">
  69. AND d.visibility = #{visibility}
  70. </if>
  71. ORDER BY d.created_at DESC
  72. </select>
  73. <!-- 根据动态ID查询动态详情 -->
  74. <select id="selectDynamicDetailById" resultMap="DynamicWithUserMap">
  75. SELECT
  76. d.dynamic_id,
  77. d.user_id,
  78. d.content,
  79. CAST(d.media_urls AS CHAR) as media_urls,
  80. d.media_type,
  81. d.audit_status,
  82. d.audit_remark,
  83. d.audit_time,
  84. d.audit_admin_id,
  85. d.like_count,
  86. d.comment_count,
  87. d.favorite_count,
  88. d.share_count,
  89. d.view_count,
  90. d.status,
  91. d.visibility,
  92. d.created_at,
  93. d.updated_at,
  94. u.nickname,
  95. u.avatar_url,
  96. u.gender,
  97. CASE WHEN dl.id IS NOT NULL THEN 1 ELSE 0 END as is_liked,
  98. CASE WHEN df.id IS NOT NULL THEN 1 ELSE 0 END as is_favorited
  99. FROM user_dynamics d
  100. LEFT JOIN users u ON d.user_id = u.user_id
  101. LEFT JOIN dynamic_likes dl ON d.dynamic_id = dl.dynamic_id AND dl.user_id = #{userId}
  102. LEFT JOIN dynamic_favorites df ON d.dynamic_id = df.dynamic_id AND df.user_id = #{userId}
  103. WHERE d.dynamic_id = #{dynamicId}
  104. AND d.status = 1
  105. </select>
  106. <!-- 查询某个用户发布的动态列表 -->
  107. <select id="selectDynamicsByUserId" resultMap="DynamicWithUserMap">
  108. SELECT
  109. d.dynamic_id,
  110. d.user_id,
  111. d.content,
  112. CAST(d.media_urls AS CHAR) as media_urls,
  113. d.media_type,
  114. d.audit_status,
  115. d.audit_remark,
  116. d.audit_time,
  117. d.audit_admin_id,
  118. d.like_count,
  119. d.comment_count,
  120. d.favorite_count,
  121. d.share_count,
  122. d.view_count,
  123. d.status,
  124. d.visibility,
  125. d.created_at,
  126. d.updated_at,
  127. u.nickname,
  128. u.avatar_url,
  129. u.gender,
  130. CASE WHEN dl.id IS NOT NULL THEN 1 ELSE 0 END as is_liked,
  131. CASE WHEN df.id IS NOT NULL THEN 1 ELSE 0 END as is_favorited
  132. FROM user_dynamics d
  133. LEFT JOIN users u ON d.user_id = u.user_id
  134. LEFT JOIN dynamic_likes dl ON d.dynamic_id = dl.dynamic_id AND dl.user_id = #{currentUserId}
  135. LEFT JOIN dynamic_favorites df ON d.dynamic_id = df.dynamic_id AND df.user_id = #{currentUserId}
  136. WHERE d.user_id = #{targetUserId}
  137. AND d.status = 1
  138. AND d.audit_status = 1
  139. ORDER BY d.created_at DESC
  140. </select>
  141. <!-- 管理员修改动态状态(2=封禁 3=删除),并记录备注到 audit_remark -->
  142. <update id="updateDynamicStatus">
  143. UPDATE user_dynamics
  144. SET status = #{status}, audit_remark = CONCAT(COALESCE(audit_remark,''), '\n[MOD]', #{remark}), updated_at = NOW()
  145. WHERE dynamic_id = #{dynamicId}
  146. </update>
  147. <!-- 根据动态ID列表查询动态详情(关联用户信息) -->
  148. <select id="selectDynamicsByIds" resultMap="DynamicWithUserMap">
  149. SELECT
  150. d.dynamic_id,
  151. d.user_id,
  152. d.content,
  153. CAST(d.media_urls AS CHAR) as media_urls,
  154. d.media_type,
  155. d.audit_status,
  156. d.audit_remark,
  157. d.audit_time,
  158. d.audit_admin_id,
  159. d.like_count,
  160. d.comment_count,
  161. d.favorite_count,
  162. d.share_count,
  163. d.view_count,
  164. d.status,
  165. d.visibility,
  166. d.created_at,
  167. d.updated_at,
  168. u.nickname,
  169. u.avatar_url,
  170. u.gender,
  171. CASE WHEN dl.id IS NOT NULL THEN 1 ELSE 0 END as is_liked,
  172. CASE WHEN df.id IS NOT NULL THEN 1 ELSE 0 END as is_favorited
  173. FROM user_dynamics d
  174. LEFT JOIN users u ON d.user_id = u.user_id
  175. LEFT JOIN dynamic_likes dl ON d.dynamic_id = dl.dynamic_id AND dl.user_id = #{userId}
  176. LEFT JOIN dynamic_favorites df ON d.dynamic_id = df.dynamic_id AND df.user_id = #{userId}
  177. WHERE d.dynamic_id IN
  178. <foreach collection="dynamicIds" item="id" open="(" separator="," close=")">
  179. #{id}
  180. </foreach>
  181. AND d.status = 1
  182. AND d.audit_status = 1
  183. ORDER BY d.created_at DESC
  184. </select>
  185. </mapper>