From e6992289542b10a2a6ba85de2c65fb7ece7c5526 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=B5=B7?= <10402852@qq.com> Date: Mon, 4 Nov 2024 14:40:10 +0800 Subject: [PATCH] 'commit' --- .../Controller/DataEaseController.java | 20 ++++++++++++++++++- .../base/DataEase/Model/DataEaseModel.java | 12 +++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/dsideal/base/DataEase/Controller/DataEaseController.java b/src/main/java/com/dsideal/base/DataEase/Controller/DataEaseController.java index a67df24b..92df7006 100644 --- a/src/main/java/com/dsideal/base/DataEase/Controller/DataEaseController.java +++ b/src/main/java/com/dsideal/base/DataEase/Controller/DataEaseController.java @@ -19,7 +19,9 @@ import com.jfinal.upload.UploadFile; import net.sf.json.JSONObject; import java.io.IOException; +import java.util.HashSet; import java.util.List; +import java.util.Set; public class DataEaseController extends Controller { DataEaseModel dm = new DataEaseModel(); @@ -186,9 +188,25 @@ public class DataEaseController extends Controller { } //检查上传的excel,获取它有哪些列,与数据集的列是否一致 List cols = dm.getColumnNamesFromExcel(uploadFile.getFile().getAbsolutePath()); - //获取指定数据集有哪些列 + //获取指定数据表有哪些列 + Record rDataSet = dm.getDataSetById(id); + String tableName = rDataSet.getStr("table_name"); + //mysql数据库中真实表有哪些字段 + List mysqlCols = dm.getColumns(tableName); + //id列需要特殊处理 + if (mysqlCols.contains("id")) mysqlCols.remove("id"); + //对比两个数组集是不是一致,就是对比列名是不是完全匹配,使用交集去检查 + Set set1 = new HashSet<>(cols); + Set set2 = new HashSet<>(mysqlCols); + //是不是完整匹配 + boolean match = set1.equals(set2); + if (!match) { + renderJson(CommonUtil.returnMessageJson(false, "上传的Excel列名与数据集列名不一致,请重新上传!")); + return; + } //如果一致,那么需要先把数据集的指定行政区划列的表清空,再导入数据 + //TODO //返回结果 Kv kv = Kv.create(); diff --git a/src/main/java/com/dsideal/base/DataEase/Model/DataEaseModel.java b/src/main/java/com/dsideal/base/DataEase/Model/DataEaseModel.java index 32ce26b9..13c10db9 100644 --- a/src/main/java/com/dsideal/base/DataEase/Model/DataEaseModel.java +++ b/src/main/java/com/dsideal/base/DataEase/Model/DataEaseModel.java @@ -19,6 +19,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.UUID; +import java.util.stream.Collectors; public class DataEaseModel { @@ -202,6 +203,17 @@ public class DataEaseModel { return columns; } + /** + * 指定列中有哪些列 + * @param tableName + * @return + */ + public List getColumns(String tableName) { + String sql = "SELECT COLUMN_NAME, DATA_TYPE, COLUMN_DEFAULT, IS_NULLABLE, COLUMN_TYPE, CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION, DATETIME_PRECISION, COLUMN_COMMENT FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ?"; + List list = Db.find(sql, DataEaseModel.DB_NAME, tableName); + return list.stream().map(record -> record.getStr("COLUMN_NAME")).collect(Collectors.toList()); + } + // 检查表是否存在主键 public boolean hasPrimaryKey(String tableName) { String sql = "SELECT COUNT(*) as c FROM information_schema.TABLE_CONSTRAINTS WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ? AND CONSTRAINT_TYPE = 'PRIMARY KEY'";