qin преди 1 година
родител
ревизия
d174aef54f

+ 4 - 2
src/main/java/com/poteviohealth/cgp/statistics/service/impl/OrderServiceImpl.java

@@ -188,14 +188,16 @@ public class OrderServiceImpl extends BaseServiceImpl<OrderMapper, Order> implem
             QueryWrapper<Order> queryWrapper2 = orderServiceQuery(dto, "o.");
             count = baseMapper.orderPageListSize(queryWrapper2,dbName,operatorId);
         }
+        //每页1000条,计算总页数
+        int maxPage = (int) Math.ceil(count/1000.0);
         List<OrderExcelDTO> list = Lists.newArrayList();
         ForkJoinPool pool = new ForkJoinPool();
-        OrderExcelTask task = new OrderExcelTask(0,count, queryWrapper, operatorId, dbName,baseMapper);
+        OrderExcelTask task = new OrderExcelTask(1,maxPage, queryWrapper, operatorId, dbName,baseMapper);
         Future<List<OrderExcelDTO>> future = pool.submit(task);
         try {
             do {
                 try {
-                    pool.awaitTermination(1, TimeUnit.MINUTES);
+                    pool.awaitTermination(2, TimeUnit.SECONDS);
                 } catch (InterruptedException e) {
                     e.printStackTrace();
                 }

+ 12 - 12
src/main/java/com/poteviohealth/cgp/statistics/utils/OrderExcelTask.java

@@ -38,24 +38,24 @@ public class OrderExcelTask extends RecursiveTask<List<OrderExcelDTO>> {
         // 当end-start的值小于MAX时候,开始打印
          List<OrderExcelDTO> list = Lists.newArrayList();
 
-        if ((end - start) < MAX) {
+         int page = (end - start);
+        if (page < 2) {
             // 小于最大值 直接执行
-            list = orderMapper.orderExcel(queryWrapper,dbName,operatorId,start,end);
+            list.addAll(orderMapper.orderExcel(queryWrapper,dbName,operatorId,(start-1)*MAX,MAX));
+            if(page == 1){
+                list.addAll(orderMapper.orderExcel(queryWrapper,dbName,operatorId,(end-1)*MAX,MAX));
+            }
             return list;
         } else {
             // 将任务分解
             List<OrderExcelTask> tasks = new ArrayList<>();
-            int max = (int) Math.ceil((double)end/MAX);
-            for (int i = 0; i <= max; i++) {
-                OrderExcelTask task = new OrderExcelTask(start,MAX, queryWrapper,operatorId,dbName,orderMapper);
-                tasks.add(task);
-                start+=MAX;
-                if(start>end){
-                    start = end;
-                }
-            }
+            int middle =(start + end) / 2;
+            OrderExcelTask left = new OrderExcelTask(start,middle, queryWrapper,operatorId,dbName,orderMapper);
+            OrderExcelTask right = new OrderExcelTask(middle+1,end, queryWrapper,operatorId,dbName,orderMapper);
             // 并行执行
-            invokeAll(tasks);
+            invokeAll(left, right);
+            tasks.add(left);
+            tasks.add(right);
             addResultFromTasks(list, tasks);
             return list;
         }