diff --git a/core/backend/src/main/java/io/dataease/service/datafill/DataFillDataService.java b/core/backend/src/main/java/io/dataease/service/datafill/DataFillDataService.java index 3da33a9d88..5daa3dfc0a 100644 --- a/core/backend/src/main/java/io/dataease/service/datafill/DataFillDataService.java +++ b/core/backend/src/main/java/io/dataease/service/datafill/DataFillDataService.java @@ -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 fields = gson.fromJson(dataFillForm.getForms(), new TypeToken>() { }.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 fields = gson.fromJson(dataFillForm.getForms(), new TypeToken>() { }.getType()); - Datasource ds = datasource.get(dataFillForm.getDatasource()); + Datasource ds = getDataSource(dataFillForm.getDatasource()); Provider datasourceProvider = ProviderFactory.getProvider(ds.getType()); ExtDDLProvider extDDLProvider = ProviderFactory.gerExtDDLProvider(ds.getType()); diff --git a/core/backend/src/main/java/io/dataease/service/datafill/DataFillService.java b/core/backend/src/main/java/io/dataease/service/datafill/DataFillService.java index 5009c90aec..7afcb9808f 100644 --- a/core/backend/src/main/java/io/dataease/service/datafill/DataFillService.java +++ b/core/backend/src/main/java/io/dataease/service/datafill/DataFillService.java @@ -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()); diff --git a/core/backend/src/main/resources/i18n/messages_en_US.properties b/core/backend/src/main/resources/i18n/messages_en_US.properties index a0b298f1e1..e582358ce4 100644 --- a/core/backend/src/main/resources/i18n/messages_en_US.properties +++ b/core/backend/src/main/resources/i18n/messages_en_US.properties @@ -298,4 +298,6 @@ i18n_month=Month i18n_day=Day i18n_hour=Hour i18n_minute=Minute -i18n_second=Second \ No newline at end of file +i18n_second=Second +I18N_DATA_FILL_DATASOURCE_NOT_EXIST=Datasource not exists +I18N_DATA_FILL_DATASOURCE_DEFAULT_BUILT_IN=Built-in Database \ No newline at end of file diff --git a/core/backend/src/main/resources/i18n/messages_zh_CN.properties b/core/backend/src/main/resources/i18n/messages_zh_CN.properties index 633e80b027..34fec58d57 100644 --- a/core/backend/src/main/resources/i18n/messages_zh_CN.properties +++ b/core/backend/src/main/resources/i18n/messages_zh_CN.properties @@ -288,4 +288,6 @@ i18n_month=\u6708 i18n_day=\u5929 i18n_hour=\u5C0F\u65F6 i18n_minute=\u5206\u949F -i18n_second=\u79D2 \ No newline at end of file +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 \ No newline at end of file diff --git a/core/backend/src/main/resources/i18n/messages_zh_TW.properties b/core/backend/src/main/resources/i18n/messages_zh_TW.properties index dd9c63c202..d4df274471 100644 --- a/core/backend/src/main/resources/i18n/messages_zh_TW.properties +++ b/core/backend/src/main/resources/i18n/messages_zh_TW.properties @@ -293,4 +293,6 @@ i18n_month=\u6708 i18n_day=\u5929 i18n_hour=\u5C0F\u6642 i18n_minute=\u5206\u9418 -i18n_second=\u79D2 \ No newline at end of file +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 \ No newline at end of file diff --git a/core/frontend/src/lang/en.js b/core/frontend/src/lang/en.js index 4cdf578f4e..ebde2633e3 100644 --- a/core/frontend/src/lang/en.js +++ b/core/frontend/src/lang/en.js @@ -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', diff --git a/core/frontend/src/lang/tw.js b/core/frontend/src/lang/tw.js index ea96449f73..bb2b2a87ca 100644 --- a/core/frontend/src/lang/tw.js +++ b/core/frontend/src/lang/tw.js @@ -670,7 +670,9 @@ export default { add_column: '新增字段', please_insert_start: '請輸入開始時間', please_insert_end: '請輸入結束時間', - save_form: '保存表單' + save_form: '保存表單', + default: '默認', + default_built_in: '內建數據庫' }, database: { nvarchar: '字符串', diff --git a/core/frontend/src/lang/zh.js b/core/frontend/src/lang/zh.js index e75ae53988..bd2a7103db 100644 --- a/core/frontend/src/lang/zh.js +++ b/core/frontend/src/lang/zh.js @@ -668,7 +668,9 @@ export default { add_column: '新增字段', please_insert_start: '请输入开始时间', please_insert_end: '请输入结束时间', - save_form: '保存表单' + save_form: '保存表单', + default: '默认', + default_built_in: '内建数据库' }, database: { nvarchar: '字符串', diff --git a/core/frontend/src/views/dataFilling/form/save.vue b/core/frontend/src/views/dataFilling/form/save.vue index 2fad8a4019..a207ac3d9a 100644 --- a/core/frontend/src/views/dataFilling/form/save.vue +++ b/core/frontend/src/views/dataFilling/form/save.vue @@ -1,6 +1,6 @@