Răsfoiți Sursa

改动过的

huanglizhi 1 an în urmă
părinte
comite
7bb64b2581

+ 2 - 0
module-erp/src/main/java/com/hys/app/model/erp/dos/OrderItemDO.java

@@ -122,4 +122,6 @@ public class OrderItemDO implements Serializable {
     @ApiModelProperty(name = "has_return", value = "租赁订单详情是否返回")
     private Boolean hasReturn = false;
 
+    private Integer  dayNum;
+
 }

+ 4 - 0
module-erp/src/main/java/com/hys/app/model/erp/dos/ProductStockDO.java

@@ -82,6 +82,10 @@ public class ProductStockDO implements Serializable  {
     @ApiModelProperty(name = "warning_stock", value = "预警库存")
     private Integer warningStock;
 
+
+    @ApiModelProperty(name = "locked_stock", value = "预警库存")
+    private Integer lockedStock;
+
     public ProductStockDO(Long warehouseId, Long goodsId, Long productId, Integer num) {
         this.setWarehouseId(warehouseId);
         this.setGoodsId(goodsId);

+ 2 - 0
module-erp/src/main/java/com/hys/app/model/erp/dto/OrderItemDTO.java

@@ -58,5 +58,7 @@ public class OrderItemDTO {
 
     private Integer returnNum;
 
+    private Integer dayNum;
+
 }
 

+ 16 - 0
module-erp/src/main/java/com/hys/app/model/erp/dto/StockDTO.java

@@ -0,0 +1,16 @@
+package com.hys.app.model.erp.dto;
+
+import lombok.Data;
+
+/**
+ * 库存盘点单实体DTO
+ *
+ * @author dmy
+ * 2023-12-05
+ */
+
+@Data
+public class StockDTO  {
+   private  Long id ;
+   private  Integer num ;
+}

+ 2 - 0
module-erp/src/main/java/com/hys/app/model/erp/vo/WarehouseAreaVO.java

@@ -29,5 +29,7 @@ public class WarehouseAreaVO extends WarehouseAreaDO {
 
     private  List<AreaStock> areaStockVO;
 
+    private long bindNum;
+
 }
 

+ 18 - 0
module-erp/src/main/java/com/hys/app/service/erp/ProductStockManager.java

@@ -5,6 +5,7 @@ import com.hys.app.framework.database.mybatisplus.base.BaseService;
 import com.hys.app.model.erp.dos.ProductDO;
 import com.hys.app.model.erp.dos.ProductStockDO;
 import com.hys.app.model.erp.dto.ProductStockQueryParams;
+import com.hys.app.model.erp.dto.StockDTO;
 import com.hys.app.model.erp.enums.StockOperateEnum;
 import com.hys.app.model.erp.vo.ProductStockV1;
 import com.hys.app.model.erp.vo.ProductStockVO;
@@ -116,8 +117,25 @@ public interface ProductStockManager extends BaseService<ProductStockDO> {
 
     /**
      * 初始化库存  所有的sku在所有的仓库库存初始化为0
+     *
      * @param bean
      */
     void intStock(List<ProductDO> bean);
+
+    /**
+     * 更新冻结库存
+     */
+    void updateLockedStock(List<StockDTO> ids);
+
+    /**
+     * 更新实际库存
+     */
+    void updateActualStock(List<StockDTO> ids, String inventory);
+
+
+    /**
+     * 跟新在途库存
+     */
+    void updateTransitStock(List<StockDTO> ids);
 }
 

+ 10 - 7
module-erp/src/main/java/com/hys/app/service/erp/impl/OrderManagerImpl.java

@@ -17,10 +17,7 @@ import com.hys.app.mapper.erp.OrderMapper;
 import com.hys.app.mapper.erp.WarehouseOutMapper;
 import com.hys.app.mapper.goods.GoodsMapper;
 import com.hys.app.model.erp.dos.*;
-import com.hys.app.model.erp.dto.OrderDTO;
-import com.hys.app.model.erp.dto.OrderItemDTO;
-import com.hys.app.model.erp.dto.OrderQueryParams;
-import com.hys.app.model.erp.dto.WarehouseOutShipDTO;
+import com.hys.app.model.erp.dto.*;
 import com.hys.app.model.erp.enums.*;
 import com.hys.app.model.erp.vo.GoodsVO;
 import com.hys.app.model.erp.vo.OrderSendItemVO;
@@ -192,16 +189,22 @@ public class OrderManagerImpl extends BaseServiceImpl<OrderMapper, OrderDO> impl
         }
         //校验库存
         List<OrderItemDO> dos2 = orderItemManager.list(new LambdaQueryWrapper<OrderItemDO>().eq(OrderItemDO::getOrderId, id));
+        List<Long> collect = dos2.stream().map(OrderItemDO::getProductStockId).collect(Collectors.toList());
+        List<ProductStockDO> list = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>().in(ProductStockDO::getId, collect));
+        List<StockDTO> arrayList = new ArrayList<>();
         for (OrderItemDO orderItemDO : dos2) {
-            ProductStockDO byId = productStockManager.getById(orderItemDO.getProductStockId());
+            StockDTO stockDTO = new StockDTO();
+            ProductStockDO byId = list.stream().filter(item -> item.getId().equals(orderItemDO.getProductStockId())).findFirst().get();
             if (!aDo.getSubtractStock()) {
                 if (orderItemDO.getNum() > byId.getUsableStock()) {
                     throw new ServiceException(orderItemDO.getProductId() + "的可用库存数量不足");
                 }
             }
-            byId.setUsableStock(byId.getUsableStock() - orderItemDO.getNum());
-            productStockManager.updateById(byId);
+            stockDTO.setId(byId.getId());
+            stockDTO.setNum(orderItemDO.getNum());
+            arrayList.add(stockDTO);
         }
