Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceOptimizeManagerImpl.java =================================================================== diff -u -r33902 -r33991 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceOptimizeManagerImpl.java (.../InvoiceOptimizeManagerImpl.java) (revision 33902) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceOptimizeManagerImpl.java (.../InvoiceOptimizeManagerImpl.java) (revision 33991) @@ -7830,59 +7830,63 @@ //批次定义对应的"标识对应可扣减数量map"的map Map> batchToIdentiToAmountMapMap = new LinkedHashMap>(); - for(Entry identiToAmountEntry : identiToAmountMap.entrySet()){ - DisposableGoodsIdentification identification = identiToAmountEntry.getKey(); - DisposableGoodsBatch batch = idToDisposableGoodsBatchMap.get(identification.getBatchStock().getDisposableGoodsBatchId()); - Map identiToAmountMapOfBatch = batchToIdentiToAmountMapMap.get(batch); - if(identiToAmountMapOfBatch == null){ - identiToAmountMapOfBatch = new LinkedHashMap(); + if(MapUtils.isNotEmpty(identiToAmountMap)){ + for(Entry identiToAmountEntry : identiToAmountMap.entrySet()){ + DisposableGoodsIdentification identification = identiToAmountEntry.getKey(); + DisposableGoodsBatch batch = idToDisposableGoodsBatchMap.get(identification.getBatchStock().getDisposableGoodsBatchId()); + Map identiToAmountMapOfBatch = batchToIdentiToAmountMapMap.get(batch); + if(identiToAmountMapOfBatch == null){ + identiToAmountMapOfBatch = new LinkedHashMap(); + } + identiToAmountMapOfBatch.put(identification,identiToAmountEntry.getValue()); + batchToIdentiToAmountMapMap.put(batch, identiToAmountMapOfBatch); } - identiToAmountMapOfBatch.put(identification,identiToAmountEntry.getValue()); - batchToIdentiToAmountMapMap.put(batch, identiToAmountMapOfBatch); } - for(Entry> batchToIdentiToAmountMapEntry : batchToIdentiToAmountMapMap.entrySet()){ - DisposableGoodsBatch batch = batchToIdentiToAmountMapEntry.getKey(); - Map identiToAmountMapOfBatch = batchToIdentiToAmountMapEntry.getValue(); - //该批次下的标识要对应自动扣减数量的map - Map identificationOfBatchToOutStockAmountMapForInvoiceOutStock = - new HashMap(); - boolean finishLoop = false; - for(Entry identiToAmountEntryOfBatch : identiToAmountMapOfBatch.entrySet()){ - DisposableGoodsIdentification identification = identiToAmountEntryOfBatch.getKey(); - Integer amountOfIdenti = identiToAmountEntryOfBatch.getValue(); - if(amountOfIdenti >= restOutStockAmount){ - alreayOutStockAmount += restOutStockAmount; - identiToAmountMap.put(identification, amountOfIdenti - restOutStockAmount); - identificationToOutStockAmountMapForInvoiceOutStock.put(identification, restOutStockAmount); - Entry identificationToOutStockAmountEntryForInvoiceOutStock = - new AbstractMap.SimpleEntry(identification, restOutStockAmount); - diposableGoodsItemMapList.add(buildDiposableGoodsItemMapForNotExpensiveDisposableGoods(invoice, null, invoiceItemUUID, identification, batch, - batchIdToDisposableGoodsBatchStockMap, dgIdToDisposableGoodsStockMap, null, identificationToOutStockAmountEntryForInvoiceOutStock, - InvoiceItem.TYPE_AUTO_DEDUCTION, disposableGoodsStorageAdjustVoTotalList)); - identificationOfBatchToOutStockAmountMapForInvoiceOutStock.put(identification, restOutStockAmount); - restOutStockAmount = 0; - finishLoop = true; + if(MapUtils.isNotEmpty(batchToIdentiToAmountMapMap)){ + for(Entry> batchToIdentiToAmountMapEntry : batchToIdentiToAmountMapMap.entrySet()){ + DisposableGoodsBatch batch = batchToIdentiToAmountMapEntry.getKey(); + Map identiToAmountMapOfBatch = batchToIdentiToAmountMapEntry.getValue(); + //该批次下的标识要对应自动扣减数量的map + Map identificationOfBatchToOutStockAmountMapForInvoiceOutStock = + new HashMap(); + boolean finishLoop = false; + for(Entry identiToAmountEntryOfBatch : identiToAmountMapOfBatch.entrySet()){ + DisposableGoodsIdentification identification = identiToAmountEntryOfBatch.getKey(); + Integer amountOfIdenti = identiToAmountEntryOfBatch.getValue(); + if(amountOfIdenti >= restOutStockAmount){ + alreayOutStockAmount += restOutStockAmount; + identiToAmountMap.put(identification, amountOfIdenti - restOutStockAmount); + identificationToOutStockAmountMapForInvoiceOutStock.put(identification, restOutStockAmount); + Entry identificationToOutStockAmountEntryForInvoiceOutStock = + new AbstractMap.SimpleEntry(identification, restOutStockAmount); + diposableGoodsItemMapList.add(buildDiposableGoodsItemMapForNotExpensiveDisposableGoods(invoice, null, invoiceItemUUID, identification, batch, + batchIdToDisposableGoodsBatchStockMap, dgIdToDisposableGoodsStockMap, null, identificationToOutStockAmountEntryForInvoiceOutStock, + InvoiceItem.TYPE_AUTO_DEDUCTION, disposableGoodsStorageAdjustVoTotalList)); + identificationOfBatchToOutStockAmountMapForInvoiceOutStock.put(identification, restOutStockAmount); + restOutStockAmount = 0; + finishLoop = true; + break; + }else{ + alreayOutStockAmount += amountOfIdenti; + identiToAmountMap.put(identification, 0); + identificationToOutStockAmountMapForInvoiceOutStock.put(identification, amountOfIdenti); + Entry identificationToOutStockAmountEntryForInvoiceOutStock = + new AbstractMap.SimpleEntry(identification, amountOfIdenti); + diposableGoodsItemMapList.add(buildDiposableGoodsItemMapForNotExpensiveDisposableGoods(invoice, null, invoiceItemUUID, identification, batch, + batchIdToDisposableGoodsBatchStockMap, dgIdToDisposableGoodsStockMap, null, identificationToOutStockAmountEntryForInvoiceOutStock, + InvoiceItem.TYPE_AUTO_DEDUCTION, disposableGoodsStorageAdjustVoTotalList)); + identificationOfBatchToOutStockAmountMapForInvoiceOutStock.put(identification, amountOfIdenti); + restOutStockAmount = restOutStockAmount - amountOfIdenti; + } + } + //添加发货项的map + invoiceItemMapList.add(buildInvoiceItemMapForNotExpensiveDisposableGoods(invoice, null, batch, identificationOfBatchToOutStockAmountMapForInvoiceOutStock, + params, InvoiceItem.TYPE_AUTO_DEDUCTION, invoiceItemUUID)); + invoiceItemUUIDList.add(invoiceItemUUID); + if(finishLoop){ break; - }else{ - alreayOutStockAmount += amountOfIdenti; - identiToAmountMap.put(identification, 0); - identificationToOutStockAmountMapForInvoiceOutStock.put(identification, amountOfIdenti); - Entry identificationToOutStockAmountEntryForInvoiceOutStock = - new AbstractMap.SimpleEntry(identification, amountOfIdenti); - diposableGoodsItemMapList.add(buildDiposableGoodsItemMapForNotExpensiveDisposableGoods(invoice, null, invoiceItemUUID, identification, batch, - batchIdToDisposableGoodsBatchStockMap, dgIdToDisposableGoodsStockMap, null, identificationToOutStockAmountEntryForInvoiceOutStock, - InvoiceItem.TYPE_AUTO_DEDUCTION, disposableGoodsStorageAdjustVoTotalList)); - identificationOfBatchToOutStockAmountMapForInvoiceOutStock.put(identification, amountOfIdenti); - restOutStockAmount = restOutStockAmount - amountOfIdenti; } } - //添加发货项的map - invoiceItemMapList.add(buildInvoiceItemMapForNotExpensiveDisposableGoods(invoice, null, batch, identificationOfBatchToOutStockAmountMapForInvoiceOutStock, - params, InvoiceItem.TYPE_AUTO_DEDUCTION, invoiceItemUUID)); - invoiceItemUUIDList.add(invoiceItemUUID); - if(finishLoop){ - break; - } } if(alreayOutStockAmount < outStockAmount){ throw new SystemException(String.format("【%s】库存不足,需扣减数量%s,可扣减数量%s",