Răsfoiți Sursa

待出库excel导入

yzc 1 an în urmă
părinte
comite
1b540910b6

+ 32 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/WmsServiceImpl.java

@@ -6,16 +6,20 @@ import com.fjhx.area.utils.CustomizeAreaUtil;
 import com.fjhx.victoriatourist.entity.abnormal.po.AbnormalInfo;
 import com.fjhx.victoriatourist.entity.group.dto.GroupRecordDto;
 import com.fjhx.victoriatourist.entity.group.po.GroupRecordDetails;
+import com.fjhx.victoriatourist.entity.jd.dto.JdOrderDto;
+import com.fjhx.victoriatourist.entity.jd.po.JdOrderDetails;
 import com.fjhx.victoriatourist.entity.purchase.po.PurchaseBack;
 import com.fjhx.victoriatourist.entity.purchase.vo.PurchaseBackVo;
 import com.fjhx.victoriatourist.entity.quality.po.QualityDetails;
 import com.fjhx.victoriatourist.service.abnormal.AbnormalInfoService;
 import com.fjhx.victoriatourist.service.group.GroupRecordDetailsService;
+import com.fjhx.victoriatourist.service.jd.JdOrderService;
 import com.fjhx.victoriatourist.service.order.OrderInfoService;
 import com.fjhx.victoriatourist.service.purchase.PurchaseBackService;
 import com.fjhx.victoriatourist.service.quality.QualityDetailsService;
 import com.fjhx.wms.entity.QualityDetailsPo;
 import com.fjhx.wms.entity.stock.dto.StockWaitDto;
+import com.fjhx.wms.entity.stock.po.StockWaitDetails;
 import com.fjhx.wms.service.WmsService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -36,6 +40,8 @@ public class WmsServiceImpl implements WmsService {
     private QualityDetailsService qualityDetailsService;
     @Autowired
     private GroupRecordDetailsService groupRecordDetailsService;
+    @Autowired
+    private JdOrderService jdOrderService;
 
 //    /**
 //     * 销售订单出库
@@ -96,4 +102,30 @@ public class WmsServiceImpl implements WmsService {
         //调用组合接口自动组合产品
         groupRecordDetailsService.add(dto);
     }
+
+    @Override
+    public void jdOrderOutbound(StockWaitDto stockWaitDto) {
+        JdOrderDto jdOrderDto = new JdOrderDto();
+        jdOrderDto.setId(stockWaitDto.getBusinessId());
+        jdOrderDto.setInWarehouseId(stockWaitDto.getInWarehouseId());
+        jdOrderDto.setOutWarehouseId(stockWaitDto.getOutWarehouseId());
+        jdOrderDto.setReservationCode(stockWaitDto.getReservationCode());
+        jdOrderDto.setRemark(stockWaitDto.getRemark());
+        jdOrderDto.setLogisticsCompanyCode(stockWaitDto.getLogisticsCompanyCode());
+        jdOrderDto.setLogisticsCode(stockWaitDto.getLogisticsCode());
+
+        List<StockWaitDetails> stockWaitDetailsList = stockWaitDto.getStockWaitDetailsList();
+        for (StockWaitDetails stockWaitDetails : stockWaitDetailsList) {
+            JdOrderDetails jdOrderDetails = new JdOrderDetails();
+            jdOrderDetails.setId(stockWaitDetails.getBusinessDetailsId());
+            jdOrderDetails.setProductId(stockWaitDetails.getProductId());
+            jdOrderDetails.setQuantity(stockWaitDetails.getQuantity());
+        }
+        jdOrderService.outbound(jdOrderDto);
+    }
+
+    @Override
+    public void purchaseBackOutbound(StockWaitDto stockWaitDto) {
+        purchaseBackService.backOuts(stockWaitDto);
+    }
 }

+ 20 - 1
hx-wms/src/main/java/com/fjhx/wms/entity/stock/dto/StockWaitDto.java

