LuTong 3 nedēļas atpakaļ
vecāks
revīzija
639a1d779a

+ 1 - 1
alien-entity/src/main/java/shop/alien/entity/store/LawyerUser.java

@@ -211,7 +211,7 @@ public class LawyerUser extends Model<LawyerUser> {
     @TableField("id_card_back_image")
     private String idCardBackImage;
 
-    @ApiModelProperty(value = "服务评分, 0-100分")
+    @ApiModelProperty(value = "服务评分, 0-5分")
     @TableField("service_score")
     private Integer serviceScore;
 

+ 1 - 1
alien-entity/src/main/java/shop/alien/entity/store/vo/LawyerUserVo.java

@@ -173,7 +173,7 @@ public class LawyerUserVo implements Serializable {
     @TableField("id_card_back_image")
     private String idCardBackImage;
 
-    @ApiModelProperty(value = "服务评分, 0-100分")
+    @ApiModelProperty(value = "服务评分, 0-5分")
     @TableField("service_score")
     private Integer serviceScore;
 

+ 40 - 0
alien-entity/src/main/java/shop/alien/mapper/OrderReviewMapper.java

@@ -72,5 +72,45 @@ public interface OrderReviewMapper extends BaseMapper<OrderReview> {
      * @return 平均评分(1-5星)
      */
     Double getAverageRatingByLawyerUserId(@Param("lawyerUserId") Integer lawyerUserId);
+
+    /**
+     * 统计律师的好评数(4.5-5分)
+     *
+     * @param lawyerUserId 律师用户ID
+     * @return 好评数
+     */
+    Integer getGoodReviewCountByLawyerUserId(@Param("lawyerUserId") Integer lawyerUserId);
+
+    /**
+     * 统计律师的中评数(3-4分)
+     *
+     * @param lawyerUserId 律师用户ID
+     * @return 中评数
+     */
+    Integer getMediumReviewCountByLawyerUserId(@Param("lawyerUserId") Integer lawyerUserId);
+
+    /**
+     * 统计律师的差评数(0-2.5分)
+     *
+     * @param lawyerUserId 律师用户ID
+     * @return 差评数
+     */
+    Integer getBadReviewCountByLawyerUserId(@Param("lawyerUserId") Integer lawyerUserId);
+
+    /**
+     * 根据律师ID和类型分页查询评价列表(包含用户和律师信息)
+     *
+     * @param page 分页对象
+     * @param lawyerUserId 律师用户ID
+     * @param type 查询分类(1:好评,2:中评,3:差评,4:有图,为空时返回全部)
+     * @param currentUserId 当前用户ID(用于判断是否已点赞,可为null)
+     * @return 分页结果
+     */
+    IPage<OrderReviewVo> getReviewListByLawyerAndType(
+            IPage<OrderReviewVo> page,
+            @Param("lawyerUserId") Integer lawyerUserId,
+            @Param("type") Integer type,
+            @Param("currentUserId") Integer currentUserId
+    );
 }
 

+ 118 - 0
alien-entity/src/main/resources/mapper/OrderReviewMapper.xml

@@ -224,5 +224,123 @@
         AND overall_rating IS NOT NULL
     </select>
 
+    <!-- 统计律师的好评数(4.5-5分) -->
+    <select id="getGoodReviewCountByLawyerUserId" resultType="java.lang.Integer">
+        <![CDATA[
+        SELECT COUNT(*)
+        FROM lawyer_order_review
+        WHERE lawyer_user_id = #{lawyerUserId}
+        AND delete_flag = 0
+        AND overall_rating IS NOT NULL
+        AND overall_rating >= 4.5
+        AND overall_rating <= 5
+        ]]>
+    </select>
+
+    <!-- 统计律师的中评数(3-4分) -->
+    <select id="getMediumReviewCountByLawyerUserId" resultType="java.lang.Integer">
+        <![CDATA[
+        SELECT COUNT(*)
+        FROM lawyer_order_review
+        WHERE lawyer_user_id = #{lawyerUserId}
+        AND delete_flag = 0
+        AND overall_rating IS NOT NULL
+        AND overall_rating >= 3
+        AND overall_rating < 4.5
+        ]]>
+    </select>
+
+    <!-- 统计律师的差评数(0-2.5分,包含2.5) -->
+    <select id="getBadReviewCountByLawyerUserId" resultType="java.lang.Integer">
+        <![CDATA[
+        SELECT COUNT(*)
+        FROM lawyer_order_review
+        WHERE lawyer_user_id = #{lawyerUserId}
+        AND delete_flag = 0
+        AND overall_rating IS NOT NULL
+        AND overall_rating >= 0
+        AND overall_rating < 3
+        ]]>
+    </select>
+
+    <!-- 根据律师ID和类型分页查询评价列表(包含用户和律师信息) -->
+    <select id="getReviewListByLawyerAndType" resultMap="OrderReviewVoResultMap">
+        SELECT
+            orv.id,
+            orv.order_id,
+            orv.order_number,
+            orv.user_id,
+            CASE 
+                WHEN orv.is_anonymous = 1 THEN '匿名用户'
+                ELSE lu.user_name
+            END AS user_name,
+            CASE 
+                WHEN orv.is_anonymous = 1 THEN NULL
+                ELSE lu.user_image
+            END AS user_avatar,
+            orv.lawyer_user_id,
+            lu2.name AS lawyer_name,
+            lu2.head_img AS lawyer_avatar,
+            lf.firm_name AS law_firm_name,
+            orv.overall_rating,
+            orv.service_attitude_rating,
+            orv.response_time_rating,
+            orv.professional_ability_rating,
+            orv.review_content,
+            orv.is_anonymous,
+            COALESCE((
+                SELECT COUNT(1) 
+                FROM life_like_record llr_count 
+                WHERE CONVERT(llr_count.huifu_id, CHAR) = CONVERT(orv.id, CHAR)
+                    AND llr_count.type = '7'
+                    AND llr_count.delete_flag = 0
+            ), 0) AS like_count,
+            orv.comment_count,
+            orv.review_images,
+            CASE 
+                WHEN #{currentUserId} IS NOT NULL AND llr.id IS NOT NULL THEN 1
+                ELSE 0
+            END AS is_liked,
+            orv.created_time
+        FROM lawyer_order_review orv
+        LEFT JOIN life_user lu ON lu.id = orv.user_id AND lu.delete_flag = 0
+        LEFT JOIN lawyer_user lu2 ON lu2.id = orv.lawyer_user_id AND lu2.delete_flag = 0
+        LEFT JOIN law_firm lf ON lf.id = lu2.firm_id AND lf.delete_flag = 0
+        LEFT JOIN life_like_record llr ON CONVERT(llr.huifu_id, CHAR) = CONVERT(orv.id, CHAR)
+            AND llr.type = '7' 
+            AND CONVERT(llr.dianzan_id, CHAR) = CONVERT(#{currentUserId}, CHAR)
+            AND llr.delete_flag = 0
+        WHERE orv.delete_flag = 0
+        AND orv.lawyer_user_id = #{lawyerUserId}
+        <if test="type != null">
+            <choose>
+                <when test="type == 1">
+                    <![CDATA[
+                    AND orv.overall_rating >= 4.5
+                    AND orv.overall_rating <= 5
+                    ]]>
+                </when>
+                <when test="type == 2">
+                    <![CDATA[
+                    AND orv.overall_rating >= 3
+                    AND orv.overall_rating < 4.5
+                    ]]>
+                </when>
+                <when test="type == 3">
+                    <![CDATA[
+                    AND orv.overall_rating >= 0
+                    AND orv.overall_rating < 3
+                    ]]>
+                </when>
+                <when test="type == 4">
+                    AND orv.review_images IS NOT NULL
+                    AND orv.review_images != ''
+                    AND TRIM(orv.review_images) != ''
+                </when>
+            </choose>
+        </if>
+        ORDER BY orv.created_time DESC
+    </select>
+
 </mapper>
 

+ 24 - 0
alien-lawyer/src/main/java/shop/alien/lawyer/controller/OrderReviewController.java

@@ -185,5 +185,29 @@ public class OrderReviewController {
         }
         return orderReviewService.getMyReviewList(page, size, userId, currentUserId);
     }
+
+    @ApiOperation("根据律师ID和类型分页查询评价列表(不包含评论)")
+    @ApiOperationSupport(order = 11)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "page", value = "页数(默认1)", dataType = "int", paramType = "query"),
+            @ApiImplicitParam(name = "size", value = "页容(默认10)", dataType = "int", paramType = "query"),
+            @ApiImplicitParam(name = "lawyerUserId", value = "律师用户ID", dataType = "int", paramType = "query", required = true),
+            @ApiImplicitParam(name = "type", value = "查询分类(1:好评,2:中评,3:差评,4:有图,为空时返回全部)", dataType = "int", paramType = "query", required = false),
+            @ApiImplicitParam(name = "currentUserId", value = "当前用户ID(用于判断是否已点赞)", dataType = "int", paramType = "query")
+    })
+    @GetMapping("/list/byLawyerAndType")
+    public R<IPage<OrderReviewVo>> getReviewListByLawyerAndType(
+            @RequestParam(defaultValue = "1") int page,
+            @RequestParam(defaultValue = "10") int size,
+            @RequestParam Integer lawyerUserId,
+            @RequestParam(required = false) Integer type,
+            @RequestParam(required = false) Integer currentUserId) {
+        log.info("OrderReviewController.getReviewListByLawyerAndType?page={}, size={}, lawyerUserId={}, type={}, currentUserId={}", 
+                page, size, lawyerUserId, type, currentUserId);
+        if (lawyerUserId == null) {
+            return R.fail("律师ID不能为空");
+        }
+        return orderReviewService.getReviewListByLawyerAndType(page, size, lawyerUserId, type, currentUserId);
+    }
 }