+        productStockManager.updateLockedStock(arrayList);
         aDo.setStatus(SaleOrderStatusEnum.TO_BE_SEND);
         updateById(aDo);
     }

+ 55 - 3
module-erp/src/main/java/com/hys/app/service/erp/impl/ProductStockManagerImpl.java

@@ -1,6 +1,8 @@
 package com.hys.app.service.erp.impl;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -10,10 +12,12 @@ import com.hys.app.framework.exception.ServiceException;
 import com.hys.app.framework.database.mybatisplus.base.BaseServiceImpl;
 import com.hys.app.framework.util.PageConvert;
 import com.hys.app.mapper.erp.ProductStockMapper;
+import com.hys.app.mapper.goods.ProductMapper;
 import com.hys.app.model.erp.dos.ProductDO;
 import com.hys.app.model.erp.dos.ProductStockDO;
 import com.hys.app.model.erp.dos.WarehouseDO;
 import com.hys.app.model.erp.dto.ProductStockQueryParams;
+import com.hys.app.model.erp.dto.StockDTO;
 import com.hys.app.model.erp.enums.StockOperateEnum;
 import com.hys.app.model.erp.vo.ProductStockV1;
 import com.hys.app.model.erp.vo.ProductStockVO;
@@ -49,7 +53,7 @@ public class ProductStockManagerImpl extends BaseServiceImpl<ProductStockMapper,
     private WarehouseManager warehouseManager;
 
     @Autowired
-    private ProductManager productManager;
+    private ProductMapper productMapper;
 
     @Autowired
     private ProductStockMapper productStockMapper;
@@ -75,7 +79,7 @@ public class ProductStockManagerImpl extends BaseServiceImpl<ProductStockMapper,
     public List<ProductStockV1> selectList(ProductStockQueryParams request) {
         List<ProductStockV1> productStockV1s = baseMapper.queryList(request);
         for (ProductStockV1 productStockV1 : productStockV1s) {
-            productStockV1.setProductVO(productManager.getById(productStockV1.getProductId()));
+            productStockV1.setProductVO(productMapper.selectById(productStockV1.getProductId()));
         }
         return productStockV1s;
     }
@@ -109,7 +113,7 @@ public class ProductStockManagerImpl extends BaseServiceImpl<ProductStockMapper,
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void initStockByWarehouse(Long warehouseId) {
-        List<ProductDO> list = productManager.list();
+        List<ProductDO> list = productMapper.selectList();
         List<ProductStockDO> arrayList = new ArrayList<>();
         for (ProductDO aDo : list) {
             ProductStockDO aDo1 = new ProductStockDO();
@@ -237,5 +241,53 @@ public class ProductStockManagerImpl extends BaseServiceImpl<ProductStockMapper,
         }
         saveBatch(arrayList);
     }
