Explorar o código

添加 京东订单出库Excex导入

yzc %!s(int64=2) %!d(string=hai) anos
pai
achega
dc59dd172a

+ 3 - 0
hx-service-api/victoriatourist-api/src/main/java/com/fjhx/entity/order/OrderDetails.java

@@ -49,6 +49,9 @@ public class OrderDetails extends BaseEntity {
      */
     private BigDecimal notIssuedQuantity;
 
+    /**预约号*/
+    private String reservationNumber;
+
     /**
      * 版本号
      */

+ 8 - 0
hx-service/victoriatourist/src/main/java/com/fjhx/controller/order/OrderJdController.java

@@ -79,5 +79,13 @@ public class OrderJdController {
         return R.success();
     }
 
+    /**
+     * 京东订单出库Excel导入*/
+    @PostMapping("/issueExcelImport")
+    public R issueExcelImport(@RequestParam("file") MultipartFile file){
+        orderDetailsService.issueExcelImport(file);
+        return R.success();
+    }
+
 }
 

+ 36 - 0
hx-service/victoriatourist/src/main/java/com/fjhx/service/order/JdOrderInfo.java

@@ -0,0 +1,36 @@
+package com.fjhx.service.order;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.fjhx.base.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+
+/**
+ * 京东订单出库Excel导入实体类
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class JdOrderInfo extends BaseEntity {
+    /**
+     * 订单id*/
+    private Long orderId;
+    @ExcelProperty("订单编号")
+    private String code;
+    @ExcelProperty("仓库名称")
+    private String warehouseName;
+    @ExcelProperty("预约号")
+    private String reservationNumber;
+    /**
+     * 产品id*/
+    private Long productId;
+    @ExcelProperty("产品编码")
+    private String productCode;
+    @ExcelProperty("出库数量")
+    private BigDecimal quantity;
+    @ExcelProperty("物流公司")
+    private String logisticsCompany;
+    @ExcelProperty("物流单号")
+    private String logisticsCompanyCode;
+}

+ 6 - 0
hx-service/victoriatourist/src/main/java/com/fjhx/service/order/OrderDetailsService.java

@@ -4,6 +4,8 @@ import com.fjhx.base.BaseService;
 import com.fjhx.entity.order.OrderDetails;
 import com.fjhx.params.order.IssueDto;
 import com.fjhx.params.order.OrderDetailsEx;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
 
@@ -24,4 +26,8 @@ public interface OrderDetailsService extends BaseService<OrderDetails> {
 
     void issue(IssueDto issueDto);
 
+    /**
+     * 京东订单出库Excle导入*/
+    void issueExcelImport(MultipartFile file);
+
 }

+ 121 - 3
hx-service/victoriatourist/src/main/java/com/fjhx/service/order/impl/OrderDetailsServiceImpl.java

@@ -1,14 +1,21 @@
 package com.fjhx.service.order.impl;
 
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.constants.SystemConfigKeyConstant;
 import com.fjhx.entity.abnormal.AbnormalInfo;
+import com.fjhx.entity.jd.JdBackDetails;
+import com.fjhx.entity.logistics.LogisticsCompany;
 import com.fjhx.entity.logistics.LogisticsInfo;
 import com.fjhx.entity.order.OrderDetails;
 import com.fjhx.entity.order.OrderInfo;
+import com.fjhx.entity.product.ProductInfo;
+import com.fjhx.entity.stock.Stock;
+import com.fjhx.entity.warehouse.Warehouse;
 import com.fjhx.enums.stock.OutTypeEnum;
 import com.fjhx.mapper.order.OrderDetailsMapper;
 import com.fjhx.params.order.IssueDto;
@@ -17,24 +24,34 @@ import com.fjhx.params.stock.ChangeProduct;
 import com.fjhx.params.stock.StockChangeDto;
 import com.fjhx.params.stock.StockTransferAddDto;
 import com.fjhx.service.abnormal.AbnormalInfoService;
+import com.fjhx.service.logistics.LogisticsCompanyService;
 import com.fjhx.service.logistics.LogisticsInfoService;
+import com.fjhx.service.order.JdOrderInfo;
 import com.fjhx.service.order.OrderDetailsService;
 import com.fjhx.service.order.OrderInfoService;
+import com.fjhx.service.product.ProductInfoService;
 import com.fjhx.service.stock.StockService;
 import com.fjhx.service.stock.StockTransferService;
 import com.fjhx.service.system.SystemConfigService;