@@ -5,7 +5,6 @@ import com.fjhx.wms.entity.stock.po.StockWaitDetails;
 import lombok.Getter;
 import lombok.Setter;
 
-import javax.validation.constraints.NotBlank;
 import java.util.List;
 
 /**
@@ -58,4 +57,24 @@ public class StockWaitDto extends StockWait {
      */
     private String address;
 
+    /**
+     * 说明
+     */
+    private String remark;
+
+    /**
+     * 调出仓库id(京东订单)
+     */
+    private Long inWarehouseId;
+
+    /**
+     * 调入仓库id(京东订单)
+     */
+    private Long outWarehouseId;
+
+    /**
+     * 预约号(京东订单)
+     */
+    private String reservationCode;
+
 }

+ 10 - 0
hx-wms/src/main/java/com/fjhx/wms/service/WmsService.java

@@ -37,4 +37,14 @@ public interface WmsService {
      * 自动组合
      */
     void autoCombination(Long productId, BigDecimal quantity, Long warehouseId);
+
+    /**
+     * 京东订单excel出库
+     */
+    void jdOrderOutbound(StockWaitDto stockWaitDto);
+
+    /**
+     * 采购退货excel出库
+     */
+    void purchaseBackOutbound(StockWaitDto stockWaitDto);
 }

+ 108 - 1
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockWaitServiceImpl.java

@@ -2,6 +2,7 @@ package com.fjhx.wms.service.stock.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.fastjson2.JSONObject;
 import com.alibaba.fastjson2.JSONWriter;
 import com.baomidou.dynamic.datasource.annotation.DS;
@@ -37,12 +38,15 @@ import com.fjhx.wms.service.arrival.ArrivalStockRecordsService;
 import com.fjhx.wms.service.stock.*;
 import com.fjhx.wms.service.warehouse.WarehouseService;
 import com.fjhx.wms.utils.CodeEnum;
-import com.obs.services.internal.ServiceException;
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.ruoyi.common.utils.wrapper.SqlField;
 import com.ruoyi.system.utils.UserUtil;
+import lombok.Getter;
+import lombok.Setter;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
@@ -476,4 +480,107 @@ public class StockWaitServiceImpl extends ServiceImpl<StockWaitMapper, StockWait
         ExcelUtil.export(httpServletResponse, stockWaitList, InStockWaitExportExcel.class);
     }
 
