|
@@ -6,21 +6,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
-import org.springframework.beans.BeanUtils;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import shop.alien.entity.result.R;
|
|
import shop.alien.entity.result.R;
|
|
|
-import shop.alien.entity.store.*;
|
|
|
|
|
-import shop.alien.entity.store.dto.LawyerConsultationReviewDto;
|
|
|
|
|
-import shop.alien.entity.store.dto.LawyerConsultationReviewReplyDto;
|
|
|
|
|
-import shop.alien.entity.store.vo.LawyerConsultationReviewReplyVo;
|
|
|
|
|
-import shop.alien.entity.store.vo.LawyerConsultationReviewVo;
|
|
|
|
|
|
|
+import shop.alien.entity.store.LawyerConsultationReview;
|
|
|
import shop.alien.lawyer.service.LawyerConsultationReviewService;
|
|
import shop.alien.lawyer.service.LawyerConsultationReviewService;
|
|
|
-import shop.alien.mapper.*;
|
|
|
|
|
|
|
+import shop.alien.mapper.LawyerConsultationReviewMapper;
|
|
|
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
-import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 咨询评价 服务实现类
|
|
* 咨询评价 服务实现类
|
|
@@ -35,12 +28,6 @@ import java.util.stream.Collectors;
|
|
|
public class LawyerConsultationReviewServiceImpl extends ServiceImpl<LawyerConsultationReviewMapper, LawyerConsultationReview> implements LawyerConsultationReviewService {
|
|
public class LawyerConsultationReviewServiceImpl extends ServiceImpl<LawyerConsultationReviewMapper, LawyerConsultationReview> implements LawyerConsultationReviewService {
|
|
|
|
|
|
|
|
private final LawyerConsultationReviewMapper consultationReviewMapper;
|
|
private final LawyerConsultationReviewMapper consultationReviewMapper;
|
|
|
- private final LawyerConsultationReviewImageMapper reviewImageMapper;
|
|
|
|
|
- private final LawyerConsultationReviewReplyMapper reviewReplyMapper;
|
|
|
|
|
- private final LawyerConsultationReviewLikeMapper reviewLikeMapper;
|
|
|
|
|
- private final LawyerUserMapper lawyerUserMapper;
|
|
|
|
|
- private final LifeUserMapper lifeUserMapper;
|
|
|
|
|
- private final LawyerConsultationOrderMapper consultationOrderMapper;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public R<IPage<LawyerConsultationReview>> getConsultationReviewList(int pageNum, int pageSize, Integer consultationOrderId,
|
|
public R<IPage<LawyerConsultationReview>> getConsultationReviewList(int pageNum, int pageSize, Integer consultationOrderId,
|
|
@@ -103,384 +90,5 @@ public class LawyerConsultationReviewServiceImpl extends ServiceImpl<LawyerConsu
|
|
|
}
|
|
}
|
|
|
return R.fail("删除失败");
|
|
return R.fail("删除失败");
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- @Override
|
|
|
|
|
- public R<LawyerConsultationReviewVo> createReview(LawyerConsultationReviewDto reviewDto, Integer clientUserId) {
|
|
|
|
|
- log.info("LawyerConsultationReviewServiceImpl.createReview?reviewDto={}, clientUserId={}", reviewDto, clientUserId);
|
|
|
|
|
- try {
|
|
|
|
|
- // 检查订单是否存在且属于该用户
|
|
|
|
|
- LawyerConsultationOrder order = consultationOrderMapper.selectById(reviewDto.getConsultationOrderId());
|
|
|
|
|
- if (order == null || !order.getClientUserId().equals(clientUserId)) {
|
|
|
|
|
- return R.fail("订单不存在或不属于当前用户");
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // 检查是否已经评价过
|
|
|
|
|
- LambdaQueryWrapper<LawyerConsultationReview> checkWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
- checkWrapper.eq(LawyerConsultationReview::getConsultationOrderId, reviewDto.getConsultationOrderId())
|
|
|
|
|
- .eq(LawyerConsultationReview::getDeleteFlag, 0);
|
|
|
|
|
- long count = this.count(checkWrapper);
|
|
|
|
|
- if (count > 0) {
|
|
|
|
|
- return R.fail("该订单已评价,不能重复评价");
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // 创建评价
|
|
|
|
|
- LawyerConsultationReview review = new LawyerConsultationReview();
|
|
|
|
|
- review.setConsultationOrderId(reviewDto.getConsultationOrderId());
|
|
|
|
|
- review.setClientUserId(clientUserId);
|
|
|
|
|
- review.setLawyerUserId(reviewDto.getLawyerUserId());
|
|
|
|
|
- review.setRating(reviewDto.getRating());
|
|
|
|
|
- review.setServiceQuality(reviewDto.getServiceQuality());
|
|
|
|
|
- review.setResponseSpeed(reviewDto.getResponseSpeed());
|
|
|
|
|
- review.setProfessionalLevel(reviewDto.getProfessionalLevel());
|
|
|
|
|
- review.setComment(reviewDto.getComment());
|
|
|
|
|
- review.setIsAnonymous(reviewDto.getIsAnonymous() != null ? reviewDto.getIsAnonymous() : 0);
|
|
|
|
|
- review.setLikeCount(0);
|
|
|
|
|
- review.setReplyCount(0);
|
|
|
|
|
- review.setCreatedUserId(clientUserId);
|
|
|
|
|
-
|
|
|
|
|
- boolean saved = this.save(review);
|
|
|
|
|
- if (!saved) {
|
|
|
|
|
- return R.fail("创建评价失败");
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // 保存评价图片
|
|
|
|
|
- if (reviewDto.getImageUrls() != null && !reviewDto.getImageUrls().isEmpty()) {
|
|
|
|
|
- for (int i = 0; i < reviewDto.getImageUrls().size(); i++) {
|
|
|
|
|
- LawyerConsultationReviewImage image = new LawyerConsultationReviewImage();
|
|
|
|
|
- image.setReviewId(review.getId());
|
|
|
|
|
- image.setImageUrl(reviewDto.getImageUrls().get(i));
|
|
|
|
|
- image.setSortOrder(i + 1);
|
|
|
|
|
- image.setCreatedUserId(clientUserId);
|
|
|
|
|
- reviewImageMapper.insert(image);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // 更新律师评分统计
|
|
|
|
|
- updateLawyerRatingStats(reviewDto.getLawyerUserId());
|
|
|
|
|
-
|
|
|
|
|
- // 返回评价详情
|
|
|
|
|
- return getReviewDetail(review.getId(), clientUserId);
|
|
|
|
|
- } catch (Exception e) {
|
|
|
|
|
- log.error("创建评价失败", e);
|
|
|
|
|
- return R.fail("创建评价失败:" + e.getMessage());
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- @Override
|
|
|
|
|
- public R<LawyerConsultationReviewVo> getReviewDetail(Integer reviewId, Integer currentUserId) {
|
|
|
|
|
- log.info("LawyerConsultationReviewServiceImpl.getReviewDetail?reviewId={}, currentUserId={}", reviewId, currentUserId);
|
|
|
|
|
- try {
|
|
|
|
|
- LawyerConsultationReview review = this.getById(reviewId);
|
|
|
|
|
- if (review == null || review.getDeleteFlag() == 1) {
|
|
|
|
|
- return R.fail("评价不存在");
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- LawyerConsultationReviewVo vo = new LawyerConsultationReviewVo();
|
|
|
|
|
- BeanUtils.copyProperties(review, vo);
|
|
|
|
|
-
|
|
|
|
|
- // 查询评价图片
|
|
|
|
|
- LambdaQueryWrapper<LawyerConsultationReviewImage> imageWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
- imageWrapper.eq(LawyerConsultationReviewImage::getReviewId, reviewId)
|
|
|
|
|
- .eq(LawyerConsultationReviewImage::getDeleteFlag, 0)
|
|
|
|
|
- .orderByAsc(LawyerConsultationReviewImage::getSortOrder);
|
|
|
|
|
- List<LawyerConsultationReviewImage> images = reviewImageMapper.selectList(imageWrapper);
|
|
|
|
|
- vo.setImageUrls(images.stream().map(LawyerConsultationReviewImage::getImageUrl).collect(Collectors.toList()));
|
|
|
|
|
-
|
|
|
|
|
- // 查询用户信息
|
|
|
|
|
- if (review.getIsAnonymous() == 0) {
|
|
|
|
|
- LifeUser clientUser = lifeUserMapper.selectById(review.getClientUserId());
|
|
|
|
|
- if (clientUser != null) {
|
|
|
|
|
- vo.setClientUserName(clientUser.getUserName());
|
|
|
|
|
- vo.setClientUserImage(clientUser.getUserImage());
|
|
|
|
|
- }
|
|
|
|
|
- } else {
|
|
|
|
|
- vo.setClientUserName("匿名用户");
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- LawyerUser lawyerUser = lawyerUserMapper.selectById(review.getLawyerUserId());
|
|
|
|
|
- if (lawyerUser != null) {
|
|
|
|
|
- vo.setLawyerUserName(lawyerUser.getName());
|
|
|
|
|
- vo.setLawyerUserImage(lawyerUser.getHeadImg());
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // 查询订单信息
|
|
|
|
|
- LawyerConsultationOrder order = consultationOrderMapper.selectById(review.getConsultationOrderId());
|
|
|
|
|
- if (order != null) {
|
|
|
|
|
- vo.setOrderNumber(order.getOrderNumber());
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // 查询回复列表
|
|
|
|
|
- List<LawyerConsultationReviewReplyVo> replies = getReplyList(reviewId, currentUserId);
|
|
|
|
|
- vo.setReplies(replies);
|
|
|
|
|
-
|
|
|
|
|
- // 查询是否已点赞
|
|
|
|
|
- if (currentUserId != null) {
|
|
|
|
|
- LambdaQueryWrapper<LawyerConsultationReviewLike> likeWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
- likeWrapper.eq(LawyerConsultationReviewLike::getReviewId, reviewId)
|
|
|
|
|
- .eq(LawyerConsultationReviewLike::getLikeUserId, currentUserId)
|
|
|
|
|
- .eq(LawyerConsultationReviewLike::getDeleteFlag, 0);
|
|
|
|
|
- long likeCount = reviewLikeMapper.selectCount(likeWrapper);
|
|
|
|
|
- vo.setIsLiked(likeCount > 0 ? 1 : 0);
|
|
|
|
|
- } else {
|
|
|
|
|
- vo.setIsLiked(0);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- return R.data(vo);
|
|
|
|
|
- } catch (Exception e) {
|
|
|
|
|
- log.error("获取评价详情失败", e);
|
|
|
|
|
- return R.fail("获取评价详情失败:" + e.getMessage());
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- @Override
|
|
|
|
|
- public R<IPage<LawyerConsultationReviewVo>> getReviewListWithDetail(int pageNum, int pageSize, Integer lawyerUserId, Integer currentUserId) {
|
|
|
|
|
- log.info("LawyerConsultationReviewServiceImpl.getReviewListWithDetail?pageNum={}, pageSize={}, lawyerUserId={}, currentUserId={}",
|
|
|
|
|
- pageNum, pageSize, lawyerUserId, currentUserId);
|
|
|
|
|
- try {
|
|
|
|
|
- Page<LawyerConsultationReview> page = new Page<>(pageNum, pageSize);
|
|
|
|
|
- LambdaQueryWrapper<LawyerConsultationReview> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
- queryWrapper.eq(LawyerConsultationReview::getLawyerUserId, lawyerUserId)
|
|
|
|
|
- .eq(LawyerConsultationReview::getDeleteFlag, 0)
|
|
|
|
|
- .orderByDesc(LawyerConsultationReview::getCreatedTime);
|
|
|
|
|
- IPage<LawyerConsultationReview> pageResult = this.page(page, queryWrapper);
|
|
|
|
|
-
|
|
|
|
|
- // 转换为VO
|
|
|
|
|
- Page<LawyerConsultationReviewVo> voPage = new Page<>(pageResult.getCurrent(), pageResult.getSize(), pageResult.getTotal());
|
|
|
|
|
- List<LawyerConsultationReviewVo> voList = new ArrayList<>();
|
|
|
|
|
- for (LawyerConsultationReview review : pageResult.getRecords()) {
|
|
|
|
|
- R<LawyerConsultationReviewVo> detailResult = getReviewDetail(review.getId(), currentUserId);
|
|
|
|
|
- if (detailResult.getCode() == 200 && detailResult.getData() != null) {
|
|
|
|
|
- voList.add(detailResult.getData());
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- voPage.setRecords(voList);
|
|
|
|
|
- return R.data(voPage);
|
|
|
|
|
- } catch (Exception e) {
|
|
|
|
|
- log.error("获取评价列表失败", e);
|
|
|
|
|
- return R.fail("获取评价列表失败:" + e.getMessage());
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- @Override
|
|
|
|
|
- public R<Boolean> addReply(LawyerConsultationReviewReplyDto replyDto, Integer replyUserId) {
|
|
|
|
|
- log.info("LawyerConsultationReviewServiceImpl.addReply?replyDto={}, replyUserId={}", replyDto, replyUserId);
|
|
|
|
|
- try {
|
|
|
|
|
- // 检查评价是否存在
|
|
|
|
|
- LawyerConsultationReview review = this.getById(replyDto.getReviewId());
|
|
|
|
|
- if (review == null || review.getDeleteFlag() == 1) {
|
|
|
|
|
- return R.fail("评价不存在");
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // 创建回复
|
|
|
|
|
- LawyerConsultationReviewReply reply = new LawyerConsultationReviewReply();
|
|
|
|
|
- reply.setReviewId(replyDto.getReviewId());
|
|
|
|
|
- reply.setReplyUserId(replyUserId);
|
|
|
|
|
- reply.setTargetUserId(replyDto.getTargetUserId());
|
|
|
|
|
- reply.setParentReplyId(replyDto.getParentReplyId() != null ? replyDto.getParentReplyId() : 0);
|
|
|
|
|
- reply.setReplyContent(replyDto.getReplyContent());
|
|
|
|
|
- reply.setLikeCount(0);
|
|
|
|
|
- reply.setCreatedUserId(replyUserId);
|
|
|
|
|
-
|
|
|
|
|
- boolean saved = reviewReplyMapper.insert(reply) > 0;
|
|
|
|
|
- if (!saved) {
|
|
|
|
|
- return R.fail("添加回复失败");
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // 更新评价的回复数
|
|
|
|
|
- review.setReplyCount((review.getReplyCount() == null ? 0 : review.getReplyCount()) + 1);
|
|
|
|
|
- this.updateById(review);
|
|
|
|
|
-
|
|
|
|
|
- return R.success("添加回复成功");
|
|
|
|
|
- } catch (Exception e) {
|
|
|
|
|
- log.error("添加回复失败", e);
|
|
|
|
|
- return R.fail("添加回复失败:" + e.getMessage());
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- @Override
|
|
|
|
|
- public R<Boolean> toggleLike(Integer reviewId, Integer replyId, Integer userId) {
|
|
|
|
|
- log.info("LawyerConsultationReviewServiceImpl.toggleLike?reviewId={}, replyId={}, userId={}", reviewId, replyId, userId);
|
|
|
|
|
- try {
|
|
|
|
|
- if (reviewId == null && replyId == null) {
|
|
|
|
|
- return R.fail("评价ID和回复ID不能同时为空");
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- LambdaQueryWrapper<LawyerConsultationReviewLike> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
- if (reviewId != null) {
|
|
|
|
|
- queryWrapper.eq(LawyerConsultationReviewLike::getReviewId, reviewId);
|
|
|
|
|
- }
|
|
|
|
|
- if (replyId != null) {
|
|
|
|
|
- queryWrapper.eq(LawyerConsultationReviewLike::getReplyId, replyId);
|
|
|
|
|
- }
|
|
|
|
|
- queryWrapper.eq(LawyerConsultationReviewLike::getLikeUserId, userId)
|
|
|
|
|
- .eq(LawyerConsultationReviewLike::getDeleteFlag, 0);
|
|
|
|
|
-
|
|
|
|
|
- LawyerConsultationReviewLike existingLike = reviewLikeMapper.selectOne(queryWrapper);
|
|
|
|
|
-
|
|
|
|
|
- if (existingLike != null) {
|
|
|
|
|
- // 取消点赞
|
|
|
|
|
- existingLike.setDeleteFlag(1);
|
|
|
|
|
- reviewLikeMapper.updateById(existingLike);
|
|
|
|
|
- // 更新点赞数
|
|
|
|
|
- if (reviewId != null) {
|
|
|
|
|
- LawyerConsultationReview review = this.getById(reviewId);
|
|
|
|
|
- if (review != null) {
|
|
|
|
|
- review.setLikeCount(Math.max(0, (review.getLikeCount() == null ? 0 : review.getLikeCount()) - 1));
|
|
|
|
|
- this.updateById(review);
|
|
|
|
|
- }
|
|
|
|
|
- } else if (replyId != null) {
|
|
|
|
|
- LawyerConsultationReviewReply reply = reviewReplyMapper.selectById(replyId);
|
|
|
|
|
- if (reply != null) {
|
|
|
|
|
- reply.setLikeCount(Math.max(0, (reply.getLikeCount() == null ? 0 : reply.getLikeCount()) - 1));
|
|
|
|
|
- reviewReplyMapper.updateById(reply);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- return R.success("取消点赞成功");
|
|
|
|
|
- } else {
|
|
|
|
|
- // 添加点赞
|
|
|
|
|
- LawyerConsultationReviewLike like = new LawyerConsultationReviewLike();
|
|
|
|
|
- like.setReviewId(reviewId);
|
|
|
|
|
- like.setReplyId(replyId);
|
|
|
|
|
- like.setLikeUserId(userId);
|
|
|
|
|
- reviewLikeMapper.insert(like);
|
|
|
|
|
- // 更新点赞数
|
|
|
|
|
- if (reviewId != null) {
|
|
|
|
|
- LawyerConsultationReview review = this.getById(reviewId);
|
|
|
|
|
- if (review != null) {
|
|
|
|
|
- review.setLikeCount((review.getLikeCount() == null ? 0 : review.getLikeCount()) + 1);
|
|
|
|
|
- this.updateById(review);
|
|
|
|
|
- }
|
|
|
|
|
- } else if (replyId != null) {
|
|
|
|
|
- LawyerConsultationReviewReply reply = reviewReplyMapper.selectById(replyId);
|
|
|
|
|
- if (reply != null) {
|
|
|
|
|
- reply.setLikeCount((reply.getLikeCount() == null ? 0 : reply.getLikeCount()) + 1);
|
|
|
|
|
- reviewReplyMapper.updateById(reply);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- return R.success("点赞成功");
|
|
|
|
|
- }
|
|
|
|
|
- } catch (Exception e) {
|
|
|
|
|
- log.error("点赞操作失败", e);
|
|
|
|
|
- return R.fail("点赞操作失败:" + e.getMessage());
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- /**
|
|
|
|
|
- * 获取回复列表(包含嵌套回复)
|
|
|
|
|
- */
|
|
|
|
|
- private List<LawyerConsultationReviewReplyVo> getReplyList(Integer reviewId, Integer currentUserId) {
|
|
|
|
|
- LambdaQueryWrapper<LawyerConsultationReviewReply> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
- queryWrapper.eq(LawyerConsultationReviewReply::getReviewId, reviewId)
|
|
|
|
|
- .eq(LawyerConsultationReviewReply::getParentReplyId, 0)
|
|
|
|
|
- .eq(LawyerConsultationReviewReply::getDeleteFlag, 0)
|
|
|
|
|
- .orderByAsc(LawyerConsultationReviewReply::getCreatedTime);
|
|
|
|
|
- List<LawyerConsultationReviewReply> replies = reviewReplyMapper.selectList(queryWrapper);
|
|
|
|
|
-
|
|
|
|
|
- List<LawyerConsultationReviewReplyVo> voList = new ArrayList<>();
|
|
|
|
|
- for (LawyerConsultationReviewReply reply : replies) {
|
|
|
|
|
- LawyerConsultationReviewReplyVo vo = convertReplyToVo(reply, currentUserId);
|
|
|
|
|
- // 查询子回复
|
|
|
|
|
- LambdaQueryWrapper<LawyerConsultationReviewReply> childWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
- childWrapper.eq(LawyerConsultationReviewReply::getParentReplyId, reply.getId())
|
|
|
|
|
- .eq(LawyerConsultationReviewReply::getDeleteFlag, 0)
|
|
|
|
|
- .orderByAsc(LawyerConsultationReviewReply::getCreatedTime);
|
|
|
|
|
- List<LawyerConsultationReviewReply> childReplies = reviewReplyMapper.selectList(childWrapper);
|
|
|
|
|
- List<LawyerConsultationReviewReplyVo> childVoList = new ArrayList<>();
|
|
|
|
|
- for (LawyerConsultationReviewReply childReply : childReplies) {
|
|
|
|
|
- childVoList.add(convertReplyToVo(childReply, currentUserId));
|
|
|
|
|
- }
|
|
|
|
|
- vo.setChildReplies(childVoList);
|
|
|
|
|
- voList.add(vo);
|
|
|
|
|
- }
|
|
|
|
|
- return voList;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- /**
|
|
|
|
|
- * 转换回复为VO
|
|
|
|
|
- */
|
|
|
|
|
- private LawyerConsultationReviewReplyVo convertReplyToVo(LawyerConsultationReviewReply reply, Integer currentUserId) {
|
|
|
|
|
- LawyerConsultationReviewReplyVo vo = new LawyerConsultationReviewReplyVo();
|
|
|
|
|
- BeanUtils.copyProperties(reply, vo);
|
|
|
|
|
-
|
|
|
|
|
- // 查询回复用户信息
|
|
|
|
|
- LifeUser replyUser = lifeUserMapper.selectById(reply.getReplyUserId());
|
|
|
|
|
- if (replyUser != null) {
|
|
|
|
|
- vo.setReplyUserName(replyUser.getUserName());
|
|
|
|
|
- vo.setReplyUserImage(replyUser.getUserImage());
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // 查询被回复用户信息
|
|
|
|
|
- if (reply.getTargetUserId() != null) {
|
|
|
|
|
- LifeUser targetUser = lifeUserMapper.selectById(reply.getTargetUserId());
|
|
|
|
|
- if (targetUser != null) {
|
|
|
|
|
- vo.setTargetUserName(targetUser.getUserName());
|
|
|
|
|
- vo.setTargetUserImage(targetUser.getUserImage());
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // 查询是否已点赞
|
|
|
|
|
- if (currentUserId != null) {
|
|
|
|
|
- LambdaQueryWrapper<LawyerConsultationReviewLike> likeWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
- likeWrapper.eq(LawyerConsultationReviewLike::getReplyId, reply.getId())
|
|
|
|
|
- .eq(LawyerConsultationReviewLike::getLikeUserId, currentUserId)
|
|
|
|
|
- .eq(LawyerConsultationReviewLike::getDeleteFlag, 0);
|
|
|
|
|
- long likeCount = reviewLikeMapper.selectCount(likeWrapper);
|
|
|
|
|
- vo.setIsLiked(likeCount > 0 ? 1 : 0);
|
|
|
|
|
- } else {
|
|
|
|
|
- vo.setIsLiked(0);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- return vo;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- /**
|
|
|
|
|
- * 更新律师评分统计
|
|
|
|
|
- */
|
|
|
|
|
- private void updateLawyerRatingStats(Integer lawyerUserId) {
|
|
|
|
|
- try {
|
|
|
|
|
- // 查询该律师的所有评价
|
|
|
|
|
- LambdaQueryWrapper<LawyerConsultationReview> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
- queryWrapper.eq(LawyerConsultationReview::getLawyerUserId, lawyerUserId)
|
|
|
|
|
- .eq(LawyerConsultationReview::getDeleteFlag, 0);
|
|
|
|
|
- List<LawyerConsultationReview> reviews = this.list(queryWrapper);
|
|
|
|
|
-
|
|
|
|
|
- if (reviews.isEmpty()) {
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // 计算平均分
|
|
|
|
|
- double totalRating = 0;
|
|
|
|
|
- int goodCount = 0;
|
|
|
|
|
- int mediumCount = 0;
|
|
|
|
|
- int badCount = 0;
|
|
|
|
|
-
|
|
|
|
|
- for (LawyerConsultationReview review : reviews) {
|
|
|
|
|
- totalRating += review.getRating();
|
|
|
|
|
- if (review.getRating() >= 4) {
|
|
|
|
|
- goodCount++;
|
|
|
|
|
- } else if (review.getRating() >= 3) {
|
|
|
|
|
- mediumCount++;
|
|
|
|
|
- } else {
|
|
|
|
|
- badCount++;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- double avgRating = totalRating / reviews.size();
|
|
|
|
|
- int serviceScore = (int) (avgRating * 20); // 转换为0-100分
|
|
|
|
|
-
|
|
|
|
|
- // 更新律师信息
|
|
|
|
|
- LawyerUser lawyerUser = lawyerUserMapper.selectById(lawyerUserId);
|
|
|
|
|
- if (lawyerUser != null) {
|
|
|
|
|
- lawyerUser.setServiceScore(serviceScore);
|
|
|
|
|
- lawyerUser.setServiceCount(reviews.size());
|
|
|
|
|
- lawyerUser.setGoodReviewCount(goodCount);
|
|
|
|
|
- lawyerUser.setMediumReviewCount(mediumCount);
|
|
|
|
|
- lawyerUser.setBadReviewCount(badCount);
|
|
|
|
|
- lawyerUserMapper.updateById(lawyerUser);
|
|
|
|
|
- }
|
|
|
|
|
- } catch (Exception e) {
|
|
|
|
|
- log.error("更新律师评分统计失败", e);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|