LuTong 2 долоо хоног өмнө
parent
commit
8dff416a26

+ 4 - 0
alien-entity/src/main/java/shop/alien/entity/store/LawyerConsultationOrder.java

@@ -169,6 +169,10 @@ public class LawyerConsultationOrder extends Model<LawyerConsultationOrder> {
     @TableField("reject_refund_reason")
     private String rejectRefundReason;
 
+    @ApiModelProperty(value = "是否已被申诉, 0:未申诉, 1:已申诉")
+    @TableField("is_appealed")
+    private Integer isAppealed;
+
     @ApiModelProperty(value = "退款申请处理动作:1-同意,2-拒绝")
     @TableField(exist = false)
     private String processAction;

+ 23 - 9
alien-lawyer/src/main/java/shop/alien/lawyer/controller/OrderReviewController.java

@@ -119,22 +119,36 @@ public class OrderReviewController {
         return orderReviewService.getReviewList(page, size, orderId, lawyerUserId, userId, currentUserId);
     }
 
-    @ApiOperation("删除评价(删除评价时,会级联删除该评价下的所有评论和回复)")
+    @ApiOperation("用户删除评价(只能删除自己的评价,删除评价时,会级联删除该评价下的所有评论和回复)")
     @ApiOperationSupport(order = 4)
     @ApiImplicitParams({
             @ApiImplicitParam(name = "reviewId", value = "评价ID", dataType = "int", paramType = "query", required = true),
-            @ApiImplicitParam(name = "userId", value = "用户ID(可选,有值时只能删除自己的评价,为空时允许删除任何评价)", dataType = "int", paramType = "query", required = false)
+            @ApiImplicitParam(name = "userId", value = "用户ID(必填,只能删除自己的评价)", dataType = "int", paramType = "query", required = true)
     })
     @PostMapping("/delete/reviewId")
     public R<Boolean> deleteReview(@RequestParam Integer reviewId,
-                                   @RequestParam(required = false) Integer userId) {
+                                   @RequestParam Integer userId) {
         log.info("OrderReviewController.deleteReview?reviewId={}, userId={}", reviewId, userId);
+        if (userId == null) {
+            return R.fail("用户ID不能为空");
+        }
         return orderReviewService.deleteReview(reviewId, userId);
     }
 
-    @ApiOperation("根据订单ID查询评价")
+    @ApiOperation("管理员删除评价(可以删除任何评价,删除评价时,会级联删除该评价下的所有评论和回复)")
     @ApiOperationSupport(order = 5)
     @ApiImplicitParams({
+            @ApiImplicitParam(name = "reviewId", value = "评价ID", dataType = "int", paramType = "query", required = true)
+    })
+    @PostMapping("/admin/delete/reviewId")
+    public R<Boolean> deleteReviewByAdmin(@RequestParam Integer reviewId) {
+        log.info("OrderReviewController.deleteReviewByAdmin?reviewId={}", reviewId);
+        return orderReviewService.deleteReviewByAdmin(reviewId);
+    }
+
+    @ApiOperation("根据订单ID查询评价")
+    @ApiOperationSupport(order = 6)
+    @ApiImplicitParams({
             @ApiImplicitParam(name = "orderId", value = "订单ID", dataType = "int", paramType = "query", required = true),
             @ApiImplicitParam(name = "currentUserId", value = "当前用户ID(用于判断是否已点赞)", dataType = "int", paramType = "query")
     })
@@ -148,7 +162,7 @@ public class OrderReviewController {
 
 
     @ApiOperation("分页查询我的评价列表")
-    @ApiOperationSupport(order = 6)
+    @ApiOperationSupport(order = 7)
     @ApiImplicitParams({
             @ApiImplicitParam(name = "page", value = "页数(默认1)", dataType = "int", paramType = "query"),
             @ApiImplicitParam(name = "size", value = "页容(默认10)", dataType = "int", paramType = "query"),
@@ -167,7 +181,7 @@ public class OrderReviewController {
     }
 
     @ApiOperation("分页查询我的评价列表(查询当前用户的所有评价)")
-    @ApiOperationSupport(order = 7)
+    @ApiOperationSupport(order = 8)
     @ApiImplicitParams({
             @ApiImplicitParam(name = "page", value = "页数(默认1)", dataType = "int", paramType = "query"),
             @ApiImplicitParam(name = "size", value = "页容(默认10)", dataType = "int", paramType = "query"),
@@ -188,7 +202,7 @@ public class OrderReviewController {
     }
 
     @ApiOperation("获取律师评价统计数据(全部数量、好评数量、中评数量、差评数量、有图数量)")
-    @ApiOperationSupport(order = 9)
+    @ApiOperationSupport(order = 10)
     @ApiImplicitParams({
             @ApiImplicitParam(name = "lawyerUserId", value = "律师用户ID", dataType = "int", paramType = "query", required = true)
     })
@@ -202,7 +216,7 @@ public class OrderReviewController {
     }
 
     @ApiOperation("根据律师ID分页查询评价列表(查询指定律师的所有评价)")
-    @ApiOperationSupport(order = 10)
+    @ApiOperationSupport(order = 11)
     @ApiImplicitParams({
             @ApiImplicitParam(name = "page", value = "页数(默认1)", dataType = "int", paramType = "query"),
             @ApiImplicitParam(name = "size", value = "页容(默认10)", dataType = "int", paramType = "query"),
@@ -224,7 +238,7 @@ public class OrderReviewController {
     }
 
     @ApiOperation("根据律师ID和类型分页查询评价列表(不包含评论)")
-    @ApiOperationSupport(order = 11)
+    @ApiOperationSupport(order = 12)
     @ApiImplicitParams({
             @ApiImplicitParam(name = "page", value = "页数(默认1)", dataType = "int", paramType = "query"),
             @ApiImplicitParam(name = "size", value = "页容(默认10)", dataType = "int", paramType = "query"),

+ 10 - 2
alien-lawyer/src/main/java/shop/alien/lawyer/service/OrderReviewService.java

@@ -68,15 +68,23 @@ public interface OrderReviewService extends IService<OrderReview> {
 
 
     /**
-     * 删除评价(删除评价时,会级联删除该评价下的所有评论和回复)
+     * 用户删除评价(只能删除自己的评价,删除评价时,会级联删除该评价下的所有评论和回复)
      *
      * @param reviewId 评价ID
-     * @param userId 用户ID(可选,有值时只能删除自己的评价,为空时允许删除任何评价)
+     * @param userId 用户ID(必填,只能删除自己的评价)
      * @return R<Boolean>
      */
     R<Boolean> deleteReview(Integer reviewId, Integer userId);
 
     /**
+     * 管理员删除评价(可以删除任何评价,删除评价时,会级联删除该评价下的所有评论和回复)
+     *
+     * @param reviewId 评价ID
+     * @return R<Boolean>
+     */
+    R<Boolean> deleteReviewByAdmin(Integer reviewId);
+
+    /**
      * 根据订单ID查询评价
      *
      * @param orderId 订单ID

+ 1 - 1
alien-lawyer/src/main/java/shop/alien/lawyer/service/impl/CommentAppealServiceImpl.java

@@ -152,7 +152,7 @@ public class CommentAppealServiceImpl extends ServiceImpl<CommentAppealMapper, C
             // 如果申诉通过,删除评价及该评价下的所有评论和回复
             if (status == 1) {
 //                deleteReviewAndRelatedData(appeal.getCommentId());
-                orderReviewService.deleteReview(appeal.getCommentId(),null);
+                orderReviewService.deleteReviewByAdmin(appeal.getCommentId());
             }
 
             // 发送通知

+ 60 - 17
alien-lawyer/src/main/java/shop/alien/lawyer/service/impl/OrderReviewServiceImpl.java

@@ -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) {
                 // 删除评论下的所有回复(逻辑删除)
@@ -352,8 +376,27 @@ 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);
             }