+    /**
+     * 待出库 excel导入出库
+     */
+    @DSTransactional
+    void outStockWaitImportExcel(MultipartFile file, StockWaitDto stockWaitDto) {
+        Assert.notEmpty(stockWaitDto.getBusinessType(), "业务类型不能为空");
+
+        List<OutStockWaitImportExcelBo> list = new ArrayList<>();
+        Assert.notEmpty(list, "Excel文档为空请检查");
+
+        List<String> linkCodes = list.stream().map(OutStockWaitImportExcelBo::getLinkCode).distinct().collect(Collectors.toList());
+        List<StockWait> stockWaitList = this.list(q -> q.in(StockWait::getBusinessCode, linkCodes));
+
+        long count = stockWaitList.stream().map(StockWait::getBusinessType).distinct().count();
+        if (count > 1) {
+            throw new ServiceException("文档中的数据存在多种业务类型 请检查");
+        }
+
+        if (stockWaitList.size() < linkCodes.size()) {
+            List<String> newLinkCodes = stockWaitList.stream().map(StockWait::getBusinessCode).distinct().collect(Collectors.toList());
+            List<String> difference = linkCodes.stream().filter(element -> !newLinkCodes.contains(element)).collect(Collectors.toList());
+            String differenceStr = difference.stream().collect(Collectors.joining(","));
+            throw new ServiceException("文档存在未知单号:" + differenceStr);
+        }
+
+        //赋值产品id
+        List<String> productCodes = list.stream().map(OutStockWaitImportExcelBo::getProductCode).distinct().collect(Collectors.toList());
+        Map<String, Long> productInfoMap = productInfoService.mapKV(ProductInfo::getCustomCode, ProductInfo::getId,
+                q -> q.in(ProductInfo::getCustomCode, productCodes));
+        for (OutStockWaitImportExcelBo outStockWaitImportExcelBo : list) {
+            String productCode = outStockWaitImportExcelBo.getProductCode();
+            Long productId = productInfoMap.get(productCode);
+            if (ObjectUtil.isEmpty(productId)) {
+                throw new ServiceException("该产品不存在:" + productCode);
+            }
+            outStockWaitImportExcelBo.setProductId(productId);
+        }
+
+        //操作出库
+        Map<String, List<OutStockWaitImportExcelBo>> excelMap = list.stream().collect(Collectors.groupingBy(OutStockWaitImportExcelBo::getLinkCode));
+        for (StockWait stockWait : stockWaitList) {
+            //查询明细信息
+            List<OutStockWaitImportExcelBo> outStockWaitImportExcelBos = excelMap.get(stockWait.getBusinessCode());
+            List<Long> productIds = outStockWaitImportExcelBos.stream().map(OutStockWaitImportExcelBo::getProductId).distinct().collect(Collectors.toList());
+
+            Map<Long, StockWaitDetails> stockWaitDetailsMap = stockWaitDetailsService.mapKEntity(StockWaitDetails::getProductId, q -> q
+                    .eq(StockWaitDetails::getStockWaitId, stockWait.getId())
+                    .eq(StockWaitDetails::getProductId, productIds)
+            );
+
+            for (OutStockWaitImportExcelBo outStockWaitImportExcelBo : outStockWaitImportExcelBos) {
+                StockWaitDetails stockWaitDetails = stockWaitDetailsMap.get(outStockWaitImportExcelBo);
+                outStockWaitImportExcelBo.setStockWaitDetailId(stockWaitDetails.getId());
+            }
+
+            //数据预处理
+            stockWaitDto.setBusinessType(stockWait.getBusinessType());
+            List<StockWaitDetails> stockWaitDetailsList = new ArrayList<>();
+            for (OutStockWaitImportExcelBo outStockWaitImportExcelBo : outStockWaitImportExcelBos) {
+                StockWaitDetails stockWaitDetails = new StockWaitDetails();
+                stockWaitDetails.setId(outStockWaitImportExcelBo.getStockWaitDetailId());
+                stockWaitDetails.setProductId(outStockWaitImportExcelBo.getProductId());
+                stockWaitDetails.setQuantity(outStockWaitImportExcelBo.getOutQuantity());
+                stockWaitDetails.setStockWaitId(stockWait.getId());
+                stockWaitDetailsList.add(stockWaitDetails);
+            }
+            stockWaitDto.setStockWaitDetailsList(stockWaitDetailsList);
+
+            if (StockWaitType.SALE_ORDER_OUT.getDetailType().equals(stockWait.getBusinessType())) {
+                //销售订单
+                addByWdly(stockWaitDto);
+            } else if (StockWaitType.JD_ORDER_OUT.getDetailType().equals(stockWait.getBusinessType())) {
+                //京东订单
+                wmsService.jdOrderOutbound(stockWaitDto);
+            } else if (StockWaitType.BACK_OUT.getDetailType().equals(stockWait.getBusinessType())) {
+                //采购退货
+                wmsService.purchaseBackOutbound(stockWaitDto);
+            } else {
+                throw new ServiceException("存在未知业务的数据!");
+            }
+        }
+    }
+
+    @Getter
+    @Setter
+    class OutStockWaitImportExcelBo {
+        /**
+         * 产品id
+         */
+        private Long productId;
+        /**
+         * 待出库明细id
+         */
+        private Long stockWaitDetailId;
+
+        @ExcelProperty("关联单号")
+        private String linkCode;
+        @ExcelProperty("物品编码")
+        private String productCode;
+        @ExcelProperty("出库数量")
+        private BigDecimal outQuantity;
+    }
+
 }