feat: 新增charts图表逻辑

新增和修改图标handler处理器逻辑,优化admin用户登录没有权限问题
This commit is contained in:
weitang 2025-07-09 11:53:40 +08:00
parent 697dfb97c6
commit 1a9718050f
21 changed files with 989 additions and 23 deletions

View File

@ -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;

View File

@ -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

View File

@ -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;
/** /**
* 带同环比计算的图表处理器 * 带同环比计算的图表处理器

View File

@ -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;

View File

@ -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;
}
}

View File

@ -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;

View File

@ -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;
}

View File

@ -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;

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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));
}
}

View File

@ -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 +
"}";
}
}

View File

@ -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> {
}

View File

@ -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();
} }

View File

@ -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;
}

View File

@ -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,8 +68,12 @@ 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());
@ -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;
} }
} }

View File

@ -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;

View File

@ -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);
}
}

View File

@ -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

View File

@ -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>

View File

@ -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']