Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceOptimizeManagerImpl.java =================================================================== diff -u -r30369 -r30397 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceOptimizeManagerImpl.java (.../InvoiceOptimizeManagerImpl.java) (revision 30369) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceOptimizeManagerImpl.java (.../InvoiceOptimizeManagerImpl.java) (revision 30397) @@ -885,17 +885,13 @@ invoiceOrigin, tousseDeliverOccasion, hideUnprintedDisposableGoodsInvoicePlan); //3.申请项与一次性物品标识的关联map(第一层map的key为申请项,value为一次性物品标识数量map(key为一次性物品标识对象,value为数量)) - Map> allTousseItemToIdentificationAmountMap = null; + final Map> allTousseItemToIdentificationAmountMap = new HashMap<>(); if(MapUtils.isNotEmpty(batchToIdentificationAmountMap)){ Map> tousseItemToIdentificationAmountMapForBatch = findTousseItemAndMatchIdentificationAmountMapFromBatch(batchToIdentificationAmountMap, barcodeToSendAmountMap, invoicePlanId, departCoding, applyDate, invoiceGroupByConfig, invoiceOrigin, tousseDeliverOccasion, hideUnprintedDisposableGoodsInvoicePlan); if(MapUtils.isNotEmpty(tousseItemToIdentificationAmountMapForBatch)){ - if(allTousseItemToIdentificationAmountMap == null){ - allTousseItemToIdentificationAmountMap = - new LinkedHashMap>(); - } allTousseItemToIdentificationAmountMap.putAll(tousseItemToIdentificationAmountMapForBatch); } } @@ -907,12 +903,36 @@ barcodeToSendAmountMap, invoicePlanId, departCoding, applyDate, invoiceGroupByConfig, invoiceOrigin, tousseDeliverOccasion, hideUnprintedDisposableGoodsInvoicePlan); if(MapUtils.isNotEmpty(tousseItemToIdentificationAmountMapForDisposableGoods)){ - if(allTousseItemToIdentificationAmountMap == null){ - allTousseItemToIdentificationAmountMap = - new HashMap>(); + //如果两个map有相同的key(申请项TousseItem),则对相同标识的进行数量叠加汇总 + if(MapUtils.isNotEmpty(allTousseItemToIdentificationAmountMap)){ + allTousseItemToIdentificationAmountMap.entrySet().stream().forEach(entry -> { + TousseItem tousseItem = entry.getKey(); + //相同标识号的,对数量进行合并 + final Map disposableGoodsIdentificationToAmountMap = entry.getValue(); + Map disposableGoodsIdentificationToAmountMap1 = tousseItemToIdentificationAmountMapForDisposableGoods.get(tousseItem); + if(MapUtils.isNotEmpty(disposableGoodsIdentificationToAmountMap1)){ + disposableGoodsIdentificationToAmountMap1.entrySet().stream().forEach(entrySub -> { + DisposableGoodsIdentification key = entrySub.getKey(); + Integer amount = entrySub.getValue(); + //对同一个申请项下的同一个标识对象的进行发货数量的叠加 + disposableGoodsIdentificationToAmountMap.put(key,MathTools.add(disposableGoodsIdentificationToAmountMap.get(key), amount).intValue()); + }); + } + entry.setValue(disposableGoodsIdentificationToAmountMap); + }); + //遍历申请项已匹配的标识及发货数量map,如果有申请项不在allTousseItemToIdentificationAmountMap中时,将该申请项的键值对entry设值到allTousseItemToIdentificationAmountMap中 + if(MapUtils.isNotEmpty(tousseItemToIdentificationAmountMapForDisposableGoods)){ + tousseItemToIdentificationAmountMapForDisposableGoods.entrySet().stream().forEach(entry -> { + TousseItem tousseItem = entry.getKey(); + Map disposableGoodsIdentificationToAmountMap = allTousseItemToIdentificationAmountMap.get(tousseItem); + if(disposableGoodsIdentificationToAmountMap == null){ + allTousseItemToIdentificationAmountMap.put(tousseItem, entry.getValue()); + } + }); + } + }else{ + allTousseItemToIdentificationAmountMap.putAll(tousseItemToIdentificationAmountMapForDisposableGoods); } - allTousseItemToIdentificationAmountMap.putAll(tousseItemToIdentificationAmountMapForDisposableGoods); - //对同一个申请项下的同一个标识对象的进行数量的叠加(待完善) } }