forked from github/dataease
Merge pull request #9643 from ulleo/dev
feat(X-Pack):【数据填报】创建表单选择数据源增加选择内建数据库
This commit is contained in:
commit
bf08365a3c
@ -13,6 +13,7 @@ import io.dataease.commons.utils.CommonBeanFactory;
|
||||
import io.dataease.controller.request.datafill.DataFillFormTableDataRequest;
|
||||
import io.dataease.controller.response.datafill.DataFillFormTableDataResponse;
|
||||
import io.dataease.dto.datafill.DataFillCommitLogDTO;
|
||||
import io.dataease.dto.datasource.MysqlConfiguration;
|
||||
import io.dataease.ext.ExtDataFillFormMapper;
|
||||
import io.dataease.i18n.Translator;
|
||||
import io.dataease.plugins.common.base.domain.DataFillFormWithBLOBs;
|
||||
@ -45,6 +46,8 @@ import java.math.RoundingMode;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
@ -68,6 +71,60 @@ public class DataFillDataService {
|
||||
|
||||
private final static Gson gson = new Gson();
|
||||
|
||||
|
||||
private Datasource getBuiltInDataSource() {
|
||||
MysqlConfiguration mysqlConfiguration = new MysqlConfiguration();
|
||||
Pattern WITH_SQL_FRAGMENT = Pattern.compile("jdbc:mysql://(.*):(\\d+)/(.*)");
|
||||
Matcher matcher = WITH_SQL_FRAGMENT.matcher(env.getProperty("spring.datasource.url"));
|
||||
if (!matcher.find()) {
|
||||
return null;
|
||||
}
|
||||
mysqlConfiguration.setHost(matcher.group(1));
|
||||
mysqlConfiguration.setPort(Integer.valueOf(matcher.group(2)));
|
||||
String[] databasePrams = matcher.group(3).split("\\?");
|
||||
mysqlConfiguration.setDataBase(databasePrams[0]);
|
||||
if (databasePrams.length == 2) {
|
||||
mysqlConfiguration.setExtraParams(databasePrams[1]);
|
||||
}
|
||||
if (StringUtils.isNotEmpty(mysqlConfiguration.getExtraParams()) && !mysqlConfiguration.getExtraParams().contains("connectionCollation")) {
|
||||
mysqlConfiguration.setExtraParams(mysqlConfiguration.getExtraParams() + "&connectionCollation=utf8mb4_general_ci");
|
||||
}
|
||||
mysqlConfiguration.setUsername(env.getProperty("spring.datasource.username"));
|
||||
mysqlConfiguration.setPassword(env.getProperty("spring.datasource.password"));
|
||||
|
||||
Datasource datasource = new Datasource();
|
||||
datasource.setId("default-built-in");
|
||||
datasource.setType("mysql");
|
||||
datasource.setName(Translator.get("I18N_DATA_FILL_DATASOURCE_DEFAULT_BUILT_IN"));
|
||||
datasource.setConfiguration(new Gson().toJson(mysqlConfiguration));
|
||||
|
||||
return datasource;
|
||||
}
|
||||
|
||||
public Datasource getDataSource(String datasourceId) {
|
||||
return getDataSource(datasourceId, false);
|
||||
}
|
||||
|
||||
public Datasource getDataSource(String datasourceId, boolean withCreatePrivileges) {
|
||||
Datasource ds = null;
|
||||
if (StringUtils.equals("default-built-in", datasourceId)) {
|
||||
ds = getBuiltInDataSource();
|
||||
} else {
|
||||
if (!withCreatePrivileges) {
|
||||
ds = datasource.get(datasourceId);
|
||||
} else {
|
||||
ds = datasource.getDataSourceDetails(datasourceId);
|
||||
//todo 判断是否能创建
|
||||
ds.setConfiguration(new String(java.util.Base64.getDecoder().decode(ds.getConfiguration())));
|
||||
}
|
||||
}
|
||||
|
||||
if (ds == null) {
|
||||
DataEaseException.throwException(Translator.get("I18N_DATA_FILL_DATASOURCE_NOT_EXIST"));
|
||||
}
|
||||
return ds;
|
||||
}
|
||||
|
||||
public static void setLowerCaseRequest(Datasource ds, Provider datasourceProvider, ExtDDLProvider extDDLProvider, DatasourceRequest datasourceRequest) throws Exception {
|
||||
DatasourceTypes datasourceType = DatasourceTypes.valueOf(ds.getType());
|
||||
switch (datasourceType) {
|
||||
@ -94,7 +151,7 @@ public class DataFillDataService {
|
||||
List<ExtTableField> fields = gson.fromJson(dataFillForm.getForms(), new TypeToken<List<ExtTableField>>() {
|
||||
}.getType());
|
||||
|
||||
Datasource ds = datasource.get(dataFillForm.getDatasource());
|
||||
Datasource ds = getDataSource(dataFillForm.getDatasource());
|
||||
Provider datasourceProvider = ProviderFactory.getProvider(ds.getType());
|
||||
|
||||
DatasourceRequest datasourceRequest = new DatasourceRequest();
|
||||
@ -264,7 +321,7 @@ public class DataFillDataService {
|
||||
if (StringUtils.equals(dataFillForm.getNodeType(), "folder")) {
|
||||
return;
|
||||
}
|
||||
Datasource ds = datasource.get(dataFillForm.getDatasource());
|
||||
Datasource ds = getDataSource(dataFillForm.getDatasource());
|
||||
|
||||
ExtDDLProvider extDDLProvider = ProviderFactory.gerExtDDLProvider(ds.getType());
|
||||
|
||||
@ -316,7 +373,7 @@ public class DataFillDataService {
|
||||
List<ExtTableField> fields = gson.fromJson(dataFillForm.getForms(), new TypeToken<List<ExtTableField>>() {
|
||||
}.getType());
|
||||
|
||||
Datasource ds = datasource.get(dataFillForm.getDatasource());
|
||||
Datasource ds = getDataSource(dataFillForm.getDatasource());
|
||||
Provider datasourceProvider = ProviderFactory.getProvider(ds.getType());
|
||||
ExtDDLProvider extDDLProvider = ProviderFactory.gerExtDDLProvider(ds.getType());
|
||||
|
||||
|
@ -11,7 +11,6 @@ import io.dataease.commons.constants.SysLogConstants;
|
||||
import io.dataease.commons.utils.*;
|
||||
import io.dataease.controller.ResultHolder;
|
||||
import io.dataease.controller.request.datafill.DataFillFormRequest;
|
||||
import io.dataease.dto.DatasourceDTO;
|
||||
import io.dataease.dto.datafill.DataFillFormDTO;
|
||||
import io.dataease.ext.ExtDataFillFormMapper;
|
||||
import io.dataease.i18n.Translator;
|
||||
@ -28,7 +27,6 @@ import io.dataease.plugins.datasource.provider.ExtDDLProvider;
|
||||
import io.dataease.plugins.datasource.provider.Provider;
|
||||
import io.dataease.plugins.datasource.provider.ProviderFactory;
|
||||
import io.dataease.provider.datasource.JdbcProvider;
|
||||
import io.dataease.service.datasource.DatasourceService;
|
||||
import io.dataease.service.sys.SysAuthService;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
@ -52,8 +50,7 @@ public class DataFillService {
|
||||
private DataFillFormMapper dataFillFormMapper;
|
||||
@Resource
|
||||
private ExtDataFillFormMapper extDataFillFormMapper;
|
||||
@Resource
|
||||
private DatasourceService datasource;
|
||||
|
||||
@Resource
|
||||
private SysAuthService sysAuthService;
|
||||
@Resource
|
||||
@ -92,19 +89,17 @@ public class DataFillService {
|
||||
}.getType());
|
||||
}
|
||||
|
||||
DatasourceDTO datasourceDTO = datasource.getDataSourceDetails(dataFillForm.getDatasource());
|
||||
|
||||
datasourceDTO.setConfiguration(new String(java.util.Base64.getDecoder().decode(datasourceDTO.getConfiguration())));
|
||||
Datasource ds = dataFillDataService.getDataSource(dataFillForm.getDatasource(), true);
|
||||
|
||||
DatasourceRequest datasourceRequest = new DatasourceRequest();
|
||||
datasourceRequest.setDatasource(datasourceDTO);
|
||||
datasourceRequest.setDatasource(ds);
|
||||
datasourceRequest.setQuery("SELECT VERSION()");
|
||||
|
||||
JdbcProvider jdbcProvider = CommonBeanFactory.getBean(JdbcProvider.class);
|
||||
String version = jdbcProvider.getData(datasourceRequest).get(0)[0];
|
||||
|
||||
//拼sql
|
||||
ExtDDLProvider extDDLProvider = ProviderFactory.gerExtDDLProvider(datasourceDTO.getType());
|
||||
ExtDDLProvider extDDLProvider = ProviderFactory.gerExtDDLProvider(ds.getType());
|
||||
String sql = extDDLProvider.createTableSql(dataFillForm.getTableName(), fields);
|
||||
//创建表
|
||||
datasourceRequest.setQuery(sql);
|
||||
@ -239,7 +234,7 @@ public class DataFillService {
|
||||
result.setCreatorName(sysUsers.get(0).getNickName());
|
||||
}
|
||||
|
||||
Datasource d = datasource.get(result.getDatasource());
|
||||
Datasource d = dataFillDataService.getDataSource(result.getDatasource());
|
||||
if (d != null) {
|
||||
result.setDatasourceName(d.getName());
|
||||
}
|
||||
@ -321,7 +316,7 @@ public class DataFillService {
|
||||
} else {
|
||||
DataFillFormWithBLOBs dataFillForm = dataFillFormMapper.selectByPrimaryKey(formId);
|
||||
|
||||
Datasource ds = datasource.get(dataFillForm.getDatasource());
|
||||
Datasource ds = dataFillDataService.getDataSource(dataFillForm.getDatasource());
|
||||
Provider datasourceProvider = ProviderFactory.getProvider(ds.getType());
|
||||
ExtDDLProvider extDDLProvider = ProviderFactory.gerExtDDLProvider(ds.getType());
|
||||
|
||||
|
@ -298,4 +298,6 @@ i18n_month=Month
|
||||
i18n_day=Day
|
||||
i18n_hour=Hour
|
||||
i18n_minute=Minute
|
||||
i18n_second=Second
|
||||
i18n_second=Second
|
||||
I18N_DATA_FILL_DATASOURCE_NOT_EXIST=Datasource not exists
|
||||
I18N_DATA_FILL_DATASOURCE_DEFAULT_BUILT_IN=Built-in Database
|
@ -288,4 +288,6 @@ i18n_month=\u6708
|
||||
i18n_day=\u5929
|
||||
i18n_hour=\u5C0F\u65F6
|
||||
i18n_minute=\u5206\u949F
|
||||
i18n_second=\u79D2
|
||||
i18n_second=\u79D2
|
||||
I18N_DATA_FILL_DATASOURCE_NOT_EXIST=\u6570\u636E\u6E90\u6CA1\u6709\u6743\u9650\u6216\u4E0D\u5B58\u5728
|
||||
I18N_DATA_FILL_DATASOURCE_DEFAULT_BUILT_IN=\u5185\u5EFA\u6570\u636E\u5E93
|
@ -293,4 +293,6 @@ i18n_month=\u6708
|
||||
i18n_day=\u5929
|
||||
i18n_hour=\u5C0F\u6642
|
||||
i18n_minute=\u5206\u9418
|
||||
i18n_second=\u79D2
|
||||
i18n_second=\u79D2
|
||||
I18N_DATA_FILL_DATASOURCE_NOT_EXIST=\u6578\u64DA\u6E90\u6C92\u6709\u6B0A\u9650\u6216\u4E0D\u5B58\u5728
|
||||
I18N_DATA_FILL_DATASOURCE_DEFAULT_BUILT_IN=\u5167\u5EFA\u6578\u64DA\u5EAB
|
@ -670,7 +670,9 @@ export default {
|
||||
add_column: 'Add Column',
|
||||
please_insert_start: 'Start Time Column Name',
|
||||
please_insert_end: 'End Time Column Name',
|
||||
save_form: 'Save Form'
|
||||
save_form: 'Save Form',
|
||||
default: 'default',
|
||||
default_built_in: 'Built-in Database'
|
||||
},
|
||||
database: {
|
||||
nvarchar: 'Nvarchar',
|
||||
|
@ -670,7 +670,9 @@ export default {
|
||||
add_column: '新增字段',
|
||||
please_insert_start: '請輸入開始時間',
|
||||
please_insert_end: '請輸入結束時間',
|
||||
save_form: '保存表單'
|
||||
save_form: '保存表單',
|
||||
default: '默認',
|
||||
default_built_in: '內建數據庫'
|
||||
},
|
||||
database: {
|
||||
nvarchar: '字符串',
|
||||
|
@ -668,7 +668,9 @@ export default {
|
||||
add_column: '新增字段',
|
||||
please_insert_start: '请输入开始时间',
|
||||
please_insert_end: '请输入结束时间',
|
||||
save_form: '保存表单'
|
||||
save_form: '保存表单',
|
||||
default: '默认',
|
||||
default_built_in: '内建数据库'
|
||||
},
|
||||
database: {
|
||||
nvarchar: '字符串',
|
||||
|
@ -1,6 +1,6 @@
|
||||
<script>
|
||||
import { filter, forEach, find, split, get } from 'lodash-es'
|
||||
import { listDatasource, listDatasourceType } from '@/api/system/datasource'
|
||||
import { filter, forEach, find, split, get, groupBy, keys } from 'lodash-es'
|
||||
import { listDatasource } from '@/api/system/datasource'
|
||||
import { listForm, saveForm } from '@/views/dataFilling/form/dataFilling'
|
||||
import { hasDataPermission } from '@/utils/permission'
|
||||
|
||||
@ -102,10 +102,26 @@ export default {
|
||||
},
|
||||
computed: {
|
||||
datasourceList() {
|
||||
const _types = filter(this.allDatasourceTypes, t => t.type === 'mysql' || t.type === 'mariadb')
|
||||
forEach(_types, t => {
|
||||
t.options = filter(this.allDatasourceList, d => d.type === t.type)
|
||||
})
|
||||
const dsMap = groupBy(this.allDatasourceList, d => d.type)
|
||||
const _types = [{
|
||||
name: this.$t('data_fill.form.default'),
|
||||
type: 'default',
|
||||
options: [{
|
||||
id: 'default-built-in',
|
||||
name: this.$t('data_fill.form.default_built_in')
|
||||
}]
|
||||
}]
|
||||
if (dsMap) {
|
||||
forEach(keys(dsMap), type => {
|
||||
if (type === 'mysql' || type === 'mariadb') {
|
||||
_types.push({
|
||||
name: dsMap[type][0]?.typeDesc,
|
||||
type: type,
|
||||
options: dsMap[type]
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
return _types
|
||||
},
|
||||
selectDatasets() {
|
||||
@ -152,16 +168,13 @@ export default {
|
||||
f.settings.mapping.type = f.settings.mapping.typeOptions[0].value
|
||||
}
|
||||
})
|
||||
const p1 = listDatasourceType()
|
||||
const p2 = listDatasource()
|
||||
const p3 = listForm({ nodeType: 'folder' })
|
||||
const p1 = listDatasource()
|
||||
const p2 = listForm({ nodeType: 'folder' })
|
||||
|
||||
Promise.all([p1, p2, p3]).then((val) => {
|
||||
this.allDatasourceTypes = val[0].data
|
||||
Promise.all([p1, p2]).then((val) => {
|
||||
this.allDatasourceList = val[0].data
|
||||
|
||||
this.allDatasourceList = val[1].data
|
||||
|
||||
this.folders = this.filterListDeep(val[2].data) || []
|
||||
this.folders = this.filterListDeep(val[1].data) || []
|
||||
if (this.formData.folder) {
|
||||
this.$nextTick(() => {
|
||||
this.$refs.tree.setCurrentKey(this.formData.folder)
|
||||
|
Loading…
Reference in New Issue
Block a user