Selaa lähdekoodia

库存盘点添加Excel导入

yzc 1 vuosi sitten
vanhempi
commit
e4a9e582db

+ 5 - 0
hx-item/src/main/java/com/fjhx/item/entity/product/dto/ProductInfoSelectDto.java

@@ -101,4 +101,9 @@ public class ProductInfoSelectDto extends BaseSelectDto {
      */
     private String salesStatus;
 
+    /**
+     * 仓库id
+     */
+    private Long warehouseId;
+
 }

+ 5 - 0
hx-item/src/main/java/com/fjhx/item/entity/product/vo/ProductInfoVo.java

@@ -55,4 +55,9 @@ public class ProductInfoVo extends ProductInfo {
      * 产品分类列表树
      */
     private String productClassifyNames;
+
+    /**
+     * 库存数量
+     */
+    private BigDecimal stockQuantity;
 }

+ 9 - 9
hx-item/src/main/java/com/fjhx/item/service/product/impl/ProductInfoServiceImpl.java

@@ -1121,18 +1121,18 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
             List<String> notArr = new ArrayList<>();
             //赋值产品信息
             Map<String, ProductInfo> productInfoMap = this.mapKEntity(ProductInfo::getCustomCode, q -> q.in(ProductInfo::getCustomCode, productCodes));
-            for (IssueImportExcelBo subscribeDetailExcelBo : excelBoList) {
-                ProductInfo productInfo = productInfoMap.get(subscribeDetailExcelBo.getProductCustomCode());
+            for (IssueImportExcelBo importExcelBo : excelBoList) {
+                ProductInfo productInfo = productInfoMap.get(importExcelBo.getProductCustomCode());
                 if (ObjectUtil.isEmpty(productInfo)) {
-                    notArr.add(subscribeDetailExcelBo.getProductCustomCode());
+                    notArr.add(importExcelBo.getProductCustomCode());
                     continue;
                 }
-                subscribeDetailExcelBo.setBussinessId(productInfo.getId());
-                subscribeDetailExcelBo.setProductId(productInfo.getId());
-                subscribeDetailExcelBo.setProductDefinition(productInfo.getDefinition());
-                subscribeDetailExcelBo.setProductName(productInfo.getName());
-                subscribeDetailExcelBo.setProductSpec(productInfo.getSpec());
-                subscribeDetailExcelBo.setProductUnit(productInfo.getUnit());
+                importExcelBo.setBussinessId(productInfo.getId());
+                importExcelBo.setProductId(productInfo.getId());
+                importExcelBo.setProductDefinition(productInfo.getDefinition());
+                importExcelBo.setProductName(productInfo.getName());
+                importExcelBo.setProductSpec(productInfo.getSpec());
+                importExcelBo.setProductUnit(productInfo.getUnit());
             }
             if (notArr.size() != 0) {
                 throw new ServiceException("以下产品不存在:" + notArr.stream().collect(Collectors.joining(",")));

+ 26 - 5
hx-wms/src/main/java/com/fjhx/wms/controller/stock/StockCheckController.java

@@ -3,6 +3,9 @@ package com.fjhx.wms.controller.stock;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.item.entity.product.IssueImportExcelBo;
+import com.fjhx.item.entity.product.dto.ProductInfoSelectDto;
+import com.fjhx.item.entity.product.vo.ProductInfoVo;
 import com.fjhx.wms.entity.stock.dto.StockCheckDto;
 import com.fjhx.wms.entity.stock.dto.StockCheckSelectDto;
 import com.fjhx.wms.entity.stock.vo.StockCheckVo;
@@ -10,10 +13,10 @@ import com.fjhx.wms.service.stock.StockCheckService;
 import com.ruoyi.common.core.domain.BaseSelectDto;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
 
 
 /**
@@ -21,7 +24,7 @@ import org.springframework.web.bind.annotation.RestController;
  * 库存盘点 前端控制器
  * </p>
  *
- * @author 
+ * @author
  * @since 2023-03-22
  */
 @DS(SourceConstant.WMS)
@@ -56,4 +59,22 @@ public class StockCheckController {
         stockCheckService.add(stockCheckDto);
     }
 
+    /**
+     * 产品分页带库存
+     */
+    @PostMapping("/productPage")
+    public Page<ProductInfoVo> productPage(@RequestBody ProductInfoSelectDto dto) {
+        return stockCheckService.productPage(dto);
+    }
+
+    /**
+     * 盘点excel导入
+     *
+     * @return
+     */
+    @PostMapping("/excelImport")
+    public List<IssueImportExcelBo> excelImport(@RequestParam("file") MultipartFile file, @RequestParam("warehouseId") Long warehouseId) {
+       return stockCheckService.excelImport(file, warehouseId);
+    }
+
 }

+ 12 - 0
hx-wms/src/main/java/com/fjhx/wms/service/stock/StockCheckService.java

@@ -1,11 +1,17 @@
 package com.fjhx.wms.service.stock;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.item.entity.product.IssueImportExcelBo;
+import com.fjhx.item.entity.product.dto.ProductInfoSelectDto;
+import com.fjhx.item.entity.product.vo.ProductInfoVo;
 import com.fjhx.wms.entity.stock.dto.StockCheckDto;
 import com.fjhx.wms.entity.stock.dto.StockCheckSelectDto;
 import com.fjhx.wms.entity.stock.po.StockCheck;
 import com.fjhx.wms.entity.stock.vo.StockCheckVo;
 import com.ruoyi.common.core.service.BaseService;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
 
 
 /**
@@ -33,4 +39,10 @@ public interface StockCheckService extends BaseService<StockCheck> {
      */
     void add(StockCheckDto stockCheckDto);
 
+    /**
+     * 获取产品列表带库存
+     */
+    Page<ProductInfoVo> productPage(ProductInfoSelectDto dto);
+
+    List<IssueImportExcelBo> excelImport(MultipartFile file, Long warehouseId);
 }

