|
@@ -3317,10 +3317,10 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
query.setQuerySql(sysGeneralCRUDService.replaceSql(query));
|
|
|
}
|
|
|
CriteriaBuilder.initQuerySql(query);
|
|
|
- query.setQuerySql(query.getQuerySql().replaceFirst("\\*", "SQL_CALC_FOUND_ROWS *"));
|
|
|
+
|
|
|
IPage<Map<String, Object>> result = new Page<>();
|
|
|
- //开始事务
|
|
|
- apsProcessOperationProcessEquService.queryCard(result, query);
|
|
|
+
|
|
|
+ queryCard2(result, query);
|
|
|
|
|
|
return R.ok(result);
|
|
|
} catch (Exception e) {
|
|
@@ -3329,9 +3329,27 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- @Transactional
|
|
|
+ private void queryCard2(IPage<Map<String, Object>> result, CriteriaQuery query) {
|
|
|
+ //窗口函数 优化查询效率
|
|
|
+ query.setQuerySql(query.getQuerySql().replaceFirst("\\*", "*, COUNT(*) OVER() AS total_count"));
|
|
|
+ int offset = (query.getCurrent() - 1) * query.getSize();
|
|
|
+ List<Map<String, Object>> list = this.baseMapper.getCardListPage(offset, query.getSize(), query.getQuerySql());
|
|
|
+ if (list.isEmpty()) {
|
|
|
+ result.setTotal(0);
|
|
|
+ } else {
|
|
|
+ result.setTotal((Long) list.get(0).get("total_count"));
|
|
|
+ }
|
|
|
+ result.setCurrent(query.getCurrent());
|
|
|
+ result.setSize(query.getSize());
|
|
|
+ result.setRecords(list);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional//需要保持事务,还要注意防止数据库连接池不是同一个(仅限mysql使用,大数据量效率不高)
|
|
|
public void queryCard(IPage<Map<String, Object>> result, CriteriaQuery query) {
|
|
|
- int offset = (query.getCurrent()-1) * query.getSize();
|
|
|
+ //mysql专属优化,全表扫描,但只扫描一次
|
|
|
+ query.setQuerySql(query.getQuerySql().replaceFirst("\\*", "SQL_CALC_FOUND_ROWS *"));
|
|
|
+
|
|
|
+ int offset = (query.getCurrent() - 1) * query.getSize();
|
|
|
List<Map<String, Object>> list = this.baseMapper.getCardListPage(offset, query.getSize(), query.getQuerySql());
|
|
|
Integer total = this.baseMapper.getTotal();
|
|
|
|