OrderReviewMapper.xml 17 KB

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