|
|
@@ -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);
|
|
|
+ }
|
|
|
}
|
|
|
|