From f3813129107882ab77531a1d5f056824c401ca37 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期一, 13 十月 2025 11:11:55 +0800
Subject: [PATCH] 采购相关问题

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpProcurementServiceImpl.java |  113 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 113 insertions(+), 0 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpProcurementServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpProcurementServiceImpl.java
index 8ef66b0..d706349 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpProcurementServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TErpProcurementServiceImpl.java
@@ -87,6 +87,18 @@
     @Autowired
     private TErpProcurementGoodsService erpProcurementGoodsService;
 
+    @Resource
+    private TErpSupplierWarehousingMapper erpSupplierWarehousingMapper;
+
+    @Resource
+    private TErpSupplierWarehousingBatchMapper erpSupplierWarehousingBatchMapper;
+
+    @Resource
+    private TErpSupplierOutboundMapper erpSupplierOutboundMapper;
+
+    @Resource
+    private TErpSupplierOutboundGoodsMapper erpSupplierOutboundGoodsMapper;
+
 
     @Override
     public PageInfo<TErpProcurementVo> pageList(TErpProcurementQuery query, SysUser user) {
@@ -449,4 +461,105 @@
         return detailProcurementVO;
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
+    public void detailProcurementSend(String clinicSupplierId, SysUser user, String id) {
+        // 查出这个采购的下级商品
+        List<TErpProcurementGoods> list = erpProcurementGoodsService.list(new QueryWrapper<TErpProcurementGoods>().eq("procurement_id", id));
+        List<TErpSupplierWarehousing> tErpSupplierWarehousings = erpSupplierWarehousingMapper.selectList(new LambdaQueryWrapper<TErpSupplierWarehousing>()
+                .eq(TErpSupplierWarehousing::getSupplierId, clinicSupplierId).in(TErpSupplierWarehousing::getGoodsId, list.stream().map(TErpProcurementGoods::getGoodsId).collect(Collectors.toList()))
+                .orderByAsc(BaseModel::getCreateTime));
+
+        if(tErpSupplierWarehousings.isEmpty()){
+            throw new RuntimeException("商品供应商未入库,请先入库");
+        }
+
+        List<TErpSupplierWarehousingBatch> tErpSupplierWarehousingBatches = erpSupplierWarehousingBatchMapper.selectList(new LambdaQueryWrapper<TErpSupplierWarehousingBatch>().in(TErpSupplierWarehousingBatch::getWarehousingId, tErpSupplierWarehousings.stream().map(TErpSupplierWarehousing::getId).collect(Collectors.toList())));
+        // 获取所有的出库记录
+        List<TErpSupplierOutboundGoods> tErpSupplierOutboundGoodsLists = erpSupplierOutboundGoodsMapper.selectList(new LambdaQueryWrapper<TErpSupplierOutboundGoods>().in(TErpSupplierOutboundGoods::getWarehousingBatchId, tErpSupplierWarehousingBatches.stream().map(TErpSupplierWarehousingBatch::getId).collect(Collectors.toList())));
+
+
+        outer:for (TErpProcurementGoods tErpProcurementGoods : list) {
+            // 分别入库
+            String goodsId = tErpProcurementGoods.getGoodsId();
+            // 查询这个供应商的 该商品是否入过库 未入库提示  出库判断库存 先找先入库的
+            List<TErpSupplierWarehousing> collect = tErpSupplierWarehousings.stream().filter(e -> e.getGoodsId().equals(goodsId)).collect(Collectors.toList());
+            if(collect.isEmpty()){
+                throw new RuntimeException("商品供应商未入库,请先入库");
+            }
+            // 需要出库的数量
+            Integer purchaseCount = tErpProcurementGoods.getPurchaseCount();
+
+
+            if(purchaseCount==0){
+                continue;
+            }
+
+            for (TErpSupplierWarehousing tErpSupplierWarehousing : collect) {
+                List<TErpSupplierWarehousingBatch> warehousingBatches = tErpSupplierWarehousingBatches.stream().filter(e -> e.getWarehousingId().equals(tErpSupplierWarehousing.getId())).collect(Collectors.toList());
+                for (TErpSupplierWarehousingBatch warehousingBatch : warehousingBatches) {
+                    // 已出库数量
+                    int sum = tErpSupplierOutboundGoodsLists.stream().filter(e -> e.getWarehousingBatchId().equals(warehousingBatch.getId())).mapToInt(TErpSupplierOutboundGoods::getOutboundCount).sum();
+                    // 该批次剩余的数量
+                    int count = warehousingBatch.getWarehousingNumber() - sum;
+
+                    // 该批次没有数量 找下个批次
+                    if(count==0 ){
+                        continue;
+                    }
+                    // 如果大于这个数量 则使用这个批次
+                    if(count>=purchaseCount){
+                        // 添加出库记录
+                        TErpSupplierOutbound tErpSupplierOutbound= new TErpSupplierOutbound();
+                        tErpSupplierOutbound.setSupplierId(clinicSupplierId);
+                        tErpSupplierOutbound.setWarehouseId(tErpSupplierWarehousing.getWarehouseId());
+                        tErpSupplierOutbound.setOutboundType(7);
+                        //TODO 确定这个是采购价还是销售价格
+                        tErpSupplierOutbound.setTotalMoney(tErpProcurementGoods.getPurchasePrice().multiply(new BigDecimal(purchaseCount)));
+                        tErpSupplierOutbound.setOutboundNumber("G" + DateUtils.dateTimeNow());
+                        erpSupplierOutboundMapper.insert(tErpSupplierOutbound);
+
+                        TErpSupplierOutboundGoods tErpSupplierOutboundGoods = new TErpSupplierOutboundGoods();
+                        tErpSupplierOutboundGoods.setOutboundId(tErpSupplierOutbound.getId());
+                        tErpSupplierOutboundGoods.setWarehousingId(tErpSupplierWarehousing.getId());
+                        tErpSupplierOutboundGoods.setWarehousingBatchId(warehousingBatch.getId());
+                        tErpSupplierOutboundGoods.setOutboundCount(purchaseCount);
+                        tErpSupplierOutboundGoods.setTotalPrice(tErpProcurementGoods.getPurchasePrice().multiply(new BigDecimal(purchaseCount)));
+                        erpSupplierOutboundGoodsMapper.insert(tErpSupplierOutboundGoods);
+                        continue outer;
+                    }
+
+                    if(count<purchaseCount){
+                        purchaseCount = purchaseCount - count;
+                        // 添加出库记录
+                        TErpSupplierOutbound tErpSupplierOutbound= new TErpSupplierOutbound();
+                        tErpSupplierOutbound.setSupplierId(clinicSupplierId);
+                        tErpSupplierOutbound.setWarehouseId(tErpSupplierWarehousing.getWarehouseId());
+                        tErpSupplierOutbound.setOutboundType(7);
+                        //TODO 确定这个是采购价还是销售价格
+                        tErpSupplierOutbound.setTotalMoney(tErpProcurementGoods.getPurchasePrice().multiply(new BigDecimal(purchaseCount)));
+                        tErpSupplierOutbound.setOutboundNumber("G" + DateUtils.dateTimeNow());
+                        erpSupplierOutboundMapper.insert(tErpSupplierOutbound);
+
+                        TErpSupplierOutboundGoods tErpSupplierOutboundGoods = new TErpSupplierOutboundGoods();
+                        tErpSupplierOutboundGoods.setOutboundId(tErpSupplierOutbound.getId());
+                        tErpSupplierOutboundGoods.setWarehousingId(tErpSupplierWarehousing.getId());
+                        tErpSupplierOutboundGoods.setWarehousingBatchId(warehousingBatch.getId());
+                        tErpSupplierOutboundGoods.setOutboundCount(purchaseCount);
+                        tErpSupplierOutboundGoods.setTotalPrice(tErpProcurementGoods.getPurchasePrice().multiply(new BigDecimal(purchaseCount)));
+                        erpSupplierOutboundGoodsMapper.insert(tErpSupplierOutboundGoods);
+                    }
+
+                }
+
+            }
+            if(purchaseCount>0){
+                throw new RuntimeException("商品供应商库存不足,请先入库");
+            }
+
+
+        }
+
+    }
+
 }

--
Gitblit v1.7.1