sqlserver数据库查询和导出开发测试
This commit is contained in:
@@ -25,7 +25,7 @@ import com.zyplayer.doc.db.framework.db.dto.*;
|
|||||||
import com.zyplayer.doc.db.framework.db.enums.DatabaseProductEnum;
|
import com.zyplayer.doc.db.framework.db.enums.DatabaseProductEnum;
|
||||||
import com.zyplayer.doc.db.framework.json.DocDbResponseJson;
|
import com.zyplayer.doc.db.framework.json.DocDbResponseJson;
|
||||||
import com.zyplayer.doc.db.framework.utils.PoiUtil;
|
import com.zyplayer.doc.db.framework.utils.PoiUtil;
|
||||||
import com.zyplayer.doc.db.service.DbBaseFactory;
|
import com.zyplayer.doc.db.service.DatabaseServiceFactory;
|
||||||
import com.zyplayer.doc.db.service.DbBaseService;
|
import com.zyplayer.doc.db.service.DbBaseService;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.apache.commons.lang.math.NumberUtils;
|
import org.apache.commons.lang.math.NumberUtils;
|
||||||
@@ -57,7 +57,7 @@ public class DatabaseDocController {
|
|||||||
@Resource
|
@Resource
|
||||||
UserAuthService userAuthService;
|
UserAuthService userAuthService;
|
||||||
@Resource
|
@Resource
|
||||||
DbBaseFactory dbBaseFactory;
|
DatabaseServiceFactory databaseServiceFactory;
|
||||||
|
|
||||||
@PostMapping(value = "/getDataSourceList")
|
@PostMapping(value = "/getDataSourceList")
|
||||||
public ResponseJson getDataSourceList() {
|
public ResponseJson getDataSourceList() {
|
||||||
@@ -101,7 +101,7 @@ public class DatabaseDocController {
|
|||||||
if (resultObj != null) {
|
if (resultObj != null) {
|
||||||
return DocDbResponseJson.ok(resultObj);
|
return DocDbResponseJson.ok(resultObj);
|
||||||
}
|
}
|
||||||
DbBaseService dbBaseService = dbBaseFactory.getDbBaseService(sourceId);
|
DbBaseService dbBaseService = databaseServiceFactory.getDbBaseService(sourceId);
|
||||||
Map<String, Object> dbResultMap = dbBaseService.getEditorData(sourceId);
|
Map<String, Object> dbResultMap = dbBaseService.getEditorData(sourceId);
|
||||||
dbResultMap.put("product", dbBaseService.getDatabaseProduct().name().toLowerCase());
|
dbResultMap.put("product", dbBaseService.getDatabaseProduct().name().toLowerCase());
|
||||||
// 缓存10分钟,如果10分钟内库里面增删改了表或字段,则提示不出来
|
// 缓存10分钟,如果10分钟内库里面增删改了表或字段,则提示不出来
|
||||||
@@ -111,35 +111,35 @@ public class DatabaseDocController {
|
|||||||
|
|
||||||
@PostMapping(value = "/getTableDdl")
|
@PostMapping(value = "/getTableDdl")
|
||||||
public ResponseJson getTableDdl(Long sourceId, String dbName, String tableName) {
|
public ResponseJson getTableDdl(Long sourceId, String dbName, String tableName) {
|
||||||
DbBaseService dbBaseService = dbBaseFactory.getDbBaseService(sourceId);
|
DbBaseService dbBaseService = databaseServiceFactory.getDbBaseService(sourceId);
|
||||||
TableDdlVo tableDdlVo = dbBaseService.getTableDdl(sourceId, dbName, tableName);
|
TableDdlVo tableDdlVo = dbBaseService.getTableDdl(sourceId, dbName, tableName);
|
||||||
return DocDbResponseJson.ok(tableDdlVo);
|
return DocDbResponseJson.ok(tableDdlVo);
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping(value = "/getDatabaseList")
|
@PostMapping(value = "/getDatabaseList")
|
||||||
public ResponseJson getDatabaseList(Long sourceId) {
|
public ResponseJson getDatabaseList(Long sourceId) {
|
||||||
DbBaseService dbBaseService = dbBaseFactory.getDbBaseService(sourceId);
|
DbBaseService dbBaseService = databaseServiceFactory.getDbBaseService(sourceId);
|
||||||
List<DatabaseInfoDto> databaseList = dbBaseService.getDatabaseList(sourceId);
|
List<DatabaseInfoDto> databaseList = dbBaseService.getDatabaseList(sourceId);
|
||||||
return DocDbResponseJson.ok(databaseList);
|
return DocDbResponseJson.ok(databaseList);
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping(value = "/getTableStatus")
|
@PostMapping(value = "/getTableStatus")
|
||||||
public ResponseJson getTableStatus(Long sourceId, String dbName, String tableName) {
|
public ResponseJson getTableStatus(Long sourceId, String dbName, String tableName) {
|
||||||
DbBaseService dbBaseService = dbBaseFactory.getDbBaseService(sourceId);
|
DbBaseService dbBaseService = databaseServiceFactory.getDbBaseService(sourceId);
|
||||||
TableStatusVo tableStatusVo = dbBaseService.getTableStatus(sourceId, dbName, tableName);
|
TableStatusVo tableStatusVo = dbBaseService.getTableStatus(sourceId, dbName, tableName);
|
||||||
return DocDbResponseJson.ok(tableStatusVo);
|
return DocDbResponseJson.ok(tableStatusVo);
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping(value = "/getTableList")
|
@PostMapping(value = "/getTableList")
|
||||||
public ResponseJson getTableList(Long sourceId, String dbName) {
|
public ResponseJson getTableList(Long sourceId, String dbName) {
|
||||||
DbBaseService dbBaseService = dbBaseFactory.getDbBaseService(sourceId);
|
DbBaseService dbBaseService = databaseServiceFactory.getDbBaseService(sourceId);
|
||||||
List<TableInfoDto> tableList = dbBaseService.getTableList(sourceId, dbName);
|
List<TableInfoDto> tableList = dbBaseService.getTableList(sourceId, dbName);
|
||||||
return DocDbResponseJson.ok(tableList);
|
return DocDbResponseJson.ok(tableList);
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping(value = "/getTableColumnList")
|
@PostMapping(value = "/getTableColumnList")
|
||||||
public ResponseJson getTableColumnList(Long sourceId, String dbName, String tableName) {
|
public ResponseJson getTableColumnList(Long sourceId, String dbName, String tableName) {
|
||||||
DbBaseService dbBaseService = dbBaseFactory.getDbBaseService(sourceId);
|
DbBaseService dbBaseService = databaseServiceFactory.getDbBaseService(sourceId);
|
||||||
TableColumnVo tableColumnVo = dbBaseService.getTableColumnList(sourceId, dbName, tableName);
|
TableColumnVo tableColumnVo = dbBaseService.getTableColumnList(sourceId, dbName, tableName);
|
||||||
return DocDbResponseJson.ok(tableColumnVo);
|
return DocDbResponseJson.ok(tableColumnVo);
|
||||||
}
|
}
|
||||||
@@ -149,14 +149,14 @@ public class DatabaseDocController {
|
|||||||
if (StringUtils.isBlank(searchText)) {
|
if (StringUtils.isBlank(searchText)) {
|
||||||
return DocDbResponseJson.ok();
|
return DocDbResponseJson.ok();
|
||||||
}
|
}
|
||||||
DbBaseService dbBaseService = dbBaseFactory.getDbBaseService(sourceId);
|
DbBaseService dbBaseService = databaseServiceFactory.getDbBaseService(sourceId);
|
||||||
List<QueryTableColumnDescDto> columnDescDto = dbBaseService.getTableAndColumnBySearch(sourceId, dbName, searchText);
|
List<QueryTableColumnDescDto> columnDescDto = dbBaseService.getTableAndColumnBySearch(sourceId, dbName, searchText);
|
||||||
return DocDbResponseJson.ok(columnDescDto);
|
return DocDbResponseJson.ok(columnDescDto);
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping(value = "/getTableDescList")
|
@PostMapping(value = "/getTableDescList")
|
||||||
public ResponseJson getTableDescList(Long sourceId, String dbName, String tableName) {
|
public ResponseJson getTableDescList(Long sourceId, String dbName, String tableName) {
|
||||||
DbBaseService dbBaseService = dbBaseFactory.getDbBaseService(sourceId);
|
DbBaseService dbBaseService = databaseServiceFactory.getDbBaseService(sourceId);
|
||||||
List<TableDescDto> tableDescList = dbBaseService.getTableDescList(sourceId, dbName, tableName);
|
List<TableDescDto> tableDescList = dbBaseService.getTableDescList(sourceId, dbName, tableName);
|
||||||
return DocDbResponseJson.ok(tableDescList);
|
return DocDbResponseJson.ok(tableDescList);
|
||||||
}
|
}
|
||||||
@@ -164,7 +164,7 @@ public class DatabaseDocController {
|
|||||||
@PostMapping(value = "/updateTableDesc")
|
@PostMapping(value = "/updateTableDesc")
|
||||||
public ResponseJson updateTableDesc(Long sourceId, String dbName, String tableName, String newDesc) {
|
public ResponseJson updateTableDesc(Long sourceId, String dbName, String tableName, String newDesc) {
|
||||||
this.judgeAuth(sourceId, DbAuthType.DESC_EDIT.getName(), "没有修改该表注释的权限");
|
this.judgeAuth(sourceId, DbAuthType.DESC_EDIT.getName(), "没有修改该表注释的权限");
|
||||||
DbBaseService dbBaseService = dbBaseFactory.getDbBaseService(sourceId);
|
DbBaseService dbBaseService = databaseServiceFactory.getDbBaseService(sourceId);
|
||||||
dbBaseService.updateTableDesc(sourceId, dbName, tableName, newDesc);
|
dbBaseService.updateTableDesc(sourceId, dbName, tableName, newDesc);
|
||||||
return DocDbResponseJson.ok();
|
return DocDbResponseJson.ok();
|
||||||
}
|
}
|
||||||
@@ -172,7 +172,7 @@ public class DatabaseDocController {
|
|||||||
@PostMapping(value = "/updateTableColumnDesc")
|
@PostMapping(value = "/updateTableColumnDesc")
|
||||||
public ResponseJson updateTableColumnDesc(Long sourceId, String dbName, String tableName, String columnName, String newDesc) {
|
public ResponseJson updateTableColumnDesc(Long sourceId, String dbName, String tableName, String columnName, String newDesc) {
|
||||||
this.judgeAuth(sourceId, DbAuthType.DESC_EDIT.getName(), "没有修改该表字段注释的权限");
|
this.judgeAuth(sourceId, DbAuthType.DESC_EDIT.getName(), "没有修改该表字段注释的权限");
|
||||||
DbBaseService dbBaseService = dbBaseFactory.getDbBaseService(sourceId);
|
DbBaseService dbBaseService = databaseServiceFactory.getDbBaseService(sourceId);
|
||||||
dbBaseService.updateTableColumnDesc(sourceId, dbName, tableName, columnName, newDesc);
|
dbBaseService.updateTableColumnDesc(sourceId, dbName, tableName, columnName, newDesc);
|
||||||
return DocDbResponseJson.ok();
|
return DocDbResponseJson.ok();
|
||||||
}
|
}
|
||||||
@@ -192,7 +192,7 @@ public class DatabaseDocController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private DocDbResponseJson exportForTableDdl(HttpServletResponse response, Long sourceId, String dbName, List<String> tableNameList, Integer exportFormat) {
|
private DocDbResponseJson exportForTableDdl(HttpServletResponse response, Long sourceId, String dbName, List<String> tableNameList, Integer exportFormat) {
|
||||||
DbBaseService dbBaseService = dbBaseFactory.getDbBaseService(sourceId);
|
DbBaseService dbBaseService = databaseServiceFactory.getDbBaseService(sourceId);
|
||||||
Map<String, String> ddlSqlMap = new HashMap<>();
|
Map<String, String> ddlSqlMap = new HashMap<>();
|
||||||
for (String tableName : tableNameList) {
|
for (String tableName : tableNameList) {
|
||||||
TableDdlVo tableDdlVo = dbBaseService.getTableDdl(sourceId, dbName, tableName);
|
TableDdlVo tableDdlVo = dbBaseService.getTableDdl(sourceId, dbName, tableName);
|
||||||
@@ -210,7 +210,7 @@ public class DatabaseDocController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private DocDbResponseJson exportForTableDoc(HttpServletResponse response, Long sourceId, String dbName, List<String> tableNameList, Integer exportFormat) {
|
private DocDbResponseJson exportForTableDoc(HttpServletResponse response, Long sourceId, String dbName, List<String> tableNameList, Integer exportFormat) {
|
||||||
DbBaseService dbBaseService = dbBaseFactory.getDbBaseService(sourceId);
|
DbBaseService dbBaseService = databaseServiceFactory.getDbBaseService(sourceId);
|
||||||
// 数据组装
|
// 数据组装
|
||||||
List<TableInfoVo> tableList = new LinkedList<>();
|
List<TableInfoVo> tableList = new LinkedList<>();
|
||||||
Map<String, List<TableColumnDescDto>> columnList = new HashMap<>();
|
Map<String, List<TableColumnDescDto>> columnList = new HashMap<>();
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import cn.hutool.core.date.DateTime;
|
|||||||
import cn.hutool.core.io.FileUtil;
|
import cn.hutool.core.io.FileUtil;
|
||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
import cn.hutool.core.util.RandomUtil;
|
import cn.hutool.core.util.RandomUtil;
|
||||||
import cn.hutool.core.util.ZipUtil;
|
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.serializer.SerializerFeature;
|
import com.alibaba.fastjson.serializer.SerializerFeature;
|
||||||
import com.alibaba.fastjson.util.TypeUtils;
|
import com.alibaba.fastjson.util.TypeUtils;
|
||||||
@@ -25,7 +24,7 @@ import com.zyplayer.doc.db.framework.db.mapper.base.ExecuteType;
|
|||||||
import com.zyplayer.doc.db.framework.db.mapper.base.SqlExecutor;
|
import com.zyplayer.doc.db.framework.db.mapper.base.SqlExecutor;
|
||||||
import com.zyplayer.doc.db.framework.json.DocDbResponseJson;
|
import com.zyplayer.doc.db.framework.json.DocDbResponseJson;
|
||||||
import com.zyplayer.doc.db.framework.utils.JSONUtil;
|
import com.zyplayer.doc.db.framework.utils.JSONUtil;
|
||||||
import com.zyplayer.doc.db.service.DbBaseFactory;
|
import com.zyplayer.doc.db.service.DatabaseServiceFactory;
|
||||||
import com.zyplayer.doc.db.service.DbBaseService;
|
import com.zyplayer.doc.db.service.DbBaseService;
|
||||||
import com.zyplayer.doc.db.service.download.BaseDownloadService;
|
import com.zyplayer.doc.db.service.download.BaseDownloadService;
|
||||||
import org.apache.commons.collections.CollectionUtils;
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
@@ -60,7 +59,7 @@ public class DbDataViewController {
|
|||||||
@Resource
|
@Resource
|
||||||
SqlExecutor sqlExecutor;
|
SqlExecutor sqlExecutor;
|
||||||
@Resource
|
@Resource
|
||||||
DbBaseFactory dbBaseFactory;
|
DatabaseServiceFactory databaseServiceFactory;
|
||||||
@Resource
|
@Resource
|
||||||
BaseDownloadService baseDownloadService;
|
BaseDownloadService baseDownloadService;
|
||||||
// 最大允许导出的行数,设置的过大有可能会导致内存溢出,默认10W条
|
// 最大允许导出的行数,设置的过大有可能会导致内存溢出,默认10W条
|
||||||
@@ -71,7 +70,7 @@ public class DbDataViewController {
|
|||||||
public ResponseJson query(DataViewParam param) {
|
public ResponseJson query(DataViewParam param) {
|
||||||
// 数据查询
|
// 数据查询
|
||||||
ExecuteType executeType = this.getExecuteType(param.getSourceId());
|
ExecuteType executeType = this.getExecuteType(param.getSourceId());
|
||||||
DbBaseService dbBaseService = dbBaseFactory.getDbBaseService(param.getSourceId());
|
DbBaseService dbBaseService = databaseServiceFactory.getDbBaseService(param.getSourceId());
|
||||||
String queryPageSql = dbBaseService.getQueryPageSql(param);
|
String queryPageSql = dbBaseService.getQueryPageSql(param);
|
||||||
ExecuteResult executeResult = this.query(param.getSourceId(), param.getExecuteId(), executeType, queryPageSql);
|
ExecuteResult executeResult = this.query(param.getSourceId(), param.getExecuteId(), executeType, queryPageSql);
|
||||||
// 数据组装
|
// 数据组装
|
||||||
@@ -99,7 +98,7 @@ public class DbDataViewController {
|
|||||||
public ResponseJson download(HttpServletResponse response, DataViewParam param) {
|
public ResponseJson download(HttpServletResponse response, DataViewParam param) {
|
||||||
param.setExecuteId(RandomUtil.simpleUUID());
|
param.setExecuteId(RandomUtil.simpleUUID());
|
||||||
ExecuteType executeType = this.getExecuteType(param.getSourceId());
|
ExecuteType executeType = this.getExecuteType(param.getSourceId());
|
||||||
DbBaseService dbBaseService = dbBaseFactory.getDbBaseService(param.getSourceId());
|
DbBaseService dbBaseService = databaseServiceFactory.getDbBaseService(param.getSourceId());
|
||||||
if (this.getDataCount(param, executeType) > downloadMaxRow) {
|
if (this.getDataCount(param, executeType) > downloadMaxRow) {
|
||||||
return DocDbResponseJson.error(String.format("导出失败,表:%s 数据行数超过最大导出配置 %s,请联系管理员修改", param.getTableName(), downloadMaxRow));
|
return DocDbResponseJson.error(String.format("导出失败,表:%s 数据行数超过最大导出配置 %s,请联系管理员修改", param.getTableName(), downloadMaxRow));
|
||||||
}
|
}
|
||||||
@@ -132,7 +131,7 @@ public class DbDataViewController {
|
|||||||
*/
|
*/
|
||||||
@PostMapping(value = "/downloadMultiple")
|
@PostMapping(value = "/downloadMultiple")
|
||||||
public ResponseJson downloadMultiple(HttpServletResponse response, DataViewParam param) {
|
public ResponseJson downloadMultiple(HttpServletResponse response, DataViewParam param) {
|
||||||
DbBaseService dbBaseService = dbBaseFactory.getDbBaseService(param.getSourceId());
|
DbBaseService dbBaseService = databaseServiceFactory.getDbBaseService(param.getSourceId());
|
||||||
if (StringUtils.isBlank(param.getTableNames())) {
|
if (StringUtils.isBlank(param.getTableNames())) {
|
||||||
return DocDbResponseJson.warn("请选择导出的表");
|
return DocDbResponseJson.warn("请选择导出的表");
|
||||||
}
|
}
|
||||||
@@ -204,7 +203,7 @@ public class DbDataViewController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Long getDataCount(DataViewParam param, ExecuteType executeType) {
|
private Long getDataCount(DataViewParam param, ExecuteType executeType) {
|
||||||
DbBaseService dbBaseService = dbBaseFactory.getDbBaseService(param.getSourceId());
|
DbBaseService dbBaseService = databaseServiceFactory.getDbBaseService(param.getSourceId());
|
||||||
String queryCountSql = dbBaseService.getQueryCountSql(param);
|
String queryCountSql = dbBaseService.getQueryCountSql(param);
|
||||||
ExecuteResult countResult = this.query(param.getSourceId(), param.getExecuteId(), executeType, queryCountSql);
|
ExecuteResult countResult = this.query(param.getSourceId(), param.getExecuteId(), executeType, queryCountSql);
|
||||||
if (CollectionUtils.isNotEmpty(countResult.getResult()) && MapUtils.isNotEmpty(countResult.getResult().get(0))) {
|
if (CollectionUtils.isNotEmpty(countResult.getResult()) && MapUtils.isNotEmpty(countResult.getResult().get(0))) {
|
||||||
|
|||||||
@@ -3,13 +3,11 @@ package com.zyplayer.doc.db.controller;
|
|||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException;
|
|
||||||
import com.zyplayer.doc.core.annotation.AuthMan;
|
import com.zyplayer.doc.core.annotation.AuthMan;
|
||||||
import com.zyplayer.doc.core.exception.ConfirmException;
|
import com.zyplayer.doc.core.exception.ConfirmException;
|
||||||
import com.zyplayer.doc.core.json.ResponseJson;
|
import com.zyplayer.doc.core.json.ResponseJson;
|
||||||
import com.zyplayer.doc.data.config.security.DocUserDetails;
|
import com.zyplayer.doc.data.config.security.DocUserDetails;
|
||||||
import com.zyplayer.doc.data.config.security.DocUserUtil;
|
import com.zyplayer.doc.data.config.security.DocUserUtil;
|
||||||
import com.zyplayer.doc.data.repository.manage.entity.DbDatasource;
|
|
||||||
import com.zyplayer.doc.data.repository.manage.entity.DbProcLog;
|
import com.zyplayer.doc.data.repository.manage.entity.DbProcLog;
|
||||||
import com.zyplayer.doc.data.repository.support.consts.DocAuthConst;
|
import com.zyplayer.doc.data.repository.support.consts.DocAuthConst;
|
||||||
import com.zyplayer.doc.data.service.manage.DbProcLogService;
|
import com.zyplayer.doc.data.service.manage.DbProcLogService;
|
||||||
@@ -18,7 +16,7 @@ import com.zyplayer.doc.db.framework.consts.DbAuthType;
|
|||||||
import com.zyplayer.doc.db.framework.db.dto.ProcedureDto;
|
import com.zyplayer.doc.db.framework.db.dto.ProcedureDto;
|
||||||
import com.zyplayer.doc.db.framework.db.mapper.base.ExecuteResult;
|
import com.zyplayer.doc.db.framework.db.mapper.base.ExecuteResult;
|
||||||
import com.zyplayer.doc.db.framework.json.DocDbResponseJson;
|
import com.zyplayer.doc.db.framework.json.DocDbResponseJson;
|
||||||
import com.zyplayer.doc.db.service.DbBaseFactory;
|
import com.zyplayer.doc.db.service.DatabaseServiceFactory;
|
||||||
import com.zyplayer.doc.db.service.DbBaseService;
|
import com.zyplayer.doc.db.service.DbBaseService;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
@@ -44,7 +42,7 @@ public class DbProcedureController {
|
|||||||
private static Logger logger = LoggerFactory.getLogger(DbProcedureController.class);
|
private static Logger logger = LoggerFactory.getLogger(DbProcedureController.class);
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
DbBaseFactory dbBaseFactory;
|
DatabaseServiceFactory databaseServiceFactory;
|
||||||
@Resource
|
@Resource
|
||||||
DbProcLogService dbProcLogService;
|
DbProcLogService dbProcLogService;
|
||||||
|
|
||||||
@@ -57,7 +55,7 @@ public class DbProcedureController {
|
|||||||
@PostMapping(value = "/list")
|
@PostMapping(value = "/list")
|
||||||
public ResponseJson list(ProcedureListParam procedureParam) {
|
public ResponseJson list(ProcedureListParam procedureParam) {
|
||||||
try {
|
try {
|
||||||
DbBaseService dbBaseService = dbBaseFactory.getDbBaseService(procedureParam.getSourceId());
|
DbBaseService dbBaseService = databaseServiceFactory.getDbBaseService(procedureParam.getSourceId());
|
||||||
procedureParam.setOffset((procedureParam.getPageNum() - 1) * procedureParam.getPageSize());
|
procedureParam.setOffset((procedureParam.getPageNum() - 1) * procedureParam.getPageSize());
|
||||||
List<ProcedureDto> procedureDtoList = dbBaseService.getProcedureList(procedureParam);
|
List<ProcedureDto> procedureDtoList = dbBaseService.getProcedureList(procedureParam);
|
||||||
DocDbResponseJson responseJson = DocDbResponseJson.ok(procedureDtoList);
|
DocDbResponseJson responseJson = DocDbResponseJson.ok(procedureDtoList);
|
||||||
@@ -82,7 +80,7 @@ public class DbProcedureController {
|
|||||||
*/
|
*/
|
||||||
@PostMapping(value = "/detail")
|
@PostMapping(value = "/detail")
|
||||||
public ResponseJson detail(Long sourceId, String dbName, String typeName, String procName) {
|
public ResponseJson detail(Long sourceId, String dbName, String typeName, String procName) {
|
||||||
DbBaseService dbBaseService = dbBaseFactory.getDbBaseService(sourceId);
|
DbBaseService dbBaseService = databaseServiceFactory.getDbBaseService(sourceId);
|
||||||
try {
|
try {
|
||||||
ProcedureDto procedureDto = dbBaseService.getProcedureDetail(sourceId, dbName, typeName, procName);
|
ProcedureDto procedureDto = dbBaseService.getProcedureDetail(sourceId, dbName, typeName, procName);
|
||||||
return DocDbResponseJson.ok(procedureDto);
|
return DocDbResponseJson.ok(procedureDto);
|
||||||
@@ -106,7 +104,7 @@ public class DbProcedureController {
|
|||||||
this.judgeAuth(sourceId, DbAuthType.PROC_EDIT.getName(), "没有修改该库函数的权限");
|
this.judgeAuth(sourceId, DbAuthType.PROC_EDIT.getName(), "没有修改该库函数的权限");
|
||||||
DbProcLog dbProcLog = this.createDbProcLog(sourceId, dbName, typeName, procName, "删除函数操作");
|
DbProcLog dbProcLog = this.createDbProcLog(sourceId, dbName, typeName, procName, "删除函数操作");
|
||||||
try {
|
try {
|
||||||
DbBaseService dbBaseService = dbBaseFactory.getDbBaseService(sourceId);
|
DbBaseService dbBaseService = databaseServiceFactory.getDbBaseService(sourceId);
|
||||||
dbBaseService.deleteProcedure(sourceId, dbName, typeName, procName);
|
dbBaseService.deleteProcedure(sourceId, dbName, typeName, procName);
|
||||||
return DocDbResponseJson.ok();
|
return DocDbResponseJson.ok();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@@ -133,7 +131,7 @@ public class DbProcedureController {
|
|||||||
this.judgeAuth(sourceId, DbAuthType.PROC_EDIT.getName(), "没有修改该库函数的权限");
|
this.judgeAuth(sourceId, DbAuthType.PROC_EDIT.getName(), "没有修改该库函数的权限");
|
||||||
DbProcLog dbProcLog = this.createDbProcLog(sourceId, dbName, typeName, procName, procSql);
|
DbProcLog dbProcLog = this.createDbProcLog(sourceId, dbName, typeName, procName, procSql);
|
||||||
try {
|
try {
|
||||||
DbBaseService dbBaseService = dbBaseFactory.getDbBaseService(sourceId);
|
DbBaseService dbBaseService = databaseServiceFactory.getDbBaseService(sourceId);
|
||||||
ExecuteResult executeResult = dbBaseService.saveProcedure(sourceId, dbName, typeName, procName, procSql);
|
ExecuteResult executeResult = dbBaseService.saveProcedure(sourceId, dbName, typeName, procName, procSql);
|
||||||
if (StringUtils.isNotBlank(executeResult.getErrMsg())) {
|
if (StringUtils.isNotBlank(executeResult.getErrMsg())) {
|
||||||
dbProcLog.setStatus(2);
|
dbProcLog.setStatus(2);
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import com.zyplayer.doc.db.controller.vo.TableColumnVo;
|
|||||||
import com.zyplayer.doc.db.framework.consts.DbAuthType;
|
import com.zyplayer.doc.db.framework.consts.DbAuthType;
|
||||||
import com.zyplayer.doc.db.framework.db.dto.TableColumnDescDto;
|
import com.zyplayer.doc.db.framework.db.dto.TableColumnDescDto;
|
||||||
import com.zyplayer.doc.db.framework.json.DocDbResponseJson;
|
import com.zyplayer.doc.db.framework.json.DocDbResponseJson;
|
||||||
import com.zyplayer.doc.db.service.DbBaseFactory;
|
import com.zyplayer.doc.db.service.DatabaseServiceFactory;
|
||||||
import com.zyplayer.doc.db.service.DbBaseService;
|
import com.zyplayer.doc.db.service.DbBaseService;
|
||||||
import org.apache.commons.collections.CollectionUtils;
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
@@ -36,13 +36,13 @@ public class DbTableRelationController {
|
|||||||
private static Logger logger = LoggerFactory.getLogger(DbTableRelationController.class);
|
private static Logger logger = LoggerFactory.getLogger(DbTableRelationController.class);
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
DbBaseFactory dbBaseFactory;
|
DatabaseServiceFactory databaseServiceFactory;
|
||||||
@Resource
|
@Resource
|
||||||
DbTableRelationService dbTableRelationService;
|
DbTableRelationService dbTableRelationService;
|
||||||
|
|
||||||
@PostMapping(value = "/update")
|
@PostMapping(value = "/update")
|
||||||
public ResponseJson update(TableRelationParam param) {
|
public ResponseJson update(TableRelationParam param) {
|
||||||
DbBaseService dbBaseService = dbBaseFactory.getDbBaseService(param.getSourceId());
|
DbBaseService dbBaseService = databaseServiceFactory.getDbBaseService(param.getSourceId());
|
||||||
dbBaseService.judgeAuth(param.getSourceId(), DbAuthType.UPDATE.getName(), "没有该库的执行权限");
|
dbBaseService.judgeAuth(param.getSourceId(), DbAuthType.UPDATE.getName(), "没有该库的执行权限");
|
||||||
dbTableRelationService.update(param);
|
dbTableRelationService.update(param);
|
||||||
return DocDbResponseJson.ok();
|
return DocDbResponseJson.ok();
|
||||||
@@ -53,7 +53,7 @@ public class DbTableRelationController {
|
|||||||
TableRelationVo relationVo = new TableRelationVo();
|
TableRelationVo relationVo = new TableRelationVo();
|
||||||
relationVo.setDbName(param.getDbName());
|
relationVo.setDbName(param.getDbName());
|
||||||
relationVo.setName(param.getTableName());
|
relationVo.setName(param.getTableName());
|
||||||
DbBaseService dbBaseService = dbBaseFactory.getDbBaseService(param.getSourceId());
|
DbBaseService dbBaseService = databaseServiceFactory.getDbBaseService(param.getSourceId());
|
||||||
TableColumnVo tableColumn = dbBaseService.getTableColumnList(param.getSourceId(), param.getDbName(), param.getTableName());
|
TableColumnVo tableColumn = dbBaseService.getTableColumnList(param.getSourceId(), param.getDbName(), param.getTableName());
|
||||||
if (CollectionUtils.isNotEmpty(tableColumn.getColumnList())) {
|
if (CollectionUtils.isNotEmpty(tableColumn.getColumnList())) {
|
||||||
Set<String> drillPath = new HashSet<>();
|
Set<String> drillPath = new HashSet<>();
|
||||||
@@ -93,7 +93,7 @@ public class DbTableRelationController {
|
|||||||
if (CollectionUtils.isEmpty(relationList)) {
|
if (CollectionUtils.isEmpty(relationList)) {
|
||||||
return resultRelationList;
|
return resultRelationList;
|
||||||
}
|
}
|
||||||
DbBaseService dbBaseService = dbBaseFactory.getDbBaseService(sourceId);
|
DbBaseService dbBaseService = databaseServiceFactory.getDbBaseService(sourceId);
|
||||||
for (DbTableRelation tableRelation : relationList) {
|
for (DbTableRelation tableRelation : relationList) {
|
||||||
String endDbName = tableRelation.getStartDbName();
|
String endDbName = tableRelation.getStartDbName();
|
||||||
String endTableName = tableRelation.getStartTableName();
|
String endTableName = tableRelation.getStartTableName();
|
||||||
|
|||||||
@@ -1,15 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
<mapper namespace="com.zyplayer.doc.db.framework.db.mapper.mysql.MysqlMapper">
|
<mapper namespace="com.zyplayer.doc.db.framework.db.mapper.mysql.HiveMapper">
|
||||||
|
|
||||||
<select id="getColumnInfo" resultType="com.zyplayer.doc.db.framework.db.dto.ColumnInfoDto">
|
|
||||||
select
|
|
||||||
IS_NULLABLE isNullable, COLUMN_TYPE columnType, CHARACTER_MAXIMUM_LENGTH maxLength,
|
|
||||||
COLUMN_DEFAULT columnDefault,EXTRA extra
|
|
||||||
from information_schema.columns t
|
|
||||||
where t.table_schema=#{dbName}
|
|
||||||
and t.table_name=#{tableName}
|
|
||||||
and t.column_name=#{columnName}
|
|
||||||
</select>
|
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="getTableStatus" resultType="com.zyplayer.doc.db.controller.vo.TableStatusVo">
|
<select id="getTableStatus" resultType="com.zyplayer.doc.db.controller.vo.TableStatusVo">
|
||||||
select 1
|
select #{tableName} as name
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="getTableList" resultType="com.zyplayer.doc.db.framework.db.dto.TableInfoDto">
|
<select id="getTableList" resultType="com.zyplayer.doc.db.framework.db.dto.TableInfoDto">
|
||||||
@@ -31,7 +31,7 @@
|
|||||||
FROM ${dbName}..SysObjects Where XType='U' ORDER BY NAME
|
FROM ${dbName}..SysObjects Where XType='U' ORDER BY NAME
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="getTableColumnList" resultMap="TableColumnDescDtoMap">
|
<select id="getTableColumnList" resultType="com.zyplayer.doc.db.framework.db.dto.TableColumnDescDto">
|
||||||
WITH PRIMARYINFO( COLUMNNAME ,ISPRAMARY) AS
|
WITH PRIMARYINFO( COLUMNNAME ,ISPRAMARY) AS
|
||||||
(
|
(
|
||||||
SELECT C.NAME,'true' AS COLUMNNAME
|
SELECT C.NAME,'true' AS COLUMNNAME
|
||||||
@@ -46,7 +46,8 @@
|
|||||||
SELECT (
|
SELECT (
|
||||||
SELECT IS_IDENTITY FROM SYS.ALL_COLUMNS
|
SELECT IS_IDENTITY FROM SYS.ALL_COLUMNS
|
||||||
WHERE SYS.ALL_COLUMNS.NAME=SYSCOLUMNS.NAME AND OBJECT_ID = OBJECT_ID(#{tableName})
|
WHERE SYS.ALL_COLUMNS.NAME=SYSCOLUMNS.NAME AND OBJECT_ID = OBJECT_ID(#{tableName})
|
||||||
) ISIDENTITY,SYSCOLUMNS.NAME NAME,SYSTYPES.NAME TYPE,Iif(SYSCOLUMNS.ISNULLABLE=1,'1','0') NULLABLE,SYSCOLUMNS.LENGTH LENGTH,PRIMARYINFO.ISPRAMARY
|
) selfIncrement, SYSCOLUMNS.NAME name,SYSTYPES.NAME type,Iif(SYSCOLUMNS.ISNULLABLE=1,'1','0') nullable,
|
||||||
|
SYSCOLUMNS.LENGTH length,PRIMARYINFO.ISPRAMARY primaryKey
|
||||||
FROM SYSCOLUMNS
|
FROM SYSCOLUMNS
|
||||||
LEFT JOIN PRIMARYINFO ON PRIMARYINFO.COLUMNNAME=NAME
|
LEFT JOIN PRIMARYINFO ON PRIMARYINFO.COLUMNNAME=NAME
|
||||||
LEFT JOIN SYSTYPES ON SYSCOLUMNS.XUSERTYPE = SYSTYPES.XUSERTYPE
|
LEFT JOIN SYSTYPES ON SYSCOLUMNS.XUSERTYPE = SYSTYPES.XUSERTYPE
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
<mapper namespace="com.zyplayer.doc.db.framework.db.mapper.base.BaseMapper">
|
<mapper namespace="com.zyplayer.doc.db.framework.db.mapper.sqlserver.SqlServerMapper">
|
||||||
|
|
||||||
<select id="getTableColumnDescList" resultType="com.zyplayer.doc.db.framework.db.dto.TableColumnDescDto">
|
<select id="getTableColumnDescList" resultType="com.zyplayer.doc.db.framework.db.dto.TableColumnDescDto">
|
||||||
SELECT B.name AS name,C.value AS description
|
SELECT B.name AS name,C.value AS description
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ import com.zyplayer.doc.core.exception.ConfirmException;
|
|||||||
import com.zyplayer.doc.db.framework.db.bean.DatabaseFactoryBean;
|
import com.zyplayer.doc.db.framework.db.bean.DatabaseFactoryBean;
|
||||||
import com.zyplayer.doc.db.framework.db.bean.DatabaseRegistrationBean;
|
import com.zyplayer.doc.db.framework.db.bean.DatabaseRegistrationBean;
|
||||||
import com.zyplayer.doc.db.framework.db.enums.DatabaseProductEnum;
|
import com.zyplayer.doc.db.framework.db.enums.DatabaseProductEnum;
|
||||||
|
import com.zyplayer.doc.db.service.download.BaseDownloadService;
|
||||||
|
import com.zyplayer.doc.db.service.download.DownloadService;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.PostConstruct;
|
import javax.annotation.PostConstruct;
|
||||||
@@ -13,17 +15,24 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class DbBaseFactory {
|
public class DatabaseServiceFactory {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
DatabaseRegistrationBean databaseRegistrationBean;
|
DatabaseRegistrationBean databaseRegistrationBean;
|
||||||
@Resource
|
@Resource
|
||||||
private List<DbBaseService> dbBaseServiceList;
|
private List<DbBaseService> dbBaseServiceList;
|
||||||
private final Map<DatabaseProductEnum, DbBaseService> dbBaseServiceMap = new HashMap<>();
|
private final Map<DatabaseProductEnum, DbBaseService> dbBaseServiceMap = new HashMap<>();
|
||||||
|
// 下载服务
|
||||||
|
@Resource
|
||||||
|
private BaseDownloadService baseDownloadService;
|
||||||
|
@Resource
|
||||||
|
private List<DownloadService> downloadServiceList;
|
||||||
|
private final Map<DatabaseProductEnum, DownloadService> downloadServiceMap = new HashMap<>();
|
||||||
|
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
private void init() {
|
private void init() {
|
||||||
dbBaseServiceList.forEach(item -> dbBaseServiceMap.put(item.getDatabaseProduct(), item));
|
dbBaseServiceList.forEach(item -> dbBaseServiceMap.put(item.getDatabaseProduct(), item));
|
||||||
|
downloadServiceList.forEach(item -> downloadServiceMap.put(item.getDatabaseProductEnum(), item));
|
||||||
}
|
}
|
||||||
|
|
||||||
public DbBaseService getDbBaseService(Long sourceId) {
|
public DbBaseService getDbBaseService(Long sourceId) {
|
||||||
@@ -34,4 +43,13 @@ public class DbBaseFactory {
|
|||||||
return dbBaseServiceMap.get(databaseFactoryBean.getDatabaseProduct());
|
return dbBaseServiceMap.get(databaseFactoryBean.getDatabaseProduct());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取下载服务
|
||||||
|
* @param databaseProductEnum 数据库类型
|
||||||
|
* @return 下载服务
|
||||||
|
*/
|
||||||
|
public DownloadService getDownloadService(DatabaseProductEnum databaseProductEnum) {
|
||||||
|
return downloadServiceMap.getOrDefault(databaseProductEnum, baseDownloadService);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,8 +1,5 @@
|
|||||||
package com.zyplayer.doc.db.service;
|
package com.zyplayer.doc.db.service;
|
||||||
|
|
||||||
import cn.hutool.core.date.DateTime;
|
|
||||||
import cn.hutool.core.io.IoUtil;
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
|
||||||
import com.zyplayer.doc.core.exception.ConfirmException;
|
import com.zyplayer.doc.core.exception.ConfirmException;
|
||||||
import com.zyplayer.doc.data.config.security.DocUserUtil;
|
import com.zyplayer.doc.data.config.security.DocUserUtil;
|
||||||
import com.zyplayer.doc.data.repository.support.consts.DocAuthConst;
|
import com.zyplayer.doc.data.repository.support.consts.DocAuthConst;
|
||||||
@@ -21,12 +18,12 @@ import com.zyplayer.doc.db.framework.db.mapper.base.ExecuteParam;
|
|||||||
import com.zyplayer.doc.db.framework.db.mapper.base.ExecuteResult;
|
import com.zyplayer.doc.db.framework.db.mapper.base.ExecuteResult;
|
||||||
import com.zyplayer.doc.db.framework.db.mapper.base.SqlExecutor;
|
import com.zyplayer.doc.db.framework.db.mapper.base.SqlExecutor;
|
||||||
import com.zyplayer.doc.db.service.download.BaseDownloadService;
|
import com.zyplayer.doc.db.service.download.BaseDownloadService;
|
||||||
|
import com.zyplayer.doc.db.service.download.DownloadService;
|
||||||
import org.apache.commons.collections.CollectionUtils;
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.net.URLEncoder;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@@ -41,6 +38,8 @@ public abstract class DbBaseService {
|
|||||||
@Resource
|
@Resource
|
||||||
SqlExecutor sqlExecutor;
|
SqlExecutor sqlExecutor;
|
||||||
@Resource
|
@Resource
|
||||||
|
DatabaseServiceFactory databaseServiceFactory;
|
||||||
|
@Resource
|
||||||
BaseDownloadService baseDownloadService;
|
BaseDownloadService baseDownloadService;
|
||||||
@Resource
|
@Resource
|
||||||
DatabaseRegistrationBean databaseRegistrationBean;
|
DatabaseRegistrationBean databaseRegistrationBean;
|
||||||
@@ -358,8 +357,9 @@ public abstract class DbBaseService {
|
|||||||
* @since 2020年4月24日
|
* @since 2020年4月24日
|
||||||
*/
|
*/
|
||||||
public String getQueryPageSql(DataViewParam dataViewParam) {
|
public String getQueryPageSql(DataViewParam dataViewParam) {
|
||||||
|
String queryColumns = StringUtils.defaultIfBlank(dataViewParam.getRetainColumn(), "*");
|
||||||
StringBuilder sqlSb = new StringBuilder();
|
StringBuilder sqlSb = new StringBuilder();
|
||||||
sqlSb.append(String.format("select * from %s.%s", dataViewParam.getDbName(), dataViewParam.getTableName()));
|
sqlSb.append(String.format("select %s from %s.%s", queryColumns, dataViewParam.getDbName(), dataViewParam.getTableName()));
|
||||||
if (StringUtils.isNotBlank(dataViewParam.getCondition())) {
|
if (StringUtils.isNotBlank(dataViewParam.getCondition())) {
|
||||||
sqlSb.append(String.format(" where %s", dataViewParam.getCondition()));
|
sqlSb.append(String.format(" where %s", dataViewParam.getCondition()));
|
||||||
}
|
}
|
||||||
@@ -393,14 +393,16 @@ public abstract class DbBaseService {
|
|||||||
* @since 2020年6月5日
|
* @since 2020年6月5日
|
||||||
*/
|
*/
|
||||||
public void downloadSingleTableData(HttpServletResponse response, DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet) throws Exception {
|
public void downloadSingleTableData(HttpServletResponse response, DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet) throws Exception {
|
||||||
|
DatabaseProductEnum databaseProduct = databaseServiceFactory.getDbBaseService(param.getSourceId()).getDatabaseProduct();
|
||||||
|
DownloadService downloadService = databaseServiceFactory.getDownloadService(databaseProduct);
|
||||||
if (Objects.equals(param.getDownloadType(), "insert")) {
|
if (Objects.equals(param.getDownloadType(), "insert")) {
|
||||||
String resultStr = baseDownloadService.downloadDataByInsert(param, executeParam, dataCols, conditionSet);
|
String resultStr = downloadService.downloadDataByInsert(param, executeParam, dataCols, conditionSet);
|
||||||
baseDownloadService.sendResponse(response, param.getTableName(), ".sql", resultStr);
|
baseDownloadService.sendResponse(response, param.getTableName(), ".sql", resultStr);
|
||||||
} else if (Objects.equals(param.getDownloadType(), "update")) {
|
} else if (Objects.equals(param.getDownloadType(), "update")) {
|
||||||
String resultStr = baseDownloadService.downloadDataByUpdate(param, executeParam, dataCols, conditionSet);
|
String resultStr = downloadService.downloadDataByUpdate(param, executeParam, dataCols, conditionSet);
|
||||||
baseDownloadService.sendResponse(response, param.getTableName(), ".sql", resultStr);
|
baseDownloadService.sendResponse(response, param.getTableName(), ".sql", resultStr);
|
||||||
} else if (Objects.equals(param.getDownloadType(), "json")) {
|
} else if (Objects.equals(param.getDownloadType(), "json")) {
|
||||||
String resultStr = baseDownloadService.downloadDataByJson(param, executeParam, dataCols, conditionSet);
|
String resultStr = downloadService.downloadDataByJson(param, executeParam, dataCols, conditionSet);
|
||||||
baseDownloadService.sendResponse(response, param.getTableName(), ".json", resultStr);
|
baseDownloadService.sendResponse(response, param.getTableName(), ".json", resultStr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -412,12 +414,14 @@ public abstract class DbBaseService {
|
|||||||
* @since 2020年6月5日
|
* @since 2020年6月5日
|
||||||
*/
|
*/
|
||||||
public String getDownloadTableData(DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet) throws Exception {
|
public String getDownloadTableData(DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet) throws Exception {
|
||||||
|
DatabaseProductEnum databaseProduct = databaseServiceFactory.getDbBaseService(param.getSourceId()).getDatabaseProduct();
|
||||||
|
DownloadService downloadService = databaseServiceFactory.getDownloadService(databaseProduct);
|
||||||
if (Objects.equals(param.getDownloadType(), "insert")) {
|
if (Objects.equals(param.getDownloadType(), "insert")) {
|
||||||
return baseDownloadService.downloadDataByInsert(param, executeParam, dataCols, conditionSet);
|
return downloadService.downloadDataByInsert(param, executeParam, dataCols, conditionSet);
|
||||||
} else if (Objects.equals(param.getDownloadType(), "update")) {
|
} else if (Objects.equals(param.getDownloadType(), "update")) {
|
||||||
return baseDownloadService.downloadDataByUpdate(param, executeParam, dataCols, conditionSet);
|
return downloadService.downloadDataByUpdate(param, executeParam, dataCols, conditionSet);
|
||||||
} else if (Objects.equals(param.getDownloadType(), "json")) {
|
} else if (Objects.equals(param.getDownloadType(), "json")) {
|
||||||
return baseDownloadService.downloadDataByJson(param, executeParam, dataCols, conditionSet);
|
return downloadService.downloadDataByJson(param, executeParam, dataCols, conditionSet);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,18 +1,30 @@
|
|||||||
package com.zyplayer.doc.db.service;
|
package com.zyplayer.doc.db.service;
|
||||||
|
|
||||||
|
import com.zyplayer.doc.db.controller.param.DataViewParam;
|
||||||
import com.zyplayer.doc.db.controller.vo.TableColumnVo;
|
import com.zyplayer.doc.db.controller.vo.TableColumnVo;
|
||||||
import com.zyplayer.doc.db.framework.db.dto.TableColumnDescDto;
|
import com.zyplayer.doc.db.framework.db.dto.TableColumnDescDto;
|
||||||
import com.zyplayer.doc.db.framework.db.enums.DatabaseProductEnum;
|
import com.zyplayer.doc.db.framework.db.enums.DatabaseProductEnum;
|
||||||
|
import com.zyplayer.doc.db.framework.db.mapper.base.ExecuteParam;
|
||||||
import com.zyplayer.doc.db.framework.db.mapper.sqlserver.SqlServerMapper;
|
import com.zyplayer.doc.db.framework.db.mapper.sqlserver.SqlServerMapper;
|
||||||
|
import com.zyplayer.doc.db.service.download.BaseDownloadService;
|
||||||
|
import com.zyplayer.doc.db.service.download.SqlserverDownloadService;
|
||||||
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class SqlserverServiceImpl extends DbBaseService {
|
public class SqlserverServiceImpl extends DbBaseService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
SqlserverDownloadService sqlserverDownloadService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DatabaseProductEnum getDatabaseProduct() {
|
public DatabaseProductEnum getDatabaseProduct() {
|
||||||
return DatabaseProductEnum.SQLSERVER;
|
return DatabaseProductEnum.SQLSERVER;
|
||||||
@@ -34,4 +46,59 @@ public class SqlserverServiceImpl extends DbBaseService {
|
|||||||
}
|
}
|
||||||
return tableColumnVo;
|
return tableColumnVo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取分页查询的SQL
|
||||||
|
*
|
||||||
|
* @return 分页查询的SQL
|
||||||
|
* @author 暮光:城中城
|
||||||
|
* @since 2021年6月13日
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String getQueryPageSql(DataViewParam dataViewParam) {
|
||||||
|
String queryColumns = StringUtils.defaultIfBlank(dataViewParam.getRetainColumn(), "*");
|
||||||
|
StringBuilder sqlSb = new StringBuilder();
|
||||||
|
sqlSb.append(String.format("select %s from %s..%s", queryColumns, dataViewParam.getDbName(), dataViewParam.getTableName()));
|
||||||
|
if (StringUtils.isNotBlank(dataViewParam.getCondition())) {
|
||||||
|
sqlSb.append(String.format(" where %s", dataViewParam.getCondition()));
|
||||||
|
}
|
||||||
|
if (StringUtils.isNotBlank(dataViewParam.getOrderColumn()) && StringUtils.isNotBlank(dataViewParam.getOrderType())) {
|
||||||
|
sqlSb.append(String.format(" order by %s %s", dataViewParam.getOrderColumn(), dataViewParam.getOrderType()));
|
||||||
|
}
|
||||||
|
sqlSb.append(String.format(" offset %s row fetch next %s rows only", dataViewParam.getOffset(), dataViewParam.getPageSize()));
|
||||||
|
return sqlSb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取查询总条数的SQL
|
||||||
|
*
|
||||||
|
* @return 查询总条数的SQL
|
||||||
|
* @author 暮光:城中城
|
||||||
|
* @since 2020年4月24日
|
||||||
|
*/
|
||||||
|
public String getQueryCountSql(DataViewParam dataViewParam) {
|
||||||
|
StringBuilder sqlSb = new StringBuilder();
|
||||||
|
sqlSb.append(String.format("select count(1) as counts from %s..%s", dataViewParam.getDbName(), dataViewParam.getTableName()));
|
||||||
|
if (StringUtils.isNotBlank(dataViewParam.getCondition())) {
|
||||||
|
sqlSb.append(String.format(" where %s", dataViewParam.getCondition()));
|
||||||
|
}
|
||||||
|
return sqlSb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取全量数据查询的SQL
|
||||||
|
*
|
||||||
|
* @return 分页查询的SQL
|
||||||
|
* @author 暮光:城中城
|
||||||
|
* @since 2020年4月24日
|
||||||
|
*/
|
||||||
|
public String getQueryAllSql(DataViewParam dataViewParam) {
|
||||||
|
String queryColumns = StringUtils.defaultIfBlank(dataViewParam.getRetainColumn(), "*");
|
||||||
|
StringBuilder sqlSb = new StringBuilder();
|
||||||
|
sqlSb.append(String.format("select %s from %s..%s", queryColumns, dataViewParam.getDbName(), dataViewParam.getTableName()));
|
||||||
|
if (StringUtils.isNotBlank(dataViewParam.getCondition())) {
|
||||||
|
sqlSb.append(String.format(" where %s", dataViewParam.getCondition()));
|
||||||
|
}
|
||||||
|
return sqlSb.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,9 +10,10 @@ import com.alibaba.fastjson.JSONObject;
|
|||||||
import com.zyplayer.doc.db.controller.param.DataViewParam;
|
import com.zyplayer.doc.db.controller.param.DataViewParam;
|
||||||
import com.zyplayer.doc.db.controller.vo.TableDdlVo;
|
import com.zyplayer.doc.db.controller.vo.TableDdlVo;
|
||||||
import com.zyplayer.doc.db.framework.db.dto.TableColumnDescDto;
|
import com.zyplayer.doc.db.framework.db.dto.TableColumnDescDto;
|
||||||
|
import com.zyplayer.doc.db.framework.db.enums.DatabaseProductEnum;
|
||||||
import com.zyplayer.doc.db.framework.db.mapper.base.ExecuteParam;
|
import com.zyplayer.doc.db.framework.db.mapper.base.ExecuteParam;
|
||||||
import com.zyplayer.doc.db.framework.db.mapper.base.SqlExecutor;
|
import com.zyplayer.doc.db.framework.db.mapper.base.SqlExecutor;
|
||||||
import com.zyplayer.doc.db.service.DbBaseFactory;
|
import com.zyplayer.doc.db.service.DatabaseServiceFactory;
|
||||||
import com.zyplayer.doc.db.service.DbBaseService;
|
import com.zyplayer.doc.db.service.DbBaseService;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@@ -31,13 +32,18 @@ import java.util.regex.Pattern;
|
|||||||
* 基础的数据导出服务类,按照MySQL规范写的,不满足的可新增类来实现
|
* 基础的数据导出服务类,按照MySQL规范写的,不满足的可新增类来实现
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
public class BaseDownloadService {
|
public class BaseDownloadService implements DownloadService {
|
||||||
private static Logger logger = LoggerFactory.getLogger(BaseDownloadService.class);
|
private static Logger logger = LoggerFactory.getLogger(BaseDownloadService.class);
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
SqlExecutor sqlExecutor;
|
SqlExecutor sqlExecutor;
|
||||||
@Resource
|
@Resource
|
||||||
DbBaseFactory dbBaseFactory;
|
DatabaseServiceFactory databaseServiceFactory;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DatabaseProductEnum getDatabaseProductEnum() {
|
||||||
|
return DatabaseProductEnum.MYSQL;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 导出数据为insert语句格式
|
* 导出数据为insert语句格式
|
||||||
@@ -45,6 +51,7 @@ public class BaseDownloadService {
|
|||||||
* @author 暮光:城中城
|
* @author 暮光:城中城
|
||||||
* @since 2020年6月5日
|
* @since 2020年6月5日
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public String downloadDataByInsert(DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet) throws Exception {
|
public String downloadDataByInsert(DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet) throws Exception {
|
||||||
String dbTableName = String.format("`%s`.`%s`", param.getDbName(), param.getTableName());
|
String dbTableName = String.format("`%s`.`%s`", param.getDbName(), param.getTableName());
|
||||||
StringBuilder resultSb = new StringBuilder();
|
StringBuilder resultSb = new StringBuilder();
|
||||||
@@ -53,9 +60,14 @@ public class BaseDownloadService {
|
|||||||
if (Objects.equals(param.getDropTableFlag(), 1)) {
|
if (Objects.equals(param.getDropTableFlag(), 1)) {
|
||||||
resultSb.append("DROP TABLE IF EXISTS ").append(dbTableName).append(";\n");
|
resultSb.append("DROP TABLE IF EXISTS ").append(dbTableName).append(";\n");
|
||||||
}
|
}
|
||||||
DbBaseService dbBaseService = dbBaseFactory.getDbBaseService(param.getSourceId());
|
DbBaseService dbBaseService = databaseServiceFactory.getDbBaseService(param.getSourceId());
|
||||||
TableDdlVo tableDdlVo = dbBaseService.getTableDdl(param.getSourceId(), param.getDbName(), param.getTableName());
|
try {
|
||||||
resultSb.append(tableDdlVo.getTableDDLByType()).append("\n\n");
|
TableDdlVo tableDdlVo = dbBaseService.getTableDdl(param.getSourceId(), param.getDbName(), param.getTableName());
|
||||||
|
resultSb.append(tableDdlVo.getTableDDLByType()).append("\n\n");
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.error("导出表结构失败:{}", e.getMessage());
|
||||||
|
resultSb.append("-- !!导出表 ").append(dbTableName).append(" 结构失败!!\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
resultSb.append("-- 导出表 ").append(dbTableName).append(" 数据\n");
|
resultSb.append("-- 导出表 ").append(dbTableName).append(" 数据\n");
|
||||||
Pattern pattern = Pattern.compile("\t|\r\n|\r|\n|\\s+");
|
Pattern pattern = Pattern.compile("\t|\r\n|\r|\n|\\s+");
|
||||||
@@ -92,6 +104,7 @@ public class BaseDownloadService {
|
|||||||
* @author 暮光:城中城
|
* @author 暮光:城中城
|
||||||
* @since 2020年6月5日
|
* @since 2020年6月5日
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public String downloadDataByUpdate(DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet) throws Exception {
|
public String downloadDataByUpdate(DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet) throws Exception {
|
||||||
String dbTableName = String.format("`%s`.`%s`", param.getDbName(), param.getTableName());
|
String dbTableName = String.format("`%s`.`%s`", param.getDbName(), param.getTableName());
|
||||||
StringBuilder resultSb = new StringBuilder();
|
StringBuilder resultSb = new StringBuilder();
|
||||||
@@ -103,23 +116,25 @@ public class BaseDownloadService {
|
|||||||
StringBuilder values = new StringBuilder();
|
StringBuilder values = new StringBuilder();
|
||||||
StringBuilder where = new StringBuilder();
|
StringBuilder where = new StringBuilder();
|
||||||
for (TableColumnDescDto dataCol : dataCols) {
|
for (TableColumnDescDto dataCol : dataCols) {
|
||||||
if (values.length() > 0) values.append(", ");
|
|
||||||
values.append(dataCol.getName()).append("=");
|
|
||||||
Object val = item.get(dataCol.getName());
|
Object val = item.get(dataCol.getName());
|
||||||
if (this.isNumber(dataCol.getType())) {
|
if (conditionSet.contains(dataCol.getName())) {
|
||||||
values.append(val);
|
if (this.isNumber(dataCol.getType())) {
|
||||||
if (conditionSet.contains(dataCol.getName())) {
|
|
||||||
if (where.length() > 0) where.append(" and ");
|
if (where.length() > 0) where.append(" and ");
|
||||||
where.append(dataCol.getName()).append(" = ").append(val);
|
where.append(dataCol.getName()).append(" = ").append(val);
|
||||||
}
|
} else {
|
||||||
} else {
|
|
||||||
val = (val == null) ? "" : val;
|
|
||||||
val = val.toString().replaceAll("'", "''");
|
|
||||||
values.append("'").append(val).append("'");
|
|
||||||
if (conditionSet.contains(dataCol.getName())) {
|
|
||||||
if (where.length() > 0) where.append(" and ");
|
if (where.length() > 0) where.append(" and ");
|
||||||
where.append(dataCol.getName()).append(" = ").append("'").append(val).append("'");
|
where.append(dataCol.getName()).append(" = ").append("'").append(val).append("'");
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
if (values.length() > 0) values.append(", ");
|
||||||
|
values.append(dataCol.getName()).append("=");
|
||||||
|
if (this.isNumber(dataCol.getType())) {
|
||||||
|
values.append(val);
|
||||||
|
} else {
|
||||||
|
val = (val == null) ? "" : val;
|
||||||
|
val = val.toString().replaceAll("'", "''");
|
||||||
|
values.append("'").append(val).append("'");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (where.length() > 0) where.insert(0, " where ");
|
if (where.length() > 0) where.insert(0, " where ");
|
||||||
@@ -135,6 +150,7 @@ public class BaseDownloadService {
|
|||||||
* @author 暮光:城中城
|
* @author 暮光:城中城
|
||||||
* @since 2020年6月5日
|
* @since 2020年6月5日
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public String downloadDataByJson(DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet) throws Exception {
|
public String downloadDataByJson(DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet) throws Exception {
|
||||||
StringBuilder resultSb = new StringBuilder();
|
StringBuilder resultSb = new StringBuilder();
|
||||||
resultSb.append("[");
|
resultSb.append("[");
|
||||||
@@ -196,6 +212,7 @@ public class BaseDownloadService {
|
|||||||
* @param type 类型
|
* @param type 类型
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public boolean isNumber(String type) {
|
public boolean isNumber(String type) {
|
||||||
return type.contains("int")
|
return type.contains("int")
|
||||||
|| type.contains("bit")
|
|| type.contains("bit")
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
package com.zyplayer.doc.db.service.download;
|
||||||
|
|
||||||
|
import com.zyplayer.doc.db.controller.param.DataViewParam;
|
||||||
|
import com.zyplayer.doc.db.framework.db.dto.TableColumnDescDto;
|
||||||
|
import com.zyplayer.doc.db.framework.db.enums.DatabaseProductEnum;
|
||||||
|
import com.zyplayer.doc.db.framework.db.mapper.base.ExecuteParam;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public interface DownloadService {
|
||||||
|
|
||||||
|
DatabaseProductEnum getDatabaseProductEnum();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出数据为insert语句格式
|
||||||
|
*
|
||||||
|
* @author 暮光:城中城
|
||||||
|
* @since 2020年6月5日
|
||||||
|
*/
|
||||||
|
public String downloadDataByInsert(DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet) throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出数据为update语句格式
|
||||||
|
*
|
||||||
|
* @author 暮光:城中城
|
||||||
|
* @since 2020年6月5日
|
||||||
|
*/
|
||||||
|
public String downloadDataByUpdate(DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet) throws Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出数据为json格式
|
||||||
|
*
|
||||||
|
* @author 暮光:城中城
|
||||||
|
* @since 2020年6月5日
|
||||||
|
*/
|
||||||
|
public String downloadDataByJson(DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet) throws Exception;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否是数值类型
|
||||||
|
*
|
||||||
|
* @param type 类型
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
public boolean isNumber(String type);
|
||||||
|
}
|
||||||
@@ -0,0 +1,179 @@
|
|||||||
|
package com.zyplayer.doc.db.service.download;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.zyplayer.doc.db.controller.param.DataViewParam;
|
||||||
|
import com.zyplayer.doc.db.controller.vo.TableDdlVo;
|
||||||
|
import com.zyplayer.doc.db.framework.db.dto.TableColumnDescDto;
|
||||||
|
import com.zyplayer.doc.db.framework.db.enums.DatabaseProductEnum;
|
||||||
|
import com.zyplayer.doc.db.framework.db.mapper.base.ExecuteParam;
|
||||||
|
import com.zyplayer.doc.db.framework.db.mapper.base.SqlExecutor;
|
||||||
|
import com.zyplayer.doc.db.service.DatabaseServiceFactory;
|
||||||
|
import com.zyplayer.doc.db.service.DbBaseService;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SQLServer的数据导出服务类
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class SqlserverDownloadService implements DownloadService {
|
||||||
|
private static Logger logger = LoggerFactory.getLogger(SqlserverDownloadService.class);
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
SqlExecutor sqlExecutor;
|
||||||
|
@Resource
|
||||||
|
DatabaseServiceFactory databaseServiceFactory;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DatabaseProductEnum getDatabaseProductEnum() {
|
||||||
|
return DatabaseProductEnum.SQLSERVER;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出数据为insert语句格式
|
||||||
|
*
|
||||||
|
* @author 暮光:城中城
|
||||||
|
* @since 2020年6月5日
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String downloadDataByInsert(DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet) throws Exception {
|
||||||
|
String dbTableName = String.format("%s..%s", param.getDbName(), param.getTableName());
|
||||||
|
StringBuilder resultSb = new StringBuilder();
|
||||||
|
if (Objects.equals(param.getCreateTableFlag(), 1)) {
|
||||||
|
resultSb.append("-- 导出表 ").append(dbTableName).append(" 结构\n");
|
||||||
|
if (Objects.equals(param.getDropTableFlag(), 1)) {
|
||||||
|
resultSb.append("DROP TABLE IF EXISTS ").append(dbTableName).append(";\n");
|
||||||
|
}
|
||||||
|
DbBaseService dbBaseService = databaseServiceFactory.getDbBaseService(param.getSourceId());
|
||||||
|
try {
|
||||||
|
TableDdlVo tableDdlVo = dbBaseService.getTableDdl(param.getSourceId(), param.getDbName(), param.getTableName());
|
||||||
|
resultSb.append(tableDdlVo.getTableDDLByType()).append("\n\n");
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.error("导出表结构失败:{}", e.getMessage());
|
||||||
|
resultSb.append("-- !!导出表 ").append(dbTableName).append(" 结构失败!!\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
resultSb.append("-- 导出表 ").append(dbTableName).append(" 数据\n");
|
||||||
|
Pattern pattern = Pattern.compile("\t|\r\n|\r|\n|\\s+");
|
||||||
|
String executeSql = pattern.matcher(executeParam.getSql()).replaceAll(" ");
|
||||||
|
resultSb.append("-- 导出查询SQL:").append(executeSql).append(";\n");
|
||||||
|
// 执行数据查询操作
|
||||||
|
sqlExecutor.execute(executeParam, item -> {
|
||||||
|
StringBuilder names = new StringBuilder();
|
||||||
|
for (TableColumnDescDto dataCol : dataCols) {
|
||||||
|
if (names.length() > 0) names.append(", ");
|
||||||
|
names.append(dataCol.getName());
|
||||||
|
}
|
||||||
|
StringBuilder values = new StringBuilder();
|
||||||
|
for (TableColumnDescDto dataCol : dataCols) {
|
||||||
|
if (values.length() > 0) values.append(", ");
|
||||||
|
Object val = item.get(dataCol.getName());
|
||||||
|
if (this.isNumber(dataCol.getType())) {
|
||||||
|
values.append(val);
|
||||||
|
} else {
|
||||||
|
val = (val == null) ? "" : val;
|
||||||
|
val = val.toString().replaceAll("'", "''");
|
||||||
|
values.append("'").append(val).append("'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
String resultData = "insert into " + dbTableName + " (" + names + ") values (" + values + ");\n";
|
||||||
|
resultSb.append(resultData);
|
||||||
|
});
|
||||||
|
return resultSb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出数据为update语句格式
|
||||||
|
*
|
||||||
|
* @author 暮光:城中城
|
||||||
|
* @since 2020年6月5日
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String downloadDataByUpdate(DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet) throws Exception {
|
||||||
|
String dbTableName = String.format("%s..%s", param.getDbName(), param.getTableName());
|
||||||
|
StringBuilder resultSb = new StringBuilder();
|
||||||
|
Pattern pattern = Pattern.compile("\t|\r\n|\r|\n|\\s+");
|
||||||
|
String executeSql = pattern.matcher(executeParam.getSql()).replaceAll(" ");
|
||||||
|
resultSb.append("-- 导出查询SQL:").append(executeSql).append(";\n");
|
||||||
|
// 执行数据查询操作
|
||||||
|
sqlExecutor.execute(executeParam, item -> {
|
||||||
|
StringBuilder values = new StringBuilder();
|
||||||
|
StringBuilder where = new StringBuilder();
|
||||||
|
for (TableColumnDescDto dataCol : dataCols) {
|
||||||
|
Object val = item.get(dataCol.getName());
|
||||||
|
if (conditionSet.contains(dataCol.getName())) {
|
||||||
|
if (this.isNumber(dataCol.getType())) {
|
||||||
|
if (where.length() > 0) where.append(" and ");
|
||||||
|
where.append(dataCol.getName()).append(" = ").append(val);
|
||||||
|
} else {
|
||||||
|
if (where.length() > 0) where.append(" and ");
|
||||||
|
where.append(dataCol.getName()).append(" = ").append("'").append(val).append("'");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (values.length() > 0) values.append(", ");
|
||||||
|
values.append(dataCol.getName()).append("=");
|
||||||
|
if (this.isNumber(dataCol.getType())) {
|
||||||
|
values.append(val);
|
||||||
|
} else {
|
||||||
|
val = (val == null) ? "" : val;
|
||||||
|
val = val.toString().replaceAll("'", "''");
|
||||||
|
values.append("'").append(val).append("'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (where.length() > 0) where.insert(0, " where ");
|
||||||
|
String resultData = "update " + dbTableName + " set " + values + where + ";\n";
|
||||||
|
resultSb.append(resultData);
|
||||||
|
});
|
||||||
|
return resultSb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出数据为json格式
|
||||||
|
*
|
||||||
|
* @author 暮光:城中城
|
||||||
|
* @since 2020年6月5日
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String downloadDataByJson(DataViewParam param, ExecuteParam executeParam, List<TableColumnDescDto> dataCols, Set<String> conditionSet) throws Exception {
|
||||||
|
StringBuilder resultSb = new StringBuilder();
|
||||||
|
resultSb.append("[");
|
||||||
|
sqlExecutor.execute(executeParam, item -> {
|
||||||
|
JSONObject result = new JSONObject();
|
||||||
|
for (TableColumnDescDto dataCol : dataCols) {
|
||||||
|
result.put(dataCol.getName(), item.get(dataCol.getName()));
|
||||||
|
}
|
||||||
|
String resultData = result.toJSONString();
|
||||||
|
if (resultSb.length() > 1) {
|
||||||
|
resultSb.append(",");
|
||||||
|
}
|
||||||
|
resultSb.append(resultData);
|
||||||
|
});
|
||||||
|
resultSb.append("]\n");
|
||||||
|
return resultSb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否是数值类型
|
||||||
|
*
|
||||||
|
* @param type 类型
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean isNumber(String type) {
|
||||||
|
return type.contains("int")
|
||||||
|
|| type.contains("bit")
|
||||||
|
|| type.contains("float")
|
||||||
|
|| type.contains("double")
|
||||||
|
|| type.contains("decimal")
|
||||||
|
|| type.contains("real")
|
||||||
|
;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1 +1 @@
|
|||||||
<!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><link rel=icon href=favicon-db.png><title>数据库文档管理</title><link href=css/app.f232fb4e.css rel=preload as=style><link href=css/chunk-vendors.8924efc6.css rel=preload as=style><link href=js/app.356a0de3.js rel=preload as=script><link href=js/chunk-vendors.96aa31ea.js rel=preload as=script><link href=css/chunk-vendors.8924efc6.css rel=stylesheet><link href=css/app.f232fb4e.css rel=stylesheet></head><body><noscript><strong>We're sorry but zyplayer-db-ui doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script src=js/chunk-vendors.96aa31ea.js></script><script src=js/app.356a0de3.js></script></body></html>
|
<!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><link rel=icon href=favicon-db.png><title>数据库文档管理</title><link href=css/app.f232fb4e.css rel=preload as=style><link href=css/chunk-vendors.8924efc6.css rel=preload as=style><link href=js/app.ae04f4d2.js rel=preload as=script><link href=js/chunk-vendors.96aa31ea.js rel=preload as=script><link href=css/chunk-vendors.8924efc6.css rel=stylesheet><link href=css/app.f232fb4e.css rel=stylesheet></head><body><noscript><strong>We're sorry but zyplayer-db-ui doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script src=js/chunk-vendors.96aa31ea.js></script><script src=js/app.ae04f4d2.js></script></body></html>
|
||||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user