Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r27603 -r27626 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 27603) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 27626) @@ -5571,7 +5571,35 @@ return tousseInstanceList; } - + /** + * 根据固定条码获取该外部代理灭菌单的外部代理灭菌包实例 + * 过滤条件:包实例的申请单id字段 + * @param invoicePlan + * @param fixedBarcodeTousseInstance + * @param needAmount 期望数量 + * @return + */ + @SuppressWarnings("unchecked") + private Collection getForeignProxyDisinfectionTousseInstancesByFixedTousseInstance( + InvoicePlan invoicePlan,TousseInstance fixedBarcodeTousseInstance,int needAmount){ + Collection sqlWheres = new ArrayList(); + // 判断状态 + /*sqlWheres.add(SqlBuilder.build_IN_Statement("po.status", + SqlBuilder.IN, TousseInstance.STATUS_STERILED, + TousseInstance.STATUS_NO_DELIVER));*/ + sqlWheres.add("po.tousseFixedBarcode = 0 "); + sqlWheres.add(String.format(" %s ", SqlUtils.getLongFieldPredicate("po.invoicePlanID", invoicePlan.getId()))); + /*sqlWheres.add(String.format(" %s ",getValidUntilPredicate(dateQueryAdapter, "po.validUntil")));*/ + // 非可追溯器械包,返回多个器械包实例 + Collection tousseInstanceList = tousseInstanceManager + .getUnTraceableTousseInstanceListByFictitiousTousseDefinition( + fixedBarcodeTousseInstance.getTousseDefinition(), + sqlWheres, + null, + needAmount); + return tousseInstanceList; + } + // 过滤器械包 private void filterTousseInstanceByInvoiceType(String invoiceType, Collection tousseInstanceList) { @@ -7263,11 +7291,18 @@ } actualSendAmount = Math.min(scannedAmount, awaitSendAmount);// 能发货的数量 + //查找出该外部代理灭菌单的包实例 + List tousseInstanceListOfForeignProxyDisinfection = (List)getForeignProxyDisinfectionTousseInstancesByFixedTousseInstance( + invoicePlan,tousseInstance,actualSendAmount); // 非可追溯器械包,返回多个器械包实例 List affiliatedTousseInstanceList = (List)getCanInvoiceForeignProxyDisinfectionTousseInstancesByFixedTousseInstance( invoicePlan,tousseInstance,actualSendAmount); if (CollectionUtils.isEmpty(affiliatedTousseInstanceList) || affiliatedTousseInstanceList.size() < actualSendAmount){ - throw new RuntimeException(String.format("物品%s库存不足", tousseInstance.getTousseName())); + //该外部代理灭菌单的外部代理灭菌包就算为空(比如还未装配出来),也不能说明库存不足,所以暂不抛异常,跳过此单 + if(CollectionUtils.size(tousseInstanceListOfForeignProxyDisinfection) < actualSendAmount){ + //throw new RuntimeException(String.format("物品%s库存不足", tousseInstance.getTousseName())); + } + return new HashSet(); } for (TousseInstance tousse : affiliatedTousseInstanceList) {