|
|
@@ -151,7 +151,7 @@ public class OrderReviewServiceImpl extends ServiceImpl<OrderReviewMapper, Order
|
|
|
try {
|
|
|
// 计算平均评分(1-5星)
|
|
|
Double averageRating = orderReviewMapper.getAverageRatingByLawyerUserId(lawyerUserId);
|
|
|
-
|
|
|
+
|
|
|
Integer serviceScore;
|
|
|
if (averageRating != null) {
|
|
|
// 转换为0-5分:service_score = averageRating(四舍五入)
|
|
|
@@ -163,12 +163,12 @@ public class OrderReviewServiceImpl extends ServiceImpl<OrderReviewMapper, Order
|
|
|
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;
|
|
|
@@ -179,7 +179,7 @@ public class OrderReviewServiceImpl extends ServiceImpl<OrderReviewMapper, Order
|
|
|
if (badReviewCount == null) {
|
|
|
badReviewCount = 0;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// 更新律师评分和好评/中评/差评数量
|
|
|
LambdaUpdateWrapper<LawyerUser> updateWrapper = new LambdaUpdateWrapper<>();
|
|
|
updateWrapper.eq(LawyerUser::getId, lawyerUserId);
|
|
|
@@ -188,9 +188,9 @@ public class OrderReviewServiceImpl extends ServiceImpl<OrderReviewMapper, Order
|
|
|
updateWrapper.set(LawyerUser::getMediumReviewCount, mediumReviewCount);
|
|
|
updateWrapper.set(LawyerUser::getBadReviewCount, badReviewCount);
|
|
|
int result = lawyerUserMapper.update(null, updateWrapper);
|
|
|
-
|
|
|
+
|
|
|
if (result > 0) {
|
|
|
- log.info("更新律师评分成功,律师ID={}, 平均评分={}, 服务评分={}, 好评数={}, 中评数={}, 差评数={}",
|
|
|
+ log.info("更新律师评分成功,律师ID={}, 平均评分={}, 服务评分={}, 好评数={}, 中评数={}, 差评数={}",
|
|
|
lawyerUserId, averageRating, serviceScore, goodReviewCount, mediumReviewCount, badReviewCount);
|
|
|
} else {
|
|
|
log.warn("更新律师评分失败,律师ID={}", lawyerUserId);
|
|
|
@@ -294,19 +294,52 @@ public class OrderReviewServiceImpl extends ServiceImpl<OrderReviewMapper, Order
|
|
|
return R.fail("评价ID不能为空");
|
|
|
}
|
|
|
|
|
|
+ if (userId == null) {
|
|
|
+ return R.fail("用户ID不能为空");
|
|
|
+ }
|
|
|
+
|
|
|
// 查询评价
|
|
|
OrderReview review = this.getById(reviewId);
|
|
|
if (review == null) {
|
|
|
return R.fail("评价不存在");
|
|
|
}
|
|
|
|
|
|
- // 当userId有值时,验证是否为评价用户(只能删除自己的评价)
|
|
|
- if (userId != null) {
|
|
|
- if (!review.getUserId().equals(userId)) {
|
|
|
- return R.fail("只能删除自己的评价");
|
|
|
- }
|
|
|
+ // 验证是否为评价用户(只能删除自己的评价)
|
|
|
+ if (!review.getUserId().equals(userId)) {
|
|
|
+ return R.fail("只能删除自己的评价");
|
|
|
+ }
|
|
|
+
|
|
|
+ return deleteReviewInternal(reviewId, userId, review);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R<Boolean> deleteReviewByAdmin(Integer reviewId) {
|
|
|
+ log.info("OrderReviewServiceImpl.deleteReviewByAdmin?reviewId={}", reviewId);
|
|
|
+
|
|
|
+ if (reviewId == null) {
|
|
|
+ return R.fail("评价ID不能为空");
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ // 查询评价
|
|
|
+ OrderReview review = this.getById(reviewId);
|
|
|
+ if (review == null) {
|
|
|
+ return R.fail("评价不存在");
|
|
|
+ }
|
|
|
+
|
|
|
+ return deleteReviewInternal(reviewId, null, review);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 内部删除评价方法(删除评价时,会级联删除该评价下的所有评论和回复)
|
|
|
+ *
|
|
|
+ * @param reviewId 评价ID
|
|
|
+ * @param userId 用户ID(可为null,管理员删除时为空)
|
|
|
+ * @param review 评价对象
|
|
|
+ * @return R<Boolean>
|
|
|
+ */
|
|
|
+ private R<Boolean> deleteReviewInternal(Integer reviewId, Integer userId, OrderReview review) {
|
|
|
+
|
|
|
// 查询该评价下的所有评论
|
|
|
LambdaQueryWrapper<ReviewComment> commentWrapper = new LambdaQueryWrapper<>();
|
|
|
commentWrapper.eq(ReviewComment::getReviewId, reviewId)
|
|
|
@@ -314,18 +347,9 @@ public class OrderReviewServiceImpl extends ServiceImpl<OrderReviewMapper, Order
|
|
|
List<ReviewComment> comments = reviewCommentService.list(commentWrapper);
|
|
|
|
|
|
// 删除评价(逻辑删除)
|
|
|
-// review.setDeleteFlag(1);
|
|
|
-// review.setUpdatedUserId(userId);
|
|
|
-// review.setUpdatedTime(new Date());
|
|
|
-// boolean success = this.updateById(review);
|
|
|
+ int num = orderReviewMapper.deleteById(reviewId);
|
|
|
|
|
|
-
|
|
|
- LambdaUpdateWrapper<OrderReview> updateWrapper = new LambdaUpdateWrapper<>();
|
|
|
- updateWrapper.eq(OrderReview::getId, reviewId);
|
|
|
- updateWrapper.set(OrderReview::getDeleteFlag, 1);
|
|
|
- int num = orderReviewMapper.update(null, updateWrapper);
|
|
|
-
|
|
|
- if (num>0) {
|
|
|
+ if (num > 0) {
|
|
|
// 级联删除该评价下的所有评论和回复
|
|
|
for (ReviewComment comment : comments) {
|
|
|
// 删除评论下的所有回复(逻辑删除)
|
|
|
@@ -351,9 +375,28 @@ public class OrderReviewServiceImpl extends ServiceImpl<OrderReviewMapper, Order
|
|
|
|
|
|
// 更新律师评分
|
|
|
updateLawyerServiceScore(review.getLawyerUserId());
|
|
|
-
|
|
|
+
|
|
|
+ // 管理员删除时,更新订单的 is_appealed 字段为 1
|
|
|
+ if (userId == null && review.getOrderId() != null) {
|
|
|
+ try {
|
|
|
+ LambdaUpdateWrapper<LawyerConsultationOrder> orderUpdateWrapper = new LambdaUpdateWrapper<>();
|
|
|
+ orderUpdateWrapper.eq(LawyerConsultationOrder::getId, review.getOrderId())
|
|
|
+ .set(LawyerConsultationOrder::getIsAppealed, 1);
|
|
|
+ int updateResult = lawyerConsultationOrderMapper.update(null, orderUpdateWrapper);
|
|
|
+ if (updateResult > 0) {
|
|
|
+ log.info("管理员删除评价时,已更新订单的申诉状态,评价ID={}, 订单ID={}", reviewId, review.getOrderId());
|
|
|
+ } else {
|
|
|
+ log.warn("管理员删除评价时,更新订单申诉状态失败,评价ID={}, 订单ID={}", reviewId, review.getOrderId());
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("管理员删除评价时,更新订单申诉状态异常,评价ID={}, 订单ID={}, 错误信息={}",
|
|
|
+ reviewId, review.getOrderId(), e.getMessage(), e);
|
|
|
+ // 更新订单申诉状态失败不影响删除评价的操作
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
if (userId != null) {
|
|
|
- log.info("删除评价成功,评价ID={}, 操作人ID={}", reviewId, userId);
|
|
|
+ log.info("用户删除评价成功,评价ID={}, 操作人ID={}", reviewId, userId);
|
|
|
} else {
|
|
|
log.info("管理员删除评价成功,评价ID={}", reviewId);
|
|
|
}
|
|
|
@@ -555,7 +598,7 @@ public class OrderReviewServiceImpl extends ServiceImpl<OrderReviewMapper, Order
|
|
|
|
|
|
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()) {
|