diff --git a/backend/src/main/java/io/dataease/controller/dataset/DataSetTableController.java b/backend/src/main/java/io/dataease/controller/dataset/DataSetTableController.java index c75cef5f5e..54841a4805 100644 --- a/backend/src/main/java/io/dataease/controller/dataset/DataSetTableController.java +++ b/backend/src/main/java/io/dataease/controller/dataset/DataSetTableController.java @@ -97,7 +97,7 @@ public class DataSetTableController { @ApiOperation("查询预览数据") @PostMapping("getPreviewData/{page}/{pageSize}") public Map getPreviewData(@RequestBody DataSetTableRequest dataSetTableRequest, @PathVariable Integer page, @PathVariable Integer pageSize) throws Exception { - return dataSetTableService.getPreviewData(dataSetTableRequest, page, pageSize); + return dataSetTableService.getPreviewData(dataSetTableRequest, page, pageSize, null); } @ApiOperation("根据sql查询预览数据") diff --git a/backend/src/main/java/io/dataease/controller/dataset/DataSetTableFieldController.java b/backend/src/main/java/io/dataease/controller/dataset/DataSetTableFieldController.java index e10f7b84c7..3b72309c60 100644 --- a/backend/src/main/java/io/dataease/controller/dataset/DataSetTableFieldController.java +++ b/backend/src/main/java/io/dataease/controller/dataset/DataSetTableFieldController.java @@ -4,14 +4,20 @@ import com.auth0.jwt.JWT; import com.auth0.jwt.interfaces.DecodedJWT; import com.github.xiaoymin.knife4j.annotations.ApiSupport; import io.dataease.auth.filter.F2CLinkFilter; +import io.dataease.base.domain.DatasetTable; import io.dataease.base.domain.DatasetTableField; +import io.dataease.commons.exception.DEException; +import io.dataease.controller.request.dataset.DataSetTableRequest; import io.dataease.controller.request.dataset.MultFieldValuesRequest; import io.dataease.controller.response.DatasetTableField4Type; +import io.dataease.i18n.Translator; import io.dataease.service.dataset.DataSetFieldService; import io.dataease.service.dataset.DataSetTableFieldsService; +import io.dataease.service.dataset.DataSetTableService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.ObjectUtils; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.context.request.RequestContextHolder; @@ -19,10 +25,7 @@ import org.springframework.web.context.request.ServletRequestAttributes; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.TreeSet; +import java.util.*; import java.util.stream.Collectors; /** @@ -40,6 +43,9 @@ public class DataSetTableFieldController { @Autowired private DataSetFieldService dataSetFieldService; + @Resource + private DataSetTableService dataSetTableService; + @ApiOperation("查询表下属字段") @PostMapping("list/{tableId}") public List list(@PathVariable String tableId) { @@ -74,6 +80,15 @@ public class DataSetTableFieldController { @PostMapping("save") public DatasetTableField save(@RequestBody DatasetTableField datasetTableField) { dataSetTableFieldsService.checkFieldName(datasetTableField); + try { + // 执行一次sql,确保数据集中所有字段均能正确执行 + DatasetTable datasetTable = dataSetTableService.get(datasetTableField.getTableId()); + DataSetTableRequest dataSetTableRequest = new DataSetTableRequest(); + BeanUtils.copyProperties(datasetTable, dataSetTableRequest); + dataSetTableService.getPreviewData(dataSetTableRequest, 1, 1, Collections.singletonList(datasetTableField)); + } catch (Exception e) { + DEException.throwException(Translator.get("i18n_calc_field_error")); + } return dataSetTableFieldsService.save(datasetTableField); } diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java index 60ec16233b..b6eace9983 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -459,16 +459,16 @@ public class DataSetTableService { List roleIds = new ArrayList<>(); Long deptId = null; - if(user == null && userId == null ){ + if (user == null && userId == null) { return datasetRowPermissions; } - if(user != null && userId != null ){ + if (user != null && userId != null) { return datasetRowPermissions; } - if(user != null){ - if(user.getIsAdmin()){ + if (user != null) { + if (user.getIsAdmin()) { return datasetRowPermissions; } userId = user.getUserId(); @@ -476,9 +476,9 @@ public class DataSetTableService { roleIds = user.getRoles().stream().map(CurrentRoleDto::getId).collect(Collectors.toList()); } - if(userId != null){ + if (userId != null) { SysUserEntity userEntity = authUserService.getUserById(userId); - if(userEntity.getIsAdmin()){ + if (userEntity.getIsAdmin()) { return datasetRowPermissions; } deptId = userEntity.getDeptId(); @@ -514,7 +514,7 @@ public class DataSetTableService { List customFilter = new ArrayList<>(); for (DatasetRowPermissions datasetRowPermissions : rowPermissions(datasetTable.getId(), user)) { ChartFieldCustomFilterDTO dto = new ChartFieldCustomFilterDTO(); - if(StringUtils.isEmpty(datasetRowPermissions.getDatasetFieldId())){ + if (StringUtils.isEmpty(datasetRowPermissions.getDatasetFieldId())) { continue; } DatasetTableField field = getFieldById(fields, datasetRowPermissions.getDatasetFieldId()); @@ -525,7 +525,7 @@ public class DataSetTableService { dto.setId(field.getId()); dto.setFilterType(datasetRowPermissions.getFilterType()); if (datasetRowPermissions.getFilterType().equalsIgnoreCase("logic")) { - if(StringUtils.isEmpty(datasetRowPermissions.getFilter())){ + if (StringUtils.isEmpty(datasetRowPermissions.getFilter())) { continue; } List lists = JSONObject.parseArray(datasetRowPermissions.getFilter(), ChartCustomFilterItemDTO.class); @@ -536,7 +536,7 @@ public class DataSetTableService { dto.setLogic(datasetRowPermissions.getLogic()); customFilter.add(dto); } else { - if(StringUtils.isEmpty(datasetRowPermissions.getEnumCheckField())){ + if (StringUtils.isEmpty(datasetRowPermissions.getEnumCheckField())) { continue; } dto.setEnumCheckField(Arrays.asList(datasetRowPermissions.getEnumCheckField().split(",").clone())); @@ -546,10 +546,13 @@ public class DataSetTableService { return customFilter; } - public Map getPreviewData(DataSetTableRequest dataSetTableRequest, Integer page, Integer pageSize) throws Exception { + public Map getPreviewData(DataSetTableRequest dataSetTableRequest, Integer page, Integer pageSize, List extFields) throws Exception { Map map = new HashMap<>(); DatasetTableField datasetTableField = DatasetTableField.builder().tableId(dataSetTableRequest.getId()).checked(Boolean.TRUE).build(); List fields = dataSetTableFieldsService.list(datasetTableField); + if (CollectionUtils.isNotEmpty(extFields)) { + fields.addAll(extFields); + } if (CollectionUtils.isEmpty(fields)) { map.put("fields", fields); map.put("data", new ArrayList<>()); @@ -578,7 +581,7 @@ public class DataSetTableService { if (ObjectUtils.isEmpty(ds)) { throw new RuntimeException(Translator.get("i18n_datasource_delete")); } - if(StringUtils.isNotEmpty(ds.getStatus()) && ds.getStatus().equalsIgnoreCase("Error")){ + if (StringUtils.isNotEmpty(ds.getStatus()) && ds.getStatus().equalsIgnoreCase("Error")) { throw new Exception(Translator.get("i18n_invalid_ds")); } DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType()); @@ -646,7 +649,7 @@ public class DataSetTableService { if (ObjectUtils.isEmpty(ds)) { throw new RuntimeException(Translator.get("i18n_datasource_delete")); } - if(StringUtils.isNotEmpty(ds.getStatus()) && ds.getStatus().equalsIgnoreCase("Error")){ + if (StringUtils.isNotEmpty(ds.getStatus()) && ds.getStatus().equalsIgnoreCase("Error")) { throw new Exception(Translator.get("i18n_invalid_ds")); } DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType()); diff --git a/backend/src/main/resources/i18n/messages_en_US.properties b/backend/src/main/resources/i18n/messages_en_US.properties index a05de81cb2..41c74fb98e 100644 --- a/backend/src/main/resources/i18n/messages_en_US.properties +++ b/backend/src/main/resources/i18n/messages_en_US.properties @@ -299,3 +299,4 @@ i18n_invalid_ds=Invalid Datasource 定时报告=Regular report i18n_rp_exist=Row permission of the same type already exists i18n_field_name_repeat=Field name can't repeat +i18n_calc_field_error=Field expression error diff --git a/backend/src/main/resources/i18n/messages_zh_CN.properties b/backend/src/main/resources/i18n/messages_zh_CN.properties index 701e45def7..52afec5982 100644 --- a/backend/src/main/resources/i18n/messages_zh_CN.properties +++ b/backend/src/main/resources/i18n/messages_zh_CN.properties @@ -298,3 +298,4 @@ i18n_invalid_ds=无效数据源 定时报告=定时报告 i18n_rp_exist=已有同类型的行权限存在 i18n_field_name_repeat=字段名不能重复 +i18n_calc_field_error=字段表达式语法错误 diff --git a/backend/src/main/resources/i18n/messages_zh_TW.properties b/backend/src/main/resources/i18n/messages_zh_TW.properties index cb4a7a916d..e4692e67cd 100644 --- a/backend/src/main/resources/i18n/messages_zh_TW.properties +++ b/backend/src/main/resources/i18n/messages_zh_TW.properties @@ -301,3 +301,4 @@ i18n_invalid_ds=無效數據源 定时报告=定時報告 i18n_rp_exist=已有同類型餓行權限存在 i18n_field_name_repeat=字段名不能重復 +i18n_calc_field_error=字段表達式語法錯誤