OrderDetailDbServiceImpl.java 11.3 KB
package com.tianting.infoloop.service.impl;

import cn.hutool.extra.spring.SpringUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.infoloop.tianting.clientcustomerorderservice.BatchCreateClientCustomerOrderDetailsRpcRequest;
import com.infoloop.tianting.clientcustomerorderservice.BatchUpdateClientCustomerOrderDetailsRpcRequest;
import com.infoloop.tianting.clientcustomerorderservice.CreateClientCustomerOrderDetailRpcRequest;
import com.infoloop.tianting.clientcustomerorderservice.GetClientCustomerOrderDetailsByOrderIdsRpcRequest;
import com.infoloop.tianting.clientcustomerorderservice.UpdateClientCustomerOrderDetailRpcRequest;
import com.tianting.infoloop.mapper.OrderDbMapper;
import com.tianting.infoloop.mapper.OrderDetailMapper;
import com.tianting.infoloop.model.db.OrderDb;
import com.tianting.infoloop.model.db.OrderDetailDb;
import com.tianting.infoloop.service.OrderDetailDbService;
import com.tianting.infoloop.utils.ProtoBeanUtil;
import com.tianting.infoloop.utils.exception.ErrorCodeConstants;
import com.tianting.infoloop.utils.exception.ServiceExceptionUtil;
import java.time.Instant;
import java.time.ZoneId;
import java.util.Collections;
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 OrderDetailDbServiceImpl extends ServiceImpl<OrderDetailMapper, OrderDetailDb>
    implements OrderDetailDbService {
  private final OrderDetailMapper orderDetailMapper;

  @Override
  public OrderDetailDb createOrderDetailDb(
      CreateClientCustomerOrderDetailRpcRequest createOrderDetailRequest) {
    ObjectMapper objectMapper = new ObjectMapper();
    OrderDetailDb orderDetailDb = new OrderDetailDb();
    orderDetailDb.setOrderId(createOrderDetailRequest.getCreation().getOrderId());
    orderDetailDb.setMenuDetailId(createOrderDetailRequest.getCreation().getMenuDetailId());
    orderDetailDb.setCount(createOrderDetailRequest.getCreation().getCount());
    orderDetailDb.setMealId(createOrderDetailRequest.getCreation().getMealId());
    orderDetailDb.setCategoryId(createOrderDetailRequest.getCreation().getCategoryId());
    orderDetailDb.setSkuId(createOrderDetailRequest.getCreation().getSkuId());
    orderDetailDb.setCreatedBy(createOrderDetailRequest.getCreatedBy());
    orderDetailDb.setCreationSource(createOrderDetailRequest.getCreationSourceValue());
    orderDetailDb.setUpdatedBy(createOrderDetailRequest.getCreatedBy());
    orderDetailDb.setUpdateSource(createOrderDetailRequest.getCreationSourceValue());
    orderDetailDb.setEnterpriseId(createOrderDetailRequest.getEnterpriseId());
    if (createOrderDetailRequest.getCreation().getShouldCreateShowName()) {
      orderDetailDb.setShowName(createOrderDetailRequest.getCreation().getShowName());
    }
    if (createOrderDetailRequest.getCreation().getShouldCreatePrice()) {
      orderDetailDb.setPrice(createOrderDetailRequest.getCreation().getPrice());
    }
    if (createOrderDetailRequest.getCreation().getShouldCreateAdjustSkuRemark()) {
      orderDetailDb.setAdjustSkuRemark(createOrderDetailRequest.getCreation().getAdjustSkuRemark());
    }
    orderDetailDb.setNotServe(createOrderDetailRequest.getCreation().getNotServe());
    if (createOrderDetailRequest.getCreation().getShouldCreateMealDetailJson()) {
      orderDetailDb.setMealDetailJson(objectMapper.valueToTree(createOrderDetailRequest.getCreation().getMealDetailJson()));
    }
    boolean res = this.save(orderDetailDb);
    if (!res) {
      throw ServiceExceptionUtil.exception(ErrorCodeConstants.ORDER_DETAIL_GEN_FAIL);
    }
    return orderDetailDb;
  }

  @Override
  public List<OrderDetailDb> batchCreateOrderDetailDb(BatchCreateClientCustomerOrderDetailsRpcRequest
      batchCreateOrderDetailsRequest) {
    ObjectMapper objectMapper = new ObjectMapper();
//    objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.LOWER_CAMEL_CASE);
//    objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
    var list = batchCreateOrderDetailsRequest.getCreationsList().stream()
        .map(creation -> {
          OrderDetailDb orderDetailDb = new OrderDetailDb();
          orderDetailDb.setCreationSource(batchCreateOrderDetailsRequest.getCreationSourceValue());
          orderDetailDb.setCreatedBy(batchCreateOrderDetailsRequest.getCreatedBy());
          orderDetailDb.setUpdateSource(batchCreateOrderDetailsRequest.getCreationSourceValue());
          orderDetailDb.setUpdatedBy(batchCreateOrderDetailsRequest.getCreatedBy());
          orderDetailDb.setOrderId(creation.getOrderId());
          orderDetailDb.setMenuDetailId(creation.getMenuDetailId());
          orderDetailDb.setCount(creation.getCount());
          orderDetailDb.setMealId(creation.getMealId());
          orderDetailDb.setCategoryId(creation.getCategoryId());
          orderDetailDb.setSkuId(creation.getSkuId());
          orderDetailDb.setIsDeleted(false);
          orderDetailDb.setNotServe(false);
          orderDetailDb.setEnterpriseId(batchCreateOrderDetailsRequest.getEnterpriseId());
          if (creation.getShouldCreateShowName()) {
            orderDetailDb.setShowName(creation.getShowName());
          }
          if (creation.getShouldCreatePrice()) {
            orderDetailDb.setPrice(creation.getPrice());
          }
          if (creation.getShouldCreateAdjustSkuRemark()) {
            orderDetailDb.setAdjustSkuRemark(creation.getAdjustSkuRemark());
          }
          System.out.println("_______________________________");
          if (creation.getShouldCreateMealDetailJson()) {
            System.out.println("______________object_________________");
            final JsonNode a;
            try {
              a = objectMapper.readTree(ProtoBeanUtil.protoToJson(creation.getMealDetailJson()));
              orderDetailDb.setMealDetailJson(a);
              System.out.println(a);
            } catch (JsonProcessingException e) {
              e.printStackTrace();
            }
            System.out.println("______________object_____end____________");
          }
          return orderDetailDb;
        })
        .collect(Collectors.toList());
    return SpringUtil.getBean(OrderDetailDbServiceImpl.class).saveBatch(list) ? list : Collections.emptyList();
  }

  @Override
  public Boolean updateOrderDetailDb(UpdateClientCustomerOrderDetailRpcRequest
      updateOrderDetailRequest) {
    var orderDetailDb = new OrderDetailDb();
    orderDetailDb.setId(updateOrderDetailRequest.getModification().getId());
    orderDetailDb.setUpdatedBy(updateOrderDetailRequest.getUpdatedBy());
    orderDetailDb.setUpdateSource(updateOrderDetailRequest.getUpdateSourceValue());

    if (updateOrderDetailRequest.getModification().getShouldUpdateMenuDetailId()) {
      orderDetailDb.setMenuDetailId(updateOrderDetailRequest.getModification().getMenuDetailId());
    }
    if (updateOrderDetailRequest.getModification().getShouldUpdateCount()) {
      orderDetailDb.setCount(updateOrderDetailRequest.getModification().getCount());
    }
    if (updateOrderDetailRequest.getModification().getShouldUpdateMealId()) {
      orderDetailDb.setMealId(updateOrderDetailRequest.getModification().getMealId());
    }
    if (updateOrderDetailRequest.getModification().getShouldUpdateCategoryId()) {
      orderDetailDb.setCategoryId(updateOrderDetailRequest.getModification().getCategoryId());
    }
    if (updateOrderDetailRequest.getModification().getShouldUpdateSkuId()) {
      orderDetailDb.setSkuId(updateOrderDetailRequest.getModification().getSkuId());
    }
    if (updateOrderDetailRequest.getModification().getShouldUpdateShowName()) {
      orderDetailDb.setShowName(updateOrderDetailRequest.getModification().getShowName());
    }
    if (updateOrderDetailRequest.getModification().getShouldUpdatePrice()) {
      orderDetailDb.setPrice(updateOrderDetailRequest.getModification().getPrice());
    }
    if (updateOrderDetailRequest.getModification().getShouldUpdateAdjustSkuRemark()) {
      orderDetailDb.setAdjustSkuRemark(updateOrderDetailRequest.getModification().getAdjustSkuRemark());
    }
    if (updateOrderDetailRequest.getModification().getShouldUpdateNotServe()) {
      orderDetailDb.setNotServe(updateOrderDetailRequest.getModification().getNotServe());
    }
    if (updateOrderDetailRequest.getModification().getShouldUpdateMealDetailJson()) {
      ObjectMapper objectMapper = new ObjectMapper();
      orderDetailDb.setMealDetailJson(objectMapper.valueToTree(updateOrderDetailRequest.
          getModification().getMealDetailJson()));
    }
    return orderDetailMapper.updateById(orderDetailDb) > 0;
  }

  @Override
  public Boolean batchUpdateOrderDetailDbs(
      BatchUpdateClientCustomerOrderDetailsRpcRequest batchUpdateOrderDetailsRequest) {
    final var list = batchUpdateOrderDetailsRequest.getModificationsList().stream().map(modification -> {
      var orderDetailDb = new OrderDetailDb();
      orderDetailDb.setId(modification.getId());
      if (modification.getShouldUpdateMenuDetailId()) {
        orderDetailDb.setMenuDetailId(modification.getMenuDetailId());
      }
      if (modification.getShouldUpdateCount()) {
        orderDetailDb.setCount(modification.getCount());
      }
      if (modification.getShouldUpdateMealId()) {
        orderDetailDb.setMealId(modification.getMealId());
      }
      if (modification.getShouldUpdateCategoryId()) {
        orderDetailDb.setCategoryId(modification.getCategoryId());
      }
      if (modification.getShouldUpdateSkuId()) {
        orderDetailDb.setSkuId(modification.getSkuId());
      }
      if (modification.getShouldUpdateShowName()) {
        orderDetailDb.setShowName(modification.getShowName());
      }
      if (modification.getShouldUpdatePrice()) {
        orderDetailDb.setPrice(modification.getPrice());
      }
      if (modification.getShouldUpdateAdjustSkuRemark()) {
        orderDetailDb.setAdjustSkuRemark(modification.getAdjustSkuRemark());
      }
      if (modification.getShouldUpdateNotServe()) {
        orderDetailDb.setNotServe(modification.getNotServe());
      }
      if (modification.getShouldUpdateMealDetailJson()) {
        ObjectMapper objectMapper = new ObjectMapper();
        orderDetailDb.setMealDetailJson(objectMapper.valueToTree(modification.getMealDetailJson()));
      }
      return orderDetailDb;
    }).collect(Collectors.toList());
    return SpringUtil.getBean(OrderDetailDbServiceImpl.class).updateBatchById(list);
  }

  public   List<OrderDetailDb> getOrderDetailsByOrderIds(
      GetClientCustomerOrderDetailsByOrderIdsRpcRequest getOrderDetailsByOrderIdsRequest) {
    QueryWrapper<OrderDetailDb> wrapper = new QueryWrapper<>();
    if (!getOrderDetailsByOrderIdsRequest.getIncludeDeleted()) {
      wrapper.eq("isDeleted", false);
    }
    wrapper.in("orderId", getOrderDetailsByOrderIdsRequest.getOrderIdsList())
        .orderByDesc("createdAt");
    return orderDetailMapper.selectList(wrapper);

  }
}