OrderServiceImpl.java 12.1 KB
package com.infoloop.tianting.service.impl;

import com.infoloop.tianting.model.common.PageResult;
import com.infoloop.tianting.model.dto.OrderDbDTO.CreateOrderDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.CreateOrderResponse;
import com.infoloop.tianting.model.dto.OrderDbDTO.CustomerNotice;
import com.infoloop.tianting.model.dto.OrderDbDTO.MealDetailDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.OrderAndDetailsDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.OrderDetailDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.OrderDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.QueryOrderByConditionDto;
import com.infoloop.tianting.model.dto.OrderDbDTO.QueryOrderByPaginationDto;
import com.infoloop.tianting.service.OrderService;
import com.infoloop.tianting.service.client.OrderServiceRpcClient;
import com.infoloop.tianting.utils.DateUtil;
import com.infoloop.tianting.utils.PageUtil;
import java.util.List;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Slf4j
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class OrderServiceImpl implements OrderService {
  private final OrderServiceRpcClient orderServiceRpcClient;

  @Override
  public CreateOrderResponse createOrder(CreateOrderDto createOrderDto) {
    return orderServiceRpcClient.createOrder(createOrderDto);
  }

  @Override
  public List<OrderDetailDto> getOrderDetailsByOrderId(Integer orderId) {
    final var responseList = orderServiceRpcClient.getOrderDetailsByOrderId(orderId);
    return responseList.stream().map(d ->
        OrderDetailDto.builder()
            .id(d.getId())
            .count(d.getCount())
            .categoryId(d.getCategoryId())
            .mealId(d.getMealId())
            .menuDetailId(d.getMenuDetailId())
            .orderId(d.getOrderId())
            .price(d.getPrice())
            .showName(d.getShowName())
            .mealDetailJson(MealDetailDto.builder()
                .allergies(d.getMealDetailJson().getAllergiesList())
                .basicMaterials(d.getMealDetailJson().getBasicMaterials())
                .dockers(d.getMealDetailJson().getDockersList())
                .efficacies(d.getMealDetailJson().getEfficaciesList())
                .fat(d.getMealDetailJson().getFat())
                .tastes(d.getMealDetailJson().getTastesList())
                .protein(d.getMealDetailJson().getProtein())
                .carbohydrate(d.getMealDetailJson().getCarbohydrate())
                .energy(d.getMealDetailJson().getEnergy())
                .avoids(d.getMealDetailJson().getAvoidsList())
                .skus(d.getMealDetailJson().getSkusList())
                .build())
            .adjustSkuRemark(d.getAdjustSkuRemark())
            .enterpriseId(d.getEnterpriseId())
            .skuId(d.getSkuId())
            .notServe(d.getNotServe())
            .creationSource(d.getCreationSource().getNumber())
            .createdBy(d.getCreatedBy())
            .createdAt(DateUtil.formatDate(d.getCreatedAt()))
            .updateSource(d.getUpdateSource().getNumber())
            .updatedAt(DateUtil.formatDate(d.getUpdatedAt()))
            .updatedBy(d.getUpdatedBy())
            .build()).collect(Collectors.toList());
  }

  @Override
  public OrderAndDetailsDto getOrdersByCustomerId(Integer customerId) {
    final var responseList = orderServiceRpcClient.getOrdersByCustomerId(customerId);
    final var orders = responseList.stream().map(r -> OrderDto.builder()
        .id(r.getId())
        .enterpriseId(r.getEnterpriseId())
        .clientId(r.getClientId())
        .stallId(r.getStallId())
        .customerId(r.getCustomerId())
        .openId(r.getOpenId())
        .address(r.getAddress())
        .orderCode(r.getOrderCode())
        .menuId(r.getMenuId())
        .pickupCode(r.getPickupCode())
        .tableCode(r.getTableCode())
        .roomNo(r.getRoomNo())
        .status(r.getStatus().getNumber())
        .customerNoticeJson(CustomerNotice.builder()
            .avoids(r.getCustomerNoticeJson().getAvoidsList())
            .doctors(r.getCustomerNoticeJson().getDoctorsList()).build())
        .onlinePay(r.getOnlinePay())
        .payStatus(r.getPayStatusValue())
        .payPrice(r.getPayPrice())
        .payTime(DateUtil.formatDate(r.getPayTime()))
        .mealTime(DateUtil.formatDate(r.getMealTime()))
        .orderType(r.getOrderTypeValue())
        .remark(r.getRemark())
        .creationSource(r.getCreationSource().getNumber())
        .createdBy(r.getCreatedBy())
        .createdAt(DateUtil.formatDate(r.getCreatedAt()))
        .updateSource(r.getUpdateSource().getNumber())
        .updatedAt(DateUtil.formatDate(r.getUpdatedAt()))
        .updatedBy(r.getUpdatedBy())
        .build()).collect(Collectors.toList());
    final var ids = orders.stream().map(OrderDto::getId).collect(Collectors.toList());
    final var detailsResponse = orderServiceRpcClient.getOrderDetailsByOrderIds(ids);
    final var detailDtos = detailsResponse.stream().map(d ->
        OrderDetailDto.builder()
            .id(d.getId())
            .count(d.getCount())
            .categoryId(d.getCategoryId())
            .mealId(d.getMealId())
            .menuDetailId(d.getMenuDetailId())
            .orderId(d.getOrderId())
            .price(d.getPrice())
            .showName(d.getShowName())
            .mealDetailJson(MealDetailDto.builder()
                .allergies(d.getMealDetailJson().getAllergiesList())
                .basicMaterials(d.getMealDetailJson().getBasicMaterials())
                .dockers(d.getMealDetailJson().getDockersList())
                .efficacies(d.getMealDetailJson().getEfficaciesList())
                .fat(d.getMealDetailJson().getFat())
                .tastes(d.getMealDetailJson().getTastesList())
                .protein(d.getMealDetailJson().getProtein())
                .carbohydrate(d.getMealDetailJson().getCarbohydrate())
                .energy(d.getMealDetailJson().getEnergy())
                .avoids(d.getMealDetailJson().getAvoidsList())
                .skus(d.getMealDetailJson().getSkusList())
                .build())
            .adjustSkuRemark(d.getAdjustSkuRemark())
            .enterpriseId(d.getEnterpriseId())
            .skuId(d.getSkuId())
            .notServe(d.getNotServe())
            .creationSource(d.getCreationSource().getNumber())
            .createdBy(d.getCreatedBy())
            .createdAt(DateUtil.formatDate(d.getCreatedAt()))
            .updateSource(d.getUpdateSource().getNumber())
            .updatedAt(DateUtil.formatDate(d.getUpdatedAt()))
            .updatedBy(d.getUpdatedBy())
            .build()).collect(Collectors.toList());
    return OrderAndDetailsDto.builder().orderDetails(detailDtos).orders(orders).build();
  }

  @Override
  public OrderAndDetailsDto getOrdersByCondition(QueryOrderByConditionDto queryOrderDto) {
    final var responseList = orderServiceRpcClient.getOrdersByCondition(queryOrderDto);
    final var orders = responseList.stream().map(r -> OrderDto.builder()
        .id(r.getId())
        .enterpriseId(r.getEnterpriseId())
        .clientId(r.getClientId())
        .stallId(r.getStallId())
        .customerId(r.getCustomerId())
        .openId(r.getOpenId())
        .address(r.getAddress())
        .orderCode(r.getOrderCode())
        .menuId(r.getMenuId())
        .pickupCode(r.getPickupCode())
        .tableCode(r.getTableCode())
        .roomNo(r.getRoomNo())
        .status(r.getStatus().getNumber())
        .customerNoticeJson(CustomerNotice.builder()
            .avoids(r.getCustomerNoticeJson().getAvoidsList())
            .doctors(r.getCustomerNoticeJson().getDoctorsList()).build())
        .onlinePay(r.getOnlinePay())
        .payStatus(r.getPayStatusValue())
        .payPrice(r.getPayPrice())
        .payTime(DateUtil.formatDate(r.getPayTime()))
        .mealTime(DateUtil.formatDate(r.getMealTime()))
        .orderType(r.getOrderTypeValue())
        .remark(r.getRemark())
        .creationSource(r.getCreationSource().getNumber())
        .createdBy(r.getCreatedBy())
        .createdAt(DateUtil.formatDate(r.getCreatedAt()))
        .updateSource(r.getUpdateSource().getNumber())
        .updatedAt(DateUtil.formatDate(r.getUpdatedAt()))
        .updatedBy(r.getUpdatedBy())
        .build()).collect(Collectors.toList());
    final var ids = orders.stream().map(OrderDto::getId).collect(Collectors.toList());
    final var detailsResponse = orderServiceRpcClient.getOrderDetailsByOrderIds(ids);
    final var detailDtos = detailsResponse.stream().map(d ->
        OrderDetailDto.builder()
            .id(d.getId())
            .count(d.getCount())
            .categoryId(d.getCategoryId())
            .mealId(d.getMealId())
            .menuDetailId(d.getMenuDetailId())
            .orderId(d.getOrderId())
            .price(d.getPrice())
            .showName(d.getShowName())
            .mealDetailJson(MealDetailDto.builder()
                .allergies(d.getMealDetailJson().getAllergiesList())
                .basicMaterials(d.getMealDetailJson().getBasicMaterials())
                .dockers(d.getMealDetailJson().getDockersList())
                .efficacies(d.getMealDetailJson().getEfficaciesList())
                .fat(d.getMealDetailJson().getFat())
                .tastes(d.getMealDetailJson().getTastesList())
                .protein(d.getMealDetailJson().getProtein())
                .carbohydrate(d.getMealDetailJson().getCarbohydrate())
                .energy(d.getMealDetailJson().getEnergy())
                .avoids(d.getMealDetailJson().getAvoidsList())
                .skus(d.getMealDetailJson().getSkusList())
                .build())
            .adjustSkuRemark(d.getAdjustSkuRemark())
            .enterpriseId(d.getEnterpriseId())
            .skuId(d.getSkuId())
            .notServe(d.getNotServe())
            .creationSource(d.getCreationSource().getNumber())
            .createdBy(d.getCreatedBy())
            .createdAt(DateUtil.formatDate(d.getCreatedAt()))
            .updateSource(d.getUpdateSource().getNumber())
            .updatedAt(DateUtil.formatDate(d.getUpdatedAt()))
            .updatedBy(d.getUpdatedBy())
            .build()).collect(Collectors.toList());
    return OrderAndDetailsDto.builder().orderDetails(detailDtos).orders(orders).build();
  }

  @Override
  public PageResult<OrderDto> getOrdersByPagination(QueryOrderByPaginationDto queryOrderDto) {
    final var response = orderServiceRpcClient.queryClientCustomerOrdersByPagination(queryOrderDto);
    final var results = response.getResponsesList().stream().map(r -> OrderDto.builder()
        .id(r.getId())
        .enterpriseId(r.getEnterpriseId())
        .clientId(r.getClientId())
        .stallId(r.getStallId())
        .customerId(r.getCustomerId())
        .openId(r.getOpenId())
        .address(r.getAddress())
        .orderCode(r.getOrderCode())
        .menuId(r.getMenuId())
        .pickupCode(r.getPickupCode())
        .tableCode(r.getTableCode())
        .roomNo(r.getRoomNo())
        .status(r.getStatus().getNumber())
        .customerNoticeJson(CustomerNotice.builder()
            .avoids(r.getCustomerNoticeJson().getAvoidsList())
            .doctors(r.getCustomerNoticeJson().getDoctorsList()).build())
        .onlinePay(r.getOnlinePay())
        .payStatus(r.getPayStatusValue())
        .payPrice(r.getPayPrice())
        .payTime(DateUtil.formatDate(r.getPayTime()))
        .mealTime(DateUtil.formatDate(r.getMealTime()))
        .orderType(r.getOrderTypeValue())
        .remark(r.getRemark())
        .isDeleted(r.getIsDeleted())
        .isRead(r.getIsRead())
        .creationSource(r.getCreationSource().getNumber())
        .createdBy(r.getCreatedBy())
        .createdAt(DateUtil.formatDate(r.getCreatedAt()))
        .updateSource(r.getUpdateSource().getNumber())
        .updatedAt(DateUtil.formatDate(r.getUpdatedAt()))
        .updatedBy(r.getUpdatedBy())
        .closeTimeType(r.getCloseTimeTypeValue())
        .totalNum(r.getTotalNum())
        .build()).collect(Collectors.toList());
    return PageUtil.from(results, response.getTotal(), response.getPages(),
        queryOrderDto.getPn(), queryOrderDto.getPz());
  }
}