Explorar el Código

添加excel导入

yzc hace 1 año
padre
commit
1d178d1b4c

+ 59 - 0
hx-item/src/main/java/com/fjhx/item/entity/product/IssueImportExcelBo.java

@@ -0,0 +1,59 @@
+package com.fjhx.item.entity.product;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * 申购明细Excel导入实体
+ */
+@Getter
+@Setter
+public class IssueImportExcelBo extends BasePo {
+    @ExcelProperty("物品编码")
+    private String productCustomCode;
+    @ExcelProperty("数量")
+    private BigDecimal count;
+    @ExcelProperty("单价")
+    private BigDecimal price;
+    @ExcelProperty("备注")
+    private String remark;
+
+    /**
+     * 关联ID  产品ID/货品ID
+     */
+    private Long bussinessId;
+
+    /**
+     *产品ID/货品ID
+     */
+    private Long productId;
+
+    /**
+     * 货品定义
+     */
+    private Integer productDefinition;
+
+    /**
+     * 货品名称
+     */
+    private String productName;
+
+    /**
+     * 货品规格型号
+     */
+    private String productSpec;
+
+    /**
+     * 单位
+     */
+    private String productUnit;
+
+    /**
+     * 库存数量
+     */
+    private BigDecimal stockCount;
+}

+ 6 - 0
hx-item/src/main/java/com/fjhx/item/service/product/ProductInfoService.java

@@ -1,6 +1,7 @@
 package com.fjhx.item.service.product;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.item.entity.product.IssueImportExcelBo;
 import com.fjhx.item.entity.product.dto.ProductInfoDto;
 import com.fjhx.item.entity.product.dto.ProductInfoSelectDto;
 import com.fjhx.item.entity.product.po.ProductInfo;
@@ -158,4 +159,9 @@ public interface ProductInfoService extends BaseService<ProductInfo> {
      * 批量修改产品销售状态
      */
     void editByCodes(ProductInfoDto dto);
+
+    /**
+     * 根据产品编码获取产品信息
+     */
+    List<IssueImportExcelBo> issueImportExcel(MultipartFile file);
 }

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

@@ -21,6 +21,7 @@ import com.fjhx.common.utils.Assert;
 import com.fjhx.customer.entity.customer.po.Customer;
 import com.fjhx.customer.service.customer.CustomerService;
 import com.fjhx.file.utils.ObsFileUtil;
+import com.fjhx.item.entity.product.IssueImportExcelBo;
 import com.fjhx.item.entity.product.dto.ProductInfoDto;
 import com.fjhx.item.entity.product.dto.ProductInfoSelectDto;
 import com.fjhx.item.entity.product.po.ProductClassify;
@@ -1071,20 +1072,73 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
      */
     @Override
     @DSTransactional
