|
|
@@ -21,6 +21,8 @@ import shop.alien.entity.store.dto.CreateOrderDTO;
|
|
|
import shop.alien.entity.store.vo.OrderChangeLogBatchVO;
|
|
|
import shop.alien.entity.store.vo.OrderChangeLogItemVO;
|
|
|
import shop.alien.entity.store.vo.OrderInfoVO;
|
|
|
+import shop.alien.entity.store.vo.StoreOrderPageVO;
|
|
|
+import shop.alien.entity.store.vo.OrderCuisineItemVO;
|
|
|
import shop.alien.mapper.*;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
@@ -439,6 +441,70 @@ public class StoreOrderServiceImpl extends ServiceImpl<StoreOrderMapper, StoreOr
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ public IPage<StoreOrderPageVO> getOrderPageWithCuisines(Page<StoreOrder> page, Integer storeId, Integer tableId, Integer orderStatus) {
|
|
|
+ log.info("分页查询订单列表(包含菜品信息), storeId={}, tableId={}, orderStatus={}", storeId, tableId, orderStatus);
|
|
|
+
|
|
|
+ // 1. 查询订单列表
|
|
|
+ IPage<StoreOrder> orderPage = getOrderPage(page, storeId, tableId, orderStatus);
|
|
|
+
|
|
|
+ // 2. 获取所有订单ID
|
|
|
+ List<StoreOrder> orders = orderPage.getRecords();
|
|
|
+ if (orders == null || orders.isEmpty()) {
|
|
|
+ // 如果没有订单,返回空的分页结果
|
|
|
+ Page<StoreOrderPageVO> resultPage = new Page<>(page.getCurrent(), page.getSize());
|
|
|
+ resultPage.setTotal(orderPage.getTotal());
|
|
|
+ resultPage.setPages(orderPage.getPages());
|
|
|
+ return resultPage;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Integer> orderIds = orders.stream()
|
|
|
+ .map(StoreOrder::getId)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ // 3. 批量查询所有订单的菜品详情
|
|
|
+ LambdaQueryWrapper<StoreOrderDetail> detailWrapper = new LambdaQueryWrapper<>();
|
|
|
+ detailWrapper.in(StoreOrderDetail::getOrderId, orderIds);
|
|
|
+ detailWrapper.eq(StoreOrderDetail::getDeleteFlag, 0);
|
|
|
+ detailWrapper.orderByAsc(StoreOrderDetail::getOrderId);
|
|
|
+ detailWrapper.orderByAsc(StoreOrderDetail::getCreatedTime);
|
|
|
+ List<StoreOrderDetail> allDetails = orderDetailMapper.selectList(detailWrapper);
|
|
|
+
|
|
|
+ // 4. 按订单ID分组菜品详情
|
|
|
+ Map<Integer, List<StoreOrderDetail>> detailsMap = allDetails.stream()
|
|
|
+ .collect(Collectors.groupingBy(StoreOrderDetail::getOrderId));
|
|
|
+
|
|
|
+ // 5. 构建返回结果
|
|
|
+ List<StoreOrderPageVO> voList = orders.stream().map(order -> {
|
|
|
+ StoreOrderPageVO vo = new StoreOrderPageVO();
|
|
|
+ vo.setOrder(order);
|
|
|
+
|
|
|
+ // 获取该订单的菜品列表
|
|
|
+ List<StoreOrderDetail> orderDetails = detailsMap.getOrDefault(order.getId(), new ArrayList<>());
|
|
|
+ List<OrderCuisineItemVO> cuisineItems = orderDetails.stream()
|
|
|
+ .map(detail -> {
|
|
|
+ OrderCuisineItemVO item = new OrderCuisineItemVO();
|
|
|
+ item.setCuisineId(detail.getCuisineId());
|
|
|
+ item.setCuisineName(detail.getCuisineName());
|
|
|
+ item.setCuisineImage(detail.getCuisineImage());
|
|
|
+ item.setQuantity(detail.getQuantity());
|
|
|
+ return item;
|
|
|
+ })
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ vo.setCuisineItems(cuisineItems);
|
|
|
+
|
|
|
+ return vo;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+
|
|
|
+ // 6. 构建分页结果
|
|
|
+ Page<StoreOrderPageVO> resultPage = new Page<>(page.getCurrent(), page.getSize());
|
|
|
+ resultPage.setRecords(voList);
|
|
|
+ resultPage.setTotal(orderPage.getTotal());
|
|
|
+ resultPage.setPages(orderPage.getPages());
|
|
|
+
|
|
|
+ return resultPage;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
public StoreOrder addDishToOrder(Integer orderId, Integer cuisineId, Integer quantity, String remark) {
|
|
|
log.info("加餐, orderId={}, cuisineId={}, quantity={}", orderId, cuisineId, quantity);
|
|
|
|