+
+    @Override
+    public void updateLockedStock(List<StockDTO>  ids ) {
+        List<Long> collect = ids.stream().map(StockDTO::getId).collect(Collectors.toList());
+        List<ProductStockDO> list = list(new LambdaQueryWrapper<ProductStockDO>().in(ProductStockDO::getId,collect));
+        if (list.size() != ids.size()){
+            throw new ServiceException("部分库存信息记录未查询到");
+        }
+        for (ProductStockDO aDo : list) {
+            StockDTO stockDTO = ids.stream().filter(item -> item.getId().equals(aDo.getId())).findFirst().get();
+           Integer currentLocked = aDo.getLockedStock()+stockDTO.getNum();
+            aDo.setLockedStock(currentLocked);
+            aDo.setUsableStock(aDo.getActualStock()-currentLocked);
+        }
+        updateBatchById(list);
+    }
+
+    @Override
+    public void updateActualStock(List<StockDTO>  ids,String inventory) {
+        List<Long> collect = ids.stream().map(StockDTO::getId).collect(Collectors.toList());
+        List<ProductStockDO> list = list(new LambdaQueryWrapper<ProductStockDO>().in(ProductStockDO::getId,collect));
+        if (list.size() != ids.size()){
+            throw new ServiceException("部分库存信息记录未查询到");
+        }
+        for (ProductStockDO aDo : list) {
+            StockDTO stockDTO = ids.stream().filter(item -> item.getId().equals(aDo.getId())).findFirst().get();
+            aDo.setActualStock(aDo.getActualStock()+stockDTO.getNum());
+            if (StrUtil.isNotBlank(inventory) && "inventory".equals(inventory)){
+                aDo.setActualStock(stockDTO.getNum());
+            }
+            aDo.setUsableStock(aDo.getActualStock()-aDo.getLockedStock());
+        }
+        updateBatchById(list);
+    }
+
+    @Override
+    public void updateTransitStock(List<StockDTO> ids) {
+        List<Long> collect = ids.stream().map(StockDTO::getId).collect(Collectors.toList());
+        List<ProductStockDO> list = list(new LambdaQueryWrapper<ProductStockDO>().in(ProductStockDO::getId,collect));
+        if (list.size() != ids.size()){
+            throw new ServiceException("部分库存信息记录未查询到");
+        }
+        for (ProductStockDO aDo : list) {
+            StockDTO stockDTO = ids.stream().filter(item -> item.getId().equals(aDo.getId())).findFirst().get();
+            aDo.setTransitStock(aDo.getTransitStock()+stockDTO.getNum());
+        }
+        updateBatchById(list);
+    }
 }
 

+ 9 - 10
module-erp/src/main/java/com/hys/app/service/erp/impl/StockInventoryManagerImpl.java

@@ -17,10 +17,7 @@ import com.hys.app.mapper.erp.StockInventoryMapper;
 import com.hys.app.model.erp.dos.ProductStockDO;
 import com.hys.app.model.erp.dos.StockInventory;
 import com.hys.app.model.erp.dos.StockInventoryProduct;
-import com.hys.app.model.erp.dto.StockDamageReportProductDTO;
-import com.hys.app.model.erp.dto.StockInventoryDTO;
-import com.hys.app.model.erp.dto.StockInventoryParam;
-import com.hys.app.model.erp.dto.StockInventoryProductDTO;
+import com.hys.app.model.erp.dto.*;
 import com.hys.app.model.erp.enums.DamageinventoryEnum;
 import com.hys.app.model.erp.enums.NoBusinessTypeEnum;
 import com.hys.app.model.erp.enums.StockInventoryStatusEnum;
@@ -37,6 +34,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -102,12 +100,16 @@ public class StockInventoryManagerImpl extends ServiceImpl<StockInventoryMapper,
         List<ProductStockDO> list = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
                 .eq(ProductStockDO::getWarehouseId, stockInventory.getWarehouseId())
                 .in(ProductStockDO::getProductId, collect));
+        List<StockDTO> listStock = new ArrayList<>();
         for (ProductStockDO aDo : list) {
+            StockDTO dto = new StockDTO();
             StockInventoryProduct product = goodsList.stream().filter(item -> item.getProductId().equals(aDo.getProductId())).findAny().get();
-            aDo.setActualStock(aDo.getActualStock()+product.getDiffNum());
-            aDo.setUsableStock(aDo.getUsableStock()+product.getDiffNum());
+            dto.setId(aDo.getId());
+            dto.setNum(product.getInventoryNum());
+            listStock.add(dto);
         }
-        productStockManager.updateBatchById(list);
+        productStockManager.updateActualStock(listStock,"inventory");
+
     }
 
 
@@ -141,9 +143,6 @@ public class StockInventoryManagerImpl extends ServiceImpl<StockInventoryMapper,
     }
 
 
