Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceOptimizeManagerImpl.java =================================================================== diff -u -r38214 -r38232 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceOptimizeManagerImpl.java (.../InvoiceOptimizeManagerImpl.java) (revision 38214) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceOptimizeManagerImpl.java (.../InvoiceOptimizeManagerImpl.java) (revision 38232) @@ -8038,15 +8038,19 @@ edgList.add(expensiveDisposablegoods); restWaitOutStockDgIdToExpensiveDisposablegoodsListMap.put(dgId, edgList); }); - LinkedHashMap identiToAmountLinkedHashMap = new LinkedHashMap(16,0.75f,true); + //将所查询出来的可用于自动扣减一次性物品库存的标识数据赋值至LinkedHashMap中 identificationList.stream().forEach(identification -> { Long amount = identification.getAmount(); Long dgId = identification.getBatchStock().getDiposableGoods().getDisposableGoodsID(); + Map identiToAmountLinkedHashMap = restWaitOutStockDgIdToIdentiToAmountMapMap.get(dgId); + if(identiToAmountLinkedHashMap == null){ + identiToAmountLinkedHashMap = new LinkedHashMap(); + } identiToAmountLinkedHashMap.put(identification, amount.intValue()); restWaitOutStockDgIdToIdentiToAmountMapMap.put(dgId, identiToAmountLinkedHashMap); }); - //本次发货用于扣减的高值耗材及标识数据 (后续进行高值耗材实例状态、各库存数据的更新 + //本次发货用于扣减的高值耗材与标识数据的扣减库存数量的累积 (在后续行的代码里有高值耗材实例状态、各库存数据的更新) List edgListForInvoiceOutStock = new ArrayList(); Map identificationToOutStockAmountMapForInvoiceOutStock = new HashMap(); //uuid的集合 @@ -8098,7 +8102,7 @@ edgListForInvoiceOutStock.add(expensiveDisposablegoods); }); }else{ - //非高值耗材 + //非高值耗材,可用于自动扣减库存的一次性物品标识数据map(key为标识对象、value为可被扣减数量) Map identiToAmountMap = restWaitOutStockDgIdToIdentiToAmountMapMap.get(dgId); int alreayOutStockAmount = 0; int restOutStockAmount = outStockAmount; @@ -8131,7 +8135,8 @@ for(Entry identiToAmountEntryOfBatch : identiToAmountMapOfBatch.entrySet()){ DisposableGoodsIdentification identification = identiToAmountEntryOfBatch.getKey(); Integer amountOfIdenti = identiToAmountEntryOfBatch.getValue(); - if(amountOfIdenti >= restOutStockAmount){ + //如果该标识的可被扣减库存数量大于本次需要扣减的数量时,则从该标识取累计扣减库存(该标识扣减库存后其可被扣减库存数量还是会大于0) + if(amountOfIdenti > restOutStockAmount){ alreayOutStockAmount += restOutStockAmount; identiToAmountMap.put(identification, amountOfIdenti - restOutStockAmount); identificationToOutStockAmountMapForInvoiceOutStock.put(identification, @@ -8142,12 +8147,15 @@ batchIdToDisposableGoodsBatchStockMap, dgIdToDisposableGoodsStockMap, null, identificationToOutStockAmountEntryForInvoiceOutStock, InvoiceItem.TYPE_AUTO_DEDUCTION, disposableGoodsStorageAdjustVoTotalList)); identificationOfBatchToOutStockAmountMapForInvoiceOutStock.put(identification, restOutStockAmount); + restWaitOutStockDgIdToIdentiToAmountMapMap.put(dgId, identiToAmountMap); restOutStockAmount = 0; finishLoop = true; break; - }else{ + }else{//否则如果该标识的可被扣减库存数量小于或等于本次需要扣减的数量时,则将该标识的可被扣减库存全面扣减完(该标识扣减库存后其可被扣减库存数量将会等于0) alreayOutStockAmount += amountOfIdenti; identiToAmountMap.put(identification, 0); + //如果该标识数据的可被扣减库存数量全部被扣减完后,则从restWaitOutStockDgIdToIdentiToAmountMapMap中移除该key为标识对象的元素 + restWaitOutStockDgIdToIdentiToAmountMapMap.remove(identification); identificationToOutStockAmountMapForInvoiceOutStock.put(identification, MathTools.add(identificationToOutStockAmountMapForInvoiceOutStock.get(identification), amountOfIdenti).intValue()); Entry identificationToOutStockAmountEntryForInvoiceOutStock =