KdsServiceImpl.java 3.94 KB
package com.infoloop.tianting.service.impl;

import com.infoloop.tianting.clientcustomerorderservice.SingleClientCustomerOrderDetailRpcResponse;
import com.infoloop.tianting.clientcustomerorderservice.SingleClientCustomerOrderRpcResponse;
import com.infoloop.tianting.context.LoginContextHolder;
import com.infoloop.tianting.model.dto.KdsDTO.KdsOrderDto;
import com.infoloop.tianting.model.dto.KdsDTO.KdsOrderSkuDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.QueryOrderByConditionDto;
import com.infoloop.tianting.service.KdsService;
import com.infoloop.tianting.service.client.MenuServiceRpcClient;
import com.infoloop.tianting.service.client.OrderServiceRpcClient;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.hssf.record.DVALRecord;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Slf4j
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class KdsServiceImpl implements KdsService {

  private final OrderServiceRpcClient orderServiceRpcClient;
  private final MenuServiceRpcClient menuServiceRpcClient;

  public void getOrderDetailBySku() {

    // 获取当日所有的订单 和 订单明细
    LocalDate today = LocalDate.now();
    LocalDateTime todayZero = today.atStartOfDay();
    LocalDate tomorrow = today.plusDays(1);
    LocalDateTime tomorrowZero = tomorrow.atStartOfDay();

    final var operatorLoginInfo = LoginContextHolder.getLoginInfo();
    final var queryOrderDto = QueryOrderByConditionDto.builder()
        .enterpriseId(operatorLoginInfo.getEnterpriseId())
        .shouldFilterCreatedAtTimeStart(true)
        .createdAtTimeStart(todayZero)
        .shouldFilterCreatedAtTimeEnd(true)
        .createdAtTimeEnd(tomorrowZero)
        .build();
    final var orderList = orderServiceRpcClient.getOrdersByCondition(queryOrderDto);
    List<Integer> orderIds = orderList.stream()
        .map(SingleClientCustomerOrderRpcResponse::getId)
        .distinct()
        .collect(Collectors.toList());
    final var orderDetailList = orderServiceRpcClient.getOrderDetailsByOrderIds(orderIds);

    //在所有的orderDetail里找出所有所有不同的menuDetailId,然后根据menuDetailId进行分类
    final var menuDetailIds = orderDetailList.stream()
        .map(SingleClientCustomerOrderDetailRpcResponse::getMenuDetailId)
        .distinct()
        .collect(Collectors.toList());
    List<KdsOrderSkuDto> kdsOrderSkuList = new ArrayList<>();
    for (Integer menuDetailId: menuDetailIds) {
      // 找出该menuDetailId 的所有orderDetail
      final var curOrderDetails = orderDetailList.stream()
          .filter(d-> d.getMenuDetailId() == menuDetailId)
          .collect(Collectors.toList());
      final var totalCount = curOrderDetails.stream()
          .mapToInt(SingleClientCustomerOrderDetailRpcResponse::getCount)
          .sum();
      List<KdsOrderDto> kdsOrders = new ArrayList<>();
      for(SingleClientCustomerOrderDetailRpcResponse detail: curOrderDetails) {
        final var order = orderList.stream()
            .filter(o -> o.getId() == detail.getOrderId())
            .findFirst();
        if (order.isEmpty()) {
          continue;
        }
        final var kdsOrder = KdsOrderDto.builder()
            .count(detail.getCount())
            .orderDetailId(detail.getId())
            .remark(order.get().getRemark())
            .orderId(order.get().getId())
            .roomNo(order.get().getRoomNo())
            .tableCode(order.get().getTableCode())
            .build();
        kdsOrders.add(kdsOrder);
      }

      final var kdsOrderSku = KdsOrderSkuDto.builder()
          .showName(curOrderDetails.get(0).getShowName())
          .totalCount(totalCount)
          .orderList(kdsOrders)
          .build();
      kdsOrderSkuList.add(kdsOrderSku);

    }




  }


}