diff --git a/core/core-backend/pom.xml b/core/core-backend/pom.xml index 2587cad..8353a99 100644 --- a/core/core-backend/pom.xml +++ b/core/core-backend/pom.xml @@ -104,6 +104,11 @@ api-permissions 2.0.0 + + + org.springframework.boot + spring-boot-starter-jdbc + diff --git a/core/core-backend/src/main/java/io/gisbi/application/appcode/controller/ProjectExportController.java b/core/core-backend/src/main/java/io/gisbi/application/appcode/controller/ProjectExportController.java new file mode 100644 index 0000000..cef0b6f --- /dev/null +++ b/core/core-backend/src/main/java/io/gisbi/application/appcode/controller/ProjectExportController.java @@ -0,0 +1,131 @@ +package io.gisbi.application.appcode.controller; + +import io.gisbi.application.appcode.doman.TableData; +import io.gisbi.application.appcode.service.DatabaseService; +import io.gisbi.application.appcode.utils.ZipUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.FileCopyUtils; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.List; + +@RestController +@RequestMapping("/project") +public class ProjectExportController { + + // 模板 ZIP 文件路径 + private static final String FIXED_ZIP_PATH = "E:/opt/gisbi2.0/"; + + private static final String FIXED_ZIP_NAME = "a.zip"; + + private static final String FIXED_ZIP_FULL_PATH= FIXED_ZIP_PATH + FIXED_ZIP_NAME; + + + + // 自定义数据库服务类 + @Autowired + private DatabaseService databaseService; + + /** + * 接口:上传项目 ZIP 包,解压 → 导出数据库部分数据 → 插入 SQL 文件 → 重新打包并下载 + */ + @PostMapping("/export") + public void exportProjectWithDbData( + @RequestParam("id") String id) throws Exception { + + String fixedZipPath = FIXED_ZIP_FULL_PATH; + File fixedZipFile = new File(fixedZipPath); + if (!fixedZipFile.exists()) { + throw new FileNotFoundException("指定的 ZIP 文件不存在: " + fixedZipPath); + } + + // 创建时间戳和临时目录路径 + String timestamp = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); + Path tempExtractDir = Paths.get(FIXED_ZIP_PATH, "temp", "project-" + timestamp); + + try { + Files.createDirectories(tempExtractDir); + + // 1. 解压模板 ZIP 到临时目录 + File uploadedZip = new File(tempExtractDir + ".zip"); + FileCopyUtils.copy(new FileInputStream(fixedZipFile), new FileOutputStream(uploadedZip)); + ZipUtils.unzip(uploadedZip, tempExtractDir.toFile()); + + // 2. 获取解压后的根目录(自动识别第一个子目录) + File[] extractedRoots = tempExtractDir.toFile().listFiles(File::isDirectory); + if (extractedRoots == null || extractedRoots.length == 0) { + throw new IOException("ZIP 解压后未找到项目根目录"); + } + File projectRoot = extractedRoots[0]; + + // 3. 获取 db 目录 + File dbDir = new File(projectRoot, "db"); + if (!dbDir.exists()) { + boolean created = dbDir.mkdirs(); + if (!created) { + throw new IOException("无法创建 db 目录: " + dbDir.getAbsolutePath()); + } + } + + // 4. 查询数据库并生成 SQL 文件,保存到 db 目录中 + generateSqlFile(id, new File(dbDir, "data.sql").getAbsolutePath()); + + // 5. 重新打包整个项目根目录为新的 ZIP 文件 + String outputZipName = FIXED_ZIP_NAME.replaceFirst("\\..*$", "") + + "-with-sql-" + timestamp + ".zip"; + File finalZip = new File(FIXED_ZIP_PATH + "export/", outputZipName); + ZipUtils.zipFolder(projectRoot, finalZip); + }catch (Exception e){ + e.printStackTrace(); + }finally { + // 7. 清理临时文件(可选) + deleteDirectory(tempExtractDir.toFile()); + } + } + + + /** + * 根据 id 查询数据库,并生成 SQL 文件(CREATE TABLE + INSERT INTO) + */ + private File generateSqlFile(String id, String outputPath) throws IOException { + // 自定义方法获取数据 + List tableDataList = databaseService.getDataById(id); + + try (BufferedWriter writer = new BufferedWriter(new FileWriter(outputPath))) { + for (TableData data : tableDataList) { + // 写入建表语句 + writer.write(data.getTableCreateSql()); + writer.newLine(); + + // 写入插入语句 + for (String insertSql : data.getInsertSqls()) { + writer.write(insertSql); + writer.newLine(); + } + } + } + // return null; + return new File(outputPath); + } + + private void deleteDirectory(File file) { + if (file.isDirectory()) { + File[] files = file.listFiles(); + if (files != null) { + for (File f : files) { + deleteDirectory(f); + } + } + } + file.delete(); + } +} diff --git a/core/core-backend/src/main/java/io/gisbi/application/appcode/doman/Condition.java b/core/core-backend/src/main/java/io/gisbi/application/appcode/doman/Condition.java new file mode 100644 index 0000000..20fbb15 --- /dev/null +++ b/core/core-backend/src/main/java/io/gisbi/application/appcode/doman/Condition.java @@ -0,0 +1,12 @@ +package io.gisbi.application.appcode.doman; + +import lombok.Data; + +@Data +public class Condition { + + private String field; + private String operator; // = like + private Object value; + +} diff --git a/core/core-backend/src/main/java/io/gisbi/application/appcode/doman/TableData.java b/core/core-backend/src/main/java/io/gisbi/application/appcode/doman/TableData.java new file mode 100644 index 0000000..5c8a178 --- /dev/null +++ b/core/core-backend/src/main/java/io/gisbi/application/appcode/doman/TableData.java @@ -0,0 +1,20 @@ +package io.gisbi.application.appcode.doman; + +import lombok.Data; + +import java.util.List; + +@Data +public class TableData { + private String tableName; + private String tableCreateSql; + private List insertSqls; + + public TableData(String tableName, String tableCreateSql, List insertSqls) { + this.tableName = tableName; + this.tableCreateSql = tableCreateSql; + this.insertSqls = insertSqls; + } + + // Getters and setters +} diff --git a/core/core-backend/src/main/java/io/gisbi/application/appcode/service/DatabaseService.java b/core/core-backend/src/main/java/io/gisbi/application/appcode/service/DatabaseService.java new file mode 100644 index 0000000..ef0a0fd --- /dev/null +++ b/core/core-backend/src/main/java/io/gisbi/application/appcode/service/DatabaseService.java @@ -0,0 +1,369 @@ +package io.gisbi.application.appcode.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import io.gisbi.application.appcode.doman.Condition; +import io.gisbi.application.appcode.doman.TableData; +import io.gisbi.chart.dao.auto.mapper.CoreChartViewMapper; +import io.gisbi.dataset.dao.auto.entity.CoreDatasetTable; +import io.gisbi.dataset.dao.auto.mapper.CoreDatasetTableMapper; +import io.gisbi.visualization.dao.auto.entity.DataVisualizationInfo; +import io.gisbi.visualization.dao.auto.mapper.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class DatabaseService { + + @Autowired + private JdbcTemplate jdbcTemplate; + + @Autowired + private CoreDatasetTableMapper coreDatasetTableMapper; + @Autowired + private DataVisualizationInfoMapper dataVisualizationInfoMapper; + @Autowired + private VisualizationLinkJumpInfoMapper visualizationLinkJumpInfoMapper; + @Autowired + private VisualizationLinkJumpMapper visualizationLinkJumpMapper; + @Autowired + private CoreChartViewMapper coreChartViewMapper; + @Autowired + private VisualizationLinkageMapper visualizationLinkageMapper; + @Autowired + private VisualizationOuterParamsMapper visualizationOuterParamsMapper; + @Autowired + private VisualizationOuterParamsInfoMapper visualizationOuterParamsInfoMapper; + + public List getDataById(String id) { + List result = new ArrayList<>(); + + // 1. 获取所有要导出的表名 + List tables = Arrays.asList("app_application", "app_dictionary", "app_menu", "app_module", + "app_organization", "app_role", "app_role_menu", "app_role_users", "app_user", "area", + "core_chart_view", "core_dataset_group", "core_dataset_table", "core_dataset_table_field", + "core_datasource", "core_de_engine", "core_driver", "data_visualization_info", + "visualization_background", "visualization_background_image", "visualization_link_jump", + "visualization_link_jump_info", "visualization_link_jump_target_view_info", "visualization_linkage", + "visualization_linkage_field", "visualization_outer_params", "visualization_outer_params_info", + "visualization_outer_params_target_view_info", "visualization_subject"); + + for (String table : tables) { + + // 2. 获取建表语句 + String createSql = getCreateTableSql(table); + if ("app_application".equals(table)) { + List conditions = new ArrayList<>(); + Condition condition = new Condition(); + condition.setField("id"); + condition.setOperator("="); + condition.setValue(id); + conditions.add(condition); + // 3. 获取数据插入语句 + List insertSqls = getInsertSqls(table, conditions); + result.add(new TableData(table, createSql, insertSqls)); + } else if ("area".equals(table) || "core_de_engine".equals(table) || "core_driver".equals(table) || + "visualization_background".equals(table) || "visualization_background_image".equals(table)) { + // 3. 获取数据插入语句 + List insertSqls = getInsertSqls(table, new ArrayList<>()); + result.add(new TableData(table, createSql, insertSqls)); + } else if ("app_dictionary".equals(table) || "app_menu".equals(table) || "app_module".equals(table) || + "app_organization".equals(table) || "app_role".equals(table) || "app_role_menu".equals(table) || + "app_role_users".equals(table) || "app_user".equals(table) || "core_dataset_group".equals(table) || + "core_dataset_table".equals(table) || "core_datasource".equals(table) || "data_visualization_info" + .equals(table)) { + List conditions = new ArrayList<>(); + Condition condition = new Condition(); + condition.setField("app_id"); + condition.setOperator("="); + condition.setValue(id); + conditions.add(condition); + // 3. 获取数据插入语句 + List insertSqls = getInsertSqls(table, conditions); + result.add(new TableData(table, createSql, insertSqls)); + } else if ("core_dataset_table_field".equals(table)) { + List coreDatasetTables = + coreDatasetTableMapper.selectList(new LambdaQueryWrapper().eq(CoreDatasetTable::getAppId, id).select(CoreDatasetTable::getId)); + List conditions = new ArrayList<>(); + if (!coreDatasetTables.isEmpty()) { + List ids = + coreDatasetTables.stream().map(CoreDatasetTable::getId).collect(Collectors.toList()); + Condition condition = new Condition(); + condition.setField("dataset_table_id"); + condition.setOperator("in"); + condition.setValue(ids); + conditions.add(condition); + } + // 3. 获取数据插入语句 + List insertSqls = getInsertSqls(table, conditions); + result.add(new TableData(table, createSql, insertSqls)); + } else if ("core_chart_view".equals(table)) { + + List dataVisualizationInfos = + dataVisualizationInfoMapper.selectList(new LambdaQueryWrapper().eq(DataVisualizationInfo::getAppId, id).select(DataVisualizationInfo::getId)); + List conditions = new ArrayList<>(); + if (!dataVisualizationInfos.isEmpty()) { + List ids = + dataVisualizationInfos.stream().map(DataVisualizationInfo::getId).collect(Collectors.toList()); + Condition condition = new Condition(); + condition.setField("scene_id"); + condition.setOperator("in"); + condition.setValue(ids); + conditions.add(condition); + } + // 3. 获取数据插入语句 + List insertSqls = getInsertSqls(table, conditions); + result.add(new TableData(table, createSql, insertSqls)); + } else if ("visualization_link_jump".equals(table)) { + List dataVisualizationInfos = + dataVisualizationInfoMapper.selectList(new LambdaQueryWrapper().eq(DataVisualizationInfo::getAppId, id).select(DataVisualizationInfo::getId)); + + List conditions = new ArrayList<>(); + if (!dataVisualizationInfos.isEmpty()) { + List ids = + dataVisualizationInfos.stream().map(DataVisualizationInfo::getId).collect(Collectors.toList()); + Condition condition = new Condition(); + condition.setField("source_dv_id"); + condition.setOperator("in"); + condition.setValue(ids); + conditions.add(condition); + } + // 3. 获取数据插入语句 + List insertSqls = getInsertSqls(table, conditions); + result.add(new TableData(table, createSql, insertSqls)); + + } else if ("visualization_link_jump_info".equals(table)) { + List ids = visualizationLinkJumpMapper.selectLinkJumpIds(id); + List conditions = new ArrayList<>(); + if (!ids.isEmpty()) { + Condition condition = new Condition(); + condition.setField("link_jump_id"); + condition.setOperator("in"); + condition.setValue(ids); + conditions.add(condition); + } + // 3. 获取数据插入语句 + List insertSqls = getInsertSqls(table, conditions); + result.add(new TableData(table, createSql, insertSqls)); + } else if ("visualization_link_jump_target_view_info".equals(table)) { + List dvInfoIds = visualizationLinkJumpInfoMapper.selectInfoIds(id); + List conditions = new ArrayList<>(); + if (!dvInfoIds.isEmpty()) { + Condition condition = new Condition(); + condition.setField("link_jump_info_id"); + condition.setOperator("in"); + condition.setValue(dvInfoIds); + conditions.add(condition); + } + // 3. 获取数据插入语句 + List insertSqls = getInsertSqls(table, conditions); + result.add(new TableData(table, createSql, insertSqls)); + }else if ("visualization_linkage".equals(table)) { + List viewIds = coreChartViewMapper.selectChatViewIds(id); + List conditions = new ArrayList<>(); + if (!viewIds.isEmpty()) { + Condition condition = new Condition(); + condition.setField("source_view_id"); + condition.setOperator("in"); + condition.setValue(viewIds); + conditions.add(condition); + } + // 3. 获取数据插入语句 + List insertSqls = getInsertSqls(table, conditions); + result.add(new TableData(table, createSql, insertSqls)); + }else if ("visualization_linkage_field".equals(table)) { + List linkageIds = visualizationLinkageMapper.selectLinkageIds(id); + List conditions = new ArrayList<>(); + if (!linkageIds.isEmpty()) { + Condition condition = new Condition(); + condition.setField("linkage_id"); + condition.setOperator("in"); + condition.setValue(linkageIds); + conditions.add(condition); + } + // 3. 获取数据插入语句 + List insertSqls = getInsertSqls(table, conditions); + result.add(new TableData(table, createSql, insertSqls)); + }else if ("visualization_outer_params".equals(table)) { + List dataVisualizationInfos = + dataVisualizationInfoMapper.selectList(new LambdaQueryWrapper().eq(DataVisualizationInfo::getAppId, id).select(DataVisualizationInfo::getId)); + List conditions = new ArrayList<>(); + if (!dataVisualizationInfos.isEmpty()) { + List ids = + dataVisualizationInfos.stream().map(DataVisualizationInfo::getId).collect(Collectors.toList()); + Condition condition = new Condition(); + condition.setField("visualization_id"); + condition.setOperator("in"); + condition.setValue(ids); + conditions.add(condition); + } + // 3. 获取数据插入语句 + List insertSqls = getInsertSqls(table, conditions); + result.add(new TableData(table, createSql, insertSqls)); + }else if ("visualization_outer_params_info".equals(table)) { + List outerParamIds = visualizationOuterParamsMapper.selectOuterParamIds(id); + List conditions = new ArrayList<>(); + if (!outerParamIds.isEmpty()) { + Condition condition = new Condition(); + condition.setField("params_id"); + condition.setOperator("in"); + condition.setValue(outerParamIds); + conditions.add(condition); + } + // 3. 获取数据插入语句 + List insertSqls = getInsertSqls(table, conditions); + result.add(new TableData(table, createSql, insertSqls)); + }else if ("visualization_outer_params_target_view_info".equals(table)) { + List paramsInfoIds = visualizationOuterParamsInfoMapper.selectParamsInfoIds(id); + List conditions = new ArrayList<>(); + if (!paramsInfoIds.isEmpty()) { + Condition condition = new Condition(); + condition.setField("params_info_id"); + condition.setOperator("in"); + condition.setValue(paramsInfoIds); + conditions.add(condition); + } + // 3. 获取数据插入语句 + List insertSqls = getInsertSqls(table, conditions); + result.add(new TableData(table, createSql, insertSqls)); + } else { + // 3. 获取数据插入语句 + List insertSqls = getInsertSqls(table, new ArrayList<>()); + result.add(new TableData(table, createSql, insertSqls)); + } + } + return result; + } + + private String getCreateTableSql(String table) { + Map row = jdbcTemplate.queryForMap("SHOW CREATE TABLE " + table); + String createTableSql = (String) row.get("Create Table"); + + // 在建表语句前加上 DROP TABLE IF EXISTS + return "DROP TABLE IF EXISTS `" + table + "`;\n" + createTableSql + ";\n"; + } + + private List getInsertSqls(String table, List conditions) { + StringBuilder whereClause = new StringBuilder(); + List params = new ArrayList<>(); + if (conditions != null && !conditions.isEmpty()) { + whereClause.append(" WHERE "); + for (int i = 0; i < conditions.size(); i++) { + Condition condition = conditions.get(i); + if (i > 0) { + whereClause.append(" AND "); + } + String operator = condition.getOperator().trim().toLowerCase(); + if ("in".equalsIgnoreCase(operator)) { + // 处理 IN 查询,动态生成占位符 + @SuppressWarnings("unchecked") + List inValues = (List) condition.getValue(); + String placeholders = inValues.stream() + .map(v -> "?") + .collect(Collectors.joining(", ")); + whereClause.append(condition.getField()).append(" IN (").append(placeholders).append(")"); + params.addAll(inValues); + } else { + // 处理其他操作符 + whereClause.append(condition.getField()) + .append(" ") + .append(condition.getOperator()) + .append(" ?"); + params.add(condition.getValue()); + } + } + } + + String sql = "SELECT * FROM " + table + whereClause; + + List> rows = jdbcTemplate.queryForList(sql, params.toArray()); + + List inserts = new ArrayList<>(); + + // 添加 INSERT 语句 + for (Map row : rows) { + StringBuilder columns = new StringBuilder(); + StringBuilder values = new StringBuilder(); + + row.forEach((key, value) -> { + columns.append("`").append(key).append("`"); + switch (value) { + case String s -> + // 对字符串进行转义 + values.append(escapeSql(s)); + case null -> values.append("NULL"); + case Number ignored -> values.append(value); // 数字不需要加引号 + default -> + // 其他类型统一转为字符串处理 + values.append(escapeSql(value.toString())); + } + + if (!key.equals(row.keySet().toArray()[row.size() - 1])) { + values.append(", "); + columns.append(", "); + } + }); + + inserts.add("INSERT INTO `" + table + "` (" + columns + ") VALUES (" + values + ");"); + } + + inserts.add("\n"); // 每个表之间空一行 + return inserts; + } + + public String escapeSql(String value) { + if (value == null) { + return "NULL"; + } + + int len = value.length(); + StringBuilder out = new StringBuilder(len + 16); + + for (int i = 0; i < len; i++) { + char c = value.charAt(i); + switch (c) { + case '\'': + out.append("''"); + break; + case '\\': + out.append("\\\\"); + break; + case '\0': + out.append("\\0"); + break; + case '\n': + out.append("\\n"); + break; + case '\r': + out.append("\\r"); + break; + case '\t': + out.append("\\t"); + break; + case '\b': + out.append("\\b"); + break; + case '\u001A': // Ctrl+Z + out.append("\\Z"); + break; + case '"': + out.append("\\\""); + break; + case '\u001B': + out.append("\\e"); + break; + default: + out.append(c); + } + } + + return "'" + out.toString() + "'"; + } + +} diff --git a/core/core-backend/src/main/java/io/gisbi/application/appcode/utils/ZipUtils.java b/core/core-backend/src/main/java/io/gisbi/application/appcode/utils/ZipUtils.java new file mode 100644 index 0000000..7e4fd98 --- /dev/null +++ b/core/core-backend/src/main/java/io/gisbi/application/appcode/utils/ZipUtils.java @@ -0,0 +1,70 @@ +package io.gisbi.application.appcode.utils; + +import org.springframework.util.FileCopyUtils; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.nio.file.Files; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; +import java.util.zip.ZipOutputStream; + +public class ZipUtils { + + public static void unzip(File zipFile, File outputFolder) throws IOException { + try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile))) { + ZipEntry entry; + while ((entry = zis.getNextEntry()) != null) { + File file = new File(outputFolder, entry.getName()); + if (entry.isDirectory()) { + Files.createDirectories(file.toPath()); + } else { + Files.createDirectories(file.getParentFile().toPath()); + FileCopyUtils.copy(zis, new FileOutputStream(file)); + } + zis.closeEntry(); + } + } + } + + public static void zipFolder(File folder, File zipFile) throws IOException { + try ( + FileOutputStream fos = new FileOutputStream(zipFile); + ZipOutputStream zos = new ZipOutputStream(fos) + ) { + zipFile(folder, folder.getName(), zos); + } + } + + private static void zipFile(File fileToZip, String fileName, ZipOutputStream zos) throws IOException { + if (fileToZip.isDirectory()) { + if (fileName.endsWith("/")) { + zos.putNextEntry(new ZipEntry(fileName)); + zos.closeEntry(); + } else { + zos.putNextEntry(new ZipEntry(fileName + "/")); + zos.closeEntry(); + } + + File[] children = fileToZip.listFiles(); + if (children != null) { + for (File child : children) { + zipFile(child, fileName + "/" + child.getName(), zos); + } + } + return; + } + + try (FileInputStream fis = new FileInputStream(fileToZip)) { + zos.putNextEntry(new ZipEntry(fileName)); + byte[] buffer = new byte[1024]; + int length; + while ((length = fis.read(buffer)) > 0) { + zos.write(buffer, 0, length); + } + zos.closeEntry(); + } + } +} diff --git a/core/core-backend/src/main/java/io/gisbi/chart/dao/auto/mapper/CoreChartViewMapper.java b/core/core-backend/src/main/java/io/gisbi/chart/dao/auto/mapper/CoreChartViewMapper.java index 8198e6c..65515c8 100644 --- a/core/core-backend/src/main/java/io/gisbi/chart/dao/auto/mapper/CoreChartViewMapper.java +++ b/core/core-backend/src/main/java/io/gisbi/chart/dao/auto/mapper/CoreChartViewMapper.java @@ -3,6 +3,10 @@ package io.gisbi.chart.dao.auto.mapper; import io.gisbi.chart.dao.auto.entity.CoreChartView; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; /** *

@@ -15,4 +19,11 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface CoreChartViewMapper extends BaseMapper { + @Select("SELECT DISTINCT\n" + + "\tccv.id \n" + + "FROM\n" + + "\tcore_chart_view ccv\n" + + "\tINNER JOIN data_visualization_info dvi ON ccv.scene_id = dvi.id\n" + + "\tWHERE dvi.app_id=#{appId}") + List selectChatViewIds(@Param("appId")String appId); } diff --git a/core/core-backend/src/main/java/io/gisbi/visualization/dao/auto/mapper/DataVisualizationInfoMapper.java b/core/core-backend/src/main/java/io/gisbi/visualization/dao/auto/mapper/DataVisualizationInfoMapper.java index 02b14fe..eeb683b 100644 --- a/core/core-backend/src/main/java/io/gisbi/visualization/dao/auto/mapper/DataVisualizationInfoMapper.java +++ b/core/core-backend/src/main/java/io/gisbi/visualization/dao/auto/mapper/DataVisualizationInfoMapper.java @@ -1,7 +1,7 @@ package io.gisbi.visualization.dao.auto.mapper; -import io.gisbi.visualization.dao.auto.entity.DataVisualizationInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import io.gisbi.visualization.dao.auto.entity.DataVisualizationInfo; import org.apache.ibatis.annotations.Mapper; /** diff --git a/core/core-backend/src/main/java/io/gisbi/visualization/dao/auto/mapper/VisualizationLinkJumpInfoMapper.java b/core/core-backend/src/main/java/io/gisbi/visualization/dao/auto/mapper/VisualizationLinkJumpInfoMapper.java index 0e8bb32..c1c423e 100644 --- a/core/core-backend/src/main/java/io/gisbi/visualization/dao/auto/mapper/VisualizationLinkJumpInfoMapper.java +++ b/core/core-backend/src/main/java/io/gisbi/visualization/dao/auto/mapper/VisualizationLinkJumpInfoMapper.java @@ -3,6 +3,10 @@ package io.gisbi.visualization.dao.auto.mapper; import io.gisbi.visualization.dao.auto.entity.VisualizationLinkJumpInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; /** *

@@ -15,4 +19,12 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface VisualizationLinkJumpInfoMapper extends BaseMapper { + @Select("SELECT\n" + + "\tvlji.id \n" + + "FROM\n" + + "\tvisualization_link_jump_info vlji\n" + + "\tINNER JOIN visualization_link_jump vlj ON vlj.id = vlji.link_jump_id\n" + + "\tINNER JOIN data_visualization_info dvi ON dvi.id=vlj.source_dv_id\n" + + "\tWHERE dvi.app_id =#{appId}") + List selectInfoIds(@Param("appId")String appId); } diff --git a/core/core-backend/src/main/java/io/gisbi/visualization/dao/auto/mapper/VisualizationLinkJumpMapper.java b/core/core-backend/src/main/java/io/gisbi/visualization/dao/auto/mapper/VisualizationLinkJumpMapper.java index c7643ca..1185de6 100644 --- a/core/core-backend/src/main/java/io/gisbi/visualization/dao/auto/mapper/VisualizationLinkJumpMapper.java +++ b/core/core-backend/src/main/java/io/gisbi/visualization/dao/auto/mapper/VisualizationLinkJumpMapper.java @@ -3,6 +3,10 @@ package io.gisbi.visualization.dao.auto.mapper; import io.gisbi.visualization.dao.auto.entity.VisualizationLinkJump; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; /** *

@@ -15,4 +19,12 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface VisualizationLinkJumpMapper extends BaseMapper { + @Select("SELECT\n" + + "\tvlj.id \n" + + "FROM\n" + + "\tvisualization_link_jump vlj\n" + + "\tINNER JOIN data_visualization_info dvi ON dvi.id = vlj.source_dv_id \n" + + "WHERE\n" + + "\tdvi.app_id = #{appId}") + List selectLinkJumpIds(@Param("appId")String appId); } diff --git a/core/core-backend/src/main/java/io/gisbi/visualization/dao/auto/mapper/VisualizationLinkageMapper.java b/core/core-backend/src/main/java/io/gisbi/visualization/dao/auto/mapper/VisualizationLinkageMapper.java index 83a75fa..5685c05 100644 --- a/core/core-backend/src/main/java/io/gisbi/visualization/dao/auto/mapper/VisualizationLinkageMapper.java +++ b/core/core-backend/src/main/java/io/gisbi/visualization/dao/auto/mapper/VisualizationLinkageMapper.java @@ -3,6 +3,10 @@ package io.gisbi.visualization.dao.auto.mapper; import io.gisbi.visualization.dao.auto.entity.VisualizationLinkage; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; /** *

@@ -15,4 +19,14 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface VisualizationLinkageMapper extends BaseMapper { + @Select("SELECT DISTINCT\n" + + "\tccv.id \n" + + "FROM\n" + + "\tvisualization_linkage vl\n" + + "\tINNER JOIN core_chart_view ccv ON vl.source_view_id = ccv.id\n" + + "\tINNER JOIN data_visualization_info dvi ON ccv.scene_id = dvi.id \n" + + "WHERE\n" + + "\tdvi.app_id = #{appId}") + List selectLinkageIds(@Param("appId")String appId); + } diff --git a/core/core-backend/src/main/java/io/gisbi/visualization/dao/auto/mapper/VisualizationOuterParamsInfoMapper.java b/core/core-backend/src/main/java/io/gisbi/visualization/dao/auto/mapper/VisualizationOuterParamsInfoMapper.java index 6e035d6..0513fcd 100644 --- a/core/core-backend/src/main/java/io/gisbi/visualization/dao/auto/mapper/VisualizationOuterParamsInfoMapper.java +++ b/core/core-backend/src/main/java/io/gisbi/visualization/dao/auto/mapper/VisualizationOuterParamsInfoMapper.java @@ -3,6 +3,10 @@ package io.gisbi.visualization.dao.auto.mapper; import io.gisbi.visualization.dao.auto.entity.VisualizationOuterParamsInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; /** *

@@ -15,4 +19,13 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface VisualizationOuterParamsInfoMapper extends BaseMapper { + @Select("SELECT\n" + + "\tvopi.params_info_id \n" + + "FROM\n" + + "visualization_outer_params_info vopi \n" + + "INNER JOIN visualization_outer_params vop ON vopi.params_id=vop.params_id\n" + + "INNER JOIN data_visualization_info dvi ON vop.visualization_id = dvi.id \n" + + "WHERE\n" + + "\tdvi.app_id = #{appId}") + List selectParamsInfoIds(@Param("appId")String appId); } diff --git a/core/core-backend/src/main/java/io/gisbi/visualization/dao/auto/mapper/VisualizationOuterParamsMapper.java b/core/core-backend/src/main/java/io/gisbi/visualization/dao/auto/mapper/VisualizationOuterParamsMapper.java index 81b20ee..b0618cb 100644 --- a/core/core-backend/src/main/java/io/gisbi/visualization/dao/auto/mapper/VisualizationOuterParamsMapper.java +++ b/core/core-backend/src/main/java/io/gisbi/visualization/dao/auto/mapper/VisualizationOuterParamsMapper.java @@ -3,6 +3,10 @@ package io.gisbi.visualization.dao.auto.mapper; import io.gisbi.visualization.dao.auto.entity.VisualizationOuterParams; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; /** *

@@ -15,4 +19,12 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface VisualizationOuterParamsMapper extends BaseMapper { + @Select("SELECT\n" + + "\tvop.params_id \n" + + "FROM\n" + + "\tvisualization_outer_params vop\n" + + "\tINNER JOIN data_visualization_info dvi ON vop.visualization_id = dvi.id \n" + + "WHERE\n" + + "\tdvi.app_id = #{appId}") + List selectOuterParamIds(@Param("appId")String appId); } diff --git a/core/core-backend/src/main/java/io/gisbi/visualization/server/StaticResourceServer.java b/core/core-backend/src/main/java/io/gisbi/visualization/server/StaticResourceServer.java index 49fb8c0..7cf1a21 100644 --- a/core/core-backend/src/main/java/io/gisbi/visualization/server/StaticResourceServer.java +++ b/core/core-backend/src/main/java/io/gisbi/visualization/server/StaticResourceServer.java @@ -34,7 +34,7 @@ import java.util.Map; @RequestMapping("/staticResource") public class StaticResourceServer implements StaticResourceApi { - @Value("${gisbi.path.static-resource:E:/opt/gisbi2.0/data/static-resource/}") + @Value("${gisbi.path.static-resource:/opt/gisbi2.0/data/static-resource/}") private String staticDir; @Override