-    public void editByCodes(ProductInfoDto dto){
-        Assert.notEmpty(dto.getSalesStatus(),"销售状态不能为空");
-        Assert.notEmpty(dto.getProductCodes(),"产品编号不能为空");
+    public void editByCodes(ProductInfoDto dto) {
+        Assert.notEmpty(dto.getSalesStatus(), "销售状态不能为空");
+        Assert.notEmpty(dto.getProductCodes(), "产品编号不能为空");
         String[] productCodes = dto.getProductCodes()
                 .replace("\r\n", "\n")
                 .replace("\n\r", "\n")
                 .replace("\r", "\n").split("\n");
 
-        this.update(q->q.set(ProductInfo::getVictoriatouristJson,"{}")
+        this.update(q -> q.set(ProductInfo::getVictoriatouristJson, "{}")
                 .isNull(ProductInfo::getVictoriatouristJson)
-                .or().eq(ProductInfo::getVictoriatouristJson,"")
+                .or().eq(ProductInfo::getVictoriatouristJson, "")
         );
 
-        baseMapper.editByCodes(dto.getSalesStatus(),SecurityUtils.getUserId(),IWrapper.<ProductInfo>getWrapper().in(ProductInfo::getCustomCode,productCodes));
+        baseMapper.editByCodes(dto.getSalesStatus(), SecurityUtils.getUserId(), IWrapper.<ProductInfo>getWrapper().in(ProductInfo::getCustomCode, productCodes));
+    }
+
+    /**
+     * 根据产品编码获取产品信息
+     */
+    @Override
+    public List<IssueImportExcelBo> issueImportExcel(MultipartFile file) {
+        List<IssueImportExcelBo> excelBoList = ExcelUtil.read(file, IssueImportExcelBo.class);
+        if (ObjectUtil.isEmpty(excelBoList)) {
+            return excelBoList;
+        }
+
+        for (IssueImportExcelBo issueImportExcelBo : excelBoList) {
+            if (ObjectUtil.isEmpty(issueImportExcelBo.getProductCustomCode())){
+                throw new ServiceException("物品编码不能为空");
+            }
+        }
+
+        //相同产品合并
+        Map<String, IssueImportExcelBo> collect = excelBoList.stream().collect(Collectors.groupingBy(IssueImportExcelBo::getProductCustomCode,
+                Collectors.collectingAndThen(Collectors.toList(), value -> {
+                    BigDecimal count = value.stream().map(IssueImportExcelBo::getCount).reduce(BigDecimal.ZERO, BigDecimal::add);
+
+                    IssueImportExcelBo issueImportExcelBo = value.get(0);
+                    issueImportExcelBo.setCount(count);
+                    return issueImportExcelBo;
+                }))
+        );
+        excelBoList = collect.values().stream().collect(Collectors.toList());
+
+        List<String> productCodes = excelBoList.stream().distinct().map(IssueImportExcelBo::getProductCustomCode).collect(Collectors.toList());
+        if (ObjectUtil.isNotEmpty(productCodes)) {
+            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());
+                if (ObjectUtil.isEmpty(productInfo)) {
+                    notArr.add(subscribeDetailExcelBo.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());
+            }
+            if (notArr.size() != 0) {
+                throw new ServiceException("以下产品不存在:" + notArr.stream().collect(Collectors.joining(",")));
+            }
+        }
+        return excelBoList;
     }
 
 }

+ 14 - 4
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/controller/order/OrderInfoController.java

@@ -1,6 +1,8 @@
 package com.fjhx.victoriatourist.controller.order;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.item.entity.product.IssueImportExcelBo;
+import com.fjhx.item.service.product.ProductInfoService;
 import com.fjhx.victoriatourist.entity.logistics.vo.LogisticsInfosVo;
 import com.fjhx.victoriatourist.entity.order.dto.OrderInfoDto;
 import com.fjhx.victoriatourist.entity.order.dto.OrderInfoSelectDto;
@@ -8,10 +10,8 @@ import com.fjhx.victoriatourist.entity.order.vo.OrderInfoVo;
 import com.fjhx.victoriatourist.service.order.OrderInfoService;
 import com.ruoyi.common.core.domain.BaseSelectDto;
 import org.springframework.beans.factory.annotation.Autowired;
-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;
 
@@ -30,6 +30,8 @@ public class OrderInfoController {
 
     @Autowired
     private OrderInfoService orderInfoService;
+    @Autowired
+    private ProductInfoService productInfoService;
 
     /**
      * 订单分页
@@ -79,5 +81,13 @@ public class OrderInfoController {
         return orderInfoService.getLogisticsInfo(dto.getId());
     }
 
+    /**
+     * 出入库明细产品导入
+     */
+    @PostMapping("/excelImport")
+    public List<IssueImportExcelBo> issueExcelImport(@RequestParam("file") MultipartFile file) {
+        return productInfoService.issueImportExcel(file);
+    }
+
 
 }

+ 12 - 1
hx-wms/src/main/java/com/fjhx/wms/controller/stock/StockController.java

