Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r19824 -r19843 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 19824) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 19843) @@ -5681,73 +5681,68 @@ if(applicationItems == null || applicationItems.size()==0){ return invoiceItemSet; } - TousseItem item = applicationItems.get(0); - if(item.terminated()){// 对终止状态的处理 - return invoiceItemSet; - } - if(!TousseItemUtils.IsInvoice(item)){ - return invoiceItemSet; - } - if(submitInvoiceContext.isSendOnlyUrgentGoods() && (item.safelyGetUrgentAmount() == 0)){ - return invoiceItemSet;// 如果是发送紧急物品模式,当前申请项的紧急数量为0,那么跳过 - } Long invoicePlanId = invoicePlan.getId(); - // 外来器械包拆包处理 - Map invoiceItemMap = new HashMap(); - for (Map.Entry entry : sendOutBarcodeAmountMap.entrySet()) { - String barcode = entry.getKey(); - BarcodeDevice barcodeDevice = barcodeObjMap.get(barcode); - if(barcodeDevice == null){ + for (TousseItem item : applicationItems) { + if(item.terminated()){// 对终止状态的处理 continue; } - if(!(barcodeDevice instanceof TousseInstance)){ + if(!TousseItemUtils.IsInvoice(item)){ continue; } - TousseInstance tousseInstance = (TousseInstance)barcodeDevice; - Integer amount = entry.getValue(); - if(amount == null || amount == 0){ - continue; + if(submitInvoiceContext.isSendOnlyUrgentGoods() && (item.safelyGetUrgentAmount() == 0)){ + continue;// 如果是发送紧急物品模式,当前申请项的紧急数量为0,那么跳过 } - 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()); - if (invoiceItem == null) { - invoiceItem = new InvoiceItem(); + // 外来器械包拆包处理,因为外来器械每个器械包实例的包定义都不同,InvoiceItem记了包定义id,所以InvoiceItem不需要也不应该合并 + 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 = new InvoiceItem(); invoiceItem.setAmount(1); invoiceItem.setDiposable("否"); invoiceItem.setTousseType(tousseInstance .getTousseDefinition().getTousseType()); invoiceItem.setTousseName(tousseInstance .getTousseName()); invoiceItem.setTousseDefinitionId(TousseInstanceUtils.safelyGetTousseDefinitionId(tousseInstance)); - invoiceItemMap.put(tousseInstance.getTousseName(), - invoiceItem); - } else { - invoiceItem.setAmount(invoiceItem.getAmount() + 1); + + invoiceItem.getTousseInstances().add(tousseInstance); + invoiceItemSet.add(invoiceItem); + amount = amount - 1; + sendOutBarcodeAmountMap.put(barcode, amount); } - invoiceItem.getTousseInstances().add(tousseInstance); - - amount = amount - 1; - sendOutBarcodeAmountMap.put(barcode, amount); } // 目前外来器械只能申请一个物品 // if (invoiceItemMap.size() > 0) { // TousseItem item = invoicePlan.getApplicationItems().get(0); // item.setSendOutAmount(1); // } - if (invoiceItemMap.size() > 0) { + if (invoiceItemSet.size() > 0) { if(submitInvoiceContext.isAllowPartlyInvoiceForeignTousse()){ List tousseInstanceList = tousseInstanceManager .getToussInstanceByForeignTousseApplicationIdForInvoice(invoicePlan @@ -5765,34 +5760,46 @@ break; } } - if(allSent){ - item.setSendOutAmount(1); - if(submitInvoiceContext.isSendOnlyUrgentGoods()){ - item.setUrgentAmount(0);// 修改紧急数量 - item.setUrgent(Constants.STR_NO);// 修改紧急状态 + for (TousseItem item : applicationItems) { + boolean itemAllSent = true; + for (TousseInstance tousseInstance : tousseInstanceList) { + Long itemTousseDefinitionId = item.getTousseDefinitionId(); + Long tdId = tousseInstance.getTousseDefinition().getId(); + Long parentId = tousseInstance.getTousseDefinition().getParentID(); + if(itemTousseDefinitionId.equals(tdId) || tdId.equals(parentId)){ + if (!tousseInstance.isShipped()) { + itemAllSent = false; + } + } } - }else{ + if(itemAllSent){ + item.setSendOutAmount(1); + if(submitInvoiceContext.isSendOnlyUrgentGoods()){ + item.setUrgentAmount(0);// 修改紧急数量 + item.setUrgent(Constants.STR_NO);// 修改紧急状态 + } + } + } + if(!allSent){ // sendOutAmount为0,但是状态为部分发货 invoicePlan.setDeliverStatus(InvoicePlan.DELIVERSTATUS_PARTDELIVERED); invoicePlan.setOrderByFiled(InvoicePlan.DELIVER_PARTDELIVERED); } + }else{ - item.setSendOutAmount(1); - if(submitInvoiceContext.isSendOnlyUrgentGoods()){ - item.setUrgentAmount(0);// 修改紧急数量 - item.setUrgent(Constants.STR_NO);// 修改紧急状态 + for (TousseItem item : applicationItems) { + item.setSendOutAmount(1); + if(submitInvoiceContext.isSendOnlyUrgentGoods()){ + item.setUrgentAmount(0);// 修改紧急数量 + item.setUrgent(Constants.STR_NO);// 修改紧急状态 + } } // 最后一起验证 submitInvoiceContext.getInvoicedForeignTousseAppliactionIdSet().add(invoicePlanId); } } - Iterator itr = invoiceItemMap.keySet().iterator(); - while (itr.hasNext()) { - String goodsName = itr.next(); - invoiceItemSet.add(invoiceItemMap.get(goodsName)); - } return invoiceItemSet; }