Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r17210 -r17216 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 17210) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 17216) @@ -1871,6 +1871,7 @@ //发完货后,判断本次发货的器械包所在虚拟篮筐内的器械包是否已全部已发货完成,如已完成则清对应的虚拟篮筐释放,即状态置为空闲,since2015-10-26 refreshReviewedBasketStatus(submitInvoiceItems); + checkIfForeignTousseAppInvoiceComplete(submitInvoiceContext); // 回写物资系统 writebackForZSLY(invoiceList); @@ -1914,6 +1915,23 @@ } } } + + /** + * 发货完成后判断外来器械申请单是否完全发货 + */ + private void checkIfForeignTousseAppInvoiceComplete(SubmitInvoiceContext submitInvoiceContext){ + Set invoicedForeignTousseAppliactionIdSet = submitInvoiceContext.getInvoicedForeignTousseAppliactionIdSet(); + if(invoicedForeignTousseAppliactionIdSet.isEmpty()){ + return; + } + // 查询包实例 + String sql = String.format(" where %s and po.status != '%s'", SqlUtils.getNonStringFieldInCollectionsPredicate("po.foreignTousseApp_id", invoicedForeignTousseAppliactionIdSet), + TousseInstance.STATUS_SHIPPED); + List list = objectDao.findBySql(TousseInstance.class.getSimpleName(), sql); + if(list != null && list.size() > 0){ + throw new RuntimeException("拆分的外来器械包不能部分发货,必须一起发货!"); + } + } /** * @param submitInvoiceContext @@ -2069,6 +2087,7 @@ //发完货后,判断本次发货的器械包所在虚拟篮筐内的器械包是否已全部已发货完成,如已完成则清对应的虚拟篮筐释放,即状态置为空闲,since2015-10-26 refreshReviewedBasketStatus(submitInvoiceItems); + checkIfForeignTousseAppInvoiceComplete(submitInvoiceContext); // 回写物资系统 writebackForZSLY(invoiceList); @@ -2191,7 +2210,7 @@ // 更新器械包库存 // updateGoodsStock(updateStockInfo); // 更新其他单的状态 - updateOtherInvoicePlanStatus(submitInvoiceContext); +// updateOtherInvoicePlanStatus(submitInvoiceContext); // 更新仓库的库存 updateTousseInstanceStockInwareHouse(updateStockInfo, submitInvoiceContext); // 更新与校验聚合包状态 @@ -2206,6 +2225,7 @@ throw new RuntimeException("未能发货!"); refreshReviewedBasketStatus(submitInvoiceItems); + checkIfForeignTousseAppInvoiceComplete(submitInvoiceContext); writebackForZSLY(invoiceList); writebackForGDSY(invoiceList); @@ -5358,23 +5378,34 @@ if(submitInvoiceContext.isSendOnlyUrgentGoods() && (item.safelyGetUrgentAmount() == 0)){ return invoiceItemSet;// 如果是发送紧急物品模式,当前申请项的紧急数量为0,那么跳过 } + Long invoicePlanId = invoicePlan.getId(); // 外来器械包拆包处理 Map invoiceItemMap = new HashMap(); - List tousseInstanceList = tousseInstanceManager - .getToussInstanceByForeignTousseApplicationID(invoicePlan - .getId()); - for (TousseInstance tousseInstance : tousseInstanceList) { - Integer amount = sendOutBarcodeAmountMap.get(tousseInstance - .getBarcode()); + for (Map.Entry entry : sendOutBarcodeAmountMap.entrySet()) { + String barcode = entry.getKey(); + BarcodeDevice barcodeDevice = barcodeObjMap.get(barcode); + if(barcodeDevice == null){ + continue; + } + if(!(barcodeDevice instanceof TousseInstance)){ + continue; + } + TousseInstance tousseInstance = (TousseInstance)barcodeDevice; + Integer amount = entry.getValue(); if(amount == null || amount == 0){ continue; } + Long foreignTousseApp_id = tousseInstance.getForeignTousseApp_id(); + if(foreignTousseApp_id == null || !foreignTousseApp_id.equals(invoicePlanId)){ + continue; + } if (!tousseInstance.isSteriled()) { errorMessage = String.format("%s(%s)不是已灭菌状态!", tousseInstance.getTousseName(), tousseInstance.getBarcode()); throw new RuntimeException(errorMessage); } + // 器械包实例改为已发货状态 tousseInstance.setStatus(TousseInstance.STATUS_SHIPPED); InvoiceItem invoiceItem = invoiceItemMap.get(tousseInstance.getTousseName()); @@ -5393,7 +5424,11 @@ invoiceItem.setAmount(invoiceItem.getAmount() + 1); } invoiceItem.getTousseInstances().add(tousseInstance); + + amount = amount - 1; + sendOutBarcodeAmountMap.put(barcode, amount); } + // 目前外来器械只能申请一个物品 // if (invoiceItemMap.size() > 0) { // TousseItem item = invoicePlan.getApplicationItems().get(0); @@ -5405,15 +5440,17 @@ item.setUrgentAmount(0);// 修改紧急数量 item.setUrgent(Constants.STR_NO);// 修改紧急状态 } - for (TousseInstance tousseInstance : tousseInstanceList) { - // 必须所有器械包实例状态都变为已发货状态,才能将已发货数量改为1 - if (!tousseInstance.isShippedStatus()) { - errorMessage = String.format("%s 拆分的包不能部分发货,必须一起发货!", - tousseInstance.getTousseName(), - tousseInstance.getBarcode()); - throw new RuntimeException(errorMessage); - } - } +// for (TousseInstance tousseInstance : tousseInstanceList) { +// // 必须所有器械包实例状态都变为已发货状态,才能将已发货数量改为1 +// if (!tousseInstance.isShippedStatus()) { +// errorMessage = String.format("%s 拆分的包不能部分发货,必须一起发货!", +// tousseInstance.getTousseName(), +// tousseInstance.getBarcode()); +// throw new RuntimeException(errorMessage); +// } +// } + // 最后一起验证 + submitInvoiceContext.getInvoicedForeignTousseAppliactionIdSet().add(invoicePlanId); } Iterator itr = invoiceItemMap.keySet().iterator(); while (itr.hasNext()) { Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/invoice/service/SubmitInvoiceContext.java =================================================================== diff -u -r17210 -r17216 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/invoice/service/SubmitInvoiceContext.java (.../SubmitInvoiceContext.java) (revision 17210) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/invoice/service/SubmitInvoiceContext.java (.../SubmitInvoiceContext.java) (revision 17216) @@ -53,6 +53,8 @@ private List submitInvoiceItems = new LinkedList(); private Map> updateStockInfo = new HashMap>(); private List invoiceList = new LinkedList(); + private Set invoicedForeignTousseAppliactionIdSet = new HashSet(); + private Set tousseDefinitionIdSet = new HashSet(); private Map tousseDefinitionIdToTousseDefinitionMap = new HashMap(); private Set scannedTousseInstances = new HashSet(); @@ -235,6 +237,15 @@ this.invoiceList = invoiceList; } + public Set getInvoicedForeignTousseAppliactionIdSet() { + return invoicedForeignTousseAppliactionIdSet; + } + + public void setInvoicedForeignTousseAppliactionIdSet( + Set invoicedForeignTousseAppliactionIdSet) { + this.invoicedForeignTousseAppliactionIdSet = invoicedForeignTousseAppliactionIdSet; + } + public Set getTousseDefinitionIdSet() { return tousseDefinitionIdSet; }