forked from github/dataease
feat: 视图支持计算字段
This commit is contained in:
parent
64ce697bcf
commit
338cb44f5e
@ -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;
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
@ -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"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -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());
|
||||
}
|
||||
|
||||
// 过滤来自仪表板的条件
|
||||
|
Loading…
Reference in New Issue
Block a user