Merge pull request #1609 from dataease/pr@dev@feat_calc_field

feat(数据集): 计算字段语法校验
This commit is contained in:
Junjie 2022-01-10 11:26:44 +08:00 committed by GitHub
commit 15bbafc2d5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 38 additions and 17 deletions

View File

@ -97,7 +97,7 @@ public class DataSetTableController {
@ApiOperation("查询预览数据") @ApiOperation("查询预览数据")
@PostMapping("getPreviewData/{page}/{pageSize}") @PostMapping("getPreviewData/{page}/{pageSize}")
public Map<String, Object> getPreviewData(@RequestBody DataSetTableRequest dataSetTableRequest, @PathVariable Integer page, @PathVariable Integer pageSize) throws Exception { public Map<String, Object> 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查询预览数据") @ApiOperation("根据sql查询预览数据")

View File

@ -4,14 +4,20 @@ import com.auth0.jwt.JWT;
import com.auth0.jwt.interfaces.DecodedJWT; import com.auth0.jwt.interfaces.DecodedJWT;
import com.github.xiaoymin.knife4j.annotations.ApiSupport; import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import io.dataease.auth.filter.F2CLinkFilter; import io.dataease.auth.filter.F2CLinkFilter;
import io.dataease.base.domain.DatasetTable;
import io.dataease.base.domain.DatasetTableField; 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.request.dataset.MultFieldValuesRequest;
import io.dataease.controller.response.DatasetTableField4Type; import io.dataease.controller.response.DatasetTableField4Type;
import io.dataease.i18n.Translator;
import io.dataease.service.dataset.DataSetFieldService; import io.dataease.service.dataset.DataSetFieldService;
import io.dataease.service.dataset.DataSetTableFieldsService; import io.dataease.service.dataset.DataSetTableFieldsService;
import io.dataease.service.dataset.DataSetTableService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.RequestContextHolder;
@ -19,10 +25,7 @@ import org.springframework.web.context.request.ServletRequestAttributes;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList; import java.util.*;
import java.util.Comparator;
import java.util.List;
import java.util.TreeSet;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -40,6 +43,9 @@ public class DataSetTableFieldController {
@Autowired @Autowired
private DataSetFieldService dataSetFieldService; private DataSetFieldService dataSetFieldService;
@Resource
private DataSetTableService dataSetTableService;
@ApiOperation("查询表下属字段") @ApiOperation("查询表下属字段")
@PostMapping("list/{tableId}") @PostMapping("list/{tableId}")
public List<DatasetTableField> list(@PathVariable String tableId) { public List<DatasetTableField> list(@PathVariable String tableId) {
@ -74,6 +80,15 @@ public class DataSetTableFieldController {
@PostMapping("save") @PostMapping("save")
public DatasetTableField save(@RequestBody DatasetTableField datasetTableField) { public DatasetTableField save(@RequestBody DatasetTableField datasetTableField) {
dataSetTableFieldsService.checkFieldName(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); return dataSetTableFieldsService.save(datasetTableField);
} }

View File

@ -459,16 +459,16 @@ public class DataSetTableService {
List<Long> roleIds = new ArrayList<>(); List<Long> roleIds = new ArrayList<>();
Long deptId = null; Long deptId = null;
if(user == null && userId == null ){ if (user == null && userId == null) {
return datasetRowPermissions; return datasetRowPermissions;
} }
if(user != null && userId != null ){ if (user != null && userId != null) {
return datasetRowPermissions; return datasetRowPermissions;
} }
if(user != null){ if (user != null) {
if(user.getIsAdmin()){ if (user.getIsAdmin()) {
return datasetRowPermissions; return datasetRowPermissions;
} }
userId = user.getUserId(); userId = user.getUserId();
@ -476,9 +476,9 @@ public class DataSetTableService {
roleIds = user.getRoles().stream().map(CurrentRoleDto::getId).collect(Collectors.toList()); roleIds = user.getRoles().stream().map(CurrentRoleDto::getId).collect(Collectors.toList());
} }
if(userId != null){ if (userId != null) {
SysUserEntity userEntity = authUserService.getUserById(userId); SysUserEntity userEntity = authUserService.getUserById(userId);
if(userEntity.getIsAdmin()){ if (userEntity.getIsAdmin()) {
return datasetRowPermissions; return datasetRowPermissions;
} }
deptId = userEntity.getDeptId(); deptId = userEntity.getDeptId();
@ -514,7 +514,7 @@ public class DataSetTableService {
List<ChartFieldCustomFilterDTO> customFilter = new ArrayList<>(); List<ChartFieldCustomFilterDTO> customFilter = new ArrayList<>();
for (DatasetRowPermissions datasetRowPermissions : rowPermissions(datasetTable.getId(), user)) { for (DatasetRowPermissions datasetRowPermissions : rowPermissions(datasetTable.getId(), user)) {
ChartFieldCustomFilterDTO dto = new ChartFieldCustomFilterDTO(); ChartFieldCustomFilterDTO dto = new ChartFieldCustomFilterDTO();
if(StringUtils.isEmpty(datasetRowPermissions.getDatasetFieldId())){ if (StringUtils.isEmpty(datasetRowPermissions.getDatasetFieldId())) {
continue; continue;
} }
DatasetTableField field = getFieldById(fields, datasetRowPermissions.getDatasetFieldId()); DatasetTableField field = getFieldById(fields, datasetRowPermissions.getDatasetFieldId());
@ -525,7 +525,7 @@ public class DataSetTableService {
dto.setId(field.getId()); dto.setId(field.getId());
dto.setFilterType(datasetRowPermissions.getFilterType()); dto.setFilterType(datasetRowPermissions.getFilterType());
if (datasetRowPermissions.getFilterType().equalsIgnoreCase("logic")) { if (datasetRowPermissions.getFilterType().equalsIgnoreCase("logic")) {
if(StringUtils.isEmpty(datasetRowPermissions.getFilter())){ if (StringUtils.isEmpty(datasetRowPermissions.getFilter())) {
continue; continue;
} }
List<ChartCustomFilterItemDTO> lists = JSONObject.parseArray(datasetRowPermissions.getFilter(), ChartCustomFilterItemDTO.class); List<ChartCustomFilterItemDTO> lists = JSONObject.parseArray(datasetRowPermissions.getFilter(), ChartCustomFilterItemDTO.class);
@ -536,7 +536,7 @@ public class DataSetTableService {
dto.setLogic(datasetRowPermissions.getLogic()); dto.setLogic(datasetRowPermissions.getLogic());
customFilter.add(dto); customFilter.add(dto);
} else { } else {
if(StringUtils.isEmpty(datasetRowPermissions.getEnumCheckField())){ if (StringUtils.isEmpty(datasetRowPermissions.getEnumCheckField())) {
continue; continue;
} }
dto.setEnumCheckField(Arrays.asList(datasetRowPermissions.getEnumCheckField().split(",").clone())); dto.setEnumCheckField(Arrays.asList(datasetRowPermissions.getEnumCheckField().split(",").clone()));
@ -546,10 +546,13 @@ public class DataSetTableService {
return customFilter; return customFilter;
} }
public Map<String, Object> getPreviewData(DataSetTableRequest dataSetTableRequest, Integer page, Integer pageSize) throws Exception { public Map<String, Object> getPreviewData(DataSetTableRequest dataSetTableRequest, Integer page, Integer pageSize, List<DatasetTableField> extFields) throws Exception {
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
DatasetTableField datasetTableField = DatasetTableField.builder().tableId(dataSetTableRequest.getId()).checked(Boolean.TRUE).build(); DatasetTableField datasetTableField = DatasetTableField.builder().tableId(dataSetTableRequest.getId()).checked(Boolean.TRUE).build();
List<DatasetTableField> fields = dataSetTableFieldsService.list(datasetTableField); List<DatasetTableField> fields = dataSetTableFieldsService.list(datasetTableField);
if (CollectionUtils.isNotEmpty(extFields)) {
fields.addAll(extFields);
}
if (CollectionUtils.isEmpty(fields)) { if (CollectionUtils.isEmpty(fields)) {
map.put("fields", fields); map.put("fields", fields);
map.put("data", new ArrayList<>()); map.put("data", new ArrayList<>());
@ -578,7 +581,7 @@ public class DataSetTableService {
if (ObjectUtils.isEmpty(ds)) { if (ObjectUtils.isEmpty(ds)) {
throw new RuntimeException(Translator.get("i18n_datasource_delete")); 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")); throw new Exception(Translator.get("i18n_invalid_ds"));
} }
DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType()); DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType());
@ -646,7 +649,7 @@ public class DataSetTableService {
if (ObjectUtils.isEmpty(ds)) { if (ObjectUtils.isEmpty(ds)) {
throw new RuntimeException(Translator.get("i18n_datasource_delete")); 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")); throw new Exception(Translator.get("i18n_invalid_ds"));
} }
DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType()); DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType());

View File

@ -299,3 +299,4 @@ i18n_invalid_ds=Invalid Datasource
定时报告=Regular report 定时报告=Regular report
i18n_rp_exist=Row permission of the same type already exists i18n_rp_exist=Row permission of the same type already exists
i18n_field_name_repeat=Field name can't repeat i18n_field_name_repeat=Field name can't repeat
i18n_calc_field_error=Field expression error

View File

@ -298,3 +298,4 @@ i18n_invalid_ds=无效数据源
定时报告=定时报告 定时报告=定时报告
i18n_rp_exist=已有同类型的行权限存在 i18n_rp_exist=已有同类型的行权限存在
i18n_field_name_repeat=字段名不能重复 i18n_field_name_repeat=字段名不能重复
i18n_calc_field_error=字段表达式语法错误

View File

@ -301,3 +301,4 @@ i18n_invalid_ds=無效數據源
定时报告=定時報告 定时报告=定時報告
i18n_rp_exist=已有同類型餓行權限存在 i18n_rp_exist=已有同類型餓行權限存在
i18n_field_name_repeat=字段名不能重復 i18n_field_name_repeat=字段名不能重復
i18n_calc_field_error=字段表達式語法錯誤