|
@@ -22,6 +22,8 @@ import org.springframework.web.multipart.MultipartRequest;
|
|
|
import shop.alien.entity.store.*;
|
|
import shop.alien.entity.store.*;
|
|
|
import shop.alien.entity.store.vo.*;
|
|
import shop.alien.entity.store.vo.*;
|
|
|
import shop.alien.mapper.*;
|
|
import shop.alien.mapper.*;
|
|
|
|
|
+import shop.alien.entity.store.vo.LawyerConsultationOrderVO;
|
|
|
|
|
+import shop.alien.entity.store.vo.UserOrderVo;
|
|
|
import shop.alien.store.config.WebSocketProcess;
|
|
import shop.alien.store.config.WebSocketProcess;
|
|
|
import shop.alien.store.service.StoreCommentService;
|
|
import shop.alien.store.service.StoreCommentService;
|
|
|
import shop.alien.store.service.StoreImgService;
|
|
import shop.alien.store.service.StoreImgService;
|
|
@@ -79,6 +81,10 @@ public class StoreCommentServiceImpl extends ServiceImpl<StoreCommentMapper, Sto
|
|
|
|
|
|
|
|
private final LifeUserOrderMapper lifeUserOrderMapper;
|
|
private final LifeUserOrderMapper lifeUserOrderMapper;
|
|
|
|
|
|
|
|
|
|
+ private final LawyerConsultationOrderMapper lawyerConsultationOrderMapper;
|
|
|
|
|
+
|
|
|
|
|
+ private final OrderReviewMapper orderReviewMapper;
|
|
|
|
|
+
|
|
|
@Autowired
|
|
@Autowired
|
|
|
private TextModerationUtil textModerationUtil;
|
|
private TextModerationUtil textModerationUtil;
|
|
|
@Autowired
|
|
@Autowired
|
|
@@ -1053,4 +1059,203 @@ public class StoreCommentServiceImpl extends ServiceImpl<StoreCommentMapper, Sto
|
|
|
.eq(StoreComment::getBusinessType, 5)
|
|
.eq(StoreComment::getBusinessType, 5)
|
|
|
.eq(StoreComment::getDeleteFlag, 0);
|
|
.eq(StoreComment::getDeleteFlag, 0);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public IPage<UserOrderVo> getUserAllOrders(Integer pageNum, Integer pageSize, Integer userId, Integer type) {
|
|
|
|
|
+ log.info("StoreCommentServiceImpl.getUserAllOrders?pageNum={}&pageSize={}&userId={}&type={}", pageNum, pageSize, userId, type);
|
|
|
|
|
+
|
|
|
|
|
+ if (userId == null) {
|
|
|
|
|
+ log.warn("用户ID不能为空");
|
|
|
|
|
+ return new Page<>(pageNum, pageSize);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ List<UserOrderVo> allOrders = new ArrayList<>();
|
|
|
|
|
+
|
|
|
|
|
+ // 1. 查询商户订单(已完成状态:status = 7)
|
|
|
|
|
+ Page<LifeUserOrderVo> storeOrderPage = new Page<>(pageNum, 10000); // 先查所有,后续合并分页
|
|
|
|
|
+ QueryWrapper<LifeUserOrderVo> storeOrderWrapper = new QueryWrapper<>();
|
|
|
|
|
+ storeOrderWrapper.eq("luo.user_id", String.valueOf(userId))
|
|
|
|
|
+ .eq("luo.status", 7) // 已完成状态
|
|
|
|
|
+ .eq("luo.delete_flag", 0);
|
|
|
|
|
+
|
|
|
|
|
+ // 根据type筛选:1-未评价,2-已评价
|
|
|
|
|
+ if (type != null) {
|
|
|
|
|
+ if (type == 1) {
|
|
|
|
|
+ // 未评价:orderAppraise = 0
|
|
|
|
|
+ storeOrderWrapper.eq("luo.order_appraise", 0);
|
|
|
|
|
+ } else if (type == 2) {
|
|
|
|
|
+ // 已评价:orderAppraise = 1
|
|
|
|
|
+ storeOrderWrapper.eq("luo.order_appraise", 1);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ storeOrderWrapper.orderByDesc("luo.created_time");
|
|
|
|
|
+ IPage<LifeUserOrderVo> storeOrders = lifeUserOrderMapper.queryUserOrderList(storeOrderPage, storeOrderWrapper);
|
|
|
|
|
+
|
|
|
|
|
+ // 转换商户订单为统一VO
|
|
|
|
|
+ if (storeOrders != null && CollectionUtils.isNotEmpty(storeOrders.getRecords())) {
|
|
|
|
|
+ // 如果type=2(已评价),需要查询评价信息
|
|
|
|
|
+ Map<String, StoreComment> commentMap = new HashMap<>();
|
|
|
|
|
+ if (type != null && type == 2) {
|
|
|
|
|
+ List<String> orderIds = storeOrders.getRecords().stream()
|
|
|
|
|
+ .map(LifeUserOrderVo::getId)
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+ if (CollectionUtils.isNotEmpty(orderIds)) {
|
|
|
|
|
+ LambdaQueryWrapper<StoreComment> commentWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
+ commentWrapper.in(StoreComment::getBusinessId, orderIds)
|
|
|
|
|
+ .eq(StoreComment::getBusinessType, 5) // 订单评价
|
|
|
|
|
+ .eq(StoreComment::getDeleteFlag, 0);
|
|
|
|
|
+ List<StoreComment> comments = storeCommentMapper.selectList(commentWrapper);
|
|
|
|
|
+ commentMap = comments.stream()
|
|
|
|
|
+ .collect(Collectors.toMap(
|
|
|
|
|
+ c -> String.valueOf(c.getBusinessId()),
|
|
|
|
|
+ Function.identity(),
|
|
|
|
|
+ (existing, replacement) -> existing
|
|
|
|
|
+ ));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ for (LifeUserOrderVo order : storeOrders.getRecords()) {
|
|
|
|
|
+ StoreComment comment = commentMap.get(order.getId());
|
|
|
|
|
+ UserOrderVo vo = convertStoreOrderToVo(order, comment);
|
|
|
|
|
+ allOrders.add(vo);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 2. 查询律师订单(已完成状态:orderStatus = 3)
|
|
|
|
|
+ Page<LawyerConsultationOrderVO> lawyerOrderPage = new Page<>(pageNum, 10000);
|
|
|
|
|
+ IPage<LawyerConsultationOrderVO> lawyerOrders = lawyerConsultationOrderMapper.getConsultationOrderListById(
|
|
|
|
|
+ lawyerOrderPage, String.valueOf(userId), "3", null); // orderStatus = 3 表示已完成
|
|
|
|
|
+
|
|
|
|
|
+ // 转换律师订单为统一VO
|
|
|
|
|
+ if (lawyerOrders != null && CollectionUtils.isNotEmpty(lawyerOrders.getRecords())) {
|
|
|
|
|
+ // 查询所有律师订单的评价信息(用于type筛选和评分填充)
|
|
|
|
|
+ Map<Integer, OrderReview> reviewMap = new HashMap<>();
|
|
|
|
|
+ List<Integer> orderIds = lawyerOrders.getRecords().stream()
|
|
|
|
|
+ .map(LawyerConsultationOrderVO::getId)
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+ if (CollectionUtils.isNotEmpty(orderIds)) {
|
|
|
|
|
+ LambdaQueryWrapper<OrderReview> reviewWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
+ reviewWrapper.in(OrderReview::getOrderId, orderIds)
|
|
|
|
|
+ .eq(OrderReview::getDeleteFlag, 0);
|
|
|
|
|
+ List<OrderReview> reviews = orderReviewMapper.selectList(reviewWrapper);
|
|
|
|
|
+ reviewMap = reviews.stream()
|
|
|
|
|
+ .collect(Collectors.toMap(
|
|
|
|
|
+ OrderReview::getOrderId,
|
|
|
|
|
+ Function.identity(),
|
|
|
|
|
+ (existing, replacement) -> existing
|
|
|
|
|
+ ));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ for (LawyerConsultationOrderVO order : lawyerOrders.getRecords()) {
|
|
|
|
|
+ OrderReview review = reviewMap.get(order.getId());
|
|
|
|
|
+
|
|
|
|
|
+ // 根据type筛选
|
|
|
|
|
+ if (type != null) {
|
|
|
|
|
+ if (type == 1 && review != null) {
|
|
|
|
|
+ // 未评价:跳过有评价的订单
|
|
|
|
|
+ continue;
|
|
|
|
|
+ } else if (type == 2 && review == null) {
|
|
|
|
|
+ // 已评价:跳过没有评价的订单
|
|
|
|
|
+ continue;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ UserOrderVo vo = convertLawyerOrderToVo(order, review);
|
|
|
|
|
+ allOrders.add(vo);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 按创建时间倒序排序
|
|
|
|
|
+ allOrders.sort((o1, o2) -> {
|
|
|
|
|
+ Date date1 = o1.getCreatedTime();
|
|
|
|
|
+ Date date2 = o2.getCreatedTime();
|
|
|
|
|
+ if (date1 == null && date2 == null) return 0;
|
|
|
|
|
+ if (date1 == null) return 1;
|
|
|
|
|
+ if (date2 == null) return -1;
|
|
|
|
|
+ return date2.compareTo(date1);
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ // 4. 手动分页
|
|
|
|
|
+ int total = allOrders.size();
|
|
|
|
|
+ int start = (pageNum - 1) * pageSize;
|
|
|
|
|
+ int end = Math.min(start + pageSize, total);
|
|
|
|
|
+ List<UserOrderVo> pageRecords = start < total ? allOrders.subList(start, end) : new ArrayList<>();
|
|
|
|
|
+
|
|
|
|
|
+ // 5. 构建分页结果
|
|
|
|
|
+ Page<UserOrderVo> resultPage = new Page<>(pageNum, pageSize);
|
|
|
|
|
+ resultPage.setRecords(pageRecords);
|
|
|
|
|
+ resultPage.setTotal(total);
|
|
|
|
|
+ resultPage.setPages((total + pageSize - 1) / pageSize);
|
|
|
|
|
+
|
|
|
|
|
+ return resultPage;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 转换商户订单为统一VO
|
|
|
|
|
+ */
|
|
|
|
|
+ private UserOrderVo convertStoreOrderToVo(LifeUserOrderVo order, StoreComment comment) {
|
|
|
|
|
+ UserOrderVo vo = new UserOrderVo();
|
|
|
|
|
+ vo.setOrderId(order.getId());
|
|
|
|
|
+ vo.setOrderNumber(order.getOrderNo());
|
|
|
|
|
+ vo.setOrderType(1); // 1-商户订单
|
|
|
|
|
+ vo.setUserId(order.getUserId());
|
|
|
|
|
+ vo.setBusinessId(order.getStoreId());
|
|
|
|
|
+ vo.setBusinessName(order.getStoreName());
|
|
|
|
|
+ vo.setOrderAmount(order.getPrice());
|
|
|
|
|
+ vo.setFinalPrice(order.getFinalPrice());
|
|
|
|
|
+ vo.setOrderStatus(order.getStatus());
|
|
|
|
|
+ vo.setOrderStatusValue(order.getOrderStatusValue());
|
|
|
|
|
+ vo.setOrderTime(order.getBuyTime());
|
|
|
|
|
+ vo.setPayTime(order.getPayTime());
|
|
|
|
|
+ vo.setCreatedTime(order.getCreatedTime());
|
|
|
|
|
+ vo.setStoreId(order.getStoreId());
|
|
|
|
|
+ vo.setCouponName(order.getCouponName());
|
|
|
|
|
+ vo.setImgUrl(order.getImgUrl());
|
|
|
|
|
+ vo.setOrderAppraise(order.getOrderAppraise());
|
|
|
|
|
+
|
|
|
|
|
+ // 如果已评价,填充评分信息
|
|
|
|
|
+ if (comment != null) {
|
|
|
|
|
+ vo.setScore(comment.getScore());
|
|
|
|
|
+ vo.setOtherScore(comment.getOtherScore());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return vo;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 转换律师订单为统一VO
|
|
|
|
|
+ */
|
|
|
|
|
+ private UserOrderVo convertLawyerOrderToVo(LawyerConsultationOrderVO order, OrderReview review) {
|
|
|
|
|
+ UserOrderVo vo = new UserOrderVo();
|
|
|
|
|
+ vo.setOrderId(String.valueOf(order.getId()));
|
|
|
|
|
+ vo.setOrderNumber(order.getOrderNumber());
|
|
|
|
|
+ vo.setOrderType(2); // 2-律师订单
|
|
|
|
|
+ vo.setUserId(String.valueOf(order.getClientUserId()));
|
|
|
|
|
+ vo.setBusinessId(String.valueOf(order.getLawyerUserId()));
|
|
|
|
|
+ vo.setBusinessName(order.getLawyerName());
|
|
|
|
|
+ vo.setOrderAmount(String.valueOf(order.getOrderAmount()));
|
|
|
|
|
+ vo.setOrderStatus(order.getOrderStatus());
|
|
|
|
|
+ vo.setPaymentStatus(order.getPaymentStatus());
|
|
|
|
|
+ vo.setOrderTime(order.getOrderTime());
|
|
|
|
|
+ vo.setPayTime(order.getPaymentTime());
|
|
|
|
|
+ vo.setCreatedTime(order.getCreatedTime());
|
|
|
|
|
+ vo.setLawyerUserId(order.getLawyerUserId());
|
|
|
|
|
+ vo.setProblemDescription(order.getProblemDescription());
|
|
|
|
|
+ vo.setConsultationFee(order.getConsultationFee());
|
|
|
|
|
+ vo.setStartTime(order.getStartTime());
|
|
|
|
|
+ vo.setEndTime(order.getEndTime());
|
|
|
|
|
+ vo.setLawyerHeadImg(order.getHeadImg());
|
|
|
|
|
+ vo.setHasReview(review != null);
|
|
|
|
|
+
|
|
|
|
|
+ // 如果已评价,填充评分信息
|
|
|
|
|
+ if (review != null) {
|
|
|
|
|
+ vo.setOverallRating(review.getOverallRating());
|
|
|
|
|
+ vo.setServiceAttitudeRating(review.getServiceAttitudeRating());
|
|
|
|
|
+ vo.setResponseTimeRating(review.getResponseTimeRating());
|
|
|
|
|
+ vo.setProfessionalAbilityRating(review.getProfessionalAbilityRating());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return vo;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|