Merge pull request #9643 from ulleo/dev

feat(X-Pack):【数据填报】创建表单选择数据源增加选择内建数据库
This commit is contained in:
ulleo 2024-05-14 15:32:05 +08:00 committed by GitHub
commit bf08365a3c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 111 additions and 34 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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',

View File

@ -670,7 +670,9 @@ export default {
add_column: '新增字段',
please_insert_start: '請輸入開始時間',
please_insert_end: '請輸入結束時間',
save_form: '保存表單'
save_form: '保存表單',
default: '默認',
default_built_in: '內建數據庫'
},
database: {
nvarchar: '字符串',

View File

@ -668,7 +668,9 @@ export default {
add_column: '新增字段',
please_insert_start: '请输入开始时间',
please_insert_end: '请输入结束时间',
save_form: '保存表单'
save_form: '保存表单',
default: '默认',
default_built_in: '内建数据库'
},
database: {
nvarchar: '字符串',

View File

@ -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)