src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
@@ -23,8 +23,8 @@
import com.ruoyi.production.pojo.*;
import com.ruoyi.production.service.ProductOrderService;
import com.ruoyi.quality.mapper.QualityInspectMapper;
import com.ruoyi.stock.dto.StockInventoryDto;
import com.ruoyi.stock.mapper.StockInventoryMapper;
import com.ruoyi.stock.pojo.StockInventory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -32,7 +32,8 @@
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
@@ -247,43 +248,9 @@
    @Override
    public List<SelectOptionDTO<String>> getProductOrderBatchNo() {
        List<ProductOrder> productOrders = productOrderMapper.selectList(null);
        return productOrders.stream().map(productOrder -> new SelectOptionDTO<>(productOrder.getBatchNo(), productOrder.getBatchNo())).collect(Collectors.toList());
    }
    @Override
    public List<StockInventoryDto> getByBomId(Long bomId) {
        List<ProductStructureDto> structureList = productStructureMapper.listBybomId(bomId);
        if (CollectionUtils.isEmpty(structureList)) {
            return Collections.emptyList();
        }
        Set<Long> allNodeIds = structureList.stream()
                .map(ProductStructureDto::getId)
                .collect(Collectors.toSet());
        Set<Long> parentIds = structureList.stream()
                .filter(node -> node.getParentId() != null && node.getParentId() != 0)
                .map(ProductStructureDto::getParentId)
                .collect(Collectors.toSet());
        Set<Long> leafNodeIds = new HashSet<>(allNodeIds);
        leafNodeIds.removeAll(parentIds);
        //  获取叶子节点的 productModelId
        List<Long> productModelIds = structureList.stream()
                .filter(node -> leafNodeIds.contains(node.getId()))
                .map(ProductStructureDto::getProductModelId)
                .filter(Objects::nonNull)
                .distinct()
                .collect(Collectors.toList());
        if (productModelIds.isEmpty()) {
            return Collections.emptyList();
        }
        return stockInventoryMapper.getStockInventory(productModelIds);
        //查询库存批号
        List<StockInventory> stockInventoryList = stockInventoryMapper.selectList(null);
        return stockInventoryList.stream().map(stockInventory -> new SelectOptionDTO<>(stockInventory.getBatchNo(), stockInventory.getBatchNo())).collect(Collectors.toList());
    }
    @Override
@@ -308,6 +275,16 @@
        if (CollectionUtils.isEmpty(drawMaterialsList)) {
            throw new RuntimeException("领料明细不能为空");
        }
        // 如果有数据先加库存
        ProductOrder productOrder = productOrderMapper.selectById(productOrderDto.getId());
        if (productOrder != null) {
            List<DrawMaterialDto> materialDtoList = JSON.parseArray(productOrder.getDrawMaterials(), DrawMaterialDto.class);
            for (DrawMaterialDto drawMaterialDto : materialDtoList) {
                stockUtils.addStock(drawMaterialDto.getProductModelId(), drawMaterialDto.getRequisitionQty(), null, productOrderDto.getId(),
                        drawMaterialDto.getBatchNo(), drawMaterialDto.getCustomer()
                );
            }
        }
        // 处理领料(扣减库存)
        try {
@@ -315,7 +292,9 @@
                if (drawMaterialDto.getProductModelId() == null) {
                    throw new RuntimeException("产品型号ID不能为空");
                }
                stockUtils.substractStock(drawMaterialDto.getProductModelId(), drawMaterialDto.getRequisitionQty(), StockOutQualifiedRecordTypeEnum.DRAW_MATERIALS_STOCK_OUT.getCode(), productOrderDto.getId());
                stockUtils.substractStock(drawMaterialDto.getProductModelId(), drawMaterialDto.getRequisitionQty(),
                        StockOutQualifiedRecordTypeEnum.DRAW_MATERIALS_STOCK_OUT.getCode(), productOrderDto.getId(),
                        drawMaterialDto.getBatchNo(),drawMaterialDto.getCustomer());
            }
        } catch (Exception e) {
            throw new RuntimeException("领料失败:" + e.getMessage());