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 43833aae..d5eab9a7 100644 --- a/src/main/java/com/dsideal/base/DataEase/Controller/DataEaseController.java +++ b/src/main/java/com/dsideal/base/DataEase/Controller/DataEaseController.java @@ -3,6 +3,8 @@ package com.dsideal.base.DataEase.Controller; import cn.hutool.core.codec.Base64; import com.dsideal.base.BaseApplication; import com.dsideal.base.DataEase.Model.DataEaseModel; +import com.dsideal.base.DataEase.Model.ExcelReader; +import com.dsideal.base.DataEase.Model.ExcelRow; import com.dsideal.base.Interceptor.EmptyInterface; import com.dsideal.base.Interceptor.IsLoginInterface; import com.dsideal.base.Interceptor.IsNumericInterface; @@ -211,7 +213,8 @@ public class DataEaseController extends Controller { return; } //检查上传的excel,获取它有哪些列,与数据集的列是否一致 - List cols = dm.getColumnNamesFromExcel(uploadFile.getFile().getAbsolutePath()); + String excelPath = uploadFile.getFile().getAbsolutePath(); + List excelCols = dm.getColumnNamesFromExcel(excelPath); //获取指定数据表有哪些列 Record rDataSet = dm.getDataSetById(id); String tableName = rDataSet.getStr("table_name"); @@ -219,9 +222,9 @@ public class DataEaseController extends Controller { List mysqlCols = dm.getColumns(tableName); //id列需要特殊处理 - if (mysqlCols.contains("id")) mysqlCols.remove("id"); + mysqlCols.remove("id"); //对比两个数组集是不是一致,就是对比列名是不是完全匹配,使用交集去检查 - Set set1 = new HashSet<>(cols); + Set set1 = new HashSet<>(excelCols); Set set2 = new HashSet<>(mysqlCols); //是不是完整匹配 boolean match = set1.equals(set2); @@ -230,7 +233,10 @@ public class DataEaseController extends Controller { return; } //如果一致,那么需要先把数据集的指定行政区划列的表清空,再导入数据 - //TODO + ExcelReader excelReader = new ExcelReader(); + List rows = excelReader.readXlsxFile(excelPath, excelCols); + + dm.saveDataSetTable(identity_id, id, area_name, rows); //返回结果 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 1f6ff990..f6a58086 100644 --- a/src/main/java/com/dsideal/base/DataEase/Model/DataEaseModel.java +++ b/src/main/java/com/dsideal/base/DataEase/Model/DataEaseModel.java @@ -14,7 +14,6 @@ import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.*; @@ -41,31 +40,29 @@ public class DataEaseModel { * 保存数据集对应的表 * * @param dataset_id 数据集id - * @param ja json数组 */ - public void saveDataSetTable(int identity_id, int dataset_id, String xmqh, JSONArray ja) { + public void saveDataSetTable(int identity_id, int dataset_id, String xzqh, List listExcelRow) { String tableName = getDataSetById(dataset_id).getStr("table_name"); if (identity_id > 1) { - String sql = "delete from dataease.`" + tableName + "` where `行政区划`=?"; - Db.update(sql, xmqh); + String sql = "delete from `" + tableName + "` where `行政区划`=?"; + Db.use(DB_NAME).update(sql, xzqh); } else { - String sql = "delete from dataease.`" + tableName + "`"; - Db.update(sql); + String sql = "delete from `" + tableName + "`"; + Db.use(DB_NAME).update(sql); } List list = new ArrayList<>(); - for (int i = 0; i < ja.size(); i++) { - JSONObject jsonObject = ja.getJSONObject(i); - //遍历jo的每一个属性 - // 或者使用keySet和for-each循环遍历 + //数据行 + for (int i = 1; i < listExcelRow.size(); i++) { + ExcelRow row = listExcelRow.get(i); Record record = new Record(); - for (Object key : jsonObject.keySet()) { - Object value = jsonObject.get(key); - if (value.equals("null")) value = null; - record.set(key.toString(), value); + for (int j = 0; j < row.getData().size(); j++) { + String value = row.getData().get(j); + //第一行是表头 + record.set(listExcelRow.getFirst().getData().get(j), value); } list.add(record); } - Db.use("dataease").batchSave(tableName, list, 100); + Db.use(DB_NAME).batchSave(tableName, list, 100); } @@ -386,7 +383,7 @@ public class DataEaseModel { * @param filePath * @return */ - public static List getColumnNamesFromExcel(String filePath) { + public List getColumnNamesFromExcel(String filePath) { List columnNames = new ArrayList<>(); try (FileInputStream fis = new FileInputStream(filePath); Workbook workbook = new XSSFWorkbook(fis)) { diff --git a/src/main/java/com/dsideal/base/DataEase/Model/ExcelReader.java b/src/main/java/com/dsideal/base/DataEase/Model/ExcelReader.java new file mode 100644 index 00000000..98ed2259 --- /dev/null +++ b/src/main/java/com/dsideal/base/DataEase/Model/ExcelReader.java @@ -0,0 +1,47 @@ +package com.dsideal.base.DataEase.Model; + +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +import java.io.FileInputStream; +import java.util.ArrayList; +import java.util.List; + +public class ExcelReader { + public List readXlsxFile(String filePath, List cols) { + List rows = new ArrayList<>(); + try (FileInputStream fis = new FileInputStream(filePath); + Workbook workbook = new XSSFWorkbook(fis)) { + + Sheet sheet = workbook.getSheetAt(0); // 读取第一个工作表 + int rowNum = 0; + for (Row row : sheet) { + List rowData = new ArrayList<>(); + for (Cell cell : row) { + rowData.add(getCellValue(cell)); + } + if (rowNum == 0) { + // 如果文件中没有列名,可以在这里手动指定 + rows.add(new ExcelRow(cols)); // 根据您的实际列名进行修改 + rowNum++; + continue; + } + rows.add(new ExcelRow(rowData)); + rowNum++; + } + } catch (Exception e) { + e.printStackTrace(); + } + return rows; + } + + private String getCellValue(Cell cell) { + return switch (cell.getCellType()) { + case STRING -> cell.getStringCellValue(); + case NUMERIC -> String.valueOf(cell.getNumericCellValue()); + case BOOLEAN -> String.valueOf(cell.getBooleanCellValue()); + case FORMULA -> cell.getCellFormula(); + default -> ""; + }; + } +} \ No newline at end of file diff --git a/src/main/java/com/dsideal/base/DataEase/Model/ExcelRow.java b/src/main/java/com/dsideal/base/DataEase/Model/ExcelRow.java new file mode 100644 index 00000000..d5b3b5ae --- /dev/null +++ b/src/main/java/com/dsideal/base/DataEase/Model/ExcelRow.java @@ -0,0 +1,17 @@ +package com.dsideal.base.DataEase.Model; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Setter +@Getter +public class ExcelRow { + private List data; + + public ExcelRow(List data) { + this.data = data; + } + +} \ No newline at end of file