+ 64 - 7
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockCheckServiceImpl.java

@@ -4,9 +4,15 @@ import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.common.utils.Assert;
+import com.fjhx.item.entity.product.IssueImportExcelBo;
+import com.fjhx.item.entity.product.dto.ProductInfoSelectDto;
+import com.fjhx.item.entity.product.po.ProductInfo;
+import com.fjhx.item.entity.product.vo.ProductInfoVo;
 import com.fjhx.item.service.product.ProductInfoService;
 import com.fjhx.wms.entity.stock.dto.StockCheckDto;
 import com.fjhx.wms.entity.stock.dto.StockCheckSelectDto;
+import com.fjhx.wms.entity.stock.po.Stock;
 import com.fjhx.wms.entity.stock.po.StockCheck;
 import com.fjhx.wms.entity.stock.po.StockCheckDetails;
 import com.fjhx.wms.entity.stock.vo.StockCheckDetailsVo;
@@ -14,6 +20,7 @@ import com.fjhx.wms.entity.stock.vo.StockCheckVo;
 import com.fjhx.wms.mapper.stock.StockCheckMapper;
 import com.fjhx.wms.service.stock.StockCheckDetailsService;
 import com.fjhx.wms.service.stock.StockCheckService;
+import com.fjhx.wms.service.stock.StockService;
 import com.fjhx.wms.service.warehouse.WarehouseService;
 import com.fjhx.wms.utils.CodeEnum;
 import com.ruoyi.common.constant.StatusConstant;
@@ -22,9 +29,13 @@ import com.ruoyi.system.utils.UserUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.math.BigDecimal;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 
 /**
@@ -38,14 +49,18 @@ import java.util.Objects;
 @Service
 public class StockCheckServiceImpl extends ServiceImpl<StockCheckMapper, StockCheck> implements StockCheckService {
 
-    @Autowired
-    private StockCheckDetailsService stockCheckDetailsService;
-
-    @Autowired
-    private ProductInfoService productInfoService;
+    private final StockCheckDetailsService stockCheckDetailsService;
+    private final ProductInfoService productInfoService;
+    private final WarehouseService warehouseService;
+    private final StockService stockService;
 
     @Autowired
-    private WarehouseService warehouseService;
+    public StockCheckServiceImpl(StockCheckDetailsService stockCheckDetailsService, ProductInfoService productInfoService, WarehouseService warehouseService, StockService stockService) {
+        this.stockCheckDetailsService = stockCheckDetailsService;
+        this.productInfoService = productInfoService;
+        this.warehouseService = warehouseService;
+        this.stockService = stockService;
+    }
 
     @Override
     public Page<StockCheckVo> getPage(StockCheckSelectDto dto) {
@@ -75,7 +90,7 @@ public class StockCheckServiceImpl extends ServiceImpl<StockCheckMapper, StockCh
         StockCheckVo stockCheckVo = baseMapper.detail(id);
 
         List<StockCheckDetailsVo> list = stockCheckVo.getList();
-        if(ObjectUtil.isEmpty(list)){
+        if (ObjectUtil.isEmpty(list)) {
             return stockCheckVo;
         }
         productInfoService.attributeAssign(list, StockCheckDetails::getProductId, (item, product) -> {
@@ -119,4 +134,46 @@ public class StockCheckServiceImpl extends ServiceImpl<StockCheckMapper, StockCh
         stockCheckDetailsService.saveBatch(list);
     }
 
+    @Override
+    public Page<ProductInfoVo> productPage(ProductInfoSelectDto dto) {
+        Assert.notEmpty(dto.getWarehouseId(), "仓库id不能为空!");
+
+        Page<ProductInfoVo> page = productInfoService.getPage(dto);
+        List<ProductInfoVo> records = page.getRecords();
+        if (ObjectUtil.isEmpty(records)) {
+            return page;
+        }
+        //赋值库存信息
+        List<Long> pIds = records.stream().map(ProductInfo::getId).collect(Collectors.toList());
+        Map<Long, Stock> stockMap = stockService.mapKEntity(Stock::getProductId, q -> q
+                .in(Stock::getProductId, pIds)
+                .eq(Stock::getWarehouseId, dto.getWarehouseId())
+        );
+        for (ProductInfoVo record : records) {
+            //赋值库存
+            record.setStockQuantity(BigDecimal.ZERO);
+
+            Stock stock = stockMap.get(record.getId());
+            if (ObjectUtil.isNotEmpty(stock)) {
+                record.setStockQuantity(stock.getQuantity());
+            }
+        }
+        return page;
+    }
+
+    @Override
+    public List<IssueImportExcelBo> excelImport(MultipartFile file, Long warehouseId) {
+        List<IssueImportExcelBo> issueImportExcelBos = productInfoService.issueImportExcel(file);
+
+        List<Long> pIds = issueImportExcelBos.stream().map(IssueImportExcelBo::getProductId).collect(Collectors.toList());
+        Map<Long, BigDecimal> stockMap = stockService.mapKV(Stock::getProductId, Stock::getQuantity, q -> q.in(Stock::getProductId, pIds).eq(Stock::getWarehouseId, warehouseId));
+        //赋值库存信息
+        for (IssueImportExcelBo issueImportExcelBo : issueImportExcelBos) {
+            BigDecimal bigDecimal = stockMap.getOrDefault(issueImportExcelBo.getProductId(), BigDecimal.ZERO);
+            issueImportExcelBo.setStockCount(bigDecimal);
+        }
+
+        return issueImportExcelBos;
+    }
+
 }