fix(X-Pack): 修复数据填报建表时包含大写字母时可能会导致插入/修改数据报错的问题

This commit is contained in:
ulleo 2024-04-02 16:19:47 +08:00
parent 9aceaaf3aa
commit 56f72d53a4
2 changed files with 31 additions and 17 deletions

View File

@ -60,6 +60,21 @@ public class DataFillDataService {
private final static Gson gson = new Gson();
public static void setLowerCaseRequest(Datasource ds, Provider datasourceProvider, ExtDDLProvider extDDLProvider, DatasourceRequest datasourceRequest) throws Exception {
DatasourceTypes datasourceType = DatasourceTypes.valueOf(ds.getType());
switch (datasourceType) {
case mysql:
case mariadb:
String checkLowerCaseSql = extDDLProvider.getLowerCaseTaleNames();
datasourceRequest.setQuery(checkLowerCaseSql);
List<String[]> checkLowerCaseData = datasourceProvider.getData(datasourceRequest);
long lowCase = NumberUtils.toLong(checkLowerCaseData.get(0)[1]);
datasourceRequest.setLowerCaseTaleNames(lowCase > 0);
break;
default:
datasourceRequest.setLowerCaseTaleNames(true);
}
}
public DataFillFormTableDataResponse listData(DataFillFormTableDataRequest searchRequest) throws Exception {
@ -80,19 +95,7 @@ public class DataFillDataService {
ExtDDLProvider extDDLProvider = ProviderFactory.gerExtDDLProvider(ds.getType());
DatasourceTypes datasourceType = DatasourceTypes.valueOf(ds.getType());
switch (datasourceType) {
case mysql:
case mariadb:
String checkLowerCaseSql = extDDLProvider.getLowerCaseTaleNames();
datasourceRequest.setQuery(checkLowerCaseSql);
List<String[]> checkLowerCaseData = datasourceProvider.getData(datasourceRequest);
long lowCase = NumberUtils.toLong(checkLowerCaseData.get(0)[1]);
datasourceRequest.setLowerCaseTaleNames(lowCase > 0);
break;
default:
datasourceRequest.setLowerCaseTaleNames(true);
}
setLowerCaseRequest(ds, datasourceProvider, extDDLProvider, datasourceRequest);
List<TableField> tableFields = datasourceProvider.getTableFields(datasourceRequest);
Map<String, ExtTableField.BaseType> extTableFieldTypeMap = new HashMap<>();
@ -249,6 +252,9 @@ public class DataFillDataService {
DatasourceRequest datasourceRequest = new DatasourceRequest();
datasourceRequest.setDatasource(ds);
datasourceRequest.setTable(dataFillForm.getTableName());
setLowerCaseRequest(ds, datasourceProvider, extDDLProvider, datasourceRequest);
List<TableField> tableFields = datasourceProvider.getTableFields(datasourceRequest).stream().filter(TableField::isPrimaryKey).collect(Collectors.toList());
if (CollectionUtils.isEmpty(tableFields)) {
throw new RuntimeException("没有主键");
@ -291,10 +297,14 @@ public class DataFillDataService {
Datasource ds = datasource.get(dataFillForm.getDatasource());
Provider datasourceProvider = ProviderFactory.getProvider(ds.getType());
ExtDDLProvider extDDLProvider = ProviderFactory.gerExtDDLProvider(ds.getType());
DatasourceRequest datasourceRequest = new DatasourceRequest();
datasourceRequest.setDatasource(ds);
datasourceRequest.setTable(dataFillForm.getTableName());
setLowerCaseRequest(ds, datasourceProvider, extDDLProvider, datasourceRequest);
List<TableField> tableFields = datasourceProvider.getTableFields(datasourceRequest);
Map<String, TableField> tableFieldMap = new HashMap<>();
@ -366,8 +376,6 @@ public class DataFillDataService {
}
}
ExtDDLProvider extDDLProvider = ProviderFactory.gerExtDDLProvider(ds.getType());
if (CollectionUtils.isNotEmpty(uniqueFields)) {
for (DatasourceRequest.TableFieldWithValue uniqueField : uniqueFields) {

View File

@ -4,7 +4,10 @@ import com.google.common.reflect.TypeToken;
import com.google.gson.Gson;
import io.dataease.auth.annotation.DeCleaner;
import io.dataease.auth.service.AuthUserService;
import io.dataease.commons.constants.*;
import io.dataease.commons.constants.DataFillConstants;
import io.dataease.commons.constants.DePermissionType;
import io.dataease.commons.constants.SysAuthConstants;
import io.dataease.commons.constants.SysLogConstants;
import io.dataease.commons.utils.*;
import io.dataease.controller.ResultHolder;
import io.dataease.controller.request.datafill.DataFillFormRequest;
@ -12,7 +15,6 @@ import io.dataease.dto.DatasourceDTO;
import io.dataease.dto.datafill.DataFillFormDTO;
import io.dataease.ext.ExtDataFillFormMapper;
import io.dataease.i18n.Translator;
import io.dataease.listener.util.CacheUtils;
import io.dataease.plugins.common.base.domain.*;
import io.dataease.plugins.common.base.mapper.DataFillFormMapper;
import io.dataease.plugins.common.base.mapper.DataFillUserTaskMapper;
@ -317,10 +319,14 @@ public class DataFillService {
Datasource ds = datasource.get(dataFillForm.getDatasource());
Provider datasourceProvider = ProviderFactory.getProvider(ds.getType());
ExtDDLProvider extDDLProvider = ProviderFactory.gerExtDDLProvider(ds.getType());
DatasourceRequest datasourceRequest = new DatasourceRequest();
datasourceRequest.setDatasource(ds);
datasourceRequest.setTable(dataFillForm.getTableName());
DataFillDataService.setLowerCaseRequest(ds, datasourceProvider, extDDLProvider, datasourceRequest);
List<TableField> tableFields = datasourceProvider.getTableFields(datasourceRequest);
for (TableField tableField : tableFields) {