+import com.fjhx.service.warehouse.WarehouseService;
 import com.fjhx.uitl.kd100.KD100Util;
 import com.fjhx.utils.Assert;
+import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.tool.api.R;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.math.BigDecimal;
+import java.net.Socket;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * <p>
@@ -66,6 +83,15 @@ public class OrderDetailsServiceImpl extends ServiceImpl<OrderDetailsMapper, Ord
     @Autowired
     private AbnormalInfoService abnormalInfoService;
 
+    @Autowired
+    private ProductInfoService productInfoService;
+
+    @Autowired
+    private WarehouseService warehouseService;
+
+    @Autowired
+    private LogisticsCompanyService logisticsCompanyService;
+
     @Override
     public List<OrderDetailsEx> listByOrderSalesId(Long orderId) {
         Assert.notEmpty(orderId, "订单id不能为空");
@@ -114,13 +140,13 @@ public class OrderDetailsServiceImpl extends ServiceImpl<OrderDetailsMapper, Ord
                 boolean flag = false;
                 List<IssueDto.IssueDetails> orderDetailsList = issueDto.getOrderDetailsList();
                 List<OrderDetails> list = list(q -> q.eq(OrderDetails::getOrderId, orderId));
-                for (OrderDetails orderDetails:list){
+                for (OrderDetails orderDetails : list) {
                     IssueDto.IssueDetails issueDetails = orderDetailsList.stream().filter(i -> orderDetails.getProductId().equals(i.getProductId())).findFirst().get();
-                    if(orderDetails.getQuantity()!=issueDetails.getChangeQuantity()){
+                    if (orderDetails.getQuantity() != issueDetails.getChangeQuantity()) {
                         flag = true;
                     }
                 }
-                if(flag) {
+                if (flag) {
                     AbnormalInfo abnormalInfo = new AbnormalInfo();
                     abnormalInfo.setId(IdWorker.getId());
                     abnormalInfo.setType(20);
@@ -164,6 +190,98 @@ public class OrderDetailsServiceImpl extends ServiceImpl<OrderDetailsMapper, Ord
         logisticsInfoService.save(logisticsInfo);
     }
 
+    @Override
+    @Transactional
+    public void issueExcelImport(MultipartFile file) {
+        List<JdOrderInfo> list = ExcelUtil.read(file, JdOrderInfo.class);
+        //获取所有订单编号并获取所有订单信息
+        List<String> codes = list.stream().map(JdOrderInfo::getCode).distinct().collect(Collectors.toList());
+        List<OrderInfo> orderInfos = orderInfoService.list(q -> q.in(OrderInfo::getCode, codes));
+        if(orderInfos.size()!=codes.size()){
+            throw new ServiceException("列表中含有未知订单编号");
+        }
+        //获取所有产品编码,并获取所有产品信息
+        List<String> productCode = list.stream().map(JdOrderInfo::getProductCode).distinct().collect(Collectors.toList());
+        List<ProductInfo> productInfos = productInfoService.list(q -> q.in(ProductInfo::getCode,productCode));
+        if(productInfos.size()!=productCode.size()){
+            throw new ServiceException("列表中含有未知产品编号");
+        }
+        //获取订单明细
+        List<Long> orderIds = orderInfos.stream().map(OrderInfo::getId).distinct().collect(Collectors.toList());
+        List<OrderDetails> orderDetails = list(q -> q.in(OrderDetails::getOrderId, orderIds));
+        //获取仓库信息
+        List<String> warehouseNames = list.stream().map(JdOrderInfo::getWarehouseName).distinct().collect(Collectors.toList());
+        List<Warehouse> warehouses = warehouseService.list(q -> q.in(Warehouse::getName, warehouseNames));
+
+        List<OrderDetails> orderDetailsList = new ArrayList<>();//统一操作未出库数量
+        List<Stock> stockList = new ArrayList<>();//统一操作库存
+        List<LogisticsInfo> logisticsInfoList = new ArrayList<>();//统一操作物流信息
+        List<OrderInfo> orderInfoList = new ArrayList<>();//统一操作订单信息
+
+        List<Long> collect2 = orderDetails.stream().map(OrderDetails::getProductId).distinct().collect(Collectors.toList());
+        List<Stock> list2 = stockService.list(q -> q.in(Stock::getGoodsId, collect2));
+
+        for (JdOrderInfo jdOrderInfo:list){
+            OrderInfo orderInfos1 = orderInfos.stream().filter(p -> jdOrderInfo.getCode().equals(p.getCode())).findAny().get();
+            ProductInfo productInfos1 = productInfos.stream().filter(p -> jdOrderInfo.getProductCode().equals(p.getCode())).findAny().get();
+            jdOrderInfo.setOrderId(orderInfos1.getId());
+            jdOrderInfo.setProductId(productInfos1.getId());
+            //操作未出库数量
+            OrderDetails orderDetails2 = orderDetails.stream().filter(p -> jdOrderInfo.getOrderId().equals(p.getOrderId())).findAny().get();
+            orderDetails2.setNotIssuedQuantity(orderDetails2.getNotIssuedQuantity().subtract(jdOrderInfo.getQuantity()));
+            orderDetails2.setReservationNumber(jdOrderInfo.getReservationNumber());
+            orderDetailsList.add(orderDetails2);
+//                updateById(orderDetails2);
+            //操作库存
+            Warehouse warehouse1 = warehouses.stream().filter(p -> jdOrderInfo.getWarehouseName().equals(p.getName())).findAny().get();
+            Long warehouseId = warehouse1.getId();
+
+            Stock stock = list2.stream().filter(p -> p.getWarehouseId().equals(warehouseId)).findAny().get();
+//            Stock stock = stockService.getOne(q -> q.eq(Stock::getGoodsId, jdOrderInfo.getProductId()).eq(Stock::getWarehouseId, warehouseId));
+            stock.setQuantity(stock.getQuantity().subtract(jdOrderInfo.getQuantity()));
+            stockList.add(stock);
+//                stockService.updateById(stock);
+        }
+
+        //根据物流公司名查出所有物流公司信息
+        List<String> collect = list.stream().distinct().map(JdOrderInfo::getLogisticsCompany).collect(Collectors.toList());
+        List<LogisticsCompany> list1 = logisticsCompanyService.list(q -> q.in(LogisticsCompany::getName, collect));
+
+        List<JdOrderInfo> collect1 = list.stream().distinct().collect(Collectors.toList());
+        for (JdOrderInfo jdOrderInfo:collect1) {
+            Warehouse warehouse1 = warehouses.stream().filter(p -> jdOrderInfo.getWarehouseName().equals(p.getName())).findAny().get();
+            Long warehouseId = warehouse1.getId();
+            //操作物流公司
+            LogisticsCompany logisticsCompany = list1.stream().filter(p->p.getName().equals(jdOrderInfo.getLogisticsCompany())).findAny().get();
+//            LogisticsCompany logisticsCompany = logisticsCompanyService.getOne(q -> q.eq(LogisticsCompany::getName, jdOrderInfo.getLogisticsCompany()));
+            LogisticsInfo logisticsInfo = new LogisticsInfo();
+            logisticsInfo.setId(IdWorker.getId());
+            logisticsInfo.setBusinessId(jdOrderInfo.getOrderId());
+            logisticsInfo.setBusinessCode(jdOrderInfo.getCode());
+            logisticsInfo.setBusinessType(2);
+            logisticsInfo.setStatus(0);
+            Integer state = KD100Util.getStateAndMonitor(logisticsCompany.getCode(), jdOrderInfo.getLogisticsCompanyCode());
+            logisticsInfo.setLogisticsStatus(state);
+            logisticsInfo.setLogisticsCompanyCode(logisticsCompany.getCode());
+            logisticsInfo.setCode(jdOrderInfo.getLogisticsCompanyCode());
+            logisticsInfo.setWarehouseId(warehouseId);
+            logisticsInfoList.add(logisticsInfo);
+//            logisticsInfoService.save(logisticsInfo);
+            //操作订单状态
+            OrderInfo orderInfo = orderInfos.stream().filter(p -> p.getId().equals(jdOrderInfo.getOrderId())).findAny().get();
+//            OrderInfo orderInfo = orderInfoService.getById(jdOrderInfo.getOrderId());
+            orderInfo.setStatus(2);
+            orderInfo.setIssueStatus(3);
+            orderInfoList.add(orderInfo);
+//            orderInfoService.updateById(orderInfo);
+        }
+
+        updateBatchById(orderDetailsList);//统一操作未出库数量
+        stockService.updateBatchById(stockList);//统一操作库存
+        logisticsInfoService.saveBatch(logisticsInfoList);////统一操作物流信息
+        orderInfoService.updateBatchById(orderInfos);//统一操作订单信息
+    }
+
     /**
      * 更新订单明细未出库数量
      */