feat: 视图支持计算字段

This commit is contained in:
junjun 2022-06-13 14:30:43 +08:00
parent 64ce697bcf
commit 338cb44f5e
4 changed files with 192 additions and 11 deletions

View File

@ -0,0 +1,86 @@
package io.dataease.controller.chart;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import io.dataease.auth.annotation.DePermission;
import io.dataease.commons.constants.DePermissionType;
import io.dataease.commons.constants.ResourceAuthLevel;
import io.dataease.commons.exception.DEException;
import io.dataease.controller.request.dataset.DataSetTableRequest;
import io.dataease.controller.response.ChartViewField4Type;
import io.dataease.i18n.Translator;
import io.dataease.plugins.common.base.domain.ChartViewField;
import io.dataease.plugins.common.base.domain.DatasetTable;
import io.dataease.plugins.common.base.domain.DatasetTableField;
import io.dataease.service.chart.ChartViewFieldService;
import io.dataease.service.dataset.DataSetTableService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Collections;
import java.util.List;
/**
* @Author gin
*/
@Api(tags = "视图:字段")
@ApiSupport(order = 130)
@RestController
@RequestMapping("/chart/field")
public class ChartViewFieldController {
@Resource
private ChartViewFieldService chartViewFieldService;
@Resource
private DataSetTableService dataSetTableService;
@DePermission(type = DePermissionType.PANEL, level = ResourceAuthLevel.PANNEL_LEVEL_MANAGE)
@ApiOperation("保存")
@PostMapping("/save/{panelId}")
public ChartViewField save(@PathVariable String panelId, @RequestBody ChartViewField chartViewField) {
try {
// 执行一次sql确保数据集中所有字段均能正确执行
DatasetTable datasetTable = dataSetTableService.get(chartViewField.getTableId());
DataSetTableRequest dataSetTableRequest = new DataSetTableRequest();
BeanUtils.copyProperties(datasetTable, dataSetTableRequest);
DatasetTableField datasetTableField = new DatasetTableField();
BeanUtils.copyProperties(chartViewField, datasetTableField);
dataSetTableService.getPreviewData(dataSetTableRequest, 1, 1, Collections.singletonList(datasetTableField));
} catch (Exception e) {
DEException.throwException(Translator.get("i18n_calc_field_error"));
}
return chartViewFieldService.save(chartViewField);
}
@DePermission(type = DePermissionType.PANEL, level = ResourceAuthLevel.PANNEL_LEVEL_MANAGE, paramIndex = 1)
@ApiOperation("删除")
@PostMapping("/delete/{id}/{panelId}")
public void delete(@PathVariable String id, @PathVariable String panelId) {
chartViewFieldService.delete(id);
}
@DePermission(type = DePermissionType.PANEL, level = ResourceAuthLevel.PANNEL_LEVEL_MANAGE, paramIndex = 1)
@ApiOperation("删除视图的字段")
@PostMapping("/deleteByChartId/{chartId}/{panelId}")
public void deleteByChartId(@PathVariable String chartId, @PathVariable String panelId) {
chartViewFieldService.deleteByChartId(chartId);
}
@DePermission(type = DePermissionType.PANEL, level = ResourceAuthLevel.PANNEL_LEVEL_VIEW, paramIndex = 1)
@ApiOperation("分组查询表下属字段")
@PostMapping("listByDQ/{chartId}/{panelId}")
public ChartViewField4Type listByDQ(@PathVariable String chartId, @PathVariable String panelId) {
ChartViewField chartViewField = new ChartViewField();
chartViewField.setChartId(chartId);
chartViewField.setGroupType("d");
List<ChartViewField> dimensionList = chartViewFieldService.list(chartViewField);
chartViewField.setGroupType("q");
List<ChartViewField> quotaList = chartViewFieldService.list(chartViewField);
ChartViewField4Type chartViewField4Type = new ChartViewField4Type();
chartViewField4Type.setDimensionList(dimensionList);
chartViewField4Type.setQuotaList(quotaList);
return chartViewField4Type;
}
}

View File

@ -0,0 +1,15 @@
package io.dataease.controller.response;
import io.dataease.plugins.common.base.domain.ChartViewField;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
public class ChartViewField4Type {
@ApiModelProperty("维度")
List<ChartViewField> dimensionList;
@ApiModelProperty("指标")
List<ChartViewField> quotaList;
}

View File

