feat:新增导出功能

新增数据库文件生成
This commit is contained in:
weitang 2025-07-01 17:30:35 +08:00
parent ef380035b6
commit 046e045178
14 changed files with 683 additions and 2 deletions

View File

@ -104,6 +104,11 @@
<artifactId>api-permissions</artifactId> <artifactId>api-permissions</artifactId>
<version>2.0.0</version> <version>2.0.0</version>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
</dependencies> </dependencies>
<profiles> <profiles>

View File

@ -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<TableData> 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();
}
}

View File

@ -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;
}

View File

@ -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<String> insertSqls;
public TableData(String tableName, String tableCreateSql, List<String> insertSqls) {
this.tableName = tableName;
this.tableCreateSql = tableCreateSql;
this.insertSqls = insertSqls;
}
// Getters and setters
}

View File

@ -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<TableData> getDataById(String id) {
List<TableData> result = new ArrayList<>();
// 1. 获取所有要导出的表名
List<String> 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<Condition> conditions = new ArrayList<>();
Condition condition = new Condition();
condition.setField("id");
condition.setOperator("=");
condition.setValue(id);
conditions.add(condition);
// 3. 获取数据插入语句
List<String> 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<String> 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<Condition> conditions = new ArrayList<>();
Condition condition = new Condition();
condition.setField("app_id");
condition.setOperator("=");
condition.setValue(id);
conditions.add(condition);
// 3. 获取数据插入语句
List<String> insertSqls = getInsertSqls(table, conditions);
result.add(new TableData(table, createSql, insertSqls));
} else if ("core_dataset_table_field".equals(table)) {
List<CoreDatasetTable> coreDatasetTables =
coreDatasetTableMapper.selectList(new LambdaQueryWrapper<CoreDatasetTable>().eq(CoreDatasetTable::getAppId, id).select(CoreDatasetTable::getId));
List<Condition> conditions = new ArrayList<>();
if (!coreDatasetTables.isEmpty()) {
List<Long> 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<String> insertSqls = getInsertSqls(table, conditions);
result.add(new TableData(table, createSql, insertSqls));
} else if ("core_chart_view".equals(table)) {
List<DataVisualizationInfo> dataVisualizationInfos =
dataVisualizationInfoMapper.selectList(new LambdaQueryWrapper<DataVisualizationInfo>().eq(DataVisualizationInfo::getAppId, id).select(DataVisualizationInfo::getId));
List<Condition> conditions = new ArrayList<>();
if (!dataVisualizationInfos.isEmpty()) {
List<Long> 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<String> insertSqls = getInsertSqls(table, conditions);
result.add(new TableData(table, createSql, insertSqls));
} else if ("visualization_link_jump".equals(table)) {
List<DataVisualizationInfo> dataVisualizationInfos =
dataVisualizationInfoMapper.selectList(new LambdaQueryWrapper<DataVisualizationInfo>().eq(DataVisualizationInfo::getAppId, id).select(DataVisualizationInfo::getId));
List<Condition> conditions = new ArrayList<>();
if (!dataVisualizationInfos.isEmpty()) {
List<Long> 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<String> insertSqls = getInsertSqls(table, conditions);
result.add(new TableData(table, createSql, insertSqls));
} else if ("visualization_link_jump_info".equals(table)) {
List<Long> ids = visualizationLinkJumpMapper.selectLinkJumpIds(id);
List<Condition> 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<String> insertSqls = getInsertSqls(table, conditions);
result.add(new TableData(table, createSql, insertSqls));
} else if ("visualization_link_jump_target_view_info".equals(table)) {
List<Long> dvInfoIds = visualizationLinkJumpInfoMapper.selectInfoIds(id);
List<Condition> 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<String> insertSqls = getInsertSqls(table, conditions);
result.add(new TableData(table, createSql, insertSqls));
}else if ("visualization_linkage".equals(table)) {
List<Long> viewIds = coreChartViewMapper.selectChatViewIds(id);
List<Condition> 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<String> insertSqls = getInsertSqls(table, conditions);
result.add(new TableData(table, createSql, insertSqls));
}else if ("visualization_linkage_field".equals(table)) {
List<Long> linkageIds = visualizationLinkageMapper.selectLinkageIds(id);
List<Condition> 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<String> insertSqls = getInsertSqls(table, conditions);
result.add(new TableData(table, createSql, insertSqls));
}else if ("visualization_outer_params".equals(table)) {
List<DataVisualizationInfo> dataVisualizationInfos =
dataVisualizationInfoMapper.selectList(new LambdaQueryWrapper<DataVisualizationInfo>().eq(DataVisualizationInfo::getAppId, id).select(DataVisualizationInfo::getId));
List<Condition> conditions = new ArrayList<>();
if (!dataVisualizationInfos.isEmpty()) {
List<Long> 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<String> insertSqls = getInsertSqls(table, conditions);
result.add(new TableData(table, createSql, insertSqls));
}else if ("visualization_outer_params_info".equals(table)) {
List<Long> outerParamIds = visualizationOuterParamsMapper.selectOuterParamIds(id);
List<Condition> 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<String> insertSqls = getInsertSqls(table, conditions);
result.add(new TableData(table, createSql, insertSqls));
}else if ("visualization_outer_params_target_view_info".equals(table)) {
List<Long> paramsInfoIds = visualizationOuterParamsInfoMapper.selectParamsInfoIds(id);
List<Condition> 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<String> insertSqls = getInsertSqls(table, conditions);
result.add(new TableData(table, createSql, insertSqls));
} else {
// 3. 获取数据插入语句
List<String> insertSqls = getInsertSqls(table, new ArrayList<>());
result.add(new TableData(table, createSql, insertSqls));
}
}
return result;
}
private String getCreateTableSql(String table) {
Map<String, Object> 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<String> getInsertSqls(String table, List<Condition> conditions) {
StringBuilder whereClause = new StringBuilder();
List<Object> 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<Object> inValues = (List<Object>) 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<Map<String, Object>> rows = jdbcTemplate.queryForList(sql, params.toArray());
List<String> inserts = new ArrayList<>();
// 添加 INSERT 语句
for (Map<String, Object> 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() + "'";
}
}

View File

@ -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();
}
}
}

