ReviewCommentMapper.xml 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  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="shop.alien.mapper.ReviewCommentMapper">
  4. <!-- 评论列表查询结果映射 -->
  5. <resultMap id="ReviewCommentVoResultMap" type="shop.alien.entity.store.vo.ReviewCommentVo">
  6. <id column="id" property="id" />
  7. <result column="review_id" property="reviewId" />
  8. <result column="send_user_id" property="sendUserId" />
  9. <result column="receive_user_id" property="receiveUserId" />
  10. <!-- send_user_name: 发送用户名称(根据 send_user_id 和 send_user_type 查询) -->
  11. <result column="send_user_name" property="sendUserName" />
  12. <result column="user_avatar" property="userAvatar" />
  13. <!-- receive_user_name: 接收用户名称(根据 receive_user_id 和 receive_user_type 查询) -->
  14. <result column="receive_user_name" property="receiveUserName" />
  15. <result column="send_user_type" property="sendUserType" />
  16. <result column="receive_user_type" property="receiveUserType" />
  17. <result column="comment_content" property="commentContent" />
  18. <result column="like_count" property="likeCount" />
  19. <result column="reply_count" property="replyCount" />
  20. <result column="head_type" property="headType" />
  21. <result column="head_id" property="headId" />
  22. <result column="is_liked" property="isLiked" />
  23. <result column="created_time" property="createdTime" />
  24. </resultMap>
  25. <!-- 根据评价ID查询评论列表(包含用户信息) -->
  26. <!-- 评论列表中的 sendUserName 和 receiveUserName 根据 sendUserType 和 receiveUserType 分别从对应的表中查询 -->
  27. <select id="getCommentListByReviewId" resultMap="ReviewCommentVoResultMap">
  28. SELECT
  29. rc.id,
  30. rc.review_id,
  31. rc.send_user_id,
  32. rc.receive_user_id,
  33. -- 发送用户名称:根据 sendUserType 分别查询普通用户表和律师表
  34. -- sendUserType = 2(律师):优先从 lawyer_user 表查询,如果没有则从 life_user 表查询
  35. -- sendUserType = 1 或 NULL(普通用户):优先从 life_user 表查询,如果没有则从 lawyer_user 表查询
  36. CASE
  37. WHEN rc.send_user_type = 2 THEN COALESCE(lu_lawyer.name, lu_user.user_name)
  38. WHEN rc.send_user_type = 1 OR rc.send_user_type IS NULL THEN COALESCE(lu_user.user_name, lu_lawyer.name)
  39. ELSE COALESCE(lu_user.user_name, lu_lawyer.name)
  40. END AS send_user_name,
  41. -- 发送用户头像:根据 sendUserType 分别查询普通用户表和律师表
  42. CASE
  43. WHEN rc.send_user_type = 2 THEN COALESCE(lu_lawyer.head_img, lu_user.user_image)
  44. WHEN rc.send_user_type = 1 OR rc.send_user_type IS NULL THEN COALESCE(lu_user.user_image, lu_lawyer.head_img)
  45. ELSE COALESCE(lu_user.user_image, lu_lawyer.head_img)
  46. END AS user_avatar,
  47. -- 接收用户名称:根据 receiveUserType 严格从对应的表中查询
  48. -- receiveUserType = 2(律师):只从 lawyer_user 表查询
  49. -- receiveUserType = 1 或 NULL(普通用户):只从 life_user 表查询
  50. CASE
  51. WHEN rc.receive_user_type = 2 THEN lu_lawyer2.name
  52. WHEN rc.receive_user_type = 1 OR rc.receive_user_type IS NULL THEN lu_user2.user_name
  53. ELSE NULL
  54. END AS receive_user_name,
  55. rc.send_user_type,
  56. rc.receive_user_type,
  57. rc.comment_content,
  58. rc.like_count,
  59. rc.reply_count,
  60. rc.head_type,
  61. rc.head_id,
  62. CASE
  63. WHEN #{currentUserId} IS NOT NULL AND llr.id IS NOT NULL THEN 1
  64. ELSE 0
  65. END AS is_liked,
  66. rc.created_time
  67. FROM lawyer_review_comment rc
  68. -- 发送用户:普通用户表(先 JOIN,不限制类型)
  69. LEFT JOIN life_user lu_user ON lu_user.id = rc.send_user_id
  70. AND lu_user.delete_flag = 0
  71. -- 发送用户:律师表(先 JOIN,不限制类型)
  72. LEFT JOIN lawyer_user lu_lawyer ON lu_lawyer.id = rc.send_user_id
  73. AND lu_lawyer.delete_flag = 0
  74. -- 接收用户:普通用户表(先 JOIN,不限制类型)
  75. LEFT JOIN life_user lu_user2 ON lu_user2.id = rc.receive_user_id
  76. AND lu_user2.delete_flag = 0
  77. -- 接收用户:律师表(先 JOIN,不限制类型)
  78. LEFT JOIN lawyer_user lu_lawyer2 ON lu_lawyer2.id = rc.receive_user_id
  79. AND lu_lawyer2.delete_flag = 0
  80. -- 如果 receive_user_id 在用户表中查询不到,尝试从评论表查询(处理 receive_user_id 可能是评论 ID 的情况)
  81. LEFT JOIN lawyer_review_comment rc_comment ON rc_comment.id = rc.receive_user_id
  82. AND rc_comment.delete_flag = 0
  83. LEFT JOIN life_user lu_user_comment ON lu_user_comment.id = rc_comment.send_user_id
  84. AND lu_user_comment.delete_flag = 0
  85. LEFT JOIN lawyer_user lu_lawyer_comment ON lu_lawyer_comment.id = rc_comment.send_user_id
  86. AND lu_lawyer_comment.delete_flag = 0
  87. LEFT JOIN life_like_record llr ON CONVERT(llr.huifu_id, CHAR) = CONVERT(rc.id, CHAR)
  88. AND llr.type = '8'
  89. AND CONVERT(llr.dianzan_id, CHAR) = CONVERT(#{currentUserId}, CHAR)
  90. AND llr.delete_flag = 0
  91. WHERE rc.delete_flag = 0
  92. AND rc.review_id = #{reviewId}
  93. AND rc.head_type = 0
  94. ORDER BY rc.created_time DESC
  95. </select>
  96. <!-- 根据首评ID查询回复列表(包含用户信息) -->
  97. <!-- 回复列表中的 sendUserName 和 receiveUserName 根据 sendUserType 和 receiveUserType 分别从对应的表中查询 -->
  98. <select id="getReplyListByHeadId" resultMap="ReviewCommentVoResultMap">
  99. SELECT
  100. rc.id,
  101. rc.review_id,
  102. rc.send_user_id,
  103. rc.receive_user_id,
  104. -- 发送用户名称:根据 sendUserType 分别查询普通用户表和律师表
  105. -- sendUserType = 2(律师):优先从 lawyer_user 表查询,如果没有则从 life_user 表查询
  106. -- sendUserType = 1 或 NULL(普通用户):优先从 life_user 表查询,如果没有则从 lawyer_user 表查询
  107. CASE
  108. WHEN rc.send_user_type = 2 THEN COALESCE(lu_lawyer.name, lu_user.user_name)
  109. WHEN rc.send_user_type = 1 OR rc.send_user_type IS NULL THEN COALESCE(lu_user.user_name, lu_lawyer.name)
  110. ELSE COALESCE(lu_user.user_name, lu_lawyer.name)
  111. END AS send_user_name,
  112. -- 发送用户头像:根据 sendUserType 分别查询普通用户表和律师表
  113. CASE
  114. WHEN rc.send_user_type = 2 THEN COALESCE(lu_lawyer.head_img, lu_user.user_image)
  115. WHEN rc.send_user_type = 1 OR rc.send_user_type IS NULL THEN COALESCE(lu_user.user_image, lu_lawyer.head_img)
  116. ELSE COALESCE(lu_user.user_image, lu_lawyer.head_img)
  117. END AS user_avatar,
  118. -- 接收用户名称:根据 receiveUserType 严格从对应的表中查询
  119. -- receiveUserType = 2(律师):只从 lawyer_user 表查询
  120. -- receiveUserType = 1 或 NULL(普通用户):只从 life_user 表查询
  121. CASE
  122. WHEN rc.receive_user_type = 2 THEN lu_lawyer2.name
  123. WHEN rc.receive_user_type = 1 OR rc.receive_user_type IS NULL THEN lu_user2.user_name
  124. ELSE NULL
  125. END AS receive_user_name,
  126. rc.send_user_type,
  127. rc.receive_user_type,
  128. rc.comment_content,
  129. rc.like_count,
  130. rc.reply_count,
  131. rc.head_type,
  132. rc.head_id,
  133. CASE
  134. WHEN #{currentUserId} IS NOT NULL AND llr.id IS NOT NULL THEN 1
  135. ELSE 0
  136. END AS is_liked,
  137. rc.created_time
  138. FROM lawyer_review_comment rc
  139. -- 发送用户:普通用户表(先 JOIN,不限制类型)
  140. LEFT JOIN life_user lu_user ON lu_user.id = rc.send_user_id
  141. AND lu_user.delete_flag = 0
  142. -- 发送用户:律师表(先 JOIN,不限制类型)
  143. LEFT JOIN lawyer_user lu_lawyer ON lu_lawyer.id = rc.send_user_id
  144. AND lu_lawyer.delete_flag = 0
  145. -- 接收用户:普通用户表(先 JOIN,不限制类型)
  146. LEFT JOIN life_user lu_user2 ON lu_user2.id = rc.receive_user_id
  147. AND lu_user2.delete_flag = 0
  148. -- 接收用户:律师表(先 JOIN,不限制类型)
  149. LEFT JOIN lawyer_user lu_lawyer2 ON lu_lawyer2.id = rc.receive_user_id
  150. AND lu_lawyer2.delete_flag = 0
  151. -- 如果 receive_user_id 在用户表中查询不到,尝试从评论表查询(处理 receive_user_id 可能是评论 ID 的情况)
  152. LEFT JOIN lawyer_review_comment rc_comment ON rc_comment.id = rc.receive_user_id
  153. AND rc_comment.delete_flag = 0
  154. LEFT JOIN life_user lu_user_comment ON lu_user_comment.id = rc_comment.send_user_id
  155. AND lu_user_comment.delete_flag = 0
  156. LEFT JOIN lawyer_user lu_lawyer_comment ON lu_lawyer_comment.id = rc_comment.send_user_id
  157. AND lu_lawyer_comment.delete_flag = 0
  158. LEFT JOIN life_like_record llr ON CONVERT(llr.huifu_id, CHAR) = CONVERT(rc.id, CHAR)
  159. AND llr.type = '8'
  160. AND CONVERT(llr.dianzan_id, CHAR) = CONVERT(#{currentUserId}, CHAR)
  161. AND llr.delete_flag = 0
  162. WHERE rc.delete_flag = 0
  163. AND rc.head_id = #{headId}
  164. AND rc.head_type = 1
  165. ORDER BY rc.created_time ASC
  166. </select>
  167. <!-- 根据评价ID查询评论数量(只统计首评论) -->
  168. <select id="getCommentCountByReviewId" resultType="java.lang.Integer">
  169. SELECT COUNT(*)
  170. FROM lawyer_review_comment
  171. WHERE delete_flag = 0
  172. AND review_id = #{reviewId}
  173. AND head_type = 0
  174. </select>
  175. <!-- 根据评价ID查询总评论数量(包括首评论和子评论) -->
  176. <select id="getTotalCommentCountByReviewId" resultType="java.lang.Integer">
  177. SELECT COUNT(*)
  178. FROM lawyer_review_comment
  179. WHERE delete_flag = 0
  180. AND review_id = #{reviewId}
  181. </select>
  182. </mapper>