feat(视图):指标卡支持同环比配置

This commit is contained in:
jianneng-fit2cloud 2024-09-11 09:40:52 +08:00
parent df3e6b1174
commit f759f95223
4 changed files with 112 additions and 12 deletions

View File

@ -520,7 +520,7 @@ public class ChartViewService {
QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType());
if (StringUtils.equalsIgnoreCase(table.getType(), DatasetType.DB.name())) {
datasourceRequest.setTable(dataTableInfoDTO.getTable());
if (StringUtils.equalsIgnoreCase("text", view.getType()) || StringUtils.equalsIgnoreCase("gauge", view.getType()) || StringUtils.equalsIgnoreCase("liquid", view.getType())) {
if (StringUtils.equalsIgnoreCase("gauge", view.getType()) || StringUtils.equalsIgnoreCase("liquid", view.getType())) {
datasourceRequest.setQuery(qp.getSQLSummary(dataTableInfoDTO.getTable(), yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, view, ds));
} else if (StringUtils.containsIgnoreCase(view.getType(), "stack")) {
datasourceRequest.setQuery(qp.getSQLStack(dataTableInfoDTO.getTable(), xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extStack, ds, view));
@ -539,7 +539,7 @@ public class ChartViewService {
} else if (StringUtils.equalsIgnoreCase(table.getType(), DatasetType.SQL.name())) {
String sql = dataTableInfoDTO.isBase64Encryption() ? new String(java.util.Base64.getDecoder().decode(dataTableInfoDTO.getSql())) : dataTableInfoDTO.getSql();
sql = handleVariable(sql, requestList, qp, table, ds);
if (StringUtils.equalsIgnoreCase("text", view.getType()) || StringUtils.equalsIgnoreCase("gauge", view.getType()) || StringUtils.equalsIgnoreCase("liquid", view.getType())) {
if (StringUtils.equalsIgnoreCase("gauge", view.getType()) || StringUtils.equalsIgnoreCase("liquid", view.getType())) {
datasourceRequest.setQuery(qp.getSQLSummaryAsTmp(sql, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, view));
} else if (StringUtils.containsIgnoreCase(view.getType(), "stack")) {
datasourceRequest.setQuery(qp.getSQLAsTmpStack(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extStack, view));
@ -559,7 +559,7 @@ public class ChartViewService {
DataTableInfoDTO dt = gson.fromJson(table.getInfo(), DataTableInfoDTO.class);
List<DataSetTableUnionDTO> list = dataSetTableUnionService.listByTableId(dt.getList().get(0).getTableId());
String sql = dataSetTableService.getCustomSQLDatasource(dt, list, ds);
if (StringUtils.equalsIgnoreCase("text", view.getType()) || StringUtils.equalsIgnoreCase("gauge", view.getType()) || StringUtils.equalsIgnoreCase("liquid", view.getType())) {
if (StringUtils.equalsIgnoreCase("gauge", view.getType()) || StringUtils.equalsIgnoreCase("liquid", view.getType())) {
datasourceRequest.setQuery(qp.getSQLSummaryAsTmp(sql, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, view));
} else if (StringUtils.containsIgnoreCase(view.getType(), "stack")) {
datasourceRequest.setQuery(qp.getSQLAsTmpStack(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extStack, view));
@ -580,7 +580,7 @@ public class ChartViewService {
Map<String, Object> sqlMap = dataSetTableService.getUnionSQLDatasource(dt, ds);
String sql = (String) sqlMap.get("sql");
if (StringUtils.equalsIgnoreCase("text", view.getType()) || StringUtils.equalsIgnoreCase("gauge", view.getType()) || StringUtils.equalsIgnoreCase("liquid", view.getType())) {
if (StringUtils.equalsIgnoreCase("gauge", view.getType()) || StringUtils.equalsIgnoreCase("liquid", view.getType())) {
datasourceRequest.setQuery(qp.getSQLSummaryAsTmp(sql, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, view));
} else if (StringUtils.containsIgnoreCase(view.getType(), "stack")) {
datasourceRequest.setQuery(qp.getSQLAsTmpStack(sql, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extStack, view));
@ -610,7 +610,7 @@ public class ChartViewService {
String tableName = "ds_" + table.getId().replaceAll("-", "_");
datasourceRequest.setTable(tableName);
QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType());
if (StringUtils.equalsIgnoreCase("text", view.getType()) || StringUtils.equalsIgnoreCase("gauge", view.getType()) || StringUtils.equalsIgnoreCase("liquid", view.getType())) {
if (StringUtils.equalsIgnoreCase("gauge", view.getType()) || StringUtils.equalsIgnoreCase("liquid", view.getType())) {
datasourceRequest.setQuery(qp.getSQLSummary(tableName, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, view, ds));
} else if (StringUtils.containsIgnoreCase(view.getType(), "stack")) {
datasourceRequest.setQuery(qp.getSQLStack(tableName, xAxis, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, extStack, ds, view));
@ -781,6 +781,28 @@ public class ChartViewService {
}
break;
case "text":
xAxis = new ArrayList<>();
yAxis = yAxis.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList());
if (CollectionUtils.isEmpty(yAxis)) {
return emptyChartViewDTO(view);
}
ChartFieldCompareDTO compareCalc = yAxis.get(0).getCompareCalc();
boolean isYoy = StringUtils.isNotEmpty(compareCalc.getType()) && !StringUtils.equalsIgnoreCase(compareCalc.getType(),"none");
if(isYoy){
List<DatasetTableField> xField = fields.stream().filter(item->StringUtils.equalsIgnoreCase(item.getId(),compareCalc.getField())).collect(Collectors.toList());
if(CollectionUtils.isNotEmpty(xField)){
ChartViewFieldDTO xFieldChartViewFieldDTO = new ChartViewFieldDTO();
org.springframework.beans.BeanUtils.copyProperties(xField.get(0), xFieldChartViewFieldDTO);
xAxis.add(xFieldChartViewFieldDTO);
xAxis.get(0).setSort("desc");
if(Objects.isNull(compareCalc.getCustom())){
xAxis.get(0).setDateStyle("y_M_d");
}else{
xAxis.get(0).setDateStyle(compareCalc.getCustom().getTimeType());
}
}
}
break;
case "gauge":
case "liquid":
xAxis = new ArrayList<>();
@ -1229,7 +1251,7 @@ public class ChartViewService {
QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType());
if (StringUtils.equalsIgnoreCase(table.getType(), DatasetType.DB.name())) {
datasourceRequest.setTable(dataTableInfoDTO.getTable());
if (StringUtils.equalsAnyIgnoreCase(view.getType(), "text", "gauge", "liquid")) {
if (StringUtils.equalsAnyIgnoreCase(view.getType(), "gauge", "liquid")) {
querySql = qp.getSQLSummary(dataTableInfoDTO.getTable(), yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, view, ds);
if (isYOY) {
yoySql = qp.getSQLSummary(dataTableInfoDTO.getTable(), yAxis, fieldCustomFilter, rowPermissionsTree, yoyFilterList, view, ds);
@ -1269,7 +1291,7 @@ public class ChartViewService {
} else if (StringUtils.equalsIgnoreCase(table.getType(), DatasetType.SQL.name())) {
String sql = dataTableInfoDTO.isBase64Encryption() ? new String(java.util.Base64.getDecoder().decode(dataTableInfoDTO.getSql())) : dataTableInfoDTO.getSql();
sql = handleVariable(sql, chartExtRequest, qp, table, ds);
if (StringUtils.equalsAnyIgnoreCase(view.getType(), "text", "gauge", "liquid")) {
if (StringUtils.equalsAnyIgnoreCase(view.getType(), "gauge", "liquid")) {
querySql = qp.getSQLSummaryAsTmp(sql, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, view);
if (isYOY) {
yoySql = qp.getSQLSummaryAsTmp(sql, yAxis, fieldCustomFilter, rowPermissionsTree, yoyFilterList, view);
@ -1311,7 +1333,7 @@ public class ChartViewService {
DataTableInfoDTO dt = gson.fromJson(table.getInfo(), DataTableInfoDTO.class);
List<DataSetTableUnionDTO> list = dataSetTableUnionService.listByTableId(dt.getList().get(0).getTableId());
String sql = dataSetTableService.getCustomSQLDatasource(dt, list, ds);
if (StringUtils.equalsAnyIgnoreCase(view.getType(), "text", "gauge", "liquid")) {
if (StringUtils.equalsAnyIgnoreCase(view.getType(), "gauge", "liquid")) {
querySql = qp.getSQLSummaryAsTmp(sql, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, view);
if (isYOY) {
yoySql = qp.getSQLSummaryAsTmp(sql, yAxis, fieldCustomFilter, rowPermissionsTree, yoyFilterList, view);
@ -1352,7 +1374,7 @@ public class ChartViewService {
DataTableInfoDTO dt = gson.fromJson(table.getInfo(), DataTableInfoDTO.class);
Map<String, Object> sqlMap = dataSetTableService.getUnionSQLDatasource(dt, ds);
String sql = (String) sqlMap.get("sql");
if (StringUtils.equalsAnyIgnoreCase(view.getType(), "text", "gauge", "liquid")) {
if (StringUtils.equalsAnyIgnoreCase(view.getType(), "gauge", "liquid")) {
querySql = qp.getSQLSummaryAsTmp(sql, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, view);
if (isYOY) {
yoySql = qp.getSQLSummaryAsTmp(sql, yAxis, fieldCustomFilter, rowPermissionsTree, yoyFilterList, view);
@ -1433,7 +1455,7 @@ public class ChartViewService {
String tableName = "ds_" + table.getId().replaceAll("-", "_");
datasourceRequest.setTable(tableName);
QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType());
if (StringUtils.equalsAnyIgnoreCase(view.getType(), "text", "gauge", "liquid")) {
if (StringUtils.equalsAnyIgnoreCase(view.getType(), "gauge", "liquid")) {
datasourceRequest.setQuery(qp.getSQLSummary(tableName, yAxis, fieldCustomFilter, rowPermissionsTree, extFilterList, view, ds));
if (isYOY) {
yoySql = qp.getSQLSummary(tableName, yAxis, fieldCustomFilter, rowPermissionsTree, yoyFilterList, view, ds);

View File

@ -17,12 +17,30 @@
<el-option
v-for="field in fieldList"
:key="field.id"
:label="field.name + '(' + $t('chart.' + field.dateStyle) + ')'"
:label="fieldFormatter(field)"
:value="field.id"
/>
</el-select>
</el-form-item>
<el-form-item
v-if="isIndicator"
:label="$t('chart.datePattern')"
>
<el-select
v-model="dateFormatter"
:placeholder="$t('chart.datePattern')"
@change="changeDateFormatter"
>
<el-option
v-for="field in dateFormatterList"
:key="field.value"
:label="field.name"
:value="field.value"
/>
</el-select>
</el-form-item>
<el-form-item :label="$t('chart.compare_type')">
<el-radio-group v-model="compareItem.compareCalc.type">
<el-radio
@ -73,23 +91,40 @@ export default {
chart: {
type: Object,
required: true
},
dimensionData: {
type: Array,
required: false
},
quotaData: {
type: Array,
required: false
}
},
data() {
return {
fieldList: [],
compareList: []
compareList: [],
dateFormatter: 'y_M_d',
dateFormatterList: [
{ name: this.$t('chart.y'), value: 'y' },
{ name: this.$t('chart.y_W'), value: 'y_W' },
{ name: this.$t('chart.y_M'), value: 'y_M' },
{ name: this.$t('chart.y_M_d'), value: 'y_M_d' }
]
}
},
watch: {
'chart': function() {
this.initFieldList()
this.initCompareType()
this.initDateFormatter()
}
},
mounted() {
this.initFieldList()
this.initCompareType()
this.initDateFormatter()
},
methods: {
// xaxisextStack
@ -114,6 +149,12 @@ export default {
t1.push(...t2)
}
if (this.isIndicator) {
t1.length = 0
t1.push(...this.dimensionData.filter(ele => ele.deType === 1))
t1.push(...this.quotaData.filter(ele => ele.deType === 1))
}
this.fieldList = t1
//
if ((!this.compareItem.compareCalc.field || this.compareItem.compareCalc.field === '') && this.fieldList.length > 0) {
@ -147,6 +188,36 @@ export default {
if ((!this.compareItem.compareCalc.type || this.compareItem.compareCalc.type === '' || this.compareItem.compareCalc.type === 'none') && this.compareList.length > 0) {
this.compareItem.compareCalc.type = this.compareList[0].value
}
},
changeDateFormatter() {
const checkedField = this.fieldList.filter(ele => ele.id === this.compareItem.compareCalc.field)
if (checkedField && checkedField.length > 0) {
checkedField[0].dateStyle = this.dateFormatter
if (!this.compareItem.compareCalc.custom) {
this.compareItem.compareCalc.custom = { timeType: 'y_M_d' }
}
this.compareItem.compareCalc.custom.timeType = this.dateFormatter
}
this.initCompareType()
},
initDateFormatter() {
const timeType = this.compareItem.compareCalc.custom?.timeType
if (this.isIndicator && timeType) {
this.dateFormatter = timeType==='0'?'y_M_d':timeType
this.changeDateFormatter()
}
},
fieldFormatter(field) {
if (this.isIndicator) {
return field.name
} else {
return field.name + '(' + this.$t('chart.' + field.dateStyle) + ')'
}
}
},
computed: {
isIndicator() {
return this.chart.type === 'text'
}
}
}

View File

@ -323,6 +323,11 @@ export default {
}
},
isEnableCompare() {
//
if (this.chart.type === 'text') {
this.disableEditCompare = false
return
}
let xAxis = null
if (Object.prototype.toString.call(this.chart.xaxis) === '[object Array]') {
xAxis = JSON.parse(JSON.stringify(this.chart.xaxis))

View File

@ -1772,6 +1772,8 @@
<compare-edit
:compare-item="quotaItemCompare"
:chart="chart"
:dimension-data="dimensionData"
:quota-data="quotaData"
/>
<div
slot="footer"