|
@@ -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;
|
|
|
+ }
|
|
|
+
|
|
|
}
|