Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r13875 -r13877 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 13875) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 13877) @@ -1321,6 +1321,7 @@ tousseInstance); idToTousseInstanceMap.put(tousseInstance.getId(), tousseInstance); } + submitInvoiceContext.getScannedTousseInstances().addAll(tousseInstanceList); } } // 获取所有的条码 @@ -3739,6 +3740,7 @@ ProxyDisinfection proxyDisinfection = (ProxyDisinfection) invoicePlan; Map tousseItemMap = new HashMap(); Map invoiceItemMap = new HashMap(); + for (TousseItem tousseItem : invoicePlan.getApplicationItems()) { if(tousseItem.terminated()){// 对终止状态的处理 continue; @@ -3807,6 +3809,8 @@ Map barcodeObjMap = submitInvoiceContext.getBarcodeToBarcodeDeviceMap(); Set invoiceItemSet = new HashSet(); List tousseItemList = invoicePlan.getApplicationItems(); + Set scannedTousseInstances = submitInvoiceContext.getScannedTousseInstances(); + if(CollectionUtils.isEmpty(tousseItemList)){ return invoiceItemSet; } @@ -3837,6 +3841,7 @@ } int actualSendAmount = 1; List tousseInstanceList = new LinkedList(); + if(isTraceable){ if(applicationTousseItemId == null){ continue; @@ -3853,44 +3858,49 @@ continue; } if(!tousseInstance.getTousseFixedBarcode()){ - throw new RuntimeException("不可追溯的外部代理灭菌包只能扫描固定条码!"); - } - int awaitSendAmount = getAwaitSendAmount(tousseItem); - if(awaitSendAmount == 0){ - continue; - } - - // 未发货数量 - Integer scannedAmount = sendOutBarcodeAmountMap.get(tousseInstance.getBarcode()); - if (scannedAmount == null || scannedAmount <= 0) { - continue; - } - - actualSendAmount = Math.min(scannedAmount, awaitSendAmount);// 能发货的数量 - // 非可追溯器械包,返回多个器械包实例 - List affiliatedTousseInstanceList = (List)getCanInvoiceTousseInstancesByFixedTousseInstance(tousseInstance); - if (CollectionUtils.isEmpty(affiliatedTousseInstanceList) || affiliatedTousseInstanceList.size() < actualSendAmount){ - throw new RuntimeException(String.format("物品%s库存不足", tousseInstance.getTousseName())); - } - - for (TousseInstance tousse : affiliatedTousseInstanceList) { - if(!tousse.canInvoice()){ +// throw new RuntimeException("不可追溯的外部代理灭菌包只能扫描固定条码!");// 不追溯的包,也可以扫单个条码去发货 + tousseInstanceList.add(tousseInstance); + }else{ + int awaitSendAmount = getAwaitSendAmount(tousseItem); + if(awaitSendAmount == 0){ continue; } - if(invoiceTousseInstanceSet.contains(tousse)){ + + // 未发货数量 + Integer scannedAmount = sendOutBarcodeAmountMap.get(tousseInstance.getBarcode()); + if (scannedAmount == null || scannedAmount <= 0) { continue; } - tousseInstanceList.add(tousse); - if(tousseInstanceList.size() == actualSendAmount){ - break; + + actualSendAmount = Math.min(scannedAmount, awaitSendAmount);// 能发货的数量 + // 非可追溯器械包,返回多个器械包实例 + List affiliatedTousseInstanceList = (List)getCanInvoiceTousseInstancesByFixedTousseInstance(tousseInstance); + if (CollectionUtils.isEmpty(affiliatedTousseInstanceList) || affiliatedTousseInstanceList.size() < actualSendAmount){ + throw new RuntimeException(String.format("物品%s库存不足", tousseInstance.getTousseName())); } + + for (TousseInstance tousse : affiliatedTousseInstanceList) { + if(!tousse.canInvoice()){ + continue; + } + if(invoiceTousseInstanceSet.contains(tousse)){ + continue; + } + if(scannedTousseInstances.contains(tousse)){ + continue; + } + tousseInstanceList.add(tousse); + if(tousseInstanceList.size() == actualSendAmount){ + break; + } + } + if (tousseInstanceList.size() < actualSendAmount){ + throw new RuntimeException(String.format("物品%s库存不足", tousseInstance.getTousseName())); + } + + scannedAmount -= actualSendAmount; + sendOutBarcodeAmountMap.put(tousseInstance.getBarcode(), scannedAmount); } - if (tousseInstanceList.size() < actualSendAmount){ - throw new RuntimeException(String.format("物品%s库存不足", tousseInstance.getTousseName())); - } - - scannedAmount -= actualSendAmount; - sendOutBarcodeAmountMap.put(tousseInstance.getBarcode(), scannedAmount); } invoiceTousseInstanceSet.addAll(tousseInstanceList); tousseInstancesToUpdate.addAll(tousseInstanceList); Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/invoice/service/SubmitInvoiceContext.java =================================================================== diff -u -r13855 -r13877 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/invoice/service/SubmitInvoiceContext.java (.../SubmitInvoiceContext.java) (revision 13855) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/invoice/service/SubmitInvoiceContext.java (.../SubmitInvoiceContext.java) (revision 13877) @@ -39,6 +39,7 @@ private Set scannedBarcodes = new HashSet(); private Map> updateStockInfo = new HashMap>(); private List invoiceList = new LinkedList(); + private Set scannedTousseInstances = new HashSet(); private Set tousseInstancesToUpdate = new HashSet(); private Map sendOutGoodsNameToAmountMap = new HashMap(); private Map sendOutBarcodeToAmountMap = new HashMap(); @@ -142,6 +143,14 @@ this.invoiceList = invoiceList; } + public Set getScannedTousseInstances() { + return scannedTousseInstances; + } + + public void setScannedTousseInstances(Set scannedTousseInstances) { + this.scannedTousseInstances = scannedTousseInstances; + } + public Set getTousseInstancesToUpdate() { return tousseInstancesToUpdate; }