feat: 新增charts图表逻辑
新增和修改图标handler处理器逻辑,优化admin用户登录没有权限问题
This commit is contained in:
parent
697dfb97c6
commit
1a9718050f
@ -1,8 +1,9 @@
|
|||||||
package com.stdproject.service.manage;
|
package com.stdproject.charts.impl;
|
||||||
|
|
||||||
import com.beust.jcommander.Strings;
|
import com.beust.jcommander.Strings;
|
||||||
import com.stdproject.constant.ChartConstants;
|
import com.stdproject.constant.ChartConstants;
|
||||||
import com.stdproject.entity.union.DatasetGroupInfoDTO;
|
import com.stdproject.entity.union.DatasetGroupInfoDTO;
|
||||||
|
import com.stdproject.service.manage.*;
|
||||||
import com.stdproject.service.provider.SQLProvider;
|
import com.stdproject.service.provider.SQLProvider;
|
||||||
import com.stdproject.utils.Utils;
|
import com.stdproject.utils.Utils;
|
||||||
import com.stdproject.utils.trans.Dimension2SQLObj;
|
import com.stdproject.utils.trans.Dimension2SQLObj;
|
@ -1,12 +1,8 @@
|
|||||||
package com.stdproject.charts.impl;
|
package com.stdproject.charts.impl;
|
||||||
|
|
||||||
import com.stdproject.service.manage.DefaultChartHandler;
|
|
||||||
import io.gisbi.extensions.view.dto.AxisFormatResult;
|
import io.gisbi.extensions.view.dto.AxisFormatResult;
|
||||||
import io.gisbi.extensions.view.dto.ChartAxis;
|
import io.gisbi.extensions.view.dto.ChartAxis;
|
||||||
import io.gisbi.extensions.view.dto.ChartViewDTO;
|
import io.gisbi.extensions.view.dto.ChartViewDTO;
|
||||||
import io.gisbi.extensions.view.dto.ChartViewFieldDTO;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
public class ExtQuotaChartHandler extends DefaultChartHandler {
|
public class ExtQuotaChartHandler extends DefaultChartHandler {
|
||||||
@Override
|
@Override
|
||||||
|
@ -3,7 +3,6 @@ package com.stdproject.charts.impl;
|
|||||||
|
|
||||||
import com.fasterxml.jackson.core.type.TypeReference;
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
import com.stdproject.entity.union.DatasetGroupInfoDTO;
|
import com.stdproject.entity.union.DatasetGroupInfoDTO;
|
||||||
import com.stdproject.service.manage.DefaultChartHandler;
|
|
||||||
import com.stdproject.service.provider.SQLProvider;
|
import com.stdproject.service.provider.SQLProvider;
|
||||||
import com.stdproject.utils.Utils;
|
import com.stdproject.utils.Utils;
|
||||||
import com.stdproject.utils.trans.ExtWhere2Str;
|
import com.stdproject.utils.trans.ExtWhere2Str;
|
||||||
@ -20,7 +19,6 @@ import org.apache.commons.lang3.StringUtils;
|
|||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 带同环比计算的图表处理器
|
* 带同环比计算的图表处理器
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package com.stdproject.charts.impl.map;
|
package com.stdproject.charts.impl.map;
|
||||||
|
|
||||||
import com.stdproject.service.manage.DefaultChartHandler;
|
import com.stdproject.charts.impl.DefaultChartHandler;
|
||||||
import com.stdproject.utils.ChartDataBuild;
|
import com.stdproject.utils.ChartDataBuild;
|
||||||
import io.gisbi.extensions.view.dto.*;
|
import io.gisbi.extensions.view.dto.*;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
@ -0,0 +1,195 @@
|
|||||||
|
package com.stdproject.charts.impl.map;
|
||||||
|
|
||||||
|
|
||||||
|
import com.stdproject.charts.impl.GroupChartHandler;
|
||||||
|
import com.stdproject.constant.ExtFieldConstant;
|
||||||
|
import com.stdproject.entity.union.DatasetGroupInfoDTO;
|
||||||
|
import com.stdproject.service.provider.SQLProvider;
|
||||||
|
import com.stdproject.utils.ChartDataBuild;
|
||||||
|
import com.stdproject.utils.TableUtils;
|
||||||
|
import com.stdproject.utils.Utils;
|
||||||
|
import com.stdproject.utils.trans.Dimension2SQLObj;
|
||||||
|
import com.stdproject.utils.trans.Field2SQLObj;
|
||||||
|
import com.stdproject.utils.trans.Quota2SQLObj;
|
||||||
|
import com.stdproject.utils.trans.Table2SQLObj;
|
||||||
|
import io.gisbi.extensions.datasource.dto.DatasetTableFieldDTO;
|
||||||
|
import io.gisbi.extensions.datasource.dto.DatasourceRequest;
|
||||||
|
import io.gisbi.extensions.datasource.dto.DatasourceSchemaDTO;
|
||||||
|
import io.gisbi.extensions.datasource.model.SQLMeta;
|
||||||
|
import io.gisbi.extensions.datasource.provider.Provider;
|
||||||
|
import io.gisbi.extensions.view.dto.*;
|
||||||
|
import io.gisbi.extensions.view.util.ChartDataUtil;
|
||||||
|
import io.gisbi.extensions.view.util.FieldUtil;
|
||||||
|
import io.gisbi.utils.BeanUtils;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import lombok.Getter;
|
||||||
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class SymbolicMapHandler extends GroupChartHandler {
|
||||||
|
// @Resource
|
||||||
|
// private DatasetDataManage datasetDataManage;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
private String type = "symbolic-map";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AxisFormatResult formatAxis(ChartViewDTO view) {
|
||||||
|
var result = super.formatAxis(view);
|
||||||
|
result.getAxisMap().put(ChartAxis.extBubble, view.getExtBubble());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private Map<String, Object> customBuildResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, List<String[]> data, List<ChartViewFieldDTO> detailFields, List<String[]> detailData) {
|
||||||
|
var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis);
|
||||||
|
var extBubble = formatResult.getAxisMap().get(ChartAxis.extBubble);
|
||||||
|
var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis);
|
||||||
|
return ChartDataBuild.transSymbolicMapNormalWithDetail(view, xAxis, yAxis, extBubble, data, detailFields, detailData);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <T extends ChartCalcDataResult> T calcChartResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, Map<String, Object> sqlMap, SQLMeta sqlMeta, Provider provider) {
|
||||||
|
var dsMap = (Map<Long, DatasourceSchemaDTO>) sqlMap.get("dsMap");
|
||||||
|
List<String> dsList = new ArrayList<>();
|
||||||
|
for (Map.Entry<Long, DatasourceSchemaDTO> next : dsMap.entrySet()) {
|
||||||
|
dsList.add(next.getValue().getType());
|
||||||
|
}
|
||||||
|
boolean needOrder = Utils.isNeedOrder(dsList);
|
||||||
|
boolean crossDs = Utils.isCrossDs(dsMap);
|
||||||
|
DatasourceRequest datasourceRequest = new DatasourceRequest();
|
||||||
|
datasourceRequest.setIsCross(((DatasetGroupInfoDTO) formatResult.getContext().get("dataset")).getIsCross());
|
||||||
|
datasourceRequest.setDsList(dsMap);
|
||||||
|
var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis);
|
||||||
|
var extBubble = formatResult.getAxisMap().get(ChartAxis.extBubble);
|
||||||
|
var allFields = (List<ChartViewFieldDTO>) filterResult.getContext().get("allFields");
|
||||||
|
List<ChartViewFieldDTO> countField = chartViewManege.transFieldDTO(Collections.singletonList(chartViewManege.createCountField(view.getTableId())));
|
||||||
|
List<DatasetTableFieldDTO> datasetTableFieldDTOList = FieldUtil.transFields(allFields);
|
||||||
|
SQLMeta sqlMeta1 = new SQLMeta();
|
||||||
|
BeanUtils.copyBean(sqlMeta1, sqlMeta);
|
||||||
|
Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, datasetTableFieldDTOList, crossDs, dsMap, Utils.getParams(datasetTableFieldDTOList), view.getCalParams(), pluginManage);
|
||||||
|
List<ChartViewFieldDTO> yAxis = new ArrayList<>();
|
||||||
|
if (!extBubble.isEmpty() && !"*".equals(extBubble.get(0).getGisbiName())) {
|
||||||
|
yAxis.addAll(extBubble);
|
||||||
|
}
|
||||||
|
yAxis.addAll(countField);
|
||||||
|
datasetTableFieldDTOList.addAll(FieldUtil.transFields(countField));
|
||||||
|
formatResult.getAxisMap().put(ChartAxis.yAxis, countField);
|
||||||
|
Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, datasetTableFieldDTOList, crossDs, dsMap, Utils.getParams(datasetTableFieldDTOList), view.getCalParams(), pluginManage);
|
||||||
|
String querySql = SQLProvider.createQuerySQL(sqlMeta, true, needOrder, view);
|
||||||
|
querySql = provider.rebuildSQL(querySql, sqlMeta, crossDs, dsMap);
|
||||||
|
datasourceRequest.setQuery(querySql);
|
||||||
|
logger.debug("calcite chart sql: " + querySql);
|
||||||
|
List<String[]> data = (List<String[]>) provider.fetchResultField(datasourceRequest).get("data");
|
||||||
|
// 获取所有字段数据作为数据详情返回
|
||||||
|
List<String[]> detailData = new ArrayList<>();
|
||||||
|
List<Long> xAxisIds = xAxis.stream().map(ChartViewFieldDTO::getId).toList();
|
||||||
|
List<ChartViewFieldDTO> detailFields = new ArrayList<>();
|
||||||
|
detailFields.addAll(xAxis);
|
||||||
|
detailFields.addAll(allFields.stream().filter(field -> !xAxisIds.contains(field.getId())).toList());
|
||||||
|
if (ObjectUtils.isNotEmpty(detailFields)) {
|
||||||
|
List<DatasetTableFieldDTO> allFieldsTmp = FieldUtil.transFields(detailFields);
|
||||||
|
buildFieldName(sqlMap, allFieldsTmp);
|
||||||
|
String sql = (String) sqlMap.get("sql");
|
||||||
|
sql = Utils.replaceSchemaAlias(sql, dsMap);
|
||||||
|
SQLMeta sqlMeta2 = new SQLMeta();
|
||||||
|
Table2SQLObj.table2sqlobj(sqlMeta2, null, "(" + sql + ")", crossDs);
|
||||||
|
Field2SQLObj.field2sqlObj(sqlMeta2, allFieldsTmp, allFieldsTmp, crossDs, dsMap, Utils.getParams(allFieldsTmp), null, pluginManage);// todo chartParam从视图里取
|
||||||
|
String querySQL;
|
||||||
|
querySQL = SQLProvider.createQuerySQL(sqlMeta2, false, needOrder, false);
|
||||||
|
querySQL = provider.rebuildSQL(querySQL, sqlMeta2, crossDs, dsMap);
|
||||||
|
logger.debug("calcite data preview sql: " + querySQL);
|
||||||
|
// 调用数据源的calcite获得data
|
||||||
|
DatasourceRequest datasourceRequest1 = new DatasourceRequest();
|
||||||
|
datasourceRequest1.setIsCross(((DatasetGroupInfoDTO) formatResult.getContext().get("dataset")).getIsCross());
|
||||||
|
datasourceRequest1.setQuery(querySQL);
|
||||||
|
datasourceRequest1.setDsList(dsMap);
|
||||||
|
detailData = (List<String[]>) provider.fetchResultField(datasourceRequest1).get("data");
|
||||||
|
}
|
||||||
|
//自定义排序
|
||||||
|
data = ChartDataUtil.resultCustomSort(xAxis, yAxis, view.getSortPriority(), data);
|
||||||
|
//数据重组逻辑可重载
|
||||||
|
var result = customBuildResult(view, formatResult, filterResult, data, detailFields, detailData);
|
||||||
|
T calcResult = (T) new ChartCalcDataResult();
|
||||||
|
calcResult.setData(result);
|
||||||
|
calcResult.setContext(filterResult.getContext());
|
||||||
|
calcResult.setQuerySql(querySql);
|
||||||
|
calcResult.setOriginData(data);
|
||||||
|
formatResult.getAxisMap().put(ChartAxis.yAxis, new ArrayList<>());
|
||||||
|
return calcResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void buildFieldName(Map<String, Object> sqlMap, List<DatasetTableFieldDTO> fields) {
|
||||||
|
// 获取内层union sql和字段
|
||||||
|
List<DatasetTableFieldDTO> unionFields = (List<DatasetTableFieldDTO>) sqlMap.get("field");
|
||||||
|
for (DatasetTableFieldDTO datasetTableFieldDTO : fields) {
|
||||||
|
DatasetTableFieldDTO dto = datasetTableFieldManage.selectById(datasetTableFieldDTO.getId());
|
||||||
|
if (ObjectUtils.isEmpty(dto)) {
|
||||||
|
if (Objects.equals(datasetTableFieldDTO.getExtField(), ExtFieldConstant.EXT_NORMAL)) {
|
||||||
|
for (DatasetTableFieldDTO fieldDTO : unionFields) {
|
||||||
|
if (Objects.equals(datasetTableFieldDTO.getDatasetTableId(), fieldDTO.getDatasetTableId())
|
||||||
|
&& Objects.equals(datasetTableFieldDTO.getOriginName(), fieldDTO.getOriginName())) {
|
||||||
|
datasetTableFieldDTO.setGisbiName(fieldDTO.getGisbiName());
|
||||||
|
datasetTableFieldDTO.setFieldShortName(fieldDTO.getFieldShortName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Objects.equals(datasetTableFieldDTO.getExtField(), ExtFieldConstant.EXT_CALC)) {
|
||||||
|
String gisbiName = TableUtils.fieldNameShort(datasetTableFieldDTO.getId() + "_" + datasetTableFieldDTO.getOriginName());
|
||||||
|
datasetTableFieldDTO.setGisbiName(gisbiName);
|
||||||
|
datasetTableFieldDTO.setFieldShortName(gisbiName);
|
||||||
|
datasetTableFieldDTO.setDeExtractType(datasetTableFieldDTO.getDeType());
|
||||||
|
}
|
||||||
|
if (Objects.equals(datasetTableFieldDTO.getExtField(), ExtFieldConstant.EXT_GROUP)) {
|
||||||
|
String gisbiName = TableUtils.fieldNameShort(datasetTableFieldDTO.getId() + "_" + datasetTableFieldDTO.getOriginName());
|
||||||
|
datasetTableFieldDTO.setGisbiName(gisbiName);
|
||||||
|
datasetTableFieldDTO.setFieldShortName(gisbiName);
|
||||||
|
datasetTableFieldDTO.setDeExtractType(0);
|
||||||
|
datasetTableFieldDTO.setDeType(0);
|
||||||
|
datasetTableFieldDTO.setGroupType("d");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
datasetTableFieldDTO.setGisbiName(dto.getGisbiName());
|
||||||
|
datasetTableFieldDTO.setFieldShortName(dto.getFieldShortName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ChartViewDTO buildChart(ChartViewDTO view, ChartCalcDataResult calcResult, AxisFormatResult formatResult, CustomFilterResult filterResult) {
|
||||||
|
var desensitizationList = (Map<String, ColumnPermissionItem>) filterResult.getContext().get("desensitizationList");
|
||||||
|
var allFields = (List<ChartViewFieldDTO>) filterResult.getContext().get("allFields");
|
||||||
|
var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis);
|
||||||
|
var extBubble = formatResult.getAxisMap().get(ChartAxis.extBubble);
|
||||||
|
// 如果是表格导出查询 则在此处直接就可以返回
|
||||||
|
var extStack = formatResult.getAxisMap().get(ChartAxis.extStack);
|
||||||
|
if (view.getIsExcelExport()) {
|
||||||
|
Map<String, Object> sourceInfo = ChartDataBuild.transTableNormal(xAxis, extBubble, view, calcResult.getOriginData(), extStack, desensitizationList);
|
||||||
|
sourceInfo.put("sourceData", calcResult.getOriginData());
|
||||||
|
view.setData(sourceInfo);
|
||||||
|
return view;
|
||||||
|
}
|
||||||
|
// 图表组件可再扩展
|
||||||
|
Map<String, Object> mapTableNormal = calcResult.getData();
|
||||||
|
var drillFilters = filterResult.getFilterList().stream().filter(f -> f.getFilterType() == 1).collect(Collectors.toList());
|
||||||
|
var isDrill = CollectionUtils.isNotEmpty(drillFilters);
|
||||||
|
// 构建结果
|
||||||
|
Map<String, Object> dataMap = new TreeMap<>();
|
||||||
|
dataMap.putAll(calcResult.getData());
|
||||||
|
dataMap.putAll(mapTableNormal);
|
||||||
|
dataMap.put("sourceFields", allFields);
|
||||||
|
List<ChartSeniorAssistDTO> chartSeniorAssistDTOS = mergeAssistField(calcResult.getDynamicAssistFields(), calcResult.getAssistData(), calcResult.getDynamicAssistFieldsOriginList(), calcResult.getAssistDataOriginList());
|
||||||
|
dataMap.put("dynamicAssistLines", chartSeniorAssistDTOS);
|
||||||
|
view.setData(dataMap);
|
||||||
|
view.setSql(Base64.getEncoder().encodeToString(calcResult.getQuerySql().getBytes()));
|
||||||
|
view.setDrill(isDrill);
|
||||||
|
view.setDrillFilters(drillFilters);
|
||||||
|
return view;
|
||||||
|
}
|
||||||
|
}
|
@ -1,7 +1,7 @@
|
|||||||
package com.stdproject.charts.impl.numeric;
|
package com.stdproject.charts.impl.numeric;
|
||||||
|
|
||||||
|
import com.stdproject.charts.impl.DefaultChartHandler;
|
||||||
import com.stdproject.entity.union.DatasetGroupInfoDTO;
|
import com.stdproject.entity.union.DatasetGroupInfoDTO;
|
||||||
import com.stdproject.service.manage.DefaultChartHandler;
|
|
||||||
import com.stdproject.service.provider.SQLProvider;
|
import com.stdproject.service.provider.SQLProvider;
|
||||||
import com.stdproject.utils.ChartDataBuild;
|
import com.stdproject.utils.ChartDataBuild;
|
||||||
import com.stdproject.utils.Utils;
|
import com.stdproject.utils.Utils;
|
||||||
|
@ -0,0 +1,10 @@
|
|||||||
|
package com.stdproject.charts.impl.table;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class PageInfo {
|
||||||
|
private Long goPage;
|
||||||
|
private Long pageSize;
|
||||||
|
private String dsVersion;
|
||||||
|
}
|
@ -1,8 +1,8 @@
|
|||||||
package com.stdproject.charts.impl.table;
|
package com.stdproject.charts.impl.table;
|
||||||
|
|
||||||
|
|
||||||
|
import com.stdproject.charts.impl.DefaultChartHandler;
|
||||||
import com.stdproject.entity.union.DatasetGroupInfoDTO;
|
import com.stdproject.entity.union.DatasetGroupInfoDTO;
|
||||||
import com.stdproject.service.manage.DefaultChartHandler;
|
|
||||||
import com.stdproject.service.provider.SQLProvider;
|
import com.stdproject.service.provider.SQLProvider;
|
||||||
import com.stdproject.utils.ChartDataBuild;
|
import com.stdproject.utils.ChartDataBuild;
|
||||||
import com.stdproject.utils.Utils;
|
import com.stdproject.utils.Utils;
|
||||||
|
@ -0,0 +1,188 @@
|
|||||||
|
package com.stdproject.charts.impl.table;
|
||||||
|
|
||||||
|
|
||||||
|
import com.stdproject.charts.impl.DefaultChartHandler;
|
||||||
|
import com.stdproject.entity.union.DatasetGroupInfoDTO;
|
||||||
|
import com.stdproject.service.provider.SQLProvider;
|
||||||
|
import com.stdproject.utils.Utils;
|
||||||
|
import com.stdproject.utils.trans.Dimension2SQLObj;
|
||||||
|
import io.gisbi.extensions.datasource.dto.DatasourceRequest;
|
||||||
|
import io.gisbi.extensions.datasource.dto.DatasourceSchemaDTO;
|
||||||
|
import io.gisbi.extensions.datasource.model.SQLMeta;
|
||||||
|
import io.gisbi.extensions.datasource.provider.Provider;
|
||||||
|
import io.gisbi.extensions.view.dto.*;
|
||||||
|
import io.gisbi.extensions.view.util.ChartDataUtil;
|
||||||
|
import io.gisbi.extensions.view.util.FieldUtil;
|
||||||
|
import io.gisbi.utils.BeanUtils;
|
||||||
|
import lombok.Getter;
|
||||||
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class TableInfoHandler extends DefaultChartHandler {
|
||||||
|
@Getter
|
||||||
|
private String type = "table-info";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AxisFormatResult formatAxis(ChartViewDTO view) {
|
||||||
|
var result = super.formatAxis(view);
|
||||||
|
result.getAxisMap().put(ChartAxis.yAxis, new ArrayList<>());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <T extends CustomFilterResult> T customFilter(ChartViewDTO view, List<ChartExtFilterDTO> filterList, AxisFormatResult formatResult) {
|
||||||
|
var chartExtRequest = view.getChartExtRequest();
|
||||||
|
Map<String, Object> mapAttr = view.getCustomAttr();
|
||||||
|
Map<String, Object> mapSize = (Map<String, Object>) mapAttr.get("basicStyle");
|
||||||
|
var tablePageMode = (String) mapSize.get("tablePageMode");
|
||||||
|
formatResult.getContext().put("tablePageMode", tablePageMode);
|
||||||
|
if (StringUtils.equalsIgnoreCase(tablePageMode, "page")) {
|
||||||
|
if (chartExtRequest.getGoPage() == null) {
|
||||||
|
chartExtRequest.setGoPage(1L);
|
||||||
|
}
|
||||||
|
if (chartExtRequest.getPageSize() == null) {
|
||||||
|
int pageSize = (int) mapSize.get("tablePageSize");
|
||||||
|
if (StringUtils.equalsIgnoreCase(view.getResultMode(), "custom")) {
|
||||||
|
chartExtRequest.setPageSize(Math.min(pageSize, view.getResultCount().longValue()));
|
||||||
|
} else {
|
||||||
|
chartExtRequest.setPageSize((long) pageSize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (StringUtils.equalsIgnoreCase(view.getResultMode(), "custom")) {
|
||||||
|
chartExtRequest.setGoPage(1L);
|
||||||
|
chartExtRequest.setPageSize(view.getResultCount().longValue());
|
||||||
|
} else if (!view.getIsExcelExport()) {
|
||||||
|
chartExtRequest.setGoPage(null);
|
||||||
|
chartExtRequest.setPageSize(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (T) new CustomFilterResult(filterList, formatResult.getContext());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, Object> buildResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, List<String[]> data) {
|
||||||
|
return new HashMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <T extends ChartCalcDataResult> T calcChartResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, Map<String, Object> sqlMap, SQLMeta sqlMeta, Provider provider) {
|
||||||
|
var chartExtRequest = view.getChartExtRequest();
|
||||||
|
var dsMap = (Map<Long, DatasourceSchemaDTO>) sqlMap.get("dsMap");
|
||||||
|
List<String> dsList = new ArrayList<>();
|
||||||
|
for (Map.Entry<Long, DatasourceSchemaDTO> next : dsMap.entrySet()) {
|
||||||
|
dsList.add(next.getValue().getType());
|
||||||
|
}
|
||||||
|
boolean crossDs = ((DatasetGroupInfoDTO) formatResult.getContext().get("dataset")).getIsCross();
|
||||||
|
DatasourceRequest datasourceRequest = new DatasourceRequest();
|
||||||
|
datasourceRequest.setIsCross(crossDs);
|
||||||
|
datasourceRequest.setDsList(dsMap);
|
||||||
|
var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis);
|
||||||
|
var allFields = (List<ChartViewFieldDTO>) filterResult.getContext().get("allFields");
|
||||||
|
PageInfo pageInfo = new PageInfo();
|
||||||
|
pageInfo.setGoPage(chartExtRequest.getGoPage());
|
||||||
|
if (StringUtils.equalsIgnoreCase(view.getResultMode(), "custom")) {
|
||||||
|
pageInfo.setPageSize(Math.min(view.getResultCount() - (chartExtRequest.getGoPage() - 1) * chartExtRequest.getPageSize(), chartExtRequest.getPageSize()));
|
||||||
|
} else {
|
||||||
|
pageInfo.setPageSize(chartExtRequest.getPageSize());
|
||||||
|
}
|
||||||
|
Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, FieldUtil.transFields(allFields), crossDs, dsMap, Utils.getParams(FieldUtil.transFields(allFields)), view.getCalParams(), pluginManage);
|
||||||
|
if (view.getIsExcelExport()) {
|
||||||
|
for (int i = 0; i < xAxis.size(); i++) {
|
||||||
|
ChartViewFieldDTO fieldDTO = null;
|
||||||
|
for (ChartViewFieldDTO allField : allFields) {
|
||||||
|
if (allField.getId().equals(xAxis.get(i).getId())) {
|
||||||
|
fieldDTO = allField;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (fieldDTO != null && fieldDTO.isAgg()) {
|
||||||
|
sqlMeta.getXFields().get(i).setFieldName("'-'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String originSql = SQLProvider.createQuerySQL(sqlMeta, false, !StringUtils.equalsIgnoreCase(dsMap.entrySet().iterator().next().getValue().getType(), "es"), view);// 明细表强制加排序
|
||||||
|
String limit = ((pageInfo.getGoPage() != null && pageInfo.getPageSize() != null) ? " LIMIT " + pageInfo.getPageSize() + " OFFSET " + (pageInfo.getGoPage() - 1) * chartExtRequest.getPageSize() : "");
|
||||||
|
var querySql = originSql + limit;
|
||||||
|
|
||||||
|
var tablePageMode = (String) filterResult.getContext().get("tablePageMode");
|
||||||
|
var totalPageSql = "SELECT COUNT(*) FROM (" + SQLProvider.createQuerySQLNoSort(sqlMeta, false, view) + ") COUNT_TEMP";
|
||||||
|
if (StringUtils.isNotEmpty(totalPageSql) && StringUtils.equalsIgnoreCase(tablePageMode, "page")) {
|
||||||
|
totalPageSql = provider.rebuildSQL(totalPageSql, sqlMeta, crossDs, dsMap);
|
||||||
|
datasourceRequest.setQuery(totalPageSql);
|
||||||
|
datasourceRequest.setTotalPageFlag(true);
|
||||||
|
logger.debug("calcite total sql: " + totalPageSql);
|
||||||
|
List<String[]> tmpData = (List<String[]>) provider.fetchResultField(datasourceRequest).get("data");
|
||||||
|
var totalItems = ObjectUtils.isEmpty(tmpData) ? 0 : Long.valueOf(tmpData.get(0)[0]);
|
||||||
|
if (StringUtils.equalsIgnoreCase(view.getResultMode(), "custom")) {
|
||||||
|
totalItems = totalItems <= view.getResultCount() ? totalItems : view.getResultCount();
|
||||||
|
}
|
||||||
|
var totalPage = (totalItems / pageInfo.getPageSize()) + (totalItems % pageInfo.getPageSize() > 0 ? 1 : 0);
|
||||||
|
view.setTotalItems(totalItems);
|
||||||
|
view.setTotalPage(totalPage);
|
||||||
|
}
|
||||||
|
|
||||||
|
querySql = provider.rebuildSQL(querySql, sqlMeta, crossDs, dsMap);
|
||||||
|
datasourceRequest.setQuery(querySql);
|
||||||
|
logger.debug("calcite chart sql: " + querySql);
|
||||||
|
List<String[]> data = (List<String[]>) provider.fetchResultField(datasourceRequest).get("data");
|
||||||
|
//自定义排序
|
||||||
|
data = ChartDataUtil.resultCustomSort(xAxis, Collections.emptyList(), view.getSortPriority(), data);
|
||||||
|
//数据重组逻辑可重载
|
||||||
|
var result = this.buildResult(view, formatResult, filterResult, data);
|
||||||
|
T calcResult = (T) new ChartCalcDataResult();
|
||||||
|
calcResult.setData(result);
|
||||||
|
calcResult.setContext(filterResult.getContext());
|
||||||
|
calcResult.setQuerySql(querySql);
|
||||||
|
calcResult.setOriginData(data);
|
||||||
|
try {
|
||||||
|
var dynamicAssistFields = getDynamicThresholdFields(view);
|
||||||
|
Set<Long> fieldIds = xAxis.stream().map(ChartViewFieldDTO::getId).collect(Collectors.toSet());
|
||||||
|
List<ChartViewFieldDTO> finalXAxis = xAxis;
|
||||||
|
dynamicAssistFields.forEach(i -> {
|
||||||
|
if (!fieldIds.contains(i.getFieldId())) {
|
||||||
|
ChartViewFieldDTO fieldDTO = new ChartViewFieldDTO();
|
||||||
|
BeanUtils.copyBean(fieldDTO, i.getCurField());
|
||||||
|
finalXAxis.add(fieldDTO);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis);
|
||||||
|
var assistFields = getAssistFields(dynamicAssistFields, yAxis, xAxis);
|
||||||
|
if (CollectionUtils.isNotEmpty(assistFields)) {
|
||||||
|
var req = new DatasourceRequest();
|
||||||
|
req.setDsList(dsMap);
|
||||||
|
|
||||||
|
List<ChartSeniorAssistDTO> assists = dynamicAssistFields.stream().filter(ele -> !StringUtils.equalsIgnoreCase(ele.getSummary(), "last_item")).toList();
|
||||||
|
if (ObjectUtils.isNotEmpty(assists)) {
|
||||||
|
var assistSql = assistSQL(originSql, assistFields, dsMap, crossDs);
|
||||||
|
var tmpSql = provider.rebuildSQL(assistSql, sqlMeta, crossDs, dsMap);
|
||||||
|
req.setQuery(tmpSql);
|
||||||
|
logger.debug("calcite assistSql sql: " + tmpSql);
|
||||||
|
var assistData = (List<String[]>) provider.fetchResultField(req).get("data");
|
||||||
|
calcResult.setAssistData(assistData);
|
||||||
|
calcResult.setDynamicAssistFields(assists);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<ChartSeniorAssistDTO> assistsOriginList = dynamicAssistFields.stream().filter(ele -> StringUtils.equalsIgnoreCase(ele.getSummary(), "last_item")).toList();
|
||||||
|
if (ObjectUtils.isNotEmpty(assistsOriginList)) {
|
||||||
|
var assistSqlOriginList = assistSQLOriginList(originSql, assistFields, dsMap, crossDs);
|
||||||
|
var tmpSql = provider.rebuildSQL(assistSqlOriginList, sqlMeta, crossDs, dsMap);
|
||||||
|
req.setQuery(tmpSql);
|
||||||
|
logger.debug("calcite assistSql sql origin list: " + tmpSql);
|
||||||
|
var assistDataOriginList = (List<String[]>) provider.fetchResultField(req).get("data");
|
||||||
|
calcResult.setAssistDataOriginList(assistDataOriginList);
|
||||||
|
calcResult.setDynamicAssistFieldsOriginList(assistsOriginList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return calcResult;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,212 @@
|
|||||||
|
package com.stdproject.charts.impl.table;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
|
import com.stdproject.charts.impl.DefaultChartHandler;
|
||||||
|
import com.stdproject.entity.union.DatasetGroupInfoDTO;
|
||||||
|
import com.stdproject.service.provider.SQLProvider;
|
||||||
|
import com.stdproject.utils.Utils;
|
||||||
|
import com.stdproject.utils.trans.Dimension2SQLObj;
|
||||||
|
import com.stdproject.utils.trans.ExtWhere2Str;
|
||||||
|
import com.stdproject.utils.trans.Quota2SQLObj;
|
||||||
|
import io.gisbi.extensions.datasource.dto.DatasourceRequest;
|
||||||
|
import io.gisbi.extensions.datasource.dto.DatasourceSchemaDTO;
|
||||||
|
import io.gisbi.extensions.datasource.model.SQLMeta;
|
||||||
|
import io.gisbi.extensions.datasource.provider.Provider;
|
||||||
|
import io.gisbi.extensions.view.dto.*;
|
||||||
|
import io.gisbi.extensions.view.util.ChartDataUtil;
|
||||||
|
import io.gisbi.extensions.view.util.FieldUtil;
|
||||||
|
import io.gisbi.utils.JsonUtil;
|
||||||
|
import lombok.Getter;
|
||||||
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author jianneng
|
||||||
|
* @date 2024/9/11 11:37
|
||||||
|
**/
|
||||||
|
@Component
|
||||||
|
public class TableNormalHandler extends DefaultChartHandler {
|
||||||
|
@Getter
|
||||||
|
private final String type = "table-normal";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <T extends CustomFilterResult> T customFilter(ChartViewDTO view, List<ChartExtFilterDTO> filterList, AxisFormatResult formatResult) {
|
||||||
|
var chartExtRequest = view.getChartExtRequest();
|
||||||
|
Map<String, Object> mapAttr = view.getCustomAttr();
|
||||||
|
Map<String, Object> basicStyle = (Map<String, Object>) mapAttr.get("basicStyle");
|
||||||
|
var tablePageMode = (String) basicStyle.get("tablePageMode");
|
||||||
|
formatResult.getContext().put("tablePageMode", tablePageMode);
|
||||||
|
if (StringUtils.equalsIgnoreCase(tablePageMode, "page")) {
|
||||||
|
if (chartExtRequest.getGoPage() == null) {
|
||||||
|
chartExtRequest.setGoPage(1L);
|
||||||
|
}
|
||||||
|
if (chartExtRequest.getPageSize() == null) {
|
||||||
|
int pageSize = (int) basicStyle.get("tablePageSize");
|
||||||
|
if (StringUtils.equalsIgnoreCase(view.getResultMode(), "custom")) {
|
||||||
|
chartExtRequest.setPageSize(Math.min(pageSize, view.getResultCount().longValue()));
|
||||||
|
} else {
|
||||||
|
chartExtRequest.setPageSize((long) pageSize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (StringUtils.equalsIgnoreCase(view.getResultMode(), "custom")) {
|
||||||
|
chartExtRequest.setGoPage(1L);
|
||||||
|
chartExtRequest.setPageSize(view.getResultCount().longValue());
|
||||||
|
} else if (!view.getIsExcelExport()) {
|
||||||
|
chartExtRequest.setGoPage(null);
|
||||||
|
chartExtRequest.setPageSize(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis);
|
||||||
|
String originFilterJson = (String) JsonUtil.toJSONString(filterList);
|
||||||
|
List<ChartExtFilterDTO> originFilter = JsonUtil.parseList(originFilterJson, new TypeReference<>() {
|
||||||
|
});
|
||||||
|
boolean yoyFiltered = checkYoyFilter(originFilter, yAxis);
|
||||||
|
if (yoyFiltered) {
|
||||||
|
formatResult.getContext().put("expandedFilter", originFilter);
|
||||||
|
formatResult.getContext().put("yoyFiltered", true);
|
||||||
|
}
|
||||||
|
return (T) new CustomFilterResult(filterList, formatResult.getContext());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, Object> buildResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, List<String[]> data) {
|
||||||
|
return new HashMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <T extends ChartCalcDataResult> T calcChartResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, Map<String, Object> sqlMap, SQLMeta sqlMeta, Provider provider) {
|
||||||
|
var chartExtRequest = view.getChartExtRequest();
|
||||||
|
var dsMap = (Map<Long, DatasourceSchemaDTO>) sqlMap.get("dsMap");
|
||||||
|
List<String> dsList = new ArrayList<>();
|
||||||
|
for (Map.Entry<Long, DatasourceSchemaDTO> next : dsMap.entrySet()) {
|
||||||
|
dsList.add(next.getValue().getType());
|
||||||
|
}
|
||||||
|
boolean crossDs = ((DatasetGroupInfoDTO) formatResult.getContext().get("dataset")).getIsCross();
|
||||||
|
DatasourceRequest datasourceRequest = new DatasourceRequest();
|
||||||
|
datasourceRequest.setIsCross(crossDs);
|
||||||
|
datasourceRequest.setDsList(dsMap);
|
||||||
|
var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis);
|
||||||
|
var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis);
|
||||||
|
|
||||||
|
var allFields = (List<ChartViewFieldDTO>) filterResult.getContext().get("allFields");
|
||||||
|
PageInfo pageInfo = new PageInfo();
|
||||||
|
pageInfo.setGoPage(chartExtRequest.getGoPage());
|
||||||
|
if (StringUtils.equalsIgnoreCase(view.getResultMode(), "custom")) {
|
||||||
|
pageInfo.setPageSize(Math.min(view.getResultCount() - (chartExtRequest.getGoPage() - 1) * chartExtRequest.getPageSize(), chartExtRequest.getPageSize()));
|
||||||
|
} else {
|
||||||
|
pageInfo.setPageSize(chartExtRequest.getPageSize());
|
||||||
|
}
|
||||||
|
Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, FieldUtil.transFields(allFields), crossDs, dsMap, Utils.getParams(FieldUtil.transFields(allFields)), view.getCalParams(), pluginManage);
|
||||||
|
Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, FieldUtil.transFields(allFields), crossDs, dsMap, Utils.getParams(FieldUtil.transFields(allFields)), view.getCalParams(), pluginManage);
|
||||||
|
String originSql = SQLProvider.createQuerySQL(sqlMeta, true, !StringUtils.equalsIgnoreCase(dsMap.values().iterator().next().getType(), "es"), view);// 分页强制加排序
|
||||||
|
String limit = ((pageInfo.getGoPage() != null && pageInfo.getPageSize() != null) ? " LIMIT " + pageInfo.getPageSize() + " OFFSET " + (pageInfo.getGoPage() - 1) * chartExtRequest.getPageSize() : "");
|
||||||
|
var querySql = originSql + limit;
|
||||||
|
|
||||||
|
var tablePageMode = (String) filterResult.getContext().get("tablePageMode");
|
||||||
|
var totalPageSql = "SELECT COUNT(*) FROM (" + SQLProvider.createQuerySQLNoSort(sqlMeta, true, view) + ") COUNT_TEMP";
|
||||||
|
if (StringUtils.isNotEmpty(totalPageSql) && StringUtils.equalsIgnoreCase(tablePageMode, "page")) {
|
||||||
|
totalPageSql = provider.rebuildSQL(totalPageSql, sqlMeta, crossDs, dsMap);
|
||||||
|
datasourceRequest.setQuery(totalPageSql);
|
||||||
|
datasourceRequest.setTotalPageFlag(true);
|
||||||
|
logger.debug("calcite total sql: " + totalPageSql);
|
||||||
|
List<String[]> tmpData = (List<String[]>) provider.fetchResultField(datasourceRequest).get("data");
|
||||||
|
var totalItems = ObjectUtils.isEmpty(tmpData) ? 0 : Long.valueOf(tmpData.get(0)[0]);
|
||||||
|
if (StringUtils.equalsIgnoreCase(view.getResultMode(), "custom")) {
|
||||||
|
totalItems = totalItems <= view.getResultCount() ? totalItems : view.getResultCount();
|
||||||
|
}
|
||||||
|
var totalPage = (totalItems / pageInfo.getPageSize()) + (totalItems % pageInfo.getPageSize() > 0 ? 1 : 0);
|
||||||
|
view.setTotalItems(totalItems);
|
||||||
|
view.setTotalPage(totalPage);
|
||||||
|
}
|
||||||
|
|
||||||
|
querySql = provider.rebuildSQL(querySql, sqlMeta, crossDs, dsMap);
|
||||||
|
datasourceRequest.setQuery(querySql);
|
||||||
|
logger.debug("calcite chart sql: " + querySql);
|
||||||
|
List<String[]> data = (List<String[]>) provider.fetchResultField(datasourceRequest).get("data");
|
||||||
|
//自定义排序
|
||||||
|
data = ChartDataUtil.resultCustomSort(xAxis, yAxis, view.getSortPriority(), data);
|
||||||
|
|
||||||
|
var yoyFiltered = filterResult.getContext().get("yoyFiltered") != null;
|
||||||
|
if (yoyFiltered) {
|
||||||
|
// 这里没加分页,因为加了分页参数可能会把原始数据挤出去
|
||||||
|
var expandedFilter = (List<ChartExtFilterDTO>) filterResult.getContext().get("expandedFilter");
|
||||||
|
ExtWhere2Str.extWhere2sqlOjb(sqlMeta, expandedFilter, FieldUtil.transFields(allFields), crossDs, dsMap, Utils.getParams(FieldUtil.transFields(allFields)), view.getCalParams(), pluginManage);
|
||||||
|
var expandedSql = SQLProvider.createQuerySQL(sqlMeta, true, !StringUtils.equalsIgnoreCase(dsMap.values().iterator().next().getType(), "es"), view);
|
||||||
|
expandedSql = provider.rebuildSQL(expandedSql, sqlMeta, crossDs, dsMap);
|
||||||
|
var expandedReq = new DatasourceRequest();
|
||||||
|
expandedReq.setIsCross(crossDs);
|
||||||
|
expandedReq.setDsList(dsMap);
|
||||||
|
expandedReq.setQuery(expandedSql);
|
||||||
|
logger.debug("expanded sql: " + expandedSql);
|
||||||
|
var expandedData = (List<String[]>) provider.fetchResultField(expandedReq).get("data");
|
||||||
|
logger.debug("expanded data: " + expandedData);
|
||||||
|
quickCalc(xAxis, yAxis, Collections.emptyList(), Collections.emptyList(), view.getType(), expandedData);
|
||||||
|
var resultData = new ArrayList<String[]>();
|
||||||
|
for (String[] originDataLine : data) {
|
||||||
|
var originDim = new StringBuilder();
|
||||||
|
for (int i = 0; i < xAxis.size(); i++) {
|
||||||
|
originDim.append(originDataLine[i]);
|
||||||
|
}
|
||||||
|
for (String[] expandedDataLine : expandedData) {
|
||||||
|
var expandedDim = new StringBuilder();
|
||||||
|
for (int i = 0; i < xAxis.size(); i++) {
|
||||||
|
expandedDim.append(expandedDataLine[i]);
|
||||||
|
}
|
||||||
|
if (StringUtils.equals(originDim, expandedDim)) {
|
||||||
|
resultData.add(expandedDataLine);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
data = resultData;
|
||||||
|
} else {
|
||||||
|
quickCalc(xAxis, yAxis, Collections.emptyList(), Collections.emptyList(), view.getType(), data);
|
||||||
|
}
|
||||||
|
//数据重组逻辑可重载
|
||||||
|
var result = this.buildResult(view, formatResult, filterResult, data);
|
||||||
|
T calcResult = (T) new ChartCalcDataResult();
|
||||||
|
calcResult.setData(result);
|
||||||
|
calcResult.setContext(filterResult.getContext());
|
||||||
|
calcResult.setQuerySql(querySql);
|
||||||
|
calcResult.setOriginData(data);
|
||||||
|
try {
|
||||||
|
var dynamicAssistFields = getDynamicThresholdFields(view);
|
||||||
|
var assistFields = getAssistFields(dynamicAssistFields, yAxis, xAxis);
|
||||||
|
if (CollectionUtils.isNotEmpty(assistFields)) {
|
||||||
|
var req = new DatasourceRequest();
|
||||||
|
req.setIsCross(crossDs);
|
||||||
|
req.setDsList(dsMap);
|
||||||
|
|
||||||
|
List<ChartSeniorAssistDTO> assists = dynamicAssistFields.stream().filter(ele -> !StringUtils.equalsIgnoreCase(ele.getSummary(), "last_item")).toList();
|
||||||
|
if (ObjectUtils.isNotEmpty(assists)) {
|
||||||
|
var assistSql = assistSQL(originSql, assistFields, dsMap, crossDs);
|
||||||
|
var tmpSql = provider.rebuildSQL(assistSql, sqlMeta, crossDs, dsMap);
|
||||||
|
req.setQuery(tmpSql);
|
||||||
|
logger.debug("calcite assistSql sql: " + tmpSql);
|
||||||
|
var assistData = (List<String[]>) provider.fetchResultField(req).get("data");
|
||||||
|
calcResult.setAssistData(assistData);
|
||||||
|
calcResult.setDynamicAssistFields(assists);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<ChartSeniorAssistDTO> assistsOriginList = dynamicAssistFields.stream().filter(ele -> StringUtils.equalsIgnoreCase(ele.getSummary(), "last_item")).toList();
|
||||||
|
if (ObjectUtils.isNotEmpty(assistsOriginList)) {
|
||||||
|
var assistSqlOriginList = assistSQLOriginList(originSql, assistFields, dsMap, crossDs);
|
||||||
|
var tmpSql = provider.rebuildSQL(assistSqlOriginList, sqlMeta, crossDs, dsMap);
|
||||||
|
req.setQuery(tmpSql);
|
||||||
|
logger.debug("calcite assistSql sql origin list: " + tmpSql);
|
||||||
|
var assistDataOriginList = (List<String[]>) provider.fetchResultField(req).get("data");
|
||||||
|
calcResult.setAssistDataOriginList(assistDataOriginList);
|
||||||
|
calcResult.setDynamicAssistFieldsOriginList(assistsOriginList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return calcResult;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
package com.stdproject.controller;
|
||||||
|
|
||||||
|
import com.stdproject.config.ResponseResult;
|
||||||
|
import com.stdproject.request.OnlineMapEditor;
|
||||||
|
import com.stdproject.service.manage.SysParameterManage;
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Date: 2025/7/7 16:57
|
||||||
|
* @Description:
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/sysParameter")
|
||||||
|
public class CoreSysSettingController {
|
||||||
|
@Resource
|
||||||
|
private SysParameterManage sysParameterManage;
|
||||||
|
@Operation(summary = "查询在线地图")
|
||||||
|
@GetMapping("/queryOnlineMap")
|
||||||
|
public ResponseResult queryOnlineMap(){
|
||||||
|
return ResponseResult.successData(sysParameterManage.queryOnlineMap(null));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,95 @@
|
|||||||
|
package com.stdproject.entity;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
*
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @Author bi-coder
|
||||||
|
* @since 2023-10-27
|
||||||
|
*/
|
||||||
|
@TableName("core_sys_setting")
|
||||||
|
public class CoreSysSetting implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ID
|
||||||
|
*/
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 键
|
||||||
|
*/
|
||||||
|
private String pkey;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 值
|
||||||
|
*/
|
||||||
|
private String pval;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 类型
|
||||||
|
*/
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 顺序
|
||||||
|
*/
|
||||||
|
private Integer sort;
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPkey() {
|
||||||
|
return pkey;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPkey(String pkey) {
|
||||||
|
this.pkey = pkey;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPval() {
|
||||||
|
return pval;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPval(String pval) {
|
||||||
|
this.pval = pval;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setType(String type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getSort() {
|
||||||
|
return sort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSort(Integer sort) {
|
||||||
|
this.sort = sort;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "CoreSysSetting{" +
|
||||||
|
"id = " + id +
|
||||||
|
", pkey = " + pkey +
|
||||||
|
", pval = " + pval +
|
||||||
|
", type = " + type +
|
||||||
|
", sort = " + sort +
|
||||||
|
"}";
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package com.stdproject.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.stdproject.entity.CoreSysSetting;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* Mapper 接口
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @Author bi-coder
|
||||||
|
* @since 2023-10-27
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface CoreSysSettingMapper extends BaseMapper<CoreSysSetting> {
|
||||||
|
|
||||||
|
}
|
@ -19,4 +19,7 @@ public interface MenuMapper extends BaseMapper<Menu> {
|
|||||||
|
|
||||||
@Select("<script>select me.id,me.type,me.code,me.name,me.parentid,me.module_id,mo.type module_type FROM app_menu me LEFT JOIN app_module mo on me.module_id = mo.id where me.id in <foreach collection='menuIds' item='id' open='(' separator=',' close=')'>#{id}</foreach> and me.isdisplay='1' order by me.code</script>")
|
@Select("<script>select me.id,me.type,me.code,me.name,me.parentid,me.module_id,mo.type module_type FROM app_menu me LEFT JOIN app_module mo on me.module_id = mo.id where me.id in <foreach collection='menuIds' item='id' open='(' separator=',' close=')'>#{id}</foreach> and me.isdisplay='1' order by me.code</script>")
|
||||||
List<Map> listMenuByIds(@Param("menuIds") List<String> menuIds);
|
List<Map> listMenuByIds(@Param("menuIds") List<String> menuIds);
|
||||||
|
@Select("<script>select me.id,me.type,me.code,me.name,me.parentid,me.module_id,mo.type module_type FROM app_menu me LEFT JOIN app_module mo on me.module_id = mo.id where me.isdisplay='1' order by me.code</script>")
|
||||||
|
List<Map> listAllMenu();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,17 @@
|
|||||||
|
package com.stdproject.request;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
@Schema(description = "在线地图构造器")
|
||||||
|
@Data
|
||||||
|
public class OnlineMapEditor implements Serializable {
|
||||||
|
@Schema(description = "在线地图类型", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
private String mapType;
|
||||||
|
@Schema(description = "在线地图key", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
private String key;
|
||||||
|
@Schema(description = "在线地图安全密钥", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
|
||||||
|
private String securityCode;
|
||||||
|
}
|
@ -1,5 +1,6 @@
|
|||||||
package com.stdproject.service;
|
package com.stdproject.service;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.stdproject.entity.LoginUser;
|
import com.stdproject.entity.LoginUser;
|
||||||
import com.stdproject.entity.Menu;
|
import com.stdproject.entity.Menu;
|
||||||
import com.stdproject.entity.Role;
|
import com.stdproject.entity.Role;
|
||||||
@ -51,9 +52,9 @@ public class CustomUserDetailsService implements UserDetailsService {
|
|||||||
if (appUser == null) {
|
if (appUser == null) {
|
||||||
throw new UsernameNotFoundException("用户不存在: " + username);
|
throw new UsernameNotFoundException("用户不存在: " + username);
|
||||||
}
|
}
|
||||||
String app_name=applicationMapper.getAppName(appUser.getAppId());
|
String app_name = applicationMapper.getAppName(appUser.getAppId());
|
||||||
Set<Map> permissions = buildUserAuthorities(appUser);
|
Set<Map> permissions = buildUserAuthorities(appUser);
|
||||||
LoginUser loginUser = new LoginUser(appUser,app_name,permissions);
|
LoginUser loginUser = new LoginUser(appUser, app_name, permissions);
|
||||||
|
|
||||||
return loginUser;
|
return loginUser;
|
||||||
|
|
||||||
@ -67,16 +68,20 @@ public class CustomUserDetailsService implements UserDetailsService {
|
|||||||
*/
|
*/
|
||||||
private Set<Map> buildUserAuthorities(User appUser) {
|
private Set<Map> buildUserAuthorities(User appUser) {
|
||||||
Set<Map> permissions = new HashSet<>();
|
Set<Map> permissions = new HashSet<>();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
if (("admin").equals(appUser.getUsername())) {
|
||||||
|
List<Map> menus = menuMapper.listAllMenu();
|
||||||
|
permissions.addAll(menus);
|
||||||
|
return permissions;
|
||||||
|
}
|
||||||
// 使用RoleMapper直接查询用户的角色信息
|
// 使用RoleMapper直接查询用户的角色信息
|
||||||
List<Role> roles = roleMapper.getRoleByUserId(appUser.getId());
|
List<Role> roles = roleMapper.getRoleByUserId(appUser.getId());
|
||||||
|
|
||||||
if (!roles.isEmpty()) {
|
if (!roles.isEmpty()) {
|
||||||
// 获取角色ID列表
|
// 获取角色ID列表
|
||||||
List<String> roleIds = roles.stream()
|
List<String> roleIds = roles.stream()
|
||||||
.map(Role::getId)
|
.map(Role::getId)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
// 处理每个角色的菜单权限
|
// 处理每个角色的菜单权限
|
||||||
for (String roleId : roleIds) {
|
for (String roleId : roleIds) {
|
||||||
@ -91,7 +96,6 @@ public class CustomUserDetailsService implements UserDetailsService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("构建用户权限失败: {}", e.getMessage(), e);
|
log.error("构建用户权限失败: {}", e.getMessage(), e);
|
||||||
permissions.clear();
|
permissions.clear();
|
||||||
@ -100,5 +104,4 @@ public class CustomUserDetailsService implements UserDetailsService {
|
|||||||
return permissions;
|
return permissions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
@ -1,4 +1,5 @@
|
|||||||
package com.stdproject.service.manage;
|
package com.stdproject.service.manage;
|
||||||
|
import com.stdproject.charts.impl.DefaultChartHandler;
|
||||||
import io.gisbi.extensions.view.plugin.AbstractChartPlugin;
|
import io.gisbi.extensions.view.plugin.AbstractChartPlugin;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import org.springframework.context.annotation.Lazy;
|
import org.springframework.context.annotation.Lazy;
|
||||||
|
@ -0,0 +1,159 @@
|
|||||||
|
package com.stdproject.service.manage;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import com.stdproject.entity.CoreSysSetting;
|
||||||
|
import com.stdproject.mapper.CoreSysSettingMapper;
|
||||||
|
import com.stdproject.request.OnlineMapEditor;
|
||||||
|
import io.gisbi.utils.BeanUtils;
|
||||||
|
import io.gisbi.utils.IDUtils;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class SysParameterManage {
|
||||||
|
|
||||||
|
@Value("${gisbi.show-demo-tips:false}")
|
||||||
|
private boolean showDemoTips;
|
||||||
|
|
||||||
|
@Value("${gisbi.demo-tips-content:#{null}}")
|
||||||
|
private String demoTipsContent;
|
||||||
|
|
||||||
|
private static final String MAP_KEY_PREFIX = "map.";
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private CoreSysSettingMapper coreSysSettingMapper;
|
||||||
|
|
||||||
|
|
||||||
|
public String singleVal(String key) {
|
||||||
|
QueryWrapper<CoreSysSetting> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.eq("pkey", key);
|
||||||
|
CoreSysSetting sysSetting = coreSysSettingMapper.selectOne(queryWrapper);
|
||||||
|
if (ObjectUtils.isNotEmpty(sysSetting)) {
|
||||||
|
return sysSetting.getPval();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public OnlineMapEditor queryOnlineMap(String mapType) {
|
||||||
|
if (StringUtils.isBlank(mapType)) {
|
||||||
|
List<CoreSysSetting> typeList = groupList(MAP_KEY_PREFIX + "mapType");
|
||||||
|
mapType = "gaode";
|
||||||
|
if (!CollectionUtils.isEmpty(typeList)) {
|
||||||
|
mapType = typeList.getFirst().getPval();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
String prefix;
|
||||||
|
if (!StringUtils.equals(mapType, "gaode")) {
|
||||||
|
prefix = mapType + "." + MAP_KEY_PREFIX;
|
||||||
|
} else {
|
||||||
|
prefix = MAP_KEY_PREFIX;
|
||||||
|
}
|
||||||
|
var editor = new OnlineMapEditor();
|
||||||
|
List<String> fields = BeanUtils.getFieldNames(OnlineMapEditor.class);
|
||||||
|
Map<String, String> mapVal = groupVal(prefix);
|
||||||
|
fields.forEach(field -> {
|
||||||
|
String val = mapVal.get(prefix + field);
|
||||||
|
if (StringUtils.isNotBlank(val)) {
|
||||||
|
BeanUtils.setFieldValueByName(editor, field, val, String.class);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
editor.setMapType(mapType);
|
||||||
|
|
||||||
|
return editor;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void saveOnlineMap(OnlineMapEditor editor) {
|
||||||
|
String mapType = editor.getMapType();
|
||||||
|
if (StringUtils.isBlank(mapType)) {
|
||||||
|
List<CoreSysSetting> typeList = groupList(MAP_KEY_PREFIX + "mapType");
|
||||||
|
mapType = "gaode";
|
||||||
|
if (!CollectionUtils.isEmpty(typeList)) {
|
||||||
|
mapType = typeList.getFirst().getPval();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<String> fieldNames = BeanUtils.getFieldNames(OnlineMapEditor.class);
|
||||||
|
String finalMapType = mapType;
|
||||||
|
fieldNames.forEach(field -> {
|
||||||
|
String prefix = MAP_KEY_PREFIX;
|
||||||
|
if (!(StringUtils.equals(field, "mapType") || StringUtils.equals(finalMapType, "gaode"))) {
|
||||||
|
prefix = finalMapType + "." + MAP_KEY_PREFIX;
|
||||||
|
}
|
||||||
|
|
||||||
|
QueryWrapper<CoreSysSetting> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.eq("pkey", prefix + field);
|
||||||
|
CoreSysSetting sysSetting = coreSysSettingMapper.selectOne(queryWrapper);
|
||||||
|
var val = (String) BeanUtils.getFieldValueByName(field, editor);
|
||||||
|
if (ObjectUtils.isEmpty(sysSetting)) {
|
||||||
|
sysSetting = new CoreSysSetting();
|
||||||
|
sysSetting.setId(IDUtils.snowID());
|
||||||
|
sysSetting.setPkey(prefix + field);
|
||||||
|
sysSetting.setPval(val == null ? "" : val);
|
||||||
|
sysSetting.setType("text");
|
||||||
|
sysSetting.setSort(1);
|
||||||
|
coreSysSettingMapper.insert(sysSetting);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
sysSetting.setPval(val);
|
||||||
|
coreSysSettingMapper.updateById(sysSetting);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public Map<String, String> groupVal(String groupKey) {
|
||||||
|
QueryWrapper<CoreSysSetting> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.likeRight("pkey", groupKey);
|
||||||
|
queryWrapper.orderByAsc("sort");
|
||||||
|
List<CoreSysSetting> sysSettings = coreSysSettingMapper.selectList(queryWrapper);
|
||||||
|
if (!CollectionUtils.isEmpty(sysSettings)) {
|
||||||
|
return sysSettings.stream().collect(Collectors.toMap(CoreSysSetting::getPkey, CoreSysSetting::getPval));
|
||||||
|
}
|
||||||
|
return new HashMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<CoreSysSetting> groupList(String groupKey) {
|
||||||
|
QueryWrapper<CoreSysSetting> queryWrapper = new QueryWrapper<>();
|
||||||
|
queryWrapper.likeRight("pkey", groupKey);
|
||||||
|
queryWrapper.orderByAsc("sort");
|
||||||
|
return coreSysSettingMapper.selectList(queryWrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public List<Object> getUiList() {
|
||||||
|
List<Object> result = new ArrayList<>();
|
||||||
|
result.add(buildSettingItem("community", true));
|
||||||
|
result.add(buildSettingItem("showDemoTips", showDemoTips));
|
||||||
|
result.add(buildSettingItem("demoTipsContent", demoTipsContent));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public Integer defaultLogin() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map<String, Object> buildSettingItem(String pkey, Object pval) {
|
||||||
|
Map<String, Object> item = new HashMap<>();
|
||||||
|
item.put("pkey", pkey);
|
||||||
|
item.put("pval", pval);
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void insert(CoreSysSetting coreSysSetting) {
|
||||||
|
coreSysSettingMapper.insert(coreSysSetting);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -19,7 +19,7 @@ spring:
|
|||||||
main:
|
main:
|
||||||
allow-bean-definition-overriding: true
|
allow-bean-definition-overriding: true
|
||||||
datasource:
|
datasource:
|
||||||
url: ${DB_URL:jdbc:mysql://192.168.1.58:3306/gisbi-demodb?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true}
|
url: ${DB_URL:jdbc:mysql://192.168.1.58:3306/gis_test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true}
|
||||||
username: ${DB_USERNAME:root}
|
username: ${DB_USERNAME:root}
|
||||||
password: ${DB_PASSWORD:123456}
|
password: ${DB_PASSWORD:123456}
|
||||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||||
|
@ -108,5 +108,47 @@
|
|||||||
and ccv.jump_active = 1
|
and ccv.jump_active = 1
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="getLinkJumpInfoSnapshot" resultMap="LinkJumpInfoMap">
|
||||||
|
SELECT
|
||||||
|
cdtf.id AS source_field_id,
|
||||||
|
cdtf.de_type AS source_de_type,
|
||||||
|
cdtf.NAME AS source_field_name,
|
||||||
|
vlji.id,
|
||||||
|
vlji.link_jump_id,
|
||||||
|
vlji.link_type,
|
||||||
|
vlji.jump_type,
|
||||||
|
vlji.window_size,
|
||||||
|
vlji.target_dv_id,
|
||||||
|
dvi.type as target_dv_type,
|
||||||
|
vlji.content,
|
||||||
|
ifnull( vlji.checked, 0 ) AS checked,
|
||||||
|
ifnull( vlji.attach_params, 0 ) AS attach_params,
|
||||||
|
vljtvi.target_id,
|
||||||
|
vljtvi.target_view_id,
|
||||||
|
vljtvi.target_field_id,
|
||||||
|
vljtvi.target_type,
|
||||||
|
vljtvi.source_field_active_id,
|
||||||
|
vopi.param_name as outer_params_name
|
||||||
|
FROM
|
||||||
|
snapshot_core_chart_view ccv
|
||||||
|
LEFT JOIN core_dataset_table_field cdtf ON ccv.table_id = cdtf.dataset_group_id
|
||||||
|
LEFT JOIN snapshot_visualization_link_jump vlj ON ccv.id = vlj.source_view_id
|
||||||
|
AND vlj.id = #{id}
|
||||||
|
LEFT JOIN snapshot_visualization_link_jump_info vlji ON vlj.id = vlji.link_jump_id
|
||||||
|
AND cdtf.id = vlji.source_field_id
|
||||||
|
LEFT JOIN data_visualization_info dvi ON vlji.target_dv_id = dvi.id
|
||||||
|
LEFT JOIN snapshot_visualization_link_jump_target_view_info vljtvi ON vlji.id = vljtvi.link_jump_info_id
|
||||||
|
left join snapshot_visualization_outer_params_info vopi on vopi.params_info_id = vljtvi.target_view_id
|
||||||
|
WHERE
|
||||||
|
ccv.id = #{source_view_id}
|
||||||
|
AND ccv.type != 'VQuery'
|
||||||
|
<if test="!isDesktop">
|
||||||
|
ORDER BY
|
||||||
|
CONVERT (
|
||||||
|
cdtf.NAME USING gbk)
|
||||||
|
</if>
|
||||||
|
<if test="isDesktop">
|
||||||
|
ORDER BY cdtf.name;
|
||||||
|
</if>
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
2
frontend/components.d.ts
vendored
2
frontend/components.d.ts
vendored
@ -35,6 +35,7 @@ declare module '@vue/runtime-core' {
|
|||||||
ElMain: typeof import('element-plus-secondary/es')['ElMain']
|
ElMain: typeof import('element-plus-secondary/es')['ElMain']
|
||||||
ElOption: typeof import('element-plus-secondary/es')['ElOption']
|
ElOption: typeof import('element-plus-secondary/es')['ElOption']
|
||||||
ElOptionGroup: typeof import('element-plus-secondary/es')['ElOptionGroup']
|
ElOptionGroup: typeof import('element-plus-secondary/es')['ElOptionGroup']
|
||||||
|
ElPagination: typeof import('element-plus-secondary/es')['ElPagination']
|
||||||
ElPopover: typeof import('element-plus-secondary/es')['ElPopover']
|
ElPopover: typeof import('element-plus-secondary/es')['ElPopover']
|
||||||
ElRadio: typeof import('element-plus-secondary/es')['ElRadio']
|
ElRadio: typeof import('element-plus-secondary/es')['ElRadio']
|
||||||
ElRadioGroup: typeof import('element-plus-secondary/es')['ElRadioGroup']
|
ElRadioGroup: typeof import('element-plus-secondary/es')['ElRadioGroup']
|
||||||
@ -44,6 +45,7 @@ declare module '@vue/runtime-core' {
|
|||||||
ElSelectV2: typeof import('element-plus-secondary/es')['ElSelectV2']
|
ElSelectV2: typeof import('element-plus-secondary/es')['ElSelectV2']
|
||||||
ElSpace: typeof import('element-plus-secondary/es')['ElSpace']
|
ElSpace: typeof import('element-plus-secondary/es')['ElSpace']
|
||||||
ElSwitch: typeof import('element-plus-secondary/es')['ElSwitch']
|
ElSwitch: typeof import('element-plus-secondary/es')['ElSwitch']
|
||||||
|
ElTableColumn: typeof import('element-plus-secondary/es')['ElTableColumn']
|
||||||
ElTabPane: typeof import('element-plus-secondary/es')['ElTabPane']
|
ElTabPane: typeof import('element-plus-secondary/es')['ElTabPane']
|
||||||
ElTabs: typeof import('element-plus-secondary/es')['ElTabs']
|
ElTabs: typeof import('element-plus-secondary/es')['ElTabs']
|
||||||
ElTimePicker: typeof import('element-plus-secondary/es')['ElTimePicker']
|
ElTimePicker: typeof import('element-plus-secondary/es')['ElTimePicker']
|
||||||
|
Loading…
Reference in New Issue
Block a user