Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java =================================================================== diff -u -r27620 -r27625 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 27620) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 27625) @@ -593,6 +593,7 @@ } List invoicePlanIds = new ArrayList(); + Set foreignTousseInvoicePlanIds = new HashSet(); List tousseItemIds = new ArrayList(); // 器械包名称和包实例的Map Map> tousseNameAndTypeToTousseInstancesMap = new HashMap>(); @@ -603,7 +604,11 @@ String invoiceId = entry.getKey(); List tousseItemIdList = entry.getValue(); tousseItemIds.addAll(tousseItemIdList); - invoicePlanIds.add(invoiceId); + if(StringUtils.equals(applicationGoodsVo.getInvoicePlanType(), InvoicePlan.TYPE_FOREIGNTOUSSEAPPLIACTION)) { + foreignTousseInvoicePlanIds.add(invoiceId); + } else { + invoicePlanIds.add(invoiceId); + } } } List tousseItems = objectDao.findByIds(TousseItem.class.getSimpleName(), tousseItemIds); @@ -613,14 +618,29 @@ } List tousseInstances = null; if(CollectionUtils.isNotEmpty(tousseDefinitionIds)){ - String tousseInstanceHql = String.format(" from %s po where %s and %s ", - TousseInstance.class.getSimpleName(), - SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.invoicePlanID", invoicePlanIds), - SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.tousseDefinition.id", tousseDefinitionIds)); - tousseInstances = objectDao.findByHql(tousseInstanceHql); + String tousseInstanceHql = null; + if(CollectionUtils.isNotEmpty(invoicePlanIds)){ + tousseInstanceHql = String.format(" (%s and %s) ", + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.invoicePlanID", invoicePlanIds), + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.tousseDefinition.id", tousseDefinitionIds)); + } + if(CollectionUtils.isNotEmpty(foreignTousseInvoicePlanIds)){ + String foreignTousseHql = String.format(" ( %s and po.wasteDate is null and po.insteadTiBarcode is null )", + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.foreignTousseApp_id", foreignTousseInvoicePlanIds)); + if(StringUtils.isNotEmpty(tousseInstanceHql)) { + tousseInstanceHql = tousseInstanceHql + " or " + foreignTousseHql; + } else { + tousseInstanceHql = foreignTousseHql; + } + } + if(StringUtils.isNotEmpty(tousseInstanceHql)) { + tousseInstanceHql = String.format(" from %s po where %s ", + TousseInstance.class.getSimpleName(), tousseInstanceHql); + tousseInstances = objectDao.findByHql(tousseInstanceHql); + } if(CollectionUtils.isNotEmpty(tousseInstances)){ for (TousseInstance tousseInstance : tousseInstances) { - String key = String.format("%s_%s", tousseInstance.getTousseName(), tousseInstance.getTousseDefinition().getTousseType()); + String key = tousseInstance.getTousseName(); List tempList = tousseNameAndTypeToTousseInstancesMap.get(key); if(CollectionUtils.isEmpty(tempList)){ tempList = new ArrayList(); @@ -650,8 +670,7 @@ } // 器械包灭菌状态判断 - String key = String.format("%s_%s", applicationGoodsVo.getName(), applicationGoodsVo.getGoodsType()); - List tempList = tousseNameAndTypeToTousseInstancesMap.get(key); + List tempList = tousseNameAndTypeToTousseInstancesMap.get(applicationGoodsVo.getName()); if(CollectionUtils.isNotEmpty(tempList)){ for (TousseInstance tousseInstance : tempList) { if(StringUtils.equals(tousseInstance.getStatus(), TousseInstance.STATUS_STERILED)){