@@ -3,6 +3,8 @@ 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.service.product.ProductInfoService;
 import com.fjhx.wms.entity.stock.dto.StockDto;
 import com.fjhx.wms.entity.stock.dto.StockSelectDto;
 import com.fjhx.wms.entity.stock.po.Stock;
@@ -13,6 +15,7 @@ import com.ruoyi.common.core.domain.BaseSelectDto;
 import com.ruoyi.common.core.domain.entity.SysDept;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
 import java.util.List;
@@ -33,6 +36,8 @@ public class StockController {
 
     @Autowired
     private StockService stockService;
+    @Autowired
+    private ProductInfoService productInfoService;
 
     /**
      * 库存查询
@@ -142,6 +147,12 @@ public class StockController {
         stockService.exportExcel(dto,httpServletResponse);
     }
 
-
+    /**
+     * 出入库明细产品导入
+     */
+    @PostMapping("/excelImport")
+    public List<IssueImportExcelBo> issueExcelImport(@RequestParam("file") MultipartFile file,Long warehouseId) {
+        return stockService.issueExcelImport( file, warehouseId);
+    }
 
 }

+ 4 - 0
hx-wms/src/main/java/com/fjhx/wms/service/stock/StockService.java

@@ -1,6 +1,7 @@
 package com.fjhx.wms.service.stock;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.item.entity.product.IssueImportExcelBo;
 import com.fjhx.wms.entity.stock.bo.InOutBo;
 import com.fjhx.wms.entity.stock.dto.StockDto;
 import com.fjhx.wms.entity.stock.dto.StockSelectDto;
@@ -11,6 +12,7 @@ import com.fjhx.wms.entity.stock.po.StockJournalDetails;
 import com.fjhx.wms.entity.stock.vo.StockVo;
 import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.core.service.BaseService;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
 import java.util.List;
@@ -105,4 +107,6 @@ public interface StockService extends BaseService<Stock> {
      * 库存分析导出excel
      */
     void exportExcel(StockSelectDto dto, HttpServletResponse httpServletResponse);
+
+    List<IssueImportExcelBo> issueExcelImport(MultipartFile file, Long warehouseId);
 }

+ 20 - 0
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockServiceImpl.java

@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.common.utils.Assert;
+import com.fjhx.item.entity.product.IssueImportExcelBo;
 import com.fjhx.item.entity.product.po.ProductClassify;
 import com.fjhx.item.entity.product.po.ProductInfo;
 import com.fjhx.item.service.product.ProductClassifyService;
@@ -53,6 +54,7 @@ import com.ruoyi.common.utils.wrapper.SqlField;
 import com.ruoyi.system.service.ISysRoleService;
 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;
@@ -923,6 +925,24 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
         ExcelUtil.export(httpServletResponse, list, StockAnalysis.class);
     }
 
+    @Override
+    public List<IssueImportExcelBo> issueExcelImport(MultipartFile file, Long warehouseId) {
+        List<IssueImportExcelBo> issueImportExcelBos = productInfoService.issueImportExcel(file);
+
+        if (ObjectUtil.isEmpty(issueImportExcelBos) || ObjectUtil.isEmpty(warehouseId)) {
+            return issueImportExcelBos;
+        }
+
+        List<Long> ids = issueImportExcelBos.stream().map(IssueImportExcelBo::getProductId).collect(Collectors.toList());
+        Map<Long, BigDecimal> stockMap = this.mapKV(Stock::getProductId, Stock::getQuantity, q -> q.in(Stock::getProductId, ids).eq(Stock::getWarehouseId, warehouseId));
+        //赋值库存信息
+        for (IssueImportExcelBo issueImportExcelBo : issueImportExcelBos) {
+            BigDecimal bigDecimal = stockMap.getOrDefault(issueImportExcelBo.getProductId(), BigDecimal.ZERO);
+            issueImportExcelBo.setStockCount(bigDecimal);
+        }
+        return issueImportExcelBos;
+    }
+
     /**
      * 库存分析 公共代码块
      */