forked from github/dataease
Merge pull request #1609 from dataease/pr@dev@feat_calc_field
feat(数据集): 计算字段语法校验
This commit is contained in:
commit
15bbafc2d5
@ -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查询预览数据")
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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());
|
||||||
|
@ -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
|
||||||
|
@ -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=字段表达式语法错误
|
||||||
|
@ -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=字段表達式語法錯誤
|
||||||
|
Loading…
Reference in New Issue
Block a user