View File

@ -3,6 +3,10 @@ package io.gisbi.chart.dao.auto.mapper;
import io.gisbi.chart.dao.auto.entity.CoreChartView; import io.gisbi.chart.dao.auto.entity.CoreChartView;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/** /**
* <p> * <p>
@ -15,4 +19,11 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper
public interface CoreChartViewMapper extends BaseMapper<CoreChartView> { public interface CoreChartViewMapper extends BaseMapper<CoreChartView> {
@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<Long> selectChatViewIds(@Param("appId")String appId);
} }

View File

@ -1,7 +1,7 @@
package io.gisbi.visualization.dao.auto.mapper; package io.gisbi.visualization.dao.auto.mapper;
import io.gisbi.visualization.dao.auto.entity.DataVisualizationInfo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import io.gisbi.visualization.dao.auto.entity.DataVisualizationInfo;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
/** /**

View File

@ -3,6 +3,10 @@ package io.gisbi.visualization.dao.auto.mapper;
import io.gisbi.visualization.dao.auto.entity.VisualizationLinkJumpInfo; import io.gisbi.visualization.dao.auto.entity.VisualizationLinkJumpInfo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/** /**
* <p> * <p>
@ -15,4 +19,12 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper
public interface VisualizationLinkJumpInfoMapper extends BaseMapper<VisualizationLinkJumpInfo> { public interface VisualizationLinkJumpInfoMapper extends BaseMapper<VisualizationLinkJumpInfo> {
@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<Long> selectInfoIds(@Param("appId")String appId);
} }

View File

@ -3,6 +3,10 @@ package io.gisbi.visualization.dao.auto.mapper;
import io.gisbi.visualization.dao.auto.entity.VisualizationLinkJump; import io.gisbi.visualization.dao.auto.entity.VisualizationLinkJump;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/** /**
* <p> * <p>
@ -15,4 +19,12 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper
public interface VisualizationLinkJumpMapper extends BaseMapper<VisualizationLinkJump> { public interface VisualizationLinkJumpMapper extends BaseMapper<VisualizationLinkJump> {
@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<Long> selectLinkJumpIds(@Param("appId")String appId);
} }

View File

@ -3,6 +3,10 @@ package io.gisbi.visualization.dao.auto.mapper;
import io.gisbi.visualization.dao.auto.entity.VisualizationLinkage; import io.gisbi.visualization.dao.auto.entity.VisualizationLinkage;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/** /**
* <p> * <p>
@ -15,4 +19,14 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper
public interface VisualizationLinkageMapper extends BaseMapper<VisualizationLinkage> { public interface VisualizationLinkageMapper extends BaseMapper<VisualizationLinkage> {
@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<Long> selectLinkageIds(@Param("appId")String appId);
} }

View File

@ -3,6 +3,10 @@ package io.gisbi.visualization.dao.auto.mapper;
import io.gisbi.visualization.dao.auto.entity.VisualizationOuterParamsInfo; import io.gisbi.visualization.dao.auto.entity.VisualizationOuterParamsInfo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/** /**
* <p> * <p>
@ -15,4 +19,13 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper
public interface VisualizationOuterParamsInfoMapper extends BaseMapper<VisualizationOuterParamsInfo> { public interface VisualizationOuterParamsInfoMapper extends BaseMapper<VisualizationOuterParamsInfo> {
@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<Long> selectParamsInfoIds(@Param("appId")String appId);
} }

View File

@ -3,6 +3,10 @@ package io.gisbi.visualization.dao.auto.mapper;
import io.gisbi.visualization.dao.auto.entity.VisualizationOuterParams; import io.gisbi.visualization.dao.auto.entity.VisualizationOuterParams;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/** /**
* <p> * <p>
@ -15,4 +19,12 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper
public interface VisualizationOuterParamsMapper extends BaseMapper<VisualizationOuterParams> { public interface VisualizationOuterParamsMapper extends BaseMapper<VisualizationOuterParams> {
@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<Long> selectOuterParamIds(@Param("appId")String appId);
} }

View File

@ -34,7 +34,7 @@ import java.util.Map;
@RequestMapping("/staticResource") @RequestMapping("/staticResource")
public class StaticResourceServer implements StaticResourceApi { 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; private String staticDir;
@Override @Override