From 741918a903e17b2ec7522556d2c043b8d35dd8a1 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 15 六月 2026 17:42:58 +0800
Subject: [PATCH] 生产取消bom,不合格管理定制化

---
 src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java |  271 +----------------------------------------------------
 1 files changed, 8 insertions(+), 263 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java
index ecdb37c..c62a17e 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java
@@ -16,9 +16,7 @@
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.production.bean.dto.ProductionOperationTaskDto;
 import com.ruoyi.production.bean.dto.ProductionOrderDto;
-import com.ruoyi.production.bean.vo.ProductionBomStructureVo;
 import com.ruoyi.production.bean.vo.ProductionOperationTaskVo;
-import com.ruoyi.production.bean.vo.ProductionOrderPickVo;
 import com.ruoyi.production.bean.vo.ProductionOrderVo;
 import com.ruoyi.production.bean.vo.ProductionPlanVo;
 import com.ruoyi.production.bean.vo.ProductionOrderWorkOrderDetailVo;
@@ -34,8 +32,6 @@
 import com.ruoyi.production.service.ProductionOrderService;
 import com.ruoyi.sales.mapper.SalesLedgerMapper;
 import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
-import com.ruoyi.stock.mapper.StockInventoryMapper;
-import com.ruoyi.stock.pojo.StockInventory;
 import com.ruoyi.technology.mapper.*;
 import com.ruoyi.technology.pojo.*;
 import lombok.RequiredArgsConstructor;
@@ -44,6 +40,7 @@
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -57,17 +54,13 @@
     private final ProductionOrderRoutingOperationMapper productionOrderRoutingOperationMapper;
     private final ProductionOrderRoutingOperationParamMapper productionOrderRoutingOperationParamMapper;
     private final ProductionOperationTaskMapper productionOperationTaskMapper;
-    private final ProductionOrderBomMapper productionOrderBomMapper;
-    private final ProductionBomStructureMapper productionBomStructureMapper;
+    private final ProductionOrderMapper productionOrderMapper;
     private final ProductionProductMainMapper productionProductMainMapper;
     private final ProductionProductOutputMapper productionProductOutputMapper;
-    private final ProductionOrderPickMapper productionOrderPickMapper;
-    private final ProductionOrderPickRecordMapper productionOrderPickRecordMapper;
     private final QualityInspectMapper qualityInspectMapper;
     private final QualityInspectParamMapper qualityInspectParamMapper;
     private final QualityInspectFileMapper qualityInspectFileMapper;
     private final ProductionPlanMapper productionPlanMapper;
-    private final StockInventoryMapper stockInventoryMapper;
     private final StorageAttachmentMapper storageAttachmentMapper;
     private final StorageBlobMapper storageBlobMapper;
     private final SalesLedgerMapper salesLedgerMapper;
@@ -76,8 +69,6 @@
     private final TechnologyRoutingOperationMapper technologyRoutingOperationMapper;
     private final TechnologyRoutingOperationParamMapper technologyRoutingOperationParamMapper;
     private final TechnologyOperationMapper technologyOperationMapper;
-    private final TechnologyBomMapper technologyBomMapper;
-    private final TechnologyBomStructureMapper technologyBomStructureMapper;
     private final FileUtil fileUtil;
 
     @Override
