Commit 206774fe by yuwei

2.0.0项目初始化

parent 110e4345
......@@ -19,6 +19,7 @@ public class DbQueryProperty implements Serializable {
private String password;
private Integer port;
private String dbName;
private String sid;
/**
* 参数合法性校验
......
......@@ -19,11 +19,11 @@ public enum DbType {
/**
* ORACLE
*/
ORACLE("3", "Oracle11g及以下数据库", "jdbc:oracle:thin:@${host}:${port}:${dbName}"),
ORACLE("3", "Oracle11g及以下数据库", "jdbc:oracle:thin:@${host}:${port}:${sid}"),
/**
* oracle12c new pagination
*/
ORACLE_12C("4", "Oracle12c+数据库", "jdbc:oracle:thin:@${host}:${port}:${dbName}"),
ORACLE_12C("4", "Oracle12c+数据库", "jdbc:oracle:thin:@${host}:${port}:${sid}"),
/**
* POSTGRESQL
*/
......
......@@ -16,17 +16,17 @@ public class DbColumn {
private String dataType;
/**
* 数据长度
* 数据长度
*/
private Integer dataLength;
/**
* 数据精度
* 数据精度
*/
private Integer dataPrecision;
/**
* 数据小数位
* 数据小数位
*/
private Integer dataScale;
......@@ -46,12 +46,12 @@ public class DbColumn {
private Integer colPosition;
/**
* 列默认值
* 列默认值
*/
private String dataDefault;
/**
* 列注释
* 列注释
*/
private String colComment;
}
......@@ -49,10 +49,11 @@ public abstract class AbstractDataSourceFactory implements DataSourceFactory {
}
url = url.replace("${host}", property.getHost());
url = url.replace("${port}", String.valueOf(property.getPort()));
if (null == property.getDbName()){
property.setDbName("");
if (DbType.ORACLE.getDb().equals(property.getDbType()) || DbType.ORACLE_12C.getDb().equals(property.getDbType())) {
url = url.replace("${sid}", property.getSid());
} else {
url = url.replace("${dbName}", property.getDbName());
}
url = url.replace("${dbName}", property.getDbName());
return url;
}
}
......@@ -30,4 +30,6 @@ public class DbSchema implements Serializable {
@ApiModelProperty(value = "密码")
@NotBlank(message = "密码不能为空", groups = {ValidationGroups.Insert.class, ValidationGroups.Update.class})
private String password;
@ApiModelProperty(value = "服务名")
private String sid;
}
......@@ -73,7 +73,7 @@ public class SqlConsoleServiceImpl implements SqlConsoleService {
}
DbSchema dbSchema = dataSource.getDbSchema();
DbQueryProperty dbQueryProperty = new DbQueryProperty(dataSource.getDbType(), dbSchema.getHost(),
dbSchema.getUsername(), dbSchema.getPassword(), dbSchema.getPort(), dbSchema.getDbName());
dbSchema.getUsername(), dbSchema.getPassword(), dbSchema.getPort(), dbSchema.getDbName(), dbSchema.getSid());
DbQuery dbQuery = dataSourceFactory.createDbQuery(dbQueryProperty);
// 定义计数器
final CountDownLatch latch = new CountDownLatch(sqls.size());
......
......@@ -167,13 +167,11 @@ public class DataSourceController extends BaseController {
*/
@ApiOperation(value = "数据库表", notes = "根据数据源的id来获取指定数据库表")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "ID", required = true, dataType = "String", paramType = "path"),
@ApiImplicitParam(name = "dbName", value = "数据库表名", required = true, dataType = "String", paramType = "path")
@ApiImplicitParam(name = "id", value = "ID", required = true, dataType = "String", paramType = "path")
})
@GetMapping("/{id}/{dbName}/tables")
public R getDbTables(@PathVariable String id, @PathVariable String dbName) {
DbQuery dbQuery = dataSourceService.getDbQuery(id);
List<DbTable> tables = dbQuery.getTables(dbName);
@GetMapping("/{id}/tables")
public R getDbTables(@PathVariable String id) {
List<DbTable> tables = dataSourceService.getDbTables(id);
return R.ok().setData(tables);
}
......@@ -185,13 +183,11 @@ public class DataSourceController extends BaseController {
@ApiOperation(value = "数据库表结构", notes = "根据数据源的id来获取指定数据库表的表结构")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "ID", required = true, dataType = "String", paramType = "path"),
@ApiImplicitParam(name = "dbName", value = "数据库名", required = true, dataType = "String", paramType = "path"),
@ApiImplicitParam(name = "tableName", value = "数据表名", required = true, dataType = "String", paramType = "path")
@ApiImplicitParam(name = "tableName", value = "数据库表", required = true, dataType = "String", paramType = "path")
})
@GetMapping("/{id}/{dbName}/{tableName}/columns")
public R getDbTableColumns(@PathVariable String id, @PathVariable String dbName, @PathVariable String tableName) {
DbQuery dbQuery = dataSourceService.getDbQuery(id);
List<DbColumn> columns = dbQuery.getTableColumns(dbName, tableName);
@GetMapping("/{id}/{tableName}/columns")
public R getDbTableColumns(@PathVariable String id, @PathVariable String tableName) {
List<DbColumn> columns = dataSourceService.getDbTableColumns(id, tableName);
return R.ok().setData(columns);
}
......
package cn.datax.service.data.factory.service;
import cn.datax.common.database.DbQuery;
import cn.datax.common.database.core.DbColumn;
import cn.datax.common.database.core.DbTable;
import cn.datax.service.data.factory.api.dto.DataSourceDto;
import cn.datax.service.data.factory.api.entity.DataSourceEntity;
import cn.datax.common.base.BaseService;
......@@ -30,4 +32,8 @@ public interface DataSourceService extends BaseService<DataSourceEntity> {
DbQuery checkConnection(DataSourceDto dataSource);
DbQuery getDbQuery(String id);
List<DbTable> getDbTables(String id);
List<DbColumn> getDbTableColumns(String id, String tableName);
}
......@@ -4,6 +4,8 @@ import cn.datax.common.core.RedisConstant;
import cn.datax.common.database.DataSourceFactory;
import cn.datax.common.database.DbQuery;
import cn.datax.common.database.constants.DbQueryProperty;
import cn.datax.common.database.core.DbColumn;
import cn.datax.common.database.core.DbTable;
import cn.datax.service.data.factory.api.dto.DataSourceDto;
import cn.datax.service.data.factory.api.dto.DbSchema;
import cn.datax.service.data.factory.api.entity.DataSourceEntity;
......@@ -84,7 +86,7 @@ public class DataSourceServiceImpl extends BaseServiceImpl<DataSourceDao, DataSo
DataSourceEntity dataSource = dataSourceMapper.toEntity(dataSourceDto);
DbSchema dbSchema = dataSource.getDbSchema();
DbQueryProperty dbQueryProperty = new DbQueryProperty(dataSource.getDbType(), dbSchema.getHost(),
dbSchema.getUsername(), dbSchema.getPassword(), dbSchema.getPort(), dbSchema.getDbName());
dbSchema.getUsername(), dbSchema.getPassword(), dbSchema.getPort(), dbSchema.getDbName(), dbSchema.getSid());
DbQuery dbQuery = dataSourceFactory.createDbQuery(dbQueryProperty);
return dbQuery;
}
......@@ -94,8 +96,30 @@ public class DataSourceServiceImpl extends BaseServiceImpl<DataSourceDao, DataSo
DataSourceEntity dataSource = getById(id);
DbSchema dbSchema = dataSource.getDbSchema();
DbQueryProperty dbQueryProperty = new DbQueryProperty(dataSource.getDbType(), dbSchema.getHost(),
dbSchema.getUsername(), dbSchema.getPassword(), dbSchema.getPort(), dbSchema.getDbName());
dbSchema.getUsername(), dbSchema.getPassword(), dbSchema.getPort(), dbSchema.getDbName(), dbSchema.getSid());
DbQuery dbQuery = dataSourceFactory.createDbQuery(dbQueryProperty);
return dbQuery;
}
@Override
public List<DbTable> getDbTables(String id) {
DataSourceEntity dataSource = getById(id);
DbSchema dbSchema = dataSource.getDbSchema();
DbQueryProperty dbQueryProperty = new DbQueryProperty(dataSource.getDbType(), dbSchema.getHost(),
dbSchema.getUsername(), dbSchema.getPassword(), dbSchema.getPort(), dbSchema.getDbName(), dbSchema.getSid());
DbQuery dbQuery = dataSourceFactory.createDbQuery(dbQueryProperty);
List<DbTable> tables = dbQuery.getTables(dbSchema.getDbName());
return tables;
}
@Override
public List<DbColumn> getDbTableColumns(String id, String tableName) {
DataSourceEntity dataSource = getById(id);
DbSchema dbSchema = dataSource.getDbSchema();
DbQueryProperty dbQueryProperty = new DbQueryProperty(dataSource.getDbType(), dbSchema.getHost(),
dbSchema.getUsername(), dbSchema.getPassword(), dbSchema.getPort(), dbSchema.getDbName(), dbSchema.getSid());
DbQuery dbQuery = dataSourceFactory.createDbQuery(dbQueryProperty);
List<DbColumn> columns = dbQuery.getTableColumns(dbSchema.getDbName(), tableName);
return columns;
}
}
......@@ -80,7 +80,7 @@ public class ApiCallServiceImpl implements ApiCallService {
}
DbSchema dbSchema = dataSource.getDbSchema();
DbQueryProperty dbQueryProperty = new DbQueryProperty(dataSource.getDbType(), dbSchema.getHost(),
dbSchema.getUsername(), dbSchema.getPassword(), dbSchema.getPort(), dbSchema.getDbName());
dbSchema.getUsername(), dbSchema.getPassword(), dbSchema.getPort(), dbSchema.getDbName(), dbSchema.getSid());
DbQuery dbQuery = dataSourceFactory.createDbQuery(dbQueryProperty);
// 接收参数
Map<String, Object> params = null;
......
......@@ -25,10 +25,10 @@ public class ExecuteConfig implements Serializable {
@NotNull(message = "配置方式不能为空", groups = {ValidationGroups.Insert.class, ValidationGroups.Update.class})
private String configType;
@ApiModelProperty(value = "选择表")
@ApiModelProperty(value = "数据库表")
private String tableName;
@ApiModelProperty(value = "字段列表")
@ApiModelProperty(value = "字段列表")
@Valid
private List<FieldParam> fieldParams;
......
......@@ -68,3 +68,17 @@ export function queryByPage (data) {
data: data
})
}
export function getDbTables (id) {
return request({
url: '/data/factory/dataSources/' + id + '/tables',
method: 'get'
})
}
export function getDbTableColumns (id, tableName) {
return request({
url: '/data/factory/dataSources/' + id + '/' + tableName + '/columns',
method: 'get'
})
}
......@@ -128,12 +128,17 @@ export default {
},
// 表单参数
form: {
status: '1',
id: undefined,
sourceId: undefined,
setSql: undefined
setSql: undefined,
status: '1',
remark: undefined
},
// 表单校验
rules: {
sourceId: [
{ required: true, message: '数据源不能为空', trigger: 'blur' }
],
setName: [
{ required: true, message: '数据集名称不能为空', trigger: 'blur' }
]
......
......@@ -47,6 +47,9 @@
<el-form-item label="端口" prop="port">
<el-input v-model="form2.port" placeholder="请输入端口" />
</el-form-item>
<el-form-item label="服务名" prop="sid" v-if="form.dbType === '3' || form.dbType === '4'">
<el-input v-model="form2.sid" placeholder="请输入服务名" />
</el-form-item>
<el-form-item label="数据库" prop="dbName">
<el-input v-model="form2.dbName" placeholder="请输入数据库" />
</el-form-item>
......@@ -104,7 +107,12 @@ export default {
active: 1,
// 表单参数
form: {
status: '1'
id: undefined,
dbType: undefined,
sourceName: undefined,
dbSchema: {},
status: '1',
remark: undefined
},
// 表单校验
rules: {
......@@ -115,7 +123,14 @@ export default {
{ required: true, message: '数据源名称不能为空', trigger: 'blur' }
]
},
form2: {},
form2: {
host: undefined,
port: undefined,
dbName: undefined,
username: undefined,
password: undefined,
sid: undefined
},
rules2: {
host: [
{ required: true, message: '主机不能为空', trigger: 'blur' }
......
......@@ -46,6 +46,9 @@
<el-form-item label="端口" prop="port">
<el-input v-model="form2.port" placeholder="请输入端口" />
</el-form-item>
<el-form-item label="服务名" prop="sid" v-if="form.dbType === '3' || form.dbType === '4'">
<el-input v-model="form2.sid" placeholder="请输入服务名" />
</el-form-item>
<el-form-item label="数据库" prop="dbName">
<el-input v-model="form2.dbName" placeholder="请输入数据库" />
</el-form-item>
......
......@@ -47,6 +47,9 @@
<el-form-item label="端口" prop="port">
<el-input v-model="form2.port" placeholder="请输入端口" />
</el-form-item>
<el-form-item label="服务名" prop="sid" v-if="form.dbType === '3' || form.dbType === '4'">
<el-input v-model="form2.sid" placeholder="请输入服务名" />
</el-form-item>
<el-form-item label="数据库" prop="dbName">
<el-input v-model="form2.dbName" placeholder="请输入数据库" />
</el-form-item>
......
......@@ -76,8 +76,18 @@
</el-form-item>
</el-form>
<el-form ref="form2" :model="form2" :rules="rules2" label-width="80px" v-if="active == 2">
<el-form-item label="配置方式" prop="configType">
<el-select v-model="form2.configType" placeholder="请选择配置方式" @change="configTypeSelectChanged">
<el-option
v-for="dict in configTypeOptions"
:key="dict.id"
:label="dict.itemValue"
:value="dict.itemText"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="数据源" prop="sourceId">
<el-select v-model="form2.sourceId" placeholder="请选择数据源">
<el-select v-model="form2.sourceId" placeholder="请选择数据源" @change="sourceSelectChanged">
<el-option
v-for="source in sourceOptions"
:key="source.id"
......@@ -87,16 +97,50 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item label="配置方式" prop="configType">
<el-select v-model="form2.configType" placeholder="请选择配置方式">
<el-form-item v-if="form2.configType === '1'">
<el-select v-model="form2.tableName" placeholder="请选择" @change="tableNameSelectChanged">
<el-option
v-for="dict in configTypeOptions"
:key="dict.id"
:label="dict.itemValue"
:value="dict.itemText"
></el-option>
v-for="item in tableNameOptions"
:key="item.tableName"
:label="item.tableComment"
:value="item.tableName">
</el-option>
</el-select>
</el-form-item>
<el-form-item v-if="form2.configType === '1'">
<el-table :data="fieldParamList" stripe border
:max-height="300"
style="width: 100%; margin: 15px 0;">
<el-table-column prop="colPosition" label="序号" width="55" align="center" >
</el-table-column>
<el-table-column prop="colName" label="列名" align="center" show-overflow-tooltip >
</el-table-column>
<el-table-column prop="dataType" label="数据类型" align="center" show-overflow-tooltip >
</el-table-column>
<el-table-column prop="dataLength" label="数据长度" align="center" show-overflow-tooltip >
</el-table-column>
<el-table-column prop="dataPrecision" label="数据精度" align="center" show-overflow-tooltip >
</el-table-column>
<el-table-column prop="dataScale" label="数据小数位" align="center" show-overflow-tooltip >
</el-table-column>
<el-table-column prop="colKey" label="是否主键" align="center" show-overflow-tooltip >
<template slot-scope="scope">
<span v-if="scope.row.colKey === true"></span>
<span v-if="scope.row.colKey === false"></span>
</template>
</el-table-column>
<el-table-column prop="nullable" label="是否允许为空" align="center" show-overflow-tooltip >
<template slot-scope="scope">
<span v-if="scope.row.nullable === true"></span>
<span v-if="scope.row.nullable === false"></span>
</template>
</el-table-column>
<el-table-column prop="dataDefault" label="列默认值" align="center" show-overflow-tooltip >
</el-table-column>
<el-table-column prop="colComment" label="列注释" align="center" show-overflow-tooltip >
</el-table-column>
</el-table>
</el-form-item>
<el-row v-if="form2.configType === '2'">
<el-col :span="24">
<sql-editor
......@@ -122,7 +166,7 @@
<script>
import { addDataApi, sqlParse } from '@/api/market/dataapi'
import { listDataSource } from '@/api/factory/datasource'
import { listDataSource, getDbTables, getDbTableColumns } from '@/api/factory/datasource'
import SqlEditor from '@/components/SqlEditor'
export default {
......@@ -197,18 +241,24 @@ export default {
]
},
form2: {
sourceId: undefined,
configType: undefined,
sourceId: undefined,
tableName: undefined,
fieldParams: [],
sqlText: undefined
},
rules2: {
configType: [
{ required: true, message: '配置方式不能为空', trigger: 'blur' }
],
sourceId: [
{ required: true, message: '数据源不能为空', trigger: 'blur' }
]
},
form3: {},
form3: {
reqParams: [],
resParams: []
},
rules3: {},
// 请求方式数据字典
reqMethodOptions: [],
......@@ -220,6 +270,10 @@ export default {
statusOptions: [],
// 数据源数据字典
sourceOptions: [],
// 数据库表数据字典
tableNameOptions: [],
// 数据库表字段列表
fieldParamList: [],
// 配置方式数据字典
configTypeOptions: []
}
......@@ -286,6 +340,33 @@ export default {
changeTextarea (val) {
this.form2.sqlText = val
},
configTypeSelectChanged (val) {
if (this.form2.configType === '1' && this.form2.sourceId && this.dbTableOptions.length <= 0) {
getDbTables(this.form2.sourceId).then(response => {
if (response.success) {
this.tableNameOptions = response.data
this.fieldParamList = []
}
})
}
},
sourceSelectChanged (val) {
if (this.form2.configType && this.form2.configType === '1') {
getDbTables(val).then(response => {
if (response.success) {
this.tableNameOptions = response.data
this.fieldParamList = []
}
})
}
},
tableNameSelectChanged (val) {
getDbTableColumns(this.form2.sourceId, val).then(response => {
if (response.success) {
this.fieldParamList = response.data
}
})
},
sqlParse () {
if (!this.form2.sourceId) {
this.$message.error('数据源不能为空')
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment