Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceOptimizeManagerImpl.java =================================================================== diff -u -r31667 -r32073 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceOptimizeManagerImpl.java (.../InvoiceOptimizeManagerImpl.java) (revision 31667) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceOptimizeManagerImpl.java (.../InvoiceOptimizeManagerImpl.java) (revision 32073) @@ -3550,9 +3550,12 @@ Integer needSendAmount = entry.getValue(); String newCondition = String.format("%s and po.urgentLevel is not null and po.tousseDefinition.materialsMD5='%s'", queryTousseInstanceCondition,materialMd5); + //先去掉按失效期的排序,很耗时间(中大五院有近600万包实例数据)。不排序其实效果也是相同,但排序语句很耗性能 @SuppressWarnings("unchecked") + /*List tempList = objectDao.findDataBySql_ForUpdate(TousseInstance.class.getSimpleName(), + String.format("%s %s", newCondition,tousseInstanceOrderByUrgentLevelAndValidUntil),0,needSendAmount);*/ List tempList = objectDao.findDataBySql_ForUpdate(TousseInstance.class.getSimpleName(), - String.format("%s %s", newCondition,tousseInstanceOrderByUrgentLevelAndValidUntil),0,needSendAmount); + String.format("%s %s", newCondition,"order by (case when urgentLevel is null then 0 else urgentLevel.grade end) desc"),0,needSendAmount); if(CollectionUtils.isNotEmpty(tempList)){ canInvoiceTiListIncludeUrgent.addAll(tempList); entry.setValue(MathTools.sub(needSendAmount, CollectionUtils.size(tempList)).intValue()); @@ -3569,8 +3572,11 @@ String newCondition = String.format("%s and po.urgentLevel is null and po.tousseDefinition.materialsMD5='%s'", queryTousseInstanceCondition,materialMd5); @SuppressWarnings("unchecked") + //先去掉按失效期的排序,很耗时间(中大五院有近600万包实例数据)。不排序其实效果也是相同,但排序语句很耗性能 + /*List tempList = objectDao.findDataBySql_ForUpdate(TousseInstance.class.getSimpleName(), + String.format("%s %s", newCondition,tousseInstanceOrderByOnlyValidUntil),0,needSendAmount);*/ List tempList = objectDao.findDataBySql_ForUpdate(TousseInstance.class.getSimpleName(), - String.format("%s %s", newCondition,tousseInstanceOrderByOnlyValidUntil),0,needSendAmount); + String.format("%s %s", newCondition,""),0,needSendAmount); if(CollectionUtils.isNotEmpty(tempList)){ canInvoiceTiListNoUrgent.addAll(tempList); }