| | |
| | | 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; |
| | |
| | | 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())) |
| | |
| | | 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) |