Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceOptimizeManagerImpl.java =================================================================== diff -u -r28688 -r28706 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceOptimizeManagerImpl.java (.../InvoiceOptimizeManagerImpl.java) (revision 28688) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceOptimizeManagerImpl.java (.../InvoiceOptimizeManagerImpl.java) (revision 28706) @@ -3810,14 +3810,13 @@ //Map barcodeAlreadyMatchedSendAmountMap = new HashMap(); //遍历申请项 for(TousseItem tousseItem : tousseItemList){ - //该申请项需要发货的数量 - int needSendAmount = MathTools.sub(tousseItem.getAmount(), tousseItem.getSendOutAmount()).intValue(); - if(needSendAmount <= 0){ + //该申请项总共需要发货的数量 + int needSendAmountOfTousseItem = MathTools.sub(tousseItem.getAmount(), tousseItem.getSendOutAmount()).intValue(); + if(needSendAmountOfTousseItem <= 0){ continue; } //一次性物品定义的id Long disposableGoodsId = tousseItem.getDisposableGoodsId(); - DisposableGoods dg = idToDisposableGoodsMap.get(disposableGoodsId); //是否完成本申请项的匹配 boolean tousseItemMatchFinish = false; for(Entry> entry : batchToIdentificationAmountMap.entrySet()){ @@ -3867,14 +3866,14 @@ return MathTools.add(i, j).intValue(); }); //减掉已经匹配了的数量后的需发货的数量(如果小于等于0则表示该申请项已匹配完成,跳出申请项的循环) - needSendAmount = MathTools.sub(needSendAmount, matchAmountForTousseItem).intValue(); - if(needSendAmount <= 0){ + int restNeedSendAmountOfTousseItem = MathTools.sub(needSendAmountOfTousseItem, matchAmountForTousseItem).intValue(); + if(restNeedSendAmountOfTousseItem <= 0){ tousseItemMatchFinish = true; break; } } //本次匹配数量 - int matchAmountThisTime = Math.min(needSendAmount, batchRestMatchAmount); + int matchAmountThisTime = Math.min(needSendAmountOfTousseItem, batchRestMatchAmount); //从该批次的标识对应数量的map取出指定数量(需排除掉已经匹配到申请项的标识对应数量的map)出来,加入到申请项中进行匹配 fetchIdentificationAmountToMap(tousseItem ,identificationAmountMapThisBatch, tousseItemMatchIdentiAmountMap,matchAmountThisTime); @@ -3944,10 +3943,11 @@ return mergeMap; }).orElse(new HashMap()).entrySet().stream().forEach(entry -> { DisposableGoodsIdentification identification = entry.getKey(); + Integer matchedAmount = entry.getValue(); Long batchId = identification.getBatchStock().getDisposableGoodsBatchId(); DisposableGoodsBatch batch = idToDisposableGoodsBatchMap.get(batchId); String batchBarcode = batch.getBarcode(); - alreadyMatchedBatchBarcodeToAmountMap.put(batchBarcode, MathTools.add(entry.getValue(), alreadyMatchedBatchBarcodeToAmountMap.get(batchBarcode)).intValue()); + alreadyMatchedBatchBarcodeToAmountMap.put(batchBarcode, MathTools.add(matchedAmount, alreadyMatchedBatchBarcodeToAmountMap.get(batchBarcode)).intValue()); }); barcodeToDisposableGoodsBatchMap.entrySet().stream().forEach(entry -> { String barcode = entry.getKey();