OrderReviewMapper.xml 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366
  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.OrderReviewMapper">
  4. <!-- 评价列表查询结果映射 -->
  5. <resultMap id="OrderReviewVoResultMap" type="shop.alien.entity.store.vo.OrderReviewVo">
  6. <id column="id" property="id" />
  7. <result column="order_id" property="orderId" />
  8. <result column="order_number" property="orderNumber" />
  9. <result column="user_id" property="userId" />
  10. <result column="user_name" property="userName" />
  11. <result column="user_avatar" property="userAvatar" />
  12. <result column="lawyer_user_id" property="lawyerUserId" />
  13. <result column="lawyer_name" property="lawyerName" />
  14. <result column="lawyer_avatar" property="lawyerAvatar" />
  15. <result column="law_firm_name" property="lawFirmName" />
  16. <result column="overall_rating" property="overallRating" />
  17. <result column="service_attitude_rating" property="serviceAttitudeRating" />
  18. <result column="response_time_rating" property="responseTimeRating" />
  19. <result column="professional_ability_rating" property="professionalAbilityRating" />
  20. <result column="review_content" property="reviewContent" />
  21. <result column="review_images" property="reviewImagesJson" />
  22. <result column="is_anonymous" property="isAnonymous" />
  23. <result column="like_count" property="likeCount" />
  24. <result column="comment_count" property="commentCount" />
  25. <result column="is_liked" property="isLiked" />
  26. <result column="created_time" property="createdTime" />
  27. </resultMap>
  28. <!-- 分页查询评价列表(包含用户和律师信息) -->
  29. <select id="getReviewListWithUser" resultMap="OrderReviewVoResultMap">
  30. SELECT
  31. orv.id,
  32. orv.order_id,
  33. orv.order_number,
  34. orv.user_id,
  35. CASE
  36. WHEN orv.is_anonymous = 1 THEN '匿名用户'
  37. ELSE lu.user_name
  38. END AS user_name,
  39. CASE
  40. WHEN orv.is_anonymous = 1 THEN NULL
  41. ELSE lu.user_image
  42. END AS user_avatar,
  43. orv.lawyer_user_id,
  44. lu2.name AS lawyer_name,
  45. lu2.head_img AS lawyer_avatar,
  46. lf.firm_name AS law_firm_name,
  47. orv.overall_rating,
  48. orv.service_attitude_rating,
  49. orv.response_time_rating,
  50. orv.professional_ability_rating,
  51. orv.review_content,
  52. orv.is_anonymous,
  53. orv.like_count,
  54. orv.comment_count,
  55. orv.review_images,
  56. CASE
  57. WHEN #{currentUserId} IS NOT NULL AND llr.id IS NOT NULL THEN 1
  58. ELSE 0
  59. END AS is_liked,
  60. orv.created_time
  61. FROM lawyer_order_review orv
  62. LEFT JOIN life_user lu ON lu.id = orv.user_id AND lu.delete_flag = 0
  63. LEFT JOIN lawyer_user lu2 ON lu2.id = orv.lawyer_user_id AND lu2.delete_flag = 0
  64. LEFT JOIN law_firm lf ON lf.id = lu2.firm_id AND lf.delete_flag = 0
  65. LEFT JOIN life_like_record llr ON CONVERT(llr.huifu_id, CHAR) = CONVERT(orv.id, CHAR)
  66. AND llr.type = '7'
  67. AND CONVERT(llr.dianzan_id, CHAR) = CONVERT(#{currentUserId}, CHAR)
  68. AND llr.delete_flag = 0
  69. WHERE orv.delete_flag = 0
  70. <if test="orderId != null">
  71. AND orv.order_id = #{orderId}
  72. </if>
  73. <if test="lawyerUserId != null">
  74. AND orv.lawyer_user_id = #{lawyerUserId}
  75. </if>
  76. <if test="userId != null">
  77. AND orv.user_id = #{userId}
  78. </if>
  79. ORDER BY orv.created_time DESC
  80. </select>
  81. <!-- 根据订单ID查询评价 -->
  82. <select id="getReviewByOrderId" resultMap="OrderReviewVoResultMap">
  83. SELECT
  84. orv.id,
  85. orv.order_id,
  86. orv.order_number,
  87. orv.user_id,
  88. CASE
  89. WHEN orv.is_anonymous = 1 THEN '匿名用户'
  90. ELSE lu.user_name
  91. END AS user_name,
  92. CASE
  93. WHEN orv.is_anonymous = 1 THEN NULL
  94. ELSE lu.user_image
  95. END AS user_avatar,
  96. orv.lawyer_user_id,
  97. lu2.name AS lawyer_name,
  98. lu2.head_img AS lawyer_avatar,
  99. lf.firm_name AS law_firm_name,
  100. orv.overall_rating,
  101. orv.service_attitude_rating,
  102. orv.response_time_rating,
  103. orv.professional_ability_rating,
  104. orv.review_content,
  105. orv.is_anonymous,
  106. orv.like_count,
  107. orv.comment_count,
  108. CASE
  109. WHEN #{currentUserId} IS NOT NULL AND llr.id IS NOT NULL THEN 1
  110. ELSE 0
  111. END AS is_liked,
  112. orv.created_time
  113. FROM lawyer_order_review orv
  114. LEFT JOIN life_user lu ON lu.id = orv.user_id AND lu.delete_flag = 0
  115. LEFT JOIN lawyer_user lu2 ON lu2.id = orv.lawyer_user_id AND lu2.delete_flag = 0
  116. LEFT JOIN law_firm lf ON lf.id = lu2.firm_id AND lf.delete_flag = 0
  117. LEFT JOIN life_like_record llr ON CONVERT(llr.huifu_id, CHAR) = CONVERT(orv.id, CHAR)
  118. AND llr.type = '7'
  119. AND CONVERT(llr.dianzan_id, CHAR) = CONVERT(#{currentUserId}, CHAR)
  120. AND llr.delete_flag = 0
  121. WHERE orv.delete_flag = 0
  122. AND orv.order_id = #{orderId}
  123. LIMIT 1
  124. </select>
  125. <!-- 根据评价ID查询评价详情(包含用户和律师信息) -->
  126. <select id="getReviewDetailById" resultMap="OrderReviewVoResultMap">
  127. SELECT
  128. orv.id,
  129. orv.order_id,
  130. orv.order_number,
  131. orv.user_id,
  132. CASE
  133. WHEN orv.is_anonymous = 1 THEN '匿名用户'
  134. ELSE lu.user_name
  135. END AS user_name,
  136. CASE
  137. WHEN orv.is_anonymous = 1 THEN NULL
  138. ELSE lu.user_image
  139. END AS user_avatar,
  140. orv.lawyer_user_id,
  141. lu2.name AS lawyer_name,
  142. lu2.head_img AS lawyer_avatar,
  143. lf.firm_name AS law_firm_name,
  144. orv.overall_rating,
  145. orv.service_attitude_rating,
  146. orv.response_time_rating,
  147. orv.professional_ability_rating,
  148. orv.review_content,
  149. orv.review_images,
  150. orv.is_anonymous,
  151. COALESCE((
  152. SELECT COUNT(1)
  153. FROM life_like_record llr_count
  154. WHERE CONVERT(llr_count.huifu_id, CHAR) = CONVERT(orv.id, CHAR)
  155. AND llr_count.type = '7'
  156. AND llr_count.delete_flag = 0
  157. ), 0) AS like_count,
  158. orv.comment_count,
  159. CASE
  160. WHEN #{currentUserId} IS NOT NULL AND llr.id IS NOT NULL THEN 1
  161. ELSE 0
  162. END AS is_liked,
  163. orv.created_time
  164. FROM lawyer_order_review orv
  165. LEFT JOIN life_user lu ON lu.id = orv.user_id AND lu.delete_flag = 0
  166. LEFT JOIN lawyer_user lu2 ON lu2.id = orv.lawyer_user_id AND lu2.delete_flag = 0
  167. LEFT JOIN law_firm lf ON lf.id = lu2.firm_id AND lf.delete_flag = 0
  168. LEFT JOIN life_like_record llr ON CONVERT(llr.huifu_id, CHAR) = CONVERT(orv.id, CHAR)
  169. AND llr.type = '7'
  170. AND CONVERT(llr.dianzan_id, CHAR) = CONVERT(#{currentUserId}, CHAR)
  171. AND llr.delete_flag = 0
  172. WHERE orv.delete_flag = 0
  173. AND orv.id = #{reviewId}
  174. </select>
  175. <!-- 评价列表结果映射 -->
  176. <resultMap id="PendingReviewVoResultMap" type="shop.alien.entity.store.vo.PendingReviewVo">
  177. <result column="order_id" property="orderId" />
  178. <result column="order_number" property="orderNumber" />
  179. <result column="lawyer_user_id" property="lawyerUserId" />
  180. <result column="lawyer_name" property="lawyerName" />
  181. <result column="lawyer_avatar" property="lawyerAvatar" />
  182. <result column="law_firm_name" property="lawFirmName" />
  183. <result column="overall_rating" property="overallRating" />
  184. <result column="review_content" property="reviewContent" />
  185. <result column="created_time" property="createdTime" />
  186. <result column="completed_time" property="completedTime" />
  187. </resultMap>
  188. <!-- 分页查询待评价列表(查询用户已完成但未评价的订单对应的律师信息) -->
  189. <select id="getPendingReviewList" resultMap="PendingReviewVoResultMap">
  190. SELECT
  191. lco.id AS order_id,
  192. lco.order_number,
  193. lco.lawyer_user_id,
  194. lu.name AS lawyer_name,
  195. lu.head_img AS lawyer_avatar,
  196. lf.firm_name AS law_firm_name,
  197. NULL AS overall_rating,
  198. NULL AS review_content,
  199. lco.end_time AS created_time,
  200. lco.end_time AS completed_time
  201. FROM lawyer_consultation_order lco
  202. LEFT JOIN lawyer_user lu ON lu.id = lco.lawyer_user_id AND lu.delete_flag = 0
  203. LEFT JOIN law_firm lf ON lf.id = lu.firm_id AND lf.delete_flag = 0
  204. LEFT JOIN lawyer_order_review orv ON orv.order_id = lco.id AND orv.delete_flag = 0
  205. WHERE lco.delete_flag = 0
  206. AND lco.order_status = 3
  207. AND lco.is_appealed = 0
  208. AND lco.client_user_id = #{userId}
  209. AND orv.id IS NULL
  210. ORDER BY lco.end_time DESC
  211. </select>
  212. <!-- 计算律师的平均评分(overallRating的平均值) -->
  213. <select id="getAverageRatingByLawyerUserId" resultType="java.lang.Double">
  214. SELECT AVG(overall_rating)
  215. FROM lawyer_order_review
  216. WHERE lawyer_user_id = #{lawyerUserId}
  217. AND delete_flag = 0
  218. AND overall_rating IS NOT NULL
  219. </select>
  220. <!-- 统计律师的好评数(4.5-5分) -->
  221. <select id="getGoodReviewCountByLawyerUserId" resultType="java.lang.Integer">
  222. <![CDATA[
  223. SELECT COUNT(*)
  224. FROM lawyer_order_review
  225. WHERE lawyer_user_id = #{lawyerUserId}
  226. AND delete_flag = 0
  227. AND overall_rating IS NOT NULL
  228. AND overall_rating >= 4.5
  229. AND overall_rating <= 5
  230. ]]>
  231. </select>
  232. <!-- 统计律师的中评数(3-4分) -->
  233. <select id="getMediumReviewCountByLawyerUserId" resultType="java.lang.Integer">
  234. <![CDATA[
  235. SELECT COUNT(*)
  236. FROM lawyer_order_review
  237. WHERE lawyer_user_id = #{lawyerUserId}
  238. AND delete_flag = 0
  239. AND overall_rating IS NOT NULL
  240. AND overall_rating >= 3
  241. AND overall_rating < 4.5
  242. ]]>
  243. </select>
  244. <!-- 统计律师的差评数(0-2.5分,包含2.5) -->
  245. <select id="getBadReviewCountByLawyerUserId" resultType="java.lang.Integer">
  246. <![CDATA[
  247. SELECT COUNT(*)
  248. FROM lawyer_order_review
  249. WHERE lawyer_user_id = #{lawyerUserId}
  250. AND delete_flag = 0
  251. AND overall_rating IS NOT NULL
  252. AND overall_rating >= 0
  253. AND overall_rating < 3
  254. ]]>
  255. </select>
  256. <!-- 统计律师的全部评价数量 -->
  257. <select id="getTotalReviewCountByLawyerUserId" resultType="java.lang.Integer">
  258. SELECT COUNT(*)
  259. FROM lawyer_order_review
  260. WHERE lawyer_user_id = #{lawyerUserId}
  261. AND delete_flag = 0
  262. </select>
  263. <!-- 统计律师的有图评价数量 -->
  264. <select id="getImageReviewCountByLawyerUserId" resultType="java.lang.Integer">
  265. SELECT COUNT(*)
  266. FROM lawyer_order_review
  267. WHERE lawyer_user_id = #{lawyerUserId}
  268. AND delete_flag = 0
  269. AND review_images IS NOT NULL
  270. AND review_images != ''
  271. AND TRIM(review_images) != ''
  272. </select>
  273. <!-- 根据律师ID和类型分页查询评价列表(包含用户和律师信息) -->
  274. <select id="getReviewListByLawyerAndType" resultMap="OrderReviewVoResultMap">
  275. SELECT
  276. orv.id,
  277. orv.order_id,
  278. orv.order_number,
  279. orv.user_id,
  280. CASE
  281. WHEN orv.is_anonymous = 1 THEN '匿名用户'
  282. ELSE lu.user_name
  283. END AS user_name,
  284. CASE
  285. WHEN orv.is_anonymous = 1 THEN NULL
  286. ELSE lu.user_image
  287. END AS user_avatar,
  288. orv.lawyer_user_id,
  289. lu2.name AS lawyer_name,
  290. lu2.head_img AS lawyer_avatar,
  291. lf.firm_name AS law_firm_name,
  292. orv.overall_rating,
  293. orv.service_attitude_rating,
  294. orv.response_time_rating,
  295. orv.professional_ability_rating,
  296. orv.review_content,
  297. orv.is_anonymous,
  298. COALESCE((
  299. SELECT COUNT(1)
  300. FROM life_like_record llr_count
  301. WHERE CONVERT(llr_count.huifu_id, CHAR) = CONVERT(orv.id, CHAR)
  302. AND llr_count.type = '7'
  303. AND llr_count.delete_flag = 0
  304. ), 0) AS like_count,
  305. orv.comment_count,
  306. orv.review_images,
  307. CASE
  308. WHEN #{currentUserId} IS NOT NULL AND llr.id IS NOT NULL THEN 1
  309. ELSE 0
  310. END AS is_liked,
  311. orv.created_time
  312. FROM lawyer_order_review orv
  313. LEFT JOIN life_user lu ON lu.id = orv.user_id AND lu.delete_flag = 0
  314. LEFT JOIN lawyer_user lu2 ON lu2.id = orv.lawyer_user_id AND lu2.delete_flag = 0
  315. LEFT JOIN law_firm lf ON lf.id = lu2.firm_id AND lf.delete_flag = 0
  316. LEFT JOIN life_like_record llr ON CONVERT(llr.huifu_id, CHAR) = CONVERT(orv.id, CHAR)
  317. AND llr.type = '7'
  318. AND CONVERT(llr.dianzan_id, CHAR) = CONVERT(#{currentUserId}, CHAR)
  319. AND llr.delete_flag = 0
  320. WHERE orv.delete_flag = 0
  321. AND orv.lawyer_user_id = #{lawyerUserId}
  322. <if test="type != null">
  323. <choose>
  324. <when test="type == 1">
  325. <![CDATA[
  326. AND orv.overall_rating >= 4.5
  327. AND orv.overall_rating <= 5
  328. ]]>
  329. </when>
  330. <when test="type == 2">
  331. <![CDATA[
  332. AND orv.overall_rating >= 3
  333. AND orv.overall_rating < 4.5
  334. ]]>
  335. </when>
  336. <when test="type == 3">
  337. <![CDATA[
  338. AND orv.overall_rating >= 0
  339. AND orv.overall_rating < 3
  340. ]]>
  341. </when>
  342. <when test="type == 4">
  343. AND orv.review_images IS NOT NULL
  344. AND orv.review_images != ''
  345. AND TRIM(orv.review_images) != ''
  346. </when>
  347. </choose>
  348. </if>
  349. ORDER BY orv.created_time DESC
  350. </select>
  351. </mapper>