Bladeren bron

split half for long sql query to avoid network instable exception

dengjia 3 maanden geleden
bovenliggende
commit
3a22f3e77f

+ 18 - 3
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/manager/WmSupervisionManager.java

@@ -1237,7 +1237,12 @@ public class WmSupervisionManager {
     }
 
     // 获取当前企业当季度的包
-    List<WmScorePackage> pkgs = packageService.list(queryWrapper);
+    // mybatisplus hardcode page size 500
+    // half half select to avoid network exception when executing too long
+    List<String> deptIds = depts.stream().map(dept -> dept.getDeptId().toString()).collect(Collectors.toList());
+    List<WmScorePackage> pkgs = packageService.list(queryWrapper.clone().in(WmScorePackage::getDeptId, deptIds.subList(0, deptIds.size()/2)));
+    pkgs.addAll(packageService.list(queryWrapper.in(WmScorePackage::getDeptId, deptIds.subList(deptIds.size()/2, deptIds.size()))));
+;
     if (CollUtil.isEmpty(pkgs)) {
         throw new BizException("没有查询到匹配积分包");
     }
@@ -1251,7 +1256,16 @@ public class WmSupervisionManager {
             .sorted()
             .collect(Collectors.toList());
 
-    List<WmTaskSupervision> allSupervisions = taskSupervisionService.getSupervisionByPkgIds(pkgIds);
+    int taskBatch = 10000;
+    int lastIdx = pkgIds.size() > taskBatch ? taskBatch : pkgIds.size();
+    List<WmTaskSupervision> allSupervisions = taskSupervisionService.getSupervisionByPkgIds(pkgIds.subList(0, lastIdx));
+    if (pkgIds.size() > taskBatch) {
+        while(lastIdx < pkgIds.size()) {
+            allSupervisions.addAll(taskSupervisionService.getSupervisionByPkgIds(
+                pkgIds.subList(lastIdx, Math.min(lastIdx + taskBatch, pkgIds.size()))));
+            lastIdx += taskBatch;
+        }
+    }
 
     Map<Integer, List<WmTaskSupervision>> pkg2sups = allSupervisions.stream().collect(Collectors.groupingBy(
         WmTaskSupervision::getPackageId, Collectors.toList())
@@ -1427,7 +1441,8 @@ public class WmSupervisionManager {
 
         if (isSupervision && todos > 0) {
             count++;
-            if (count >= query.getCurrent() * query.getSize()) {
+            if (count > query.getCurrent() * query.getSize()) {
+                // Only calculate one more of next page
                 break;
             }
         }