|
@@ -60,6 +60,7 @@ import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
import java.net.URLEncoder;
|
|
|
import java.util.*;
|
|
|
+import java.util.concurrent.CompletableFuture;
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
import java.util.function.IntPredicate;
|
|
|
import java.util.stream.Collectors;
|
|
@@ -3320,7 +3321,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
|
|
|
IPage<Map<String, Object>> result = new Page<>();
|
|
|
|
|
|
- queryCard2(result, query);
|
|
|
+ queryCard3(result, query);
|
|
|
|
|
|
return R.ok(result);
|
|
|
} catch (Exception e) {
|
|
@@ -3329,6 +3330,30 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ //并行查询,使用两次查询
|
|
|
+ private void queryCard3(IPage<Map<String, Object>> result, CriteriaQuery query) {
|
|
|
+ Page<Map<String, Object>> pageInfo = new Page<>(query.getCurrent(), query.getSize());
|
|
|
+ int offset = (query.getCurrent() - 1) * query.getSize();
|
|
|
+ String querySql1 = query.getQuerySql();
|
|
|
+ // 并行查询
|
|
|
+ CompletableFuture<List<Map<String, Object>>> pageFuture = CompletableFuture.supplyAsync(
|
|
|
+ () -> this.baseMapper.getCardListPage(offset, query.getSize(), querySql1));
|
|
|
+
|
|
|
+ String querySql2 = query.getQuerySql().replaceFirst("\\*", "count(1)");
|
|
|
+ CompletableFuture<Long> countFuture = CompletableFuture.supplyAsync(
|
|
|
+ () -> this.baseMapper.getCardListCount(querySql2));
|
|
|
+
|
|
|
+ try {
|
|
|
+ result.setCurrent(query.getCurrent());
|
|
|
+ result.setSize(query.getSize());
|
|
|
+ result.setRecords(pageFuture.get());
|
|
|
+ result.setTotal(countFuture.get());
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new RuntimeException("查询失败", e);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
private void queryCard2(IPage<Map<String, Object>> result, CriteriaQuery query) {
|
|
|
//窗口函数 优化查询效率
|
|
|
query.setQuerySql(query.getQuerySql().replaceFirst("\\*", "*, COUNT(*) OVER() AS total_count"));
|
|
@@ -3344,7 +3369,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
result.setRecords(list);
|
|
|
}
|
|
|
|
|
|
- @Transactional//需要保持事务,还要注意防止数据库连接池不是同一个(仅限mysql使用,大数据量效率不高)
|
|
|
+ @Transactional//需要保持事务,还要注意防止数据库连接池不是同一个连接(仅限mysql使用,大数据量效率不高)
|
|
|
public void queryCard(IPage<Map<String, Object>> result, CriteriaQuery query) {
|
|
|
//mysql专属优化,全表扫描,但只扫描一次
|
|
|
query.setQuerySql(query.getQuerySql().replaceFirst("\\*", "SQL_CALC_FOUND_ROWS *"));
|