Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r15463 -r15466 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 15463) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 15466) @@ -1261,7 +1261,7 @@ }else{ // 普通的包 - Collection tousseInstanceCollection = getCanInvoiceTousseInstancesByFixedTousseInstance(tousseInstance,amount); + Collection tousseInstanceCollection = getCanInvoiceTousseInstancesByFixedTousseInstance(tousseInstance,scannedTousseInstances,amount); if(tousseInstanceCollection != null){ tousseInstanceList = new LinkedList(tousseInstanceCollection); } @@ -2339,6 +2339,7 @@ Map barcodeToDisposableGoodsBatchStockMap = submitInvoiceContext .getDisposableGoodsServiceContext() .getBarcodeToDisposableGoodsBatchStockMap(); + Map> fixedBarcodeTousseIdToAffiliatedTousseInstanceMap = submitInvoiceContext.getFixedBarcodeTousseIdToAffiliatedTousseInstanceMap(); Invoice invoice = new Invoice(); List diposableGoodsItems = new ArrayList(); // 获得浮动价格系数 @@ -2692,8 +2693,7 @@ .getTousseInstances(); } else { // 普通的器械包 - tousseInstanceList = getCanInvoiceTousseInstancesByFixedTousseInstance( - tousseInstance, amountAwaitingSent); + tousseInstanceList = getCanInvoiceTousseInstances(tousseInstance, submitInvoiceContext, amountAwaitingSent); } if (tousseInstanceList != null) { tousseInstancesSet @@ -3520,10 +3520,11 @@ sqlWheres.add("po.tousseFixedBarcode = 0 "); return sqlWheres; } - private Collection getCanInvoiceTousseInstancesByFixedTousseInstance(TousseInstance fixedBarcodeTousseInstance,int needAmount){ + private Collection getCanInvoiceTousseInstancesByFixedTousseInstance(TousseInstance fixedBarcodeTousseInstance,Set scannedTousseInstances,int needAmount){ Collection sqlWheres = buildCanInvoiceTousseInstanceSqlWhere(); sqlWheres.add(String.format(" %s ",getValidUntilPredicate(dateQueryAdapter, "po.validUntil"))); sqlWheres.add(String.format(" %s ",getWorningPredicate(dateQueryAdapter, "po.warningUntil"))); + sqlWheres.add(String.format(" %s ",SqlUtils.getNonStringFieldNotInCollectionsPredicate("po.id", TousseInstanceUtils.getTousseInstanceIds(scannedTousseInstances)))); // 非可追溯器械包,返回多个器械包实例 Collection tousseInstanceList = tousseInstanceManager .getUnTraceableTousseInstanceListByFictitiousTousseDefinition( @@ -3533,6 +3534,23 @@ return tousseInstanceList; } + private List getCanInvoiceTousseInstances(TousseInstance fixedBarcodeTousseInstance,SubmitInvoiceContext submitInvoiceContext,int needAmount){ + List list = new LinkedList(); + Map> fixedBarcodeTousseIdToAffiliatedTousseInstanceMap = submitInvoiceContext.getFixedBarcodeTousseIdToAffiliatedTousseInstanceMap(); + List allList = fixedBarcodeTousseIdToAffiliatedTousseInstanceMap.get(fixedBarcodeTousseInstance.getId()); + if(allList != null){ + for (TousseInstance tousseInstance : allList) { + list.add(tousseInstance); + if(list.size() >= needAmount){ + break; + } + } + allList.removeAll(list); + } + + return list; + } + private String getValidUntilPredicate(DateQueryAdapter dateQueryAdapter,String field) { Date validUntil = new Date(); String validUntilSql = " " @@ -4497,7 +4515,7 @@ private List getDisinfectionTousseInstanceAndTousseDefinition( List invoicePlans,Set scannedTousseInstances, TousseDefinition tousseDefinition) { String whereSql = getDisinfectionTousseInstanceSql(invoicePlans, tousseDefinition); - whereSql = String.format("%s and %s", SqlUtils.getNonStringFieldNotInCollectionsPredicate("po.id", TousseInstanceUtils.getTousseInstanceIds(scannedTousseInstances))); + whereSql = String.format("%s and %s", whereSql,SqlUtils.getNonStringFieldNotInCollectionsPredicate("po.id", TousseInstanceUtils.getTousseInstanceIds(scannedTousseInstances))); String hql = String.format(" from %s po inner join fetch po.tousseDefinition %s",TousseInstance.class.getSimpleName(), whereSql); hql += " order by po.validUntil asc "; List result = objectDao.findByHql(hql); @@ -5468,6 +5486,7 @@ ++addedAmount; } } + disinfectionTousseInstances.removeAll(tousseInstances); return tousseInstances; } /**