فهرست منبع

更新接口 查询律师的全部评价:GET /lawyer/orderReview/list/byLawyerAndType?lawyerUserId=1
查询律师的好评:GET /lawyer/orderReview/list/byLawyerAndType?lawyerUserId=1&type=1
查询律师的中评:GET /lawyer/orderReview/list/byLawyerAndType?lawyerUserId=1&type=2
查询律师的差评:GET /lawyer/orderReview/list/byLawyerAndType?lawyerUserId=1&type=3
查询律师的有图评价:GET /lawyer/orderReview/list/byLawyerAndType?lawyerUserId=1&type=4

LuTong 3 هفته پیش
والد
کامیت
10b3d801d8

+ 12 - 0
alien-lawyer/src/main/java/shop/alien/lawyer/service/OrderReviewService.java

@@ -106,5 +106,17 @@ public interface OrderReviewService extends IService<OrderReview> {
      */
     R<IPage<OrderReviewVo>> getMyReviewList(int pageNum, int pageSize, Integer userId, Integer currentUserId);
 
+    /**
+     * 根据律师ID和类型分页查询评价列表(不包含评论)
+     *
+     * @param pageNum 页码
+     * @param pageSize 页大小
+     * @param lawyerUserId 律师用户ID
+     * @param type 查询分类(1:好评,2:中评,3:差评,4:有图,为空时返回全部)
+     * @param currentUserId 当前用户ID(用于判断是否已点赞,可为null)
+     * @return R<IPage<OrderReviewVo>>
+     */
+    R<IPage<OrderReviewVo>> getReviewListByLawyerAndType(int pageNum, int pageSize, Integer lawyerUserId, Integer type, Integer currentUserId);
+
 }
 

+ 2 - 2
alien-lawyer/src/main/java/shop/alien/lawyer/service/impl/LawyerUserServiceImpl.java

@@ -135,8 +135,8 @@ public class LawyerUserServiceImpl extends ServiceImpl<LawyerUserMapper, LawyerU
         result.put("education", lawyer.getEducationBackground() != null ? lawyer.getEducationBackground() : "");
         result.put("credentials", new ArrayList<>());  // TODO: 需要查询资质证书
         result.put("caseCount", lawyer.getServiceCount() != null ? lawyer.getServiceCount() : 0);
-        // 评分:服务评分转换为0-5星评分
-        result.put("rating", lawyer.getServiceScore() != null ? lawyer.getServiceScore() / 20.0 : 0.0);
+        // 评分:服务评分已经是0-5分,直接转换为Double类型
+        result.put("rating", lawyer.getServiceScore() != null ? lawyer.getServiceScore().doubleValue() : 0.0);
         result.put("reviewCount", lawyer.getGoodReviewCount() != null ?
                 (lawyer.getGoodReviewCount() + (lawyer.getMediumReviewCount() != null ? lawyer.getMediumReviewCount() : 0) +
                         (lawyer.getBadReviewCount() != null ? lawyer.getBadReviewCount() : 0)) : 0);

+ 62 - 8
alien-lawyer/src/main/java/shop/alien/lawyer/service/impl/OrderReviewServiceImpl.java

@@ -135,8 +135,9 @@ public class OrderReviewServiceImpl extends ServiceImpl<OrderReviewMapper, Order
     }
 
     /**
-     * 更新律师服务评分
-     * 计算公式:律师评分 = (overallRating平均值) * 20 (转换为0-100分)
+     * 更新律师服务评分和好评/中评/差评数量
+     * 计算公式:律师评分 = overallRating平均值 (转换为0-5分)
+     * 评分规则:0-2.5分=差评,3-4分=中评,4.5-5分=好评
      *
      * @param lawyerUserId 律师用户ID
      */
@@ -152,24 +153,44 @@ public class OrderReviewServiceImpl extends ServiceImpl<OrderReviewMapper, Order
             
             Integer serviceScore;
             if (averageRating != null) {
-                // 转换为0-100分:service_score = averageRating * 20
-                serviceScore = (int) Math.round(averageRating * 20);
-                // 确保在0-100范围内
-                serviceScore = Math.max(0, Math.min(100, serviceScore));
+                // 转换为0-5分:service_score = averageRating(四舍五入)
+                serviceScore = (int) Math.round(averageRating);
+                // 确保在0-5范围内
+                serviceScore = Math.max(0, Math.min(5, serviceScore));
             } else {
                 // 如果没有评价,设置为0
                 serviceScore = 0;
                 log.info("律师暂无评价,将评分设置为0,律师ID={}", lawyerUserId);
             }
             