@ -0,0 +1,80 @@
package io.dataease.service.chart;
import io.dataease.commons.exception.DEException;
import io.dataease.commons.utils.TableUtils;
import io.dataease.i18n.Translator;
import io.dataease.plugins.common.base.domain.ChartViewField;
import io.dataease.plugins.common.base.domain.ChartViewFieldExample;
import io.dataease.plugins.common.base.mapper.ChartViewFieldMapper;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.UUID;
/**
* Author: Gin
*/
@Service
public class ChartViewFieldService {
@Resource
private ChartViewFieldMapper chartViewFieldMapper;
public ChartViewField save(ChartViewField chartViewField) {
checkFieldName(chartViewField);
if (StringUtils.isEmpty(chartViewField.getId())) {
chartViewField.setId(UUID.randomUUID().toString());
// 若dataeasename为空则用MD5(id)作为dataeasename
if (StringUtils.isEmpty(chartViewField.getDataeaseName())) {
chartViewField.setDataeaseName(TableUtils.columnName(chartViewField.getId()));
}
if (ObjectUtils.isEmpty(chartViewField.getLastSyncTime())) {
chartViewField.setLastSyncTime(System.currentTimeMillis());
}
chartViewFieldMapper.insert(chartViewField);
} else {
chartViewFieldMapper.updateByPrimaryKeySelective(chartViewField);
}
return chartViewField;
}
public List<ChartViewField> list(ChartViewField chartViewField) {
ChartViewFieldExample chartViewFieldExample = new ChartViewFieldExample();
ChartViewFieldExample.Criteria criteria = chartViewFieldExample.createCriteria();
if (StringUtils.isNotEmpty(chartViewField.getChartId())) {
criteria.andChartIdEqualTo(chartViewField.getChartId());
}
if (StringUtils.isNotEmpty(chartViewField.getGroupType())) {
criteria.andGroupTypeEqualTo(chartViewField.getGroupType());
}
return chartViewFieldMapper.selectByExampleWithBLOBs(chartViewFieldExample);
}
public void delete(String id) {
chartViewFieldMapper.deleteByPrimaryKey(id);
}
public void deleteByChartId(String chartId) {
ChartViewFieldExample chartViewFieldExample = new ChartViewFieldExample();
chartViewFieldExample.createCriteria().andChartIdEqualTo(chartId);
chartViewFieldMapper.deleteByExample(chartViewFieldExample);
}
public void checkFieldName(ChartViewField chartViewField) {
if (StringUtils.isNotEmpty(chartViewField.getName()) && StringUtils.isNotEmpty(chartViewField.getChartId())) {
ChartViewFieldExample chartViewFieldExample = new ChartViewFieldExample();
ChartViewFieldExample.Criteria criteria = chartViewFieldExample.createCriteria();
criteria.andNameEqualTo(chartViewField.getName()).andChartIdEqualTo(chartViewField.getChartId());
if (StringUtils.isNotEmpty(chartViewField.getId())) {
criteria.andIdNotEqualTo(chartViewField.getId());
}
List<ChartViewField> datasetTableFields = chartViewFieldMapper.selectByExample(chartViewFieldExample);
if (CollectionUtils.isNotEmpty(datasetTableFields)) {
DEException.throwException(Translator.get("i18n_field_name_repeat"));
}
}
}
}

View File

@ -577,10 +577,10 @@ public class ChartViewService {
//将没有权限的列删掉
List<String> dataeaseNames = columnPermissionFields.stream().map(DatasetTableField::getDataeaseName).collect(Collectors.toList());
dataeaseNames.add("*");
fieldCustomFilter = fieldCustomFilter.stream().filter(item -> !desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList());
extStack = extStack.stream().filter(item -> !desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList());
extBubble = extBubble.stream().filter(item -> !desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList());
drill = drill.stream().filter(item -> !desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList());
fieldCustomFilter = fieldCustomFilter.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList());
extStack = extStack.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList());
extBubble = extBubble.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList());
drill = drill.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList());
//行权限
@ -597,7 +597,7 @@ public class ChartViewService {
switch (view.getType()) {
case "label":
xAxis = xAxis.stream().filter(item -> !desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList());
xAxis = xAxis.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList());
yAxis = new ArrayList<>();
if (CollectionUtils.isEmpty(xAxis)) {
return emptyChartViewDTO(view);
@ -607,25 +607,25 @@ public class ChartViewService {
case "gauge":
case "liquid":
xAxis = new ArrayList<>();
yAxis = yAxis.stream().filter(item -> !desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList());
yAxis = yAxis.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList());
if (CollectionUtils.isEmpty(yAxis)) {
return emptyChartViewDTO(view);
}
break;
case "table-info":
yAxis = new ArrayList<>();
xAxis = xAxis.stream().filter(item -> dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList());
xAxis = xAxis.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList());
if (CollectionUtils.isEmpty(xAxis)) {
return emptyChartViewDTO(view);
}
break;
case "table-normal":
xAxis = xAxis.stream().filter(item -> dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList());
yAxis = yAxis.stream().filter(item -> dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList());
xAxis = xAxis.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList());
yAxis = yAxis.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList());
break;
default:
xAxis = xAxis.stream().filter(item -> !desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList());
yAxis = yAxis.stream().filter(item -> !desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList());
xAxis = xAxis.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList());
yAxis = yAxis.stream().filter(item -> StringUtils.isNotEmpty(item.getChartId()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList());
}
// 过滤来自仪表板的条件