瀏覽代碼

律师端代码修改评价评论部分

ldz 3 周之前
父節點
當前提交
60e618740a

+ 43 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/PendingReviewVo.java

@@ -0,0 +1,43 @@
+package shop.alien.entity.store.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 待评价VO
+ * 用于显示用户已完成但未评价的订单对应的律师信息
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@ApiModel(value = "PendingReviewVo对象", description = "待评价VO")
+public class PendingReviewVo {
+
+    @ApiModelProperty(value = "订单ID")
+    private Integer orderId;
+
+    @ApiModelProperty(value = "订单编号")
+    private String orderNumber;
+
+    @ApiModelProperty(value = "律师用户ID")
+    private Integer lawyerUserId;
+
+    @ApiModelProperty(value = "律师名称")
+    private String lawyerName;
+
+    @ApiModelProperty(value = "律师头像")
+    private String lawyerAvatar;
+
+    @ApiModelProperty(value = "律所名称")
+    private String lawFirmName;
+
+    @ApiModelProperty(value = "订单完成时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date completedTime;
+}
+

+ 13 - 3
alien-entity/src/main/java/shop/alien/mapper/OrderReviewMapper.java

@@ -2,13 +2,11 @@ package shop.alien.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import shop.alien.entity.store.OrderReview;
 import shop.alien.entity.store.vo.OrderReviewVo;
-
-import java.util.List;
+import shop.alien.entity.store.vo.PendingReviewVo;
 
 /**
  * 订单评价 Mapper 接口
@@ -50,5 +48,17 @@ public interface OrderReviewMapper extends BaseMapper<OrderReview> {
      * @return 评价详情
      */
     OrderReviewVo getReviewDetailById(@Param("reviewId") Integer reviewId);
+
+    /**
+     * 分页查询待评价列表(查询用户已完成但未评价的订单对应的律师信息)
+     *
+     * @param page 分页对象
+     * @param userId 用户ID
+     * @return 分页结果
+     */
+    IPage<PendingReviewVo> getPendingReviewList(
+            IPage<PendingReviewVo> page,
+            @Param("userId") Integer userId
+    );
 }
 

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

@@ -143,5 +143,41 @@
         AND orv.id = #{reviewId}
     </select>
 
+    <!-- 待评价列表结果映射 -->
+    <resultMap id="PendingReviewVoResultMap" type="shop.alien.entity.store.vo.PendingReviewVo">
+        <result column="order_id" property="orderId" />
+        <result column="order_number" property="orderNumber" />
+        <result column="lawyer_user_id" property="lawyerUserId" />
+        <result column="lawyer_name" property="lawyerName" />
+        <result column="lawyer_avatar" property="lawyerAvatar" />
+        <result column="law_firm_name" property="lawFirmName" />
+        <result column="completed_time" property="completedTime" />
+    </resultMap>
+
+    <!-- 分页查询待评价列表(查询用户已完成但未评价的订单对应的律师信息) -->
+    <select id="getPendingReviewList" resultMap="PendingReviewVoResultMap">
+        SELECT
+            lco.id AS order_id,
+            lco.order_number,
+            lco.lawyer_user_id,
+            lu.name AS lawyer_name,
+            lu.head_img AS lawyer_avatar,
+            lf.firm_name AS law_firm_name,
+            lco.end_time AS completed_time
+        FROM lawyer_consultation_order lco
+        LEFT JOIN lawyer_user lu ON lu.id = lco.lawyer_user_id AND lu.delete_flag = 0
+        LEFT JOIN law_firm lf ON lf.id = lu.firm_id AND lf.delete_flag = 0
+        WHERE lco.delete_flag = 0
+        AND lco.order_status = 3
+        AND lco.client_user_id = #{userId}
+        AND NOT EXISTS (
+            SELECT 1
+            FROM order_review orv
+            WHERE orv.order_id = lco.id
+            AND orv.delete_flag = 0
+        )
+        ORDER BY lco.end_time DESC
+    </select>
+
 </mapper>
 

+ 3 - 3
alien-lawyer/src/main/java/shop/alien/lawyer/controller/CommentReplyController.java

