|
|
@@ -13,6 +13,7 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import shop.alien.entity.result.R;
|
|
|
import shop.alien.entity.store.LawyerConsultationOrder;
|
|
|
+import shop.alien.entity.store.LifeLikeRecord;
|
|
|
import shop.alien.entity.store.OrderReview;
|
|
|
import shop.alien.entity.store.ReviewComment;
|
|
|
import shop.alien.entity.store.dto.OrderReviewDto;
|
|
|
@@ -26,6 +27,7 @@ import shop.alien.mapper.*;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
/**
|
|
|
* 订单评价 服务实现类
|
|
|
@@ -44,6 +46,7 @@ public class OrderReviewServiceImpl extends ServiceImpl<OrderReviewMapper, Order
|
|
|
private final ReviewCommentService reviewCommentService;
|
|
|
private final ReviewCommentMapper reviewCommentMapper;
|
|
|
private final CommentReplyMapper commentReplyMapper;
|
|
|
+ private final LifeLikeRecordMapper lifeLikeRecordMapper;
|
|
|
|
|
|
@Override
|
|
|
public R<OrderReview> createReview(OrderReviewDto reviewDto) {
|
|
|
@@ -125,12 +128,12 @@ public class OrderReviewServiceImpl extends ServiceImpl<OrderReviewMapper, Order
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public R<IPage<OrderReviewVo>> getReviewList(int pageNum, int pageSize, Integer orderId, Integer lawyerUserId, Integer userId) {
|
|
|
- log.info("OrderReviewServiceImpl.getReviewList?pageNum={}, pageSize={}, orderId={}, lawyerUserId={}, userId={}",
|
|
|
- pageNum, pageSize, orderId, lawyerUserId, userId);
|
|
|
+ public R<IPage<OrderReviewVo>> getReviewList(int pageNum, int pageSize, Integer orderId, Integer lawyerUserId, Integer userId, Integer currentUserId) {
|
|
|
+ log.info("OrderReviewServiceImpl.getReviewList?pageNum={}, pageSize={}, orderId={}, lawyerUserId={}, userId={}, currentUserId={}",
|
|
|
+ pageNum, pageSize, orderId, lawyerUserId, userId, currentUserId);
|
|
|
|
|
|
Page<OrderReviewVo> page = new Page<>(pageNum, pageSize);
|
|
|
- IPage<OrderReviewVo> result = orderReviewMapper.getReviewListWithUser(page, orderId, lawyerUserId, userId);
|
|
|
+ IPage<OrderReviewVo> result = orderReviewMapper.getReviewListWithUser(page, orderId, lawyerUserId, userId, currentUserId);
|
|
|
|
|
|
// 处理评价图片JSON字符串转换为列表
|
|
|
if (result.getRecords() != null) {
|
|
|
@@ -146,15 +149,15 @@ public class OrderReviewServiceImpl extends ServiceImpl<OrderReviewMapper, Order
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public R<OrderReviewDetailVo> getReviewDetail(Integer reviewId) {
|
|
|
- log.info("OrderReviewServiceImpl.getReviewDetail?reviewId={}", reviewId);
|
|
|
+ public R<OrderReviewDetailVo> getReviewDetail(Integer reviewId, Integer currentUserId) {
|
|
|
+ log.info("OrderReviewServiceImpl.getReviewDetail?reviewId={}, currentUserId={}", reviewId, currentUserId);
|
|
|
|
|
|
if (reviewId == null) {
|
|
|
return R.fail("评价ID不能为空");
|
|
|
}
|
|
|
|
|
|
// 查询评价详情
|
|
|
- OrderReviewVo reviewVo = orderReviewMapper.getReviewDetailById(reviewId);
|
|
|
+ OrderReviewVo reviewVo = orderReviewMapper.getReviewDetailById(reviewId, currentUserId);
|
|
|
if (reviewVo == null) {
|
|
|
return R.fail("评价不存在");
|
|
|
}
|
|
|
@@ -171,13 +174,24 @@ public class OrderReviewServiceImpl extends ServiceImpl<OrderReviewMapper, Order
|
|
|
}
|
|
|
|
|
|
// 查询评论列表
|
|
|
- List<shop.alien.entity.store.vo.ReviewCommentVo> comments = reviewCommentMapper.getCommentListByReviewId(reviewId);
|
|
|
+ List<shop.alien.entity.store.vo.ReviewCommentVo> comments = reviewCommentMapper.getCommentListByReviewId(reviewId, currentUserId);
|
|
|
+
|
|
|
+ // 为每个评论查询回复列表
|
|
|
+ if (comments != null && !comments.isEmpty()) {
|
|
|
+ for (shop.alien.entity.store.vo.ReviewCommentVo comment : comments) {
|
|
|
+ List<shop.alien.entity.store.vo.CommentReplyVo> replies = commentReplyMapper.getReplyListByCommentId(comment.getId(), currentUserId);
|
|
|
+ comment.setReplies(replies);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
// 构建返回结果
|
|
|
OrderReviewDetailVo detailVo = new OrderReviewDetailVo();
|
|
|
detailVo.setReview(reviewVo);
|
|
|
detailVo.setComments(comments);
|
|
|
detailVo.setTotalCommentCount(comments != null ? comments.size() : 0);
|
|
|
+ // 设置评价的点赞数和是否已点赞(从 reviewVo 中获取)
|
|
|
+ detailVo.setLikeCount(reviewVo.getLikeCount());
|
|
|
+ detailVo.setIsLiked(reviewVo.getIsLiked());
|
|
|
|
|
|
return R.data(detailVo);
|
|
|
}
|
|
|
@@ -244,14 +258,14 @@ public class OrderReviewServiceImpl extends ServiceImpl<OrderReviewMapper, Order
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public R<OrderReviewVo> getReviewByOrderId(Integer orderId) {
|
|
|
- log.info("OrderReviewServiceImpl.getReviewByOrderId?orderId={}", orderId);
|
|
|
+ public R<OrderReviewVo> getReviewByOrderId(Integer orderId, Integer currentUserId) {
|
|
|
+ log.info("OrderReviewServiceImpl.getReviewByOrderId?orderId={}, currentUserId={}", orderId, currentUserId);
|
|
|
|
|
|
if (orderId == null) {
|
|
|
return R.fail("订单ID不能为空");
|
|
|
}
|
|
|
|
|
|
- OrderReviewVo reviewVo = orderReviewMapper.getReviewByOrderId(orderId);
|
|
|
+ OrderReviewVo reviewVo = orderReviewMapper.getReviewByOrderId(orderId, currentUserId);
|
|
|
if (reviewVo == null) {
|
|
|
return R.fail("该订单暂无评价");
|
|
|
}
|
|
|
@@ -288,16 +302,16 @@ public class OrderReviewServiceImpl extends ServiceImpl<OrderReviewMapper, Order
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public R<IPage<OrderReviewVo>> getMyReviewList(int pageNum, int pageSize, Integer userId) {
|
|
|
- log.info("OrderReviewServiceImpl.getMyReviewList?pageNum={}, pageSize={}, userId={}",
|
|
|
- pageNum, pageSize, userId);
|
|
|
+ public R<IPage<OrderReviewVo>> getMyReviewList(int pageNum, int pageSize, Integer userId, Integer currentUserId) {
|
|
|
+ log.info("OrderReviewServiceImpl.getMyReviewList?pageNum={}, pageSize={}, userId={}, currentUserId={}",
|
|
|
+ pageNum, pageSize, userId, currentUserId);
|
|
|
|
|
|
if (userId == null) {
|
|
|
return R.fail("用户ID不能为空");
|
|
|
}
|
|
|
|
|
|
Page<OrderReviewVo> page = new Page<>(pageNum, pageSize);
|
|
|
- IPage<OrderReviewVo> result = orderReviewMapper.getReviewListWithUser(page, null, null, userId);
|
|
|
+ IPage<OrderReviewVo> result = orderReviewMapper.getReviewListWithUser(page, null, null, userId, currentUserId);
|
|
|
|
|
|
// 处理评价图片:将JSON字符串转换为List<String>
|
|
|
if (result.getRecords() != null) {
|
|
|
@@ -327,5 +341,103 @@ public class OrderReviewServiceImpl extends ServiceImpl<OrderReviewMapper, Order
|
|
|
|
|
|
return R.data(result);
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R<Boolean> likeReview(Integer reviewId, Integer userId) {
|
|
|
+ log.info("OrderReviewServiceImpl.likeReview?reviewId={}, userId={}", reviewId, userId);
|
|
|
+
|
|
|
+ if (reviewId == null) {
|
|
|
+ return R.fail("评价ID不能为空");
|
|
|
+ }
|
|
|
+ if (userId == null) {
|
|
|
+ return R.fail("用户ID不能为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 验证评价是否存在
|
|
|
+ OrderReview review = this.getById(reviewId);
|
|
|
+ if (review == null || review.getDeleteFlag() == 1) {
|
|
|
+ return R.fail("评价不存在或已删除");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 检查是否已点赞
|
|
|
+ LambdaQueryWrapper<LifeLikeRecord> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper.eq(LifeLikeRecord::getType, "7")
|
|
|
+ .eq(LifeLikeRecord::getDianzanId, String.valueOf(userId))
|
|
|
+ .eq(LifeLikeRecord::getHuifuId, String.valueOf(reviewId))
|
|
|
+ .eq(LifeLikeRecord::getDeleteFlag, 0);
|
|
|
+ List<LifeLikeRecord> records = lifeLikeRecordMapper.selectList(queryWrapper);
|
|
|
+
|
|
|
+ if (CollectionUtils.isEmpty(records)) {
|
|
|
+ // 插入点赞记录
|
|
|
+ LifeLikeRecord likeRecord = new LifeLikeRecord();
|
|
|
+ likeRecord.setDianzanId(String.valueOf(userId));
|
|
|
+ likeRecord.setHuifuId(String.valueOf(reviewId));
|
|
|
+ likeRecord.setType("7");
|
|
|
+ likeRecord.setCreatedTime(new Date());
|
|
|
+ likeRecord.setCreatedUserId(userId);
|
|
|
+ lifeLikeRecordMapper.insert(likeRecord);
|
|
|
+
|
|
|
+ // 更新评价点赞数
|
|
|
+ LambdaUpdateWrapper<OrderReview> updateWrapper = new LambdaUpdateWrapper<>();
|
|
|
+ updateWrapper.eq(OrderReview::getId, reviewId);
|
|
|
+ updateWrapper.setSql("like_count = like_count + 1");
|
|
|
+ int result = orderReviewMapper.update(null, updateWrapper);
|
|
|
+
|
|
|
+ if (result > 0) {
|
|
|
+ log.info("点赞评价成功,评价ID={}", reviewId);
|
|
|
+ return R.data(true, "点赞成功");
|
|
|
+ } else {
|
|
|
+ return R.fail("点赞失败");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ return R.data(true, "已点赞");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R<Boolean> cancelLikeReview(Integer reviewId, Integer userId) {
|
|
|
+ log.info("OrderReviewServiceImpl.cancelLikeReview?reviewId={}, userId={}", reviewId, userId);
|
|
|
+
|
|
|
+ if (reviewId == null) {
|
|
|
+ return R.fail("评价ID不能为空");
|
|
|
+ }
|
|
|
+ if (userId == null) {
|
|
|
+ return R.fail("用户ID不能为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查询点赞记录
|
|
|
+ LambdaQueryWrapper<LifeLikeRecord> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper.eq(LifeLikeRecord::getType, "7")
|
|
|
+ .eq(LifeLikeRecord::getDianzanId, String.valueOf(userId))
|
|
|
+ .eq(LifeLikeRecord::getHuifuId, String.valueOf(reviewId))
|
|
|
+ .eq(LifeLikeRecord::getDeleteFlag, 0);
|
|
|
+ List<LifeLikeRecord> records = lifeLikeRecordMapper.selectList(queryWrapper);
|
|
|
+
|
|
|
+ if (!CollectionUtils.isEmpty(records)) {
|
|
|
+ // 删除点赞记录(逻辑删除)
|
|
|
+ for (LifeLikeRecord record : records) {
|
|
|
+ record.setDeleteFlag(1);
|
|
|
+ record.setUpdatedUserId(userId);
|
|
|
+ record.setUpdatedTime(new Date());
|
|
|
+ lifeLikeRecordMapper.updateById(record);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新评价点赞数
|
|
|
+ LambdaUpdateWrapper<OrderReview> updateWrapper = new LambdaUpdateWrapper<>();
|
|
|
+ updateWrapper.eq(OrderReview::getId, reviewId);
|
|
|
+ updateWrapper.gt(OrderReview::getLikeCount, 0);
|
|
|
+ updateWrapper.setSql("like_count = like_count - 1");
|
|
|
+ int result = orderReviewMapper.update(null, updateWrapper);
|
|
|
+
|
|
|
+ if (result > 0) {
|
|
|
+ log.info("取消点赞评价成功,评价ID={}", reviewId);
|
|
|
+ return R.data(true, "取消点赞成功");
|
|
|
+ } else {
|
|
|
+ return R.fail("取消点赞失败");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ return R.data(true, "未点赞");
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|