StoreStaffReviewMapper.xml 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  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.StoreStaffReviewMapper">
  4. <!-- 评价列表查询结果映射 -->
  5. <resultMap id="StoreStaffReviewVoResultMap" type="shop.alien.entity.store.vo.StoreStaffReviewVo">
  6. <id column="id" property="id" />
  7. <result column="user_id" property="userId" />
  8. <result column="user_name" property="userName" />
  9. <result column="user_avatar" property="userAvatar" />
  10. <result column="staff_user_id" property="staffUserId" />
  11. <result column="staff_name" property="staffName" />
  12. <result column="staff_avatar" property="staffAvatar" />
  13. <result column="overall_rating" property="overallRating" />
  14. <result column="service_attitude_rating" property="serviceAttitudeRating" />
  15. <result column="response_time_rating" property="responseTimeRating" />
  16. <result column="professional_ability_rating" property="professionalAbilityRating" />
  17. <result column="review_content" property="reviewContent" />
  18. <result column="review_images" property="reviewImagesJson" />
  19. <result column="is_anonymous" property="isAnonymous" />
  20. <result column="like_count" property="likeCount" />
  21. <result column="comment_count" property="commentCount" />
  22. <result column="is_liked" property="isLiked" />
  23. <result column="created_time" property="createdTime" />
  24. <result column="appeal_id" property="appealId" />
  25. </resultMap>
  26. <!-- 分页查询评价列表(包含用户和员工信息) -->
  27. <select id="getReviewListWithUser" resultMap="StoreStaffReviewVoResultMap">
  28. SELECT
  29. ssr.id,
  30. ssr.user_id,
  31. CASE
  32. WHEN ssr.is_anonymous = 1 THEN '匿名用户'
  33. ELSE lu.user_name
  34. END AS user_name,
  35. CASE
  36. WHEN ssr.is_anonymous = 1 THEN NULL
  37. ELSE lu.user_image
  38. END AS user_avatar,
  39. ssr.staff_user_id,
  40. sp.personnel_name AS staff_name,
  41. si.img_url AS staff_avatar,
  42. ssr.overall_rating,
  43. ssr.service_attitude_rating,
  44. ssr.response_time_rating,
  45. ssr.professional_ability_rating,
  46. ssr.review_content,
  47. ssr.is_anonymous,
  48. ssr.like_count,
  49. ssr.comment_count,
  50. ssr.review_images,
  51. CASE
  52. WHEN #{currentUserId} IS NOT NULL AND llr.id IS NOT NULL THEN 1
  53. ELSE 0
  54. END AS is_liked,
  55. ssr.created_time,
  56. ssr.appeal_id
  57. FROM store_staff_review ssr
  58. LEFT JOIN life_user lu ON lu.id = ssr.user_id AND lu.delete_flag = 0
  59. LEFT JOIN store_personnel sp ON sp.id = ssr.staff_user_id AND sp.delete_flag = 0
  60. LEFT JOIN store_img si ON si.id = sp.img_id AND si.delete_flag = 0
  61. LEFT JOIN life_like_record llr ON CONVERT(llr.huifu_id, CHAR) = CONVERT(ssr.id, CHAR)
  62. AND llr.type = '9'
  63. AND CONVERT(llr.dianzan_id, CHAR) = CONVERT(#{currentUserId}, CHAR)
  64. AND llr.delete_flag = 0
  65. WHERE ssr.delete_flag = 0
  66. AND ssr.audit_status = 1
  67. <if test="staffUserId != null">
  68. AND ssr.staff_user_id = #{staffUserId}
  69. </if>
  70. <if test="userId != null">
  71. AND ssr.user_id = #{userId}
  72. </if>
  73. ORDER BY ssr.created_time DESC
  74. </select>
  75. <!-- 根据评价ID查询评价详情(包含用户和员工信息) -->
  76. <select id="getReviewDetailById" resultMap="StoreStaffReviewVoResultMap">
  77. SELECT
  78. ssr.id,
  79. ssr.user_id,
  80. CASE
  81. WHEN ssr.is_anonymous = 1 THEN '匿名用户'
  82. ELSE lu.user_name
  83. END AS user_name,
  84. CASE
  85. WHEN ssr.is_anonymous = 1 THEN NULL
  86. ELSE lu.user_image
  87. END AS user_avatar,
  88. ssr.staff_user_id,
  89. sp.personnel_name AS staff_name,
  90. si.img_url AS staff_avatar,
  91. ssr.overall_rating,
  92. ssr.service_attitude_rating,
  93. ssr.response_time_rating,
  94. ssr.professional_ability_rating,
  95. ssr.review_content,
  96. ssr.is_anonymous,
  97. ssr.like_count,
  98. ssr.comment_count,
  99. ssr.review_images,
  100. CASE
  101. WHEN #{currentUserId} IS NOT NULL AND llr.id IS NOT NULL THEN 1
  102. ELSE 0
  103. END AS is_liked,
  104. ssr.created_time,
  105. ssr.appeal_id
  106. FROM store_staff_review ssr
  107. LEFT JOIN life_user lu ON lu.id = ssr.user_id AND lu.delete_flag = 0
  108. LEFT JOIN store_personnel sp ON sp.id = ssr.staff_user_id AND sp.delete_flag = 0
  109. LEFT JOIN store_img si ON si.id = sp.img_id AND si.delete_flag = 0
  110. LEFT JOIN life_like_record llr ON CONVERT(llr.huifu_id, CHAR) = CONVERT(ssr.id, CHAR)
  111. AND llr.type = '9'
  112. AND CONVERT(llr.dianzan_id, CHAR) = CONVERT(#{currentUserId}, CHAR)
  113. AND llr.delete_flag = 0
  114. WHERE ssr.delete_flag = 0
  115. AND ssr.id = #{reviewId}
  116. LIMIT 1
  117. </select>
  118. <!-- 计算员工的平均评分(overallRating的平均值) -->
  119. <select id="getAverageRatingByStaffUserId" resultType="java.math.BigDecimal">
  120. SELECT
  121. COALESCE(AVG(overall_rating), 0) AS average_rating
  122. FROM store_staff_review
  123. WHERE staff_user_id = #{staffUserId}
  124. AND delete_flag = 0
  125. AND overall_rating IS NOT NULL
  126. </select>
  127. <!-- 统计员工的全部评价数量 -->
  128. <select id="getTotalReviewCountByStaffUserId" resultType="java.lang.Integer">
  129. SELECT COUNT(*)
  130. FROM store_staff_review
  131. WHERE staff_user_id = #{staffUserId}
  132. AND audit_status = 1
  133. AND delete_flag = 0
  134. </select>
  135. <!-- 统计员工的好评数(4.5-5分) -->
  136. <select id="getGoodReviewCountByStaffUserId" resultType="java.lang.Integer">
  137. <![CDATA[
  138. SELECT COUNT(*)
  139. FROM store_staff_review
  140. WHERE staff_user_id = #{staffUserId}
  141. AND audit_status = 1
  142. AND delete_flag = 0
  143. AND overall_rating IS NOT NULL
  144. AND overall_rating >= 4.5
  145. AND overall_rating <= 5
  146. ]]>
  147. </select>
  148. <!-- 统计员工的中评数(3-4分) -->
  149. <select id="getMediumReviewCountByStaffUserId" resultType="java.lang.Integer">
  150. <![CDATA[
  151. SELECT COUNT(*)
  152. FROM store_staff_review
  153. WHERE staff_user_id = #{staffUserId}
  154. AND audit_status = 1
  155. AND delete_flag = 0
  156. AND overall_rating IS NOT NULL
  157. AND overall_rating >= 3
  158. AND overall_rating < 4.5
  159. ]]>
  160. </select>
  161. <!-- 统计员工的差评数(0-2.5分,包含2.5) -->
  162. <select id="getBadReviewCountByStaffUserId" resultType="java.lang.Integer">
  163. <![CDATA[
  164. SELECT COUNT(*)
  165. FROM store_staff_review
  166. WHERE staff_user_id = #{staffUserId}
  167. AND audit_status = 1
  168. AND delete_flag = 0
  169. AND overall_rating IS NOT NULL
  170. AND overall_rating >= 0
  171. AND overall_rating < 3
  172. ]]>
  173. </select>
  174. <!-- 统计员工的有图评价数量 -->
  175. <select id="getImageReviewCountByStaffUserId" resultType="java.lang.Integer">
  176. SELECT COUNT(*)
  177. FROM store_staff_review
  178. WHERE staff_user_id = #{staffUserId}
  179. AND audit_status = 1
  180. AND delete_flag = 0
  181. AND review_images IS NOT NULL
  182. AND review_images != ''
  183. AND TRIM(review_images) != ''
  184. </select>
  185. <!-- 根据员工ID和类型分页查询评价列表(包含用户和员工信息) -->
  186. <select id="getReviewListByStaffAndType" resultMap="StoreStaffReviewVoResultMap">
  187. SELECT
  188. ssr.id,
  189. ssr.user_id,
  190. CASE
  191. WHEN ssr.is_anonymous = 1 THEN '匿名用户'
  192. ELSE lu.user_name
  193. END AS user_name,
  194. CASE
  195. WHEN ssr.is_anonymous = 1 THEN NULL
  196. ELSE lu.user_image
  197. END AS user_avatar,
  198. ssr.staff_user_id,
  199. sp.personnel_name AS staff_name,
  200. si.img_url AS staff_avatar,
  201. ssr.overall_rating,
  202. ssr.service_attitude_rating,
  203. ssr.response_time_rating,
  204. ssr.professional_ability_rating,
  205. ssr.review_content,
  206. ssr.is_anonymous,
  207. COALESCE((
  208. SELECT COUNT(1)
  209. FROM life_like_record llr_count
  210. WHERE CONVERT(llr_count.huifu_id, CHAR) = CONVERT(ssr.id, CHAR)
  211. AND llr_count.type = '9'
  212. AND llr_count.delete_flag = 0
  213. ), 0) AS like_count,
  214. ssr.comment_count,
  215. ssr.review_images,
  216. CASE
  217. WHEN #{currentUserId} IS NOT NULL AND llr.id IS NOT NULL THEN 1
  218. ELSE 0
  219. END AS is_liked,
  220. ssr.created_time,
  221. ssr.appeal_id
  222. FROM store_staff_review ssr
  223. LEFT JOIN life_user lu ON lu.id = ssr.user_id AND lu.delete_flag = 0
  224. LEFT JOIN store_personnel sp ON sp.id = ssr.staff_user_id AND sp.delete_flag = 0
  225. LEFT JOIN store_img si ON si.id = sp.img_id AND si.delete_flag = 0
  226. LEFT JOIN life_like_record llr ON CONVERT(llr.huifu_id, CHAR) = CONVERT(ssr.id, CHAR)
  227. AND llr.type = '9'
  228. AND CONVERT(llr.dianzan_id, CHAR) = CONVERT(#{currentUserId}, CHAR)
  229. AND llr.delete_flag = 0
  230. WHERE ssr.delete_flag = 0
  231. AND ssr.audit_status = 1
  232. AND ssr.staff_user_id = #{staffUserId}
  233. <if test="type != null">
  234. <choose>
  235. <when test="type == 1">
  236. <![CDATA[
  237. AND ssr.overall_rating >= 4.5
  238. AND ssr.overall_rating <= 5
  239. ]]>
  240. </when>
  241. <when test="type == 2">
  242. <![CDATA[
  243. AND ssr.overall_rating >= 3
  244. AND ssr.overall_rating < 4.5
  245. ]]>
  246. </when>
  247. <when test="type == 3">
  248. <![CDATA[
  249. AND ssr.overall_rating >= 0
  250. AND ssr.overall_rating < 3
  251. ]]>
  252. </when>
  253. <when test="type == 4">
  254. AND ssr.review_images IS NOT NULL
  255. AND ssr.review_images != ''
  256. AND TRIM(ssr.review_images) != ''
  257. </when>
  258. </choose>
  259. </if>
  260. ORDER BY ssr.created_time DESC
  261. </select>
  262. </mapper>