yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/material/MesProMaterialRequirementServiceImpl.java
@@ -26,6 +26,7 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -145,8 +146,16 @@
                convertSet(itemMap.values(), MesMdItemDO::getItemTypeId));
        // 2. 批量查询库存,按 itemId 汇总可用量(在库 - 冻结 - 占用)
        // 库存表存的是 mdm_item_id,而 BOM 展开得到的是 mes_md_item.id,需要先换算再查库存
        Map<Long, BigDecimal> stockMap = new HashMap<>();
        List<MesWmMaterialStockDO> stockList = materialStockMapper.selectListByItemIds(requirements.keySet());
        Map<Long, Long> mesToMdmItemId = new HashMap<>();
        for (MesMdItemDO item : itemMap.values()) {
            if (item.getMdmItemId() != null) {
                mesToMdmItemId.put(item.getId(), item.getMdmItemId());
            }
        }
        List<MesWmMaterialStockDO> stockList = materialStockMapper.selectListByItemIds(
                new HashSet<>(mesToMdmItemId.values()));
        for (MesWmMaterialStockDO stock : stockList) {
            BigDecimal available = nullToZero(stock.getQuantity())
                    .subtract(nullToZero(stock.getFrozenQuantity()))
@@ -164,7 +173,8 @@
                continue;
            }
            BigDecimal requiredQty = entry.getValue();
            BigDecimal stockQty = stockMap.getOrDefault(item.getId(), BigDecimal.ZERO);
            BigDecimal stockQty = stockMap.getOrDefault(
                    mesToMdmItemId.getOrDefault(item.getId(), item.getId()), BigDecimal.ZERO);
            BigDecimal purchaseQty = purchaseOrderQtyMap.getOrDefault(item.getId(), BigDecimal.ZERO);
            MesProWorkOrderItemRespVO vo = new MesProWorkOrderItemRespVO()
                    .setItemId(item.getId()).setQuantity(requiredQty)