OrderReviewMapper.xml 16 KB

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