From dc1ad2b146bd1f66b4f411d02cc920ccc80ec88e Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期六, 10 六月 2023 16:06:04 +0800
Subject: [PATCH] 解决矢量数据批量插入过多时报错

---
 src/main/java/com/lf/server/entity/ctrl/SdkDecryptDataEntity.java   |    2 +-
 src/main/java/com/lf/server/controller/all/BaseQueryController.java |    2 +-
 src/main/java/com/lf/server/entity/all/StaticData.java              |    6 ++++--
 src/main/java/com/lf/server/service/data/UploadService.java         |   22 +++++++++++++++++++++-
 data/db_cx.sql                                                      |   19 ++-----------------
 5 files changed, 29 insertions(+), 22 deletions(-)

diff --git a/data/db_cx.sql b/data/db_cx.sql
index 6e53c3e..7ea959a 100644
--- a/data/db_cx.sql
+++ b/data/db_cx.sql
@@ -44,28 +44,13 @@
 update lf.sys_layer set serve_type = 'DEM' where type = 2 and serve_type is null and position('terrain/' in url) > 0;
 
 select id, pid, cn_name, en_name, url, serve_type, data_type, elev, pubid, is_project, bak
-from lf.sys_layer
-where type = 2 and serve_type is not null
-order by id;
+from lf.sys_layer where type = 2 and serve_type is not null order by id;
 -- update lf.sys_publish a set url = replace(url, '192.168.20.205:80', '{host}') where position('192.' in url) > 0; 
 
 select * from bs.s_explorationpoint where createtime < '2023-05-26 10:00:00';
---delete from bs.s_explorationpoint where dirid in ('00','04');
 select * from bs.s_surveyworksite where createtime < '2023-05-26 10:00:00';
---delete from bs.s_surveyworksite where createtime < '2023-05-26 10:00:00';
+select * from lf.sys_meta where type='cpt';
 
-select * from lf.sys_dict where tab='u_sectionline';
-select * from bs.u_sectionline where parentid='5bf5fe98-31a0-4dd9-9fa6-5e6d1570ae00';
-select * from lf.sys_attach;
-select * from lf.sys_dir where pid=0 order by id;
-select * from lf.sys_fme_log where tcdm='u_sectionline' order by id desc;
-select * from lf.sys_meta where name='鍕樻帰鐐硅〃.xlsx' and dircode like '0A%';
-select * from lf.sys_meta where name='宸ョ▼鍦拌川鍓栭潰鍥炬帶鍒剁偣.xlsx';
-select * from lf.sys_fme_log where parentid= '70ca841d-2103-485b-ab10-278cb9df85bd'
-select * from lf.sys_meta where eventid='aa690060-1266-4fd2-bde4-44b9d843948d';
-select * from bs.u_sectionline where parentid='aa690060-1266-4fd2-bde4-44b9d843948d';
---http://192.168.20.205:8088/server/dataQuery/selectFiles?tabName=bs.u_sectionline&eventid=f68f5041-329e-407a-b6ef-deacc8d79910
-select * from lf.sys_attach where tab='bs.u_sectionline' order by id desc;
 
 
 
diff --git a/src/main/java/com/lf/server/controller/all/BaseQueryController.java b/src/main/java/com/lf/server/controller/all/BaseQueryController.java
index f116f94..bedbf9b 100644
--- a/src/main/java/com/lf/server/controller/all/BaseQueryController.java
+++ b/src/main/java/com/lf/server/controller/all/BaseQueryController.java
@@ -200,7 +200,7 @@
             if (StringHelper.isEmpty(wkt)) {
                 return fail("WKT涓嶈兘涓虹┖", null);
             }
-            if (null == limit || limit < 1 || limit > StaticData.ONE_HUNDRED) {
+            if (null == limit || limit < 1 || limit > StaticData.I100) {
                 limit = 20;
             }
             if (null == buffer || buffer < 0 || buffer > StaticData.ONE_HUNDRED_THOUSAND) {
diff --git a/src/main/java/com/lf/server/entity/all/StaticData.java b/src/main/java/com/lf/server/entity/all/StaticData.java
index ca131ff..336706a 100644
--- a/src/main/java/com/lf/server/entity/all/StaticData.java
+++ b/src/main/java/com/lf/server/entity/all/StaticData.java
@@ -26,11 +26,11 @@
 
     public final static int SIXTEEN = 16;
 
-    public final static int ONE_HUNDRED = 100;
-
     public final static int TWO_HUNDRED = 200;
 
     public final static int ONE_HUNDRED_THOUSAND = 100000;
+
+    public static final double D100 = 100.0;
 
     public static final double D1024 = 1024.0;
 
@@ -50,6 +50,8 @@
 
     public static final int I90_NEG = -90;
 
+    public final static int I100 = 100;
+
     public static final int I180 = 180;
 
     public static final int I180_NEG = -180;
diff --git a/src/main/java/com/lf/server/entity/ctrl/SdkDecryptDataEntity.java b/src/main/java/com/lf/server/entity/ctrl/SdkDecryptDataEntity.java
index a2fe4ab..b1a693a 100644
--- a/src/main/java/com/lf/server/entity/ctrl/SdkDecryptDataEntity.java
+++ b/src/main/java/com/lf/server/entity/ctrl/SdkDecryptDataEntity.java
@@ -19,7 +19,7 @@
     private static List<Integer> registeredModules = new ArrayList<>();
 
     static {
-        for (int i = 1; i <= StaticData.ONE_HUNDRED; i++) {
+        for (int i = 1; i <= StaticData.I100; i++) {
             registeredModules.add(i);
         }
     }
diff --git a/src/main/java/com/lf/server/service/data/UploadService.java b/src/main/java/com/lf/server/service/data/UploadService.java
index 5660dad..12a4530 100644
--- a/src/main/java/com/lf/server/service/data/UploadService.java
+++ b/src/main/java/com/lf/server/service/data/UploadService.java
@@ -1,5 +1,6 @@
 package com.lf.server.service.data;
 
+import com.google.common.collect.Lists;
 import com.lf.server.entity.all.BaseEntity;
 import com.lf.server.entity.all.StaticData;
 import com.lf.server.entity.data.*;
@@ -236,7 +237,7 @@
         }
         setCreateInfo(list, mf);
 
-        int rows = basicMapper.insertBatch(list);
+        int rows = batchInserts(basicMapper, list);
         if (rows > 0) {
             mf.setEntity(mf.getTab());
             mf.setTab(tabName);
@@ -245,6 +246,25 @@
     }
 
     /**
+     * 鎵归噺鎻掑叆
+     */
+    private <T>  int batchInserts(BasicMapper basicMapper, List<T> list) {
+        int rows = 0;
+        int count = (int) Math.ceil(list.size() / StaticData.D100);
+
+        List<List<T>> subLists = Lists.partition(list, count);
+        for (List<T> sub : subLists) {
+            try {
+                rows += basicMapper.insertBatch(sub);
+            } catch (Exception ex) {
+                log.error(ex);
+            }
+        }
+
+        return rows;
+    }
+
+    /**
      * 璁剧疆鍒涘缓淇℃伅
      */
     private <T> void setCreateInfo(List<T> list, MetaFileEntity mf) {

--
Gitblit v1.9.3