@@ -114,7 +105,7 @@
         // 涓嬪崟鍏ュ彛缁熶竴琛ラ綈鏉ユ簮鍗曟嵁銆佽鍒掑拰宸ヨ壓淇℃伅锛岄伩鍏嶅墠绔垎鍒紶澶氬瀛楁銆�
         validateAndFillOrder(productionOrder, oldOrder);
         if (productionOrder.getNpsNo() == null || productionOrder.getNpsNo().trim().isEmpty()) {
-            productionOrder.setNpsNo(generateNextOrderNo());
+            productionOrder.setNpsNo(generateNextOrderNo(productionOrder.getCreateTime() != null ? productionOrder.getCreateTime() : LocalDateTime.now()));
         }
         if (productionOrder.getCompleteQuantity() == null) {
             productionOrder.setCompleteQuantity(BigDecimal.ZERO);
@@ -210,9 +201,7 @@
 
     @Override
     public int syncProductionOrderSnapshot(Long productionOrderId) {
-        // 鍚屾璁㈠崟宸ヨ壓銆佸伐搴忋�佸弬鏁板拰BOM蹇収
         ProductionOrder productionOrder = this.getById(productionOrderId);
-        // 鍙傛暟涓庡墠缃潯浠舵牎楠�
         if (productionOrder == null) {
             throw new ServiceException("鐢熶骇璁㈠崟涓嶅瓨鍦�");
         }
@@ -223,42 +212,24 @@
         if (technologyRouting == null) {
             throw new ServiceException("宸ヨ壓璺嚎涓嶅瓨鍦�");
         }
-        // 璁㈠崟蹇収鎸夆�滃厛娓呭悗寤衡�濆鐞嗭紝淇濊瘉宸ヨ壓璺嚎銆佸伐搴忋�佸弬鏁般�丅OM 鍏ㄩ儴鏉ヨ嚜鍚屼竴鐗堟湰銆�
         clearProductionSnapshot(productionOrderId);
-        ProductionOrderBom orderBom = syncProductionOrderBomSnapshot(productionOrder, technologyRouting);
 
-        //鐢熶骇璁㈠崟宸ヨ壓璺嚎琛�
         ProductionOrderRouting orderRouting = new ProductionOrderRouting();
         orderRouting.setProductionOrderId(productionOrder.getId());
         orderRouting.setTechnologyRoutingId(technologyRouting.getId());
         orderRouting.setProductModelId(technologyRouting.getProductModelId());
         orderRouting.setProcessRouteCode(technologyRouting.getProcessRouteCode());
         orderRouting.setDescription(technologyRouting.getDescription());
-        orderRouting.setBomId(technologyRouting.getBomId());
-        orderRouting.setOrderBomId(orderBom == null ? null : orderBom.getId());
         productionOrderRoutingMapper.insert(orderRouting);
 
         int syncedParamCount = 0;
-        // 鏌ヨ骞跺噯澶囦笟鍔℃暟鎹�
         List<TechnologyRoutingOperation> routingOperations = technologyRoutingOperationMapper.selectList(
                 Wrappers.<TechnologyRoutingOperation>lambdaQuery()
                         .eq(TechnologyRoutingOperation::getTechnologyRoutingId, technologyRouting.getId())
                         .orderByDesc(TechnologyRoutingOperation::getDragSort)
                         .orderByDesc(TechnologyRoutingOperation::getId));
-        // Build task plan quantities from order BOM snapshot demand instead of recomputing from technology BOM units.
-        Long rootProductModelId = orderBom != null && orderBom.getProductModelId() != null
-                ? orderBom.getProductModelId()
-                : productionOrder.getProductModelId();
-        List<ProductionBomStructure> orderBomStructureList = orderBom == null || orderBom.getId() == null
-                ? Collections.emptyList()
-                : productionBomStructureMapper.selectList(
-                Wrappers.<ProductionBomStructure>lambdaQuery()
-                        .eq(ProductionBomStructure::getProductionOrderBomId, orderBom.getId())
-                        .orderByAsc(ProductionBomStructure::getId));
-        Map<String, BigDecimal> operationDemandedQuantityMap =
-                buildOperationDemandedQuantityMap(orderBomStructureList, rootProductModelId);
+        BigDecimal orderQuantity = defaultDecimal(productionOrder.getQuantity());
         Map<Long, String> operationNameMap = technologyOperationMapper.selectBatchIds(
-        // 閬嶅巻澶勭悊鏁版嵁骞剁粍瑁呯粨鏋�
                         routingOperations.stream()
                                 .map(TechnologyRoutingOperation::getTechnologyOperationId)
                                 .filter(Objects::nonNull)
@@ -271,7 +242,6 @@
                 .max(Integer::compareTo)
                 .orElse(null);
         for (TechnologyRoutingOperation sourceOperation : routingOperations) {
-            // 璁㈠崟宸ュ簭淇濆瓨鐨勬槸宸ヨ壓宸ュ簭蹇収锛屽悗缁姤宸ュ彧渚濊禆蹇収锛屼笉鍐嶇洿鎺ュ紩鐢ㄥ伐鑹轰富鏁版嵁銆�
             ProductionOrderRoutingOperation targetOperation = new ProductionOrderRoutingOperation();
             targetOperation.setProductionOrderId(productionOrder.getId());
             targetOperation.setTechnologyRoutingOperationId(sourceOperation.getId());
@@ -290,11 +260,7 @@
                 ProductionOperationTask task = new ProductionOperationTask();
                 task.setProductionOrderRoutingOperationId(targetOperation.getId());
                 task.setProductionOrderId(productionOrder.getId());
-                task.setPlanQuantity(resolveTaskPlanQuantity(
-                        sourceOperation,
-                        operationDemandedQuantityMap,
-                        productionOrder,
-                        rootProductModelId));
+                task.setPlanQuantity(orderQuantity);
                 task.setCompleteQuantity(BigDecimal.ZERO);
                 task.setWorkOrderNo(generateNextTaskNo());
                 task.setStatus(2);
@@ -306,7 +272,6 @@
                             .eq(TechnologyRoutingOperationParam::getTechnologyRoutingOperationId, sourceOperation.getId())
                             .orderByAsc(TechnologyRoutingOperationParam::getId));
             for (TechnologyRoutingOperationParam sourceParam : sourceParams) {
-                // 宸ュ簭鎵ц鍙傛暟鍚屾牱鍋氬揩鐓э紝閬垮厤宸ヨ壓鍙傛暟璋冩暣褰卞搷宸蹭笅杈捐鍗曘��
                 ProductionOrderRoutingOperationParam targetParam = new ProductionOrderRoutingOperationParam();
                 targetParam.setProductionOrderId(productionOrder.getId());
                 targetParam.setProductionOrderRoutingOperationId(targetOperation.getId());
@@ -329,150 +294,12 @@
         return syncedParamCount;
     }
 
-    private Map<String, BigDecimal> buildOperationDemandedQuantityMap(List<ProductionBomStructure> bomStructures,
-                                                                      Long rootProductModelId) {
-        if (bomStructures == null || bomStructures.isEmpty()) {
-            return Collections.emptyMap();
-        }
-        Map<Long, ProductionBomStructure> structureById = bomStructures.stream()
-                .filter(item -> item != null && item.getId() != null)
-                .collect(Collectors.toMap(ProductionBomStructure::getId, item -> item, (left, right) -> left));
-        Map<String, BigDecimal> demandedQuantityMap = new HashMap<>();
-        Set<String> mergedOutputNodeKeySet = new HashSet<>();
-        for (ProductionBomStructure bomStructure : bomStructures) {
-            if (bomStructure == null || bomStructure.getTechnologyOperationId() == null) {
-                continue;
-            }
-            // The BOM row points to the producing operation; task quantity should come from that operation's output node.
-            ProductionBomStructure outputNode = resolveOperationOutputNode(bomStructure, structureById);
-            Long outputProductModelId = resolveOutputProductModelId(outputNode, rootProductModelId);
-            if (outputProductModelId == null) {
-                continue;
-            }
-            String mergedOutputNodeKey = buildOperationOutputNodeKey(
-                    bomStructure.getTechnologyOperationId(),
-                    outputNode == null ? null : outputNode.getId(),
-                    outputProductModelId);
-            if (!mergedOutputNodeKeySet.add(mergedOutputNodeKey)) {
-                continue;
-            }
-            // demandedQuantity is already the order-level required output quantity for the current output node.
-            BigDecimal demandedQuantity = defaultDecimal(outputNode == null ? null : outputNode.getDemandedQuantity());
-            String key = buildOperationDemandedQuantityKey(bomStructure.getTechnologyOperationId(), outputProductModelId);
-            demandedQuantityMap.merge(key, demandedQuantity, BigDecimal::add);
-        }
-        return demandedQuantityMap;
-    }
-
-    private BigDecimal resolveTaskPlanQuantity(TechnologyRoutingOperation sourceOperation,
-                                               Map<String, BigDecimal> operationDemandedQuantityMap,
-                                               ProductionOrder productionOrder,
-                                               Long rootProductModelId) {
-        if (sourceOperation == null || operationDemandedQuantityMap == null || operationDemandedQuantityMap.isEmpty()) {
-            return defaultDecimal(productionOrder == null ? null : productionOrder.getQuantity());
-        }
-        Long outputProductModelId = sourceOperation.getProductModelId() != null
-                ? sourceOperation.getProductModelId()
-                : rootProductModelId;
-        String key = buildOperationDemandedQuantityKey(sourceOperation.getTechnologyOperationId(), outputProductModelId);
-        BigDecimal planQuantity = operationDemandedQuantityMap.get(key);
-        return planQuantity != null ? planQuantity : defaultDecimal(productionOrder == null ? null : productionOrder.getQuantity());
-    }
-
-    private String buildOperationDemandedQuantityKey(Long operationId, Long outputProductModelId) {
-        return String.valueOf(operationId) + "#" + String.valueOf(outputProductModelId);
-    }
-
-    private String buildOperationOutputNodeKey(Long operationId, Long outputNodeId, Long outputProductModelId) {
-        return String.valueOf(operationId) + "#" + String.valueOf(outputNodeId) + "#" + String.valueOf(outputProductModelId);
-    }
-
-    private ProductionBomStructure resolveOperationOutputNode(ProductionBomStructure bomStructure,
-                                                              Map<Long, ProductionBomStructure> structureById) {
-        if (bomStructure == null) {
-            return null;
-        }
-        // The root node is the first output node; child rows use their direct parent as the current operation output.
-        if (bomStructure.getParentId() == null) {
-            return bomStructure;
-        }
-        ProductionBomStructure parent = structureById.get(bomStructure.getParentId());
-        return parent != null ? parent : bomStructure;
-    }
-
-    private Long resolveOutputProductModelId(ProductionBomStructure outputNode,
-                                             Long rootProductModelId) {
-        if (outputNode == null) {
-            return rootProductModelId;
-        }
-        return outputNode.getProductModelId() != null ? outputNode.getProductModelId() : rootProductModelId;
-    }
-
-    private ProductionOrderBom syncProductionOrderBomSnapshot(ProductionOrder productionOrder, TechnologyRouting technologyRouting) {
-        // 鍚屾璁㈠崟BOM蹇収缁撴瀯
-        if (technologyRouting.getBomId() == null) {
-            return null;
-        }
-        TechnologyBom technologyBom = technologyBomMapper.selectById(technologyRouting.getBomId());
-        if (technologyBom == null) {
-            throw new ServiceException("宸ヨ壓BOM涓嶅瓨鍦�");
-        }
-        // 鏌ヨ骞跺噯澶囦笟鍔℃暟鎹�
-        List<TechnologyBomStructure> structureList = technologyBomStructureMapper.selectList(
-                Wrappers.<TechnologyBomStructure>lambdaQuery()
-                        .eq(TechnologyBomStructure::getBomId, technologyBom.getId())
-                        .orderByAsc(TechnologyBomStructure::getId));
-        // 閬嶅巻澶勭悊鏁版嵁骞剁粍瑁呯粨鏋�
-        TechnologyBomStructure root = structureList.stream().filter(item -> item.getParentId() == null).findFirst().orElse(null);
-        BigDecimal orderQuantity = defaultDecimal(productionOrder.getQuantity());
-
-        ProductionOrderBom orderBom = new ProductionOrderBom();
-        orderBom.setProductionOrderId(productionOrder.getId());
-        orderBom.setBomId(Long.valueOf(technologyBom.getId()));
-        orderBom.setProductModelId(root != null ? root.getProductModelId() : productionOrder.getProductModelId());
-        orderBom.setRemark(technologyBom.getRemark());
-        orderBom.setBomNo(technologyBom.getBomNo());
-        orderBom.setVersion(technologyBom.getVersion());
-        // 鎸佷箙鍖栨垨杈撳嚭澶勭悊缁撴灉
-        productionOrderBomMapper.insert(orderBom);
-
-        Map<Long, Long> idMap = new HashMap<>();
-        BigDecimal lastProcessDemandedQuantity = orderQuantity;
-        for (TechnologyBomStructure source : structureList) {
-            // 瀛愯妭鐐� parentId 闇�瑕佹槧灏勬垚鏂板揩鐓ц妭鐐� id锛屾墠鑳戒繚鐣欏師濮� BOM 灞傜骇銆�
-            ProductionBomStructure target = new ProductionBomStructure();
-            target.setProductionOrderId(productionOrder.getId());
-            target.setProductionOrderBomId(orderBom.getId());
-            target.setParentId(source.getParentId() == null ? null : idMap.get(source.getParentId()));
-            target.setProductModelId(source.getProductModelId());
-            target.setTechnologyOperationId(source.getOperationId());
-            target.setUnitQuantity(source.getUnitQuantity());
-            target.setDemandedQuantity(lastProcessDemandedQuantity.multiply(source.getUnitQuantity()));
-            target.setUnit(source.getUnit());
-            productionBomStructureMapper.insert(target);
-            idMap.put(source.getId(), target.getId());
-            lastProcessDemandedQuantity = target.getDemandedQuantity();
-        }
-        return orderBom;
-    }
-
     private void clearProductionSnapshot(Long productionOrderId) {
-        // 娓呯悊璁㈠崟宸茬敓鎴愮殑宸ヨ壓涓嶣OM蹇収鏁版嵁
-        boolean hasPickRecord = productionOrderPickRecordMapper.selectCount(
-        // 鏌ヨ骞跺噯澶囦笟鍔℃暟鎹�
-                Wrappers.<ProductionOrderPickRecord>lambdaQuery()
-                        .eq(ProductionOrderPickRecord::getProductionOrderId, productionOrderId)) > 0;
-        // 鍙傛暟涓庡墠缃潯浠舵牎楠�
-        if (hasPickRecord) {
-            throw new ServiceException("鐢熶骇璁㈠崟宸插瓨鍦ㄩ鏂欒褰曪紝涓嶈兘閲嶆柊鐢熸垚蹇収");
-        }
         List<Long> taskIds = productionOperationTaskMapper.selectList(
                         Wrappers.<ProductionOperationTask>lambdaQuery()
                                 .eq(ProductionOperationTask::getProductionOrderId, productionOrderId))
-        // 閬嶅巻澶勭悊鏁版嵁骞剁粍瑁呯粨鏋�
                 .stream().map(ProductionOperationTask::getId).collect(Collectors.toList());
         if (!taskIds.isEmpty()) {
-            // 宸叉湁鎶ュ伐璁板綍璇存槑璁㈠崟宸插紑宸ワ紝姝ゆ椂涓嶅厑璁稿啀閲嶅缓蹇収銆�
             boolean started = productionProductMainMapper.selectCount(
                     Wrappers.<ProductionProductMain>lambdaQuery()
                             .in(ProductionProductMain::getProductionOperationTaskId, taskIds)) > 0;
@@ -488,12 +315,6 @@
                 .eq(ProductionOrderRoutingOperation::getProductionOrderId, productionOrderId));
         productionOrderRoutingMapper.delete(Wrappers.<ProductionOrderRouting>lambdaQuery()
                 .eq(ProductionOrderRouting::getProductionOrderId, productionOrderId));
-        productionBomStructureMapper.delete(Wrappers.<ProductionBomStructure>lambdaQuery()
-                .eq(ProductionBomStructure::getProductionOrderId, productionOrderId));
-        productionOrderBomMapper.delete(Wrappers.<ProductionOrderBom>lambdaQuery()
-                .eq(ProductionOrderBom::getProductionOrderId, productionOrderId));
-        productionOrderPickMapper.delete(Wrappers.<ProductionOrderPick>lambdaQuery()
-                .eq(ProductionOrderPick::getProductionOrderId, productionOrderId));
     }
 
     private LambdaQueryWrapper<ProductionOrder> buildQueryWrapper(ProductionOrderDto dto) {
@@ -507,9 +328,10 @@
                 .orderByDesc(ProductionOrder::getId);
     }
 
-    private String generateNextOrderNo() {
+    private String generateNextOrderNo(LocalDateTime createTime) {
         // 鐢熸垚涓嬩竴涓敓浜ц鍗曞彿
-        String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+        LocalDate localDate = createTime.toLocalDate();
+        String datePrefix = localDate.format(DateTimeFormatter.ofPattern("yyyyMMdd"));
         String prefix = "SC" + datePrefix;
         ProductionOrder latestOrder = this.getOne(Wrappers.<ProductionOrder>lambdaQuery()
                 .likeRight(ProductionOrder::getNpsNo, prefix)
@@ -1010,83 +832,6 @@
             throw new ServiceException("鐢熶骇璁㈠崟涓嶅瓨鍦�");
         }
         return productionOrder.getId();
-    }
-
-    @Override
-    public List<ProductionOrderPickVo> pick(Long productionOrderId) {
-        // 鏌ヨ璁㈠崟棰嗘枡銆佹姇鏂欎笌閫�鏂欐槑缁�
-        if (productionOrderId == null) {
-            return Collections.emptyList();
-        }
-
-        // 鏌ヨ骞跺噯澶囦笟鍔℃暟鎹�
-        ProductionOrderBom orderBom = productionOrderBomMapper.selectOne(
-                Wrappers.<ProductionOrderBom>lambdaQuery()
-                        .eq(ProductionOrderBom::getProductionOrderId, productionOrderId)
-                        .orderByDesc(ProductionOrderBom::getId)
-                        .last("limit 1"));
-        if (orderBom == null || orderBom.getId() == null) {
-            return Collections.emptyList();
-        }
-
-        List<ProductionBomStructureVo> bomStructureList = productionBomStructureMapper.pickByBomId(orderBom.getId());
-        if (bomStructureList == null || bomStructureList.isEmpty()) {
-            return Collections.emptyList();
-        }
-
-        // 閬嶅巻澶勭悊鏁版嵁骞剁粍瑁呯粨鏋�
-        List<Long> productModelIds = bomStructureList.stream()
-                .map(ProductionBomStructureVo::getProductModelId)
-                .filter(Objects::nonNull)
-                .distinct()
-                .collect(Collectors.toList());
-        Map<Long, BigDecimal> stockQuantityMap = new HashMap<>();
-        Map<Long, LinkedHashSet<String>> stockBatchNoMap = new HashMap<>();
-        if (!productModelIds.isEmpty()) {
-            List<StockInventory> stockList = stockInventoryMapper.selectList(
-                    Wrappers.<StockInventory>lambdaQuery()
-                            .in(StockInventory::getProductModelId, productModelIds));
-            for (StockInventory stockItem : stockList) {
-                if (stockItem == null || stockItem.getProductModelId() == null) {
-                    continue;
-                }
-                Long productModelId = stockItem.getProductModelId();
-                stockQuantityMap.merge(productModelId, defaultDecimal(stockItem.getQualitity()), BigDecimal::add);
-                String batchNo = stockItem.getBatchNo();
-                if (batchNo != null && !batchNo.trim().isEmpty()) {
-                    stockBatchNoMap.computeIfAbsent(productModelId, key -> new LinkedHashSet<>()).add(batchNo);
-                }
-            }
-        }
-
-        Map<String, ProductionOrderPickVo> mergedPickMap = new LinkedHashMap<>();
-        for (ProductionBomStructureVo structure : bomStructureList) {
-            if (structure == null || structure.getProductModelId() == null) {
-                continue;
-            }
-            Long productModelId = structure.getProductModelId();
-            String mergeKey = String.valueOf(structure.getTechnologyOperationId()) + "#" + productModelId;
-            ProductionOrderPickVo vo = mergedPickMap.get(mergeKey);
-            if (vo == null) {
-                vo = new ProductionOrderPickVo();
-                vo.setProductModelId(productModelId);
-                vo.setOperationName(structure.getOperationName());
-                vo.setTechnologyOperationId(structure.getTechnologyOperationId());
-                vo.setProductName(structure.getProductName());
-                vo.setModel(structure.getModel());
-                vo.setDemandedQuantity(BigDecimal.ZERO);
-                vo.setUnit(structure.getUnit());
-                List<String> batchNoList = stockBatchNoMap.get(productModelId) == null
-                        ? Collections.emptyList()
-                        : new ArrayList<>(stockBatchNoMap.get(productModelId));
-                vo.setBatchNoList(batchNoList);
-                vo.setStockQuantity(stockQuantityMap.getOrDefault(productModelId, BigDecimal.ZERO));
-                vo.setBom(true);
-                mergedPickMap.put(mergeKey, vo);
-            }
-            vo.setDemandedQuantity(defaultDecimal(vo.getDemandedQuantity()).add(defaultDecimal(structure.getDemandedQuantity())));
-        }
-        return new ArrayList<>(mergedPickMap.values());
     }
 
     @Override

--
Gitblit v1.9.3