-
-
-
     /**
      * 编辑库存盘点单
      *

+ 2 - 0
module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseAreaManagerImpl.java

@@ -56,6 +56,8 @@ public class WarehouseAreaManagerImpl extends BaseServiceImpl<WarehouseAreaMappe
         WebPage<WarehouseAreaVO> webPage1 = converter.convert(webPage);
         for (WarehouseAreaVO item : webPage1.getData()) {
             WarehouseVO warehouseVO = warehouseManager.getDetail(item.getWarehouseId());
+            long count = areaStockManager.count(new LambdaQueryWrapper<AreaStock>().eq(AreaStock::getWarehouseAreaId, item.getId()));
+            item.setBindNum(count);
             item.setWarehouse(warehouseVO);
         }
         return webPage1;

+ 11 - 7
module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseEntryManagerImpl.java

@@ -198,16 +198,20 @@ public class WarehouseEntryManagerImpl extends BaseServiceImpl<WarehouseEntryMap
         List<Long> collect = warehouseEntryDTO.getProductList().stream().map(WarehouseEntryProductDTO::getProductId).collect(Collectors.toList());
         List<ProductStockDO> stockDOList = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
                 .eq(ProductStockDO::getWarehouseId, warehouseEntryDTO.getWarehouseId()).in(ProductStockDO::getProductId, collect));
+        List<StockDTO> arrayList = new ArrayList<>();
         for (ProductStockDO aDo : stockDOList) {
-            //增加可用库存实际库存
             WarehouseEntryProductDTO productDO = warehouseEntryDTO.getProductList().stream().filter(item -> item.getProductId().equals(aDo.getProductId())).findFirst().get();
-            aDo.setUsableStock(aDo.getUsableStock() + productDO.getNum());
-            aDo.setActualStock(aDo.getActualStock() + productDO.getNum());
-            if (WarehouseEntyrTypeEnum.HAIL_ENTRY.equals(warehouseEntryDTO.getType())) {
-                aDo.setTransitStock(aDo.getTransitStock() - productDO.getNum());
-            }
+            //增加可用库存实际库存
+            StockDTO dto = new StockDTO();
+            dto.setId(aDo.getId());
+            dto.setNum(productDO.getNum());
+            arrayList.add(dto);
+        }
+        productStockManager.updateActualStock(arrayList,null);
+        if (WarehouseEntyrTypeEnum.HAIL_ENTRY.equals(warehouseEntryDTO.getType())) {
+            arrayList.forEach(item ->item.setNum(-item.getNum()));
+            productStockManager.updateTransitStock(arrayList);
         }
-        productStockManager.updateBatchById(stockDOList);
         //入库之后数据不能被操作
         warehouseEntryDO.setHasSubmit("Y");
         updateById(warehouseEntryDO);

+ 13 - 7
module-erp/src/main/java/com/hys/app/service/erp/impl/WarehouseOutManagerImpl.java

@@ -163,16 +163,22 @@ public class WarehouseOutManagerImpl extends BaseServiceImpl<WarehouseOutMapper,
         List<Long> collect = warehouseOutDTO.getProductList().stream().map(WarehouseOutProductDTO::getProductId).collect(Collectors.toList());
         List<ProductStockDO> stockDOList = productStockManager.list(new LambdaQueryWrapper<ProductStockDO>()
                 .eq(ProductStockDO::getWarehouseId, warehouseOutDTO.getWarehouseId()).in(ProductStockDO::getProductId, collect));
+        List<StockDTO> arrayList = new ArrayList<>();
         for (ProductStockDO aDo : stockDOList) {
             WarehouseOutProductDTO productDO = warehouseOutDTO.getProductList().stream().filter(item -> item.getProductId().equals(aDo.getProductId())).findFirst().get();
-            if (productDO.getOutNum() > aDo.getUsableStock()) {
-                throw new ServiceException(productDO.getProductId() + "的可用库存不够,请核对数据");
-            }
-            //循环判断每一条数据可用库存够不够扣减
-            aDo.setUsableStock(aDo.getUsableStock() - productDO.getOutNum());
-            aDo.setActualStock(aDo.getActualStock() - productDO.getOutNum());
+            StockDTO dto = new StockDTO();
+            dto.setId(aDo.getId());
+            dto.setNum(-productDO.getOutNum());
+            arrayList.add(dto);
+        }
+        //更爱可用库存实际库存冻结库存
+        productStockManager.updateActualStock(arrayList, null);
+        productStockManager.updateLockedStock(arrayList);
+        //更改在途库存
+        if (WarehouseOutTypeEnum.HAIL_OUT.equals(warehouseOutDTO.getType())){
+            arrayList.forEach(item ->item.setNum(-item.getNum()));
+            productStockManager.updateTransitStock(arrayList);
         }
-        productStockManager.updateBatchById(stockDOList);
         //入库之后数据不能被操作
         warehouseOutDO.setHasSubmit("Y");
         updateById(warehouseOutDO);

+ 1 - 1
server/src/main/resources/application.yml

@@ -4,7 +4,7 @@ spring:
   application:
     name: erp-server
   profiles:
-    active: test
+    active: local
   jackson:
     property-naming-strategy: SNAKE_CASE
   servlet: