Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r14563 -r14564 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 14563) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 14564) @@ -4296,52 +4296,59 @@ InvoiceItem invoiceItem = null; Integer sendOutAmount = sendOutGoods.get(applicationGoodsName); // 扫描物品中是否包含此申请物品 - if (sendOutAmount == null || sendOutAmount <= 0) { - return; - } +// if (sendOutAmount == null || sendOutAmount <= 0) { +// return; +// } Iterator> iterator = sendOutBarcodeAmountMap .entrySet().iterator(); while (iterator.hasNext()) { + if(notSendAmount <= 0){ + break; + } Entry next = iterator.next(); String barcode = next.getKey(); Integer batchAmount = next.getValue(); + + BarcodeDevice barcodeDevice = barcodeObjMap.get(barcode); + if (!(barcodeDevice instanceof DisposableGoodsBatch)) { + continue;// 不是批次,跳过 + } if (batchAmount == 0) { continue; } - BarcodeDevice barcodeDevice = barcodeObjMap.get(barcode); - if (barcodeDevice instanceof DisposableGoodsBatch) { - DisposableGoods diposableGoods = ((DisposableGoodsBatch) barcodeDevice) - .getDiposableGoods(); - String name = diposableGoods.getShowName(); - if (name.equals(applicationGoodsName)) { + + DisposableGoods diposableGoods = ((DisposableGoodsBatch) barcodeDevice) + .getDiposableGoods(); + String name = diposableGoods.getShowName(); + if (name.equals(applicationGoodsName)) { - invoiceItem = new InvoiceItem(); - // 完全发货 - if (batchAmount >= notSendAmount) { - applicationItem.setSendOutAmount(amount); - invoiceItem.setAmount(notSendAmount); - // 部分发货 - } else { - applicationItem.setSendOutAmount((applicationItem - .getSendOutAmount() + batchAmount)); - invoiceItem.setAmount(batchAmount); - } - invoiceItem.setDiposable(InvoiceItem.DIPOSABLE_YES); - invoiceItem - .setDisposableGoodsType(DisposableGoods.TYPE_DIPOSABLEGOODS); - invoiceItem.setTousseType(applicationItem - .getTousseType()); - invoiceItem.setTousseName(applicationGoodsName); - invoiceItem.setBarcode(barcode); - invoiceItemSet.add(invoiceItem); - - sendOutAmount -= invoiceItem.getAmount(); - notSendAmount = notSendAmount - batchAmount; - sendOutGoods.put(applicationGoodsName, sendOutAmount); - sendOutBarcodeAmountMap.put(barcode, batchAmount - - invoiceItem.getAmount()); + invoiceItem = new InvoiceItem(); + int canSendAmount = Math.min(notSendAmount, batchAmount); + // 完全发货 + if (canSendAmount >= notSendAmount) { + applicationItem.setSendOutAmount(amount); + invoiceItem.setAmount(notSendAmount); + // 部分发货 + } else { + applicationItem.setSendOutAmount((applicationItem + .getSendOutAmount() + canSendAmount)); + invoiceItem.setAmount(canSendAmount); } + invoiceItem.setDiposable(InvoiceItem.DIPOSABLE_YES); + invoiceItem + .setDisposableGoodsType(DisposableGoods.TYPE_DIPOSABLEGOODS); + invoiceItem.setTousseType(applicationItem + .getTousseType()); + invoiceItem.setTousseName(applicationGoodsName); + invoiceItem.setBarcode(barcode); + invoiceItemSet.add(invoiceItem); + + notSendAmount = notSendAmount - invoiceItem.getAmount(); + sendOutGoods.put(applicationGoodsName, sendOutAmount - invoiceItem.getAmount()); + sendOutBarcodeAmountMap.put(barcode, batchAmount + - invoiceItem.getAmount()); } + } } }