@@ -44,16 +44,16 @@ public class CommentReplyController {
 
     @ApiOperation("根据评论ID查询回复列表")
     @ApiOperationSupport(order = 2)
-    @ApiImplicitParam(name = "commentId", value = "评论ID", dataType = "int", paramType = "path", required = true)
+    @ApiImplicitParam(name = "commentId", value = "评论ID", dataType = "int", paramType = "query", required = true)
     @GetMapping("/list/commentId")
-    public R<List<CommentReplyVo>> getReplyListByCommentId( @RequestParam Integer commentId) {
+    public R<List<CommentReplyVo>> getReplyListByCommentId(@RequestParam(required = true) Integer commentId) {
         log.info("CommentReplyController.getReplyListByCommentId?commentId={}", commentId);
         return commentReplyService.getReplyListByCommentId(commentId);
     }
 
     @ApiOperation("删除回复")
     @ApiOperationSupport(order = 3)
-    @ApiImplicitParam(name = "replyId", value = "回复ID", dataType = "int", paramType = "path", required = true)
+    @ApiImplicitParam(name = "replyId", value = "回复ID", dataType = "int", paramType = "query", required = true)
     @PostMapping("/delete/replyId")
     public R<Boolean> deleteReply(  @RequestParam Integer replyId,
                                     @RequestParam Integer userId) {

+ 47 - 7
alien-lawyer/src/main/java/shop/alien/lawyer/controller/OrderReviewController.java

@@ -10,9 +10,8 @@ import shop.alien.entity.store.OrderReview;
 import shop.alien.entity.store.dto.OrderReviewDto;
 import shop.alien.entity.store.vo.OrderReviewDetailVo;
 import shop.alien.entity.store.vo.OrderReviewVo;
-import shop.alien.entity.store.UserLoginInfo;
+import shop.alien.entity.store.vo.PendingReviewVo;
 import shop.alien.lawyer.service.OrderReviewService;
-import shop.alien.util.common.TokenInfo;
 
 /**
  * 订单评价 前端控制器
@@ -65,7 +64,7 @@ public class OrderReviewController {
 
     @ApiOperation("获取评价详情(包含评论和回复)")
     @ApiOperationSupport(order = 3)
-    @ApiImplicitParam(name = "reviewId", value = "评价ID", dataType = "int", paramType = "path", required = true)
+    @ApiImplicitParam(name = "reviewId", value = "评价ID", dataType = "int", paramType = "query", required = true)
     @GetMapping("/detail/{reviewId}")
     public R<OrderReviewDetailVo> getReviewDetail(@PathVariable Integer reviewId) {
         log.info("OrderReviewController.getReviewDetail?reviewId={}", reviewId);
@@ -75,8 +74,8 @@ public class OrderReviewController {
     @ApiOperation("删除评价(删除评价时,会级联删除该评价下的所有评论和回复)")
     @ApiOperationSupport(order = 4)
     @ApiImplicitParams({
-    @ApiImplicitParam(name = "reviewId", value = "评价ID", dataType = "int", paramType = "path", required = true),
-    @ApiImplicitParam(name = "userId", value = "用户ID", dataType = "int", paramType = "path", required = true)
+    @ApiImplicitParam(name = "reviewId", value = "评价ID", dataType = "int", paramType = "query", required = true),
+    @ApiImplicitParam(name = "userId", value = "用户ID", dataType = "int", paramType = "query", required = true)
              })
     @DeleteMapping("/delete/reviewId")
     public R<Boolean> deleteReview( @RequestParam Integer reviewId,
@@ -90,11 +89,52 @@ public class OrderReviewController {
 
     @ApiOperation("根据订单ID查询评价")
     @ApiOperationSupport(order = 5)
-    @ApiImplicitParam(name = "orderId", value = "订单ID", dataType = "int", paramType = "path", required = true)
+    @ApiImplicitParam(name = "orderId", value = "订单ID", dataType = "int", paramType = "query", required = true)
     @GetMapping("/order/orderId")
-    public R<OrderReviewVo> getReviewByOrderId(  @RequestParam Integer orderId) {
+    public R<OrderReviewVo> getReviewByOrderId(@RequestParam Integer orderId) {
         log.info("OrderReviewController.getReviewByOrderId?orderId={}", orderId);
         return orderReviewService.getReviewByOrderId(orderId);
     }
+
+
+
+
+    @ApiOperation("分页查询待评价列表(查询用户已完成但未评价的订单对应的律师信息,显示律师名称+订单号)")
+    @ApiOperationSupport(order = 6)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "page", value = "页数(默认1)", dataType = "int", paramType = "query"),
+            @ApiImplicitParam(name = "size", value = "页容(默认10)", dataType = "int", paramType = "query"),
+            @ApiImplicitParam(name = "userId", value = "用户ID", dataType = "int", paramType = "query", required = true)
+    })
+    @GetMapping("/pending/list")
+    public R<IPage<PendingReviewVo>> getPendingReviewList(
+            @RequestParam(defaultValue = "1") int page,
+            @RequestParam(defaultValue = "10") int size,
+            @RequestParam Integer userId) {
+        log.info("OrderReviewController.getPendingReviewList?page={}, size={}, userId={}", page, size, userId);
+        if (userId == null) {
+            return R.fail("用户未登录");
+        }
+        return orderReviewService.getPendingReviewList(page, size, userId);
+    }
+
+    @ApiOperation("分页查询我的评价列表(查询当前用户的所有评价)")
+    @ApiOperationSupport(order = 7)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "page", value = "页数(默认1)", dataType = "int", paramType = "query"),
+            @ApiImplicitParam(name = "size", value = "页容(默认10)", dataType = "int", paramType = "query"),
+            @ApiImplicitParam(name = "userId", value = "用户ID", dataType = "int", paramType = "query", required = true)
+    })
+    @GetMapping("/my/list")
+    public R<IPage<OrderReviewVo>> getMyReviewList(
+            @RequestParam(defaultValue = "1") int page,
+            @RequestParam(defaultValue = "10") int size,
+            @RequestParam Integer userId) {
+        log.info("OrderReviewController.getMyReviewList?page={}, size={}, userId={}", page, size, userId);
+        if (userId == null) {
+            return R.fail("用户未登录");
+        }
+        return orderReviewService.getMyReviewList(page, size, userId);
+    }
 }
 

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

@@ -7,6 +7,7 @@ import shop.alien.entity.store.OrderReview;
 import shop.alien.entity.store.dto.OrderReviewDto;
 import shop.alien.entity.store.vo.OrderReviewDetailVo;
 import shop.alien.entity.store.vo.OrderReviewVo;
+import shop.alien.entity.store.vo.PendingReviewVo;
 
 /**
  * 订单评价 服务类
@@ -61,5 +62,25 @@ public interface OrderReviewService extends IService<OrderReview> {
      * @return R<OrderReviewVo>
      */
     R<OrderReviewVo> getReviewByOrderId(Integer orderId);
+
+    /**
+     * 分页查询待评价列表(查询用户已完成但未评价的订单对应的律师信息)
+     *
+     * @param pageNum 页码
+     * @param pageSize 页大小
+     * @param userId 用户ID
+     * @return R<IPage<PendingReviewVo>>
+     */
+    R<IPage<PendingReviewVo>> getPendingReviewList(int pageNum, int pageSize, Integer userId);
+
+    /**
+     * 分页查询我的评价列表(查询当前用户的所有评价)
+     *
+     * @param pageNum 页码
+     * @param pageSize 页大小
+     * @param userId 用户ID
+     * @return R<IPage<OrderReviewVo>>
+     */
+    R<IPage<OrderReviewVo>> getMyReviewList(int pageNum, int pageSize, Integer userId);
 }
 

+ 41 - 0
alien-lawyer/src/main/java/shop/alien/lawyer/service/impl/OrderReviewServiceImpl.java

@@ -16,6 +16,7 @@ import shop.alien.entity.store.ReviewComment;
 import shop.alien.entity.store.dto.OrderReviewDto;
 import shop.alien.entity.store.vo.OrderReviewDetailVo;
 import shop.alien.entity.store.vo.OrderReviewVo;
+import shop.alien.entity.store.vo.PendingReviewVo;
 import shop.alien.lawyer.service.OrderReviewService;
 import shop.alien.lawyer.service.ReviewCommentService;
 import shop.alien.mapper.*;
@@ -259,5 +260,45 @@ public class OrderReviewServiceImpl extends ServiceImpl<OrderReviewMapper, Order
 
         return R.data(reviewVo);
     }
+
+    @Override
+    public R<IPage<PendingReviewVo>> getPendingReviewList(int pageNum, int pageSize, Integer userId) {
+        log.info("OrderReviewServiceImpl.getPendingReviewList?pageNum={}, pageSize={}, userId={}",
+                pageNum, pageSize, userId);
+
+        if (userId == null) {
+            return R.fail("用户ID不能为空");
+        }
+
+        Page<PendingReviewVo> page = new Page<>(pageNum, pageSize);
+        IPage<PendingReviewVo> result = orderReviewMapper.getPendingReviewList(page, userId);
+
+        return R.data(result);
+    }
+
+    @Override
+    public R<IPage<OrderReviewVo>> getMyReviewList(int pageNum, int pageSize, Integer userId) {
+        log.info("OrderReviewServiceImpl.getMyReviewList?pageNum={}, pageSize={}, userId={}",
+                pageNum, pageSize, userId);
+
+        if (userId == null) {
+            return R.fail("用户ID不能为空");
+        }
+
+        Page<OrderReviewVo> page = new Page<>(pageNum, pageSize);
+        IPage<OrderReviewVo> result = orderReviewMapper.getReviewListWithUser(page, null, null, userId);
+
+        // 处理评价图片JSON字符串转换为列表
+        if (result.getRecords() != null) {
+            for (OrderReviewVo vo : result.getRecords()) {
+                if (vo.getReviewImages() != null && !vo.getReviewImages().isEmpty()) {
+                    // 如果已经是列表,则不需要转换
+                    // 这里假设VO中的reviewImages已经是List<String>类型
+                }
+            }
+        }
+
+        return R.data(result);
+    }
 }