-            // 更新律师评分
+            // 统计好评、中评、差评数量
+            Integer goodReviewCount = orderReviewMapper.getGoodReviewCountByLawyerUserId(lawyerUserId);
+            Integer mediumReviewCount = orderReviewMapper.getMediumReviewCountByLawyerUserId(lawyerUserId);
+            Integer badReviewCount = orderReviewMapper.getBadReviewCountByLawyerUserId(lawyerUserId);
+            
+            // 处理空值
+            if (goodReviewCount == null) {
+                goodReviewCount = 0;
+            }
+            if (mediumReviewCount == null) {
+                mediumReviewCount = 0;
+            }
+            if (badReviewCount == null) {
+                badReviewCount = 0;
+            }
+            
+            // 更新律师评分和好评/中评/差评数量
             LambdaUpdateWrapper<LawyerUser> updateWrapper = new LambdaUpdateWrapper<>();
             updateWrapper.eq(LawyerUser::getId, lawyerUserId);
             updateWrapper.set(LawyerUser::getServiceScore, serviceScore);
+            updateWrapper.set(LawyerUser::getGoodReviewCount, goodReviewCount);
+            updateWrapper.set(LawyerUser::getMediumReviewCount, mediumReviewCount);
+            updateWrapper.set(LawyerUser::getBadReviewCount, badReviewCount);
             int result = lawyerUserMapper.update(null, updateWrapper);
             
             if (result > 0) {
-                log.info("更新律师评分成功,律师ID={}, 平均评分={}, 服务评分={}", lawyerUserId, averageRating, serviceScore);
+                log.info("更新律师评分成功,律师ID={}, 平均评分={}, 服务评分={}, 好评数={}, 中评数={}, 差评数={}", 
+                        lawyerUserId, averageRating, serviceScore, goodReviewCount, mediumReviewCount, badReviewCount);
             } else {
                 log.warn("更新律师评分失败,律师ID={}", lawyerUserId);
             }
@@ -513,5 +534,38 @@ public class OrderReviewServiceImpl extends ServiceImpl<OrderReviewMapper, Order
             return R.data(true, "未点赞");
         }
     }
+
+    @Override
+    public R<IPage<OrderReviewVo>> getReviewListByLawyerAndType(int pageNum, int pageSize, Integer lawyerUserId, Integer type, Integer currentUserId) {
+        log.info("OrderReviewServiceImpl.getReviewListByLawyerAndType?pageNum={}, pageSize={}, lawyerUserId={}, type={}, currentUserId={}",
+                pageNum, pageSize, lawyerUserId, type, currentUserId);
+
+        if (lawyerUserId == null) {
+            return R.fail("律师ID不能为空");
+        }
+
+        Page<OrderReviewVo> page = new Page<>(pageNum, pageSize);
+        IPage<OrderReviewVo> result = orderReviewMapper.getReviewListByLawyerAndType(page, lawyerUserId, type, currentUserId);
+        
+        // 处理评价图片JSON字符串转换为列表
+        if (result.getRecords() != null) {
+            for (OrderReviewVo vo : result.getRecords()) {
+                // 处理评价图片:从JSON字符串解析为List
+                if (vo.getReviewImagesJson() != null && !vo.getReviewImagesJson().trim().isEmpty()) {
+                    try {
+                        List<String> images = JSON.parseArray(vo.getReviewImagesJson(), String.class);
+                        vo.setReviewImages(images != null ? images : new ArrayList<>());
+                    } catch (Exception e) {
+                        log.warn("解析评价图片失败:{}", e.getMessage());
+                        vo.setReviewImages(new ArrayList<>());
+                    }
+                } else {
+                    vo.setReviewImages(new ArrayList<>());
+                }
+            }
+        }
+
+        return R.data(result);
+    }
 }
 

+ 2 - 2
alien-store/src/main/java/shop/alien/store/service/impl/LawyerUserServiceImpl.java

@@ -126,8 +126,8 @@ public class LawyerUserServiceImpl extends ServiceImpl<LawyerUserMapper, LawyerU
         result.put("education", lawyer.getEducationBackground() != null ? lawyer.getEducationBackground() : "");
         result.put("credentials", new ArrayList<>());  // TODO: 需要查询资质证书
         result.put("caseCount", lawyer.getServiceCount() != null ? lawyer.getServiceCount() : 0);
-        // 评分:服务评分转换为0-5星评分
-        result.put("rating", lawyer.getServiceScore() != null ? lawyer.getServiceScore() / 20.0 : 0.0);
+        // 评分:服务评分已经是0-5分,直接转换为Double类型
+        result.put("rating", lawyer.getServiceScore() != null ? lawyer.getServiceScore().doubleValue() : 0.0);
         result.put("reviewCount", lawyer.getGoodReviewCount() != null ?
                 (lawyer.getGoodReviewCount() + (lawyer.getMediumReviewCount() != null ? lawyer.getMediumReviewCount() : 0) +
                  (lawyer.getBadReviewCount() != null ? lawyer.getBadReviewCount() : 0)) : 0);