Merge branch 'main' of http://121.37.111.42:3000/zhengsl/stdproject
This commit is contained in:
commit
697dfb97c6
@ -0,0 +1,87 @@
|
||||
package com.stdproject.charts.impl.bar;
|
||||
|
||||
|
||||
import com.stdproject.charts.impl.YoyChartHandler;
|
||||
import com.stdproject.entity.union.DatasetGroupInfoDTO;
|
||||
import com.stdproject.utils.Utils;
|
||||
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 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.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Component
|
||||
public class BarHandler extends YoyChartHandler {
|
||||
|
||||
@Override
|
||||
public void init() {
|
||||
chartHandlerManager.registerChartHandler(this.getRender(), "bar", this);
|
||||
chartHandlerManager.registerChartHandler(this.getRender(), "bar-horizontal", this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AxisFormatResult formatAxis(ChartViewDTO view) {
|
||||
var result = super.formatAxis(view);
|
||||
var yAxis = result.getAxisMap().get(ChartAxis.yAxis);
|
||||
yAxis.addAll(view.getExtLabel());
|
||||
yAxis.addAll(view.getExtTooltip());
|
||||
result.getAxisMap().put(ChartAxis.extLabel, view.getExtLabel());
|
||||
result.getAxisMap().put(ChartAxis.extTooltip, view.getExtTooltip());
|
||||
return result;
|
||||
}
|
||||
|
||||
@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 = ((DatasetGroupInfoDTO) formatResult.getContext().get("dataset")).getIsCross();
|
||||
var result = (T) super.calcChartResult(view, formatResult, filterResult, sqlMap, sqlMeta, provider);
|
||||
try {
|
||||
//如果有同环比过滤,应该用原始sql
|
||||
var originSql = result.getQuerySql();
|
||||
var dynamicAssistFields = getDynamicAssistFields(view);
|
||||
var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis);
|
||||
var assistFields = getAssistFields(dynamicAssistFields, yAxis);
|
||||
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);
|
||||
req.setQuery(assistSql);
|
||||
logger.debug("calcite assistSql sql: " + assistSql);
|
||||
var assistData = (List<String[]>) provider.fetchResultField(req).get("data");
|
||||
result.setAssistData(assistData);
|
||||
result.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);
|
||||
req.setQuery(assistSqlOriginList);
|
||||
logger.debug("calcite assistSql sql origin list: " + assistSqlOriginList);
|
||||
var assistDataOriginList = (List<String[]>) provider.fetchResultField(req).get("data");
|
||||
result.setAssistDataOriginList(assistDataOriginList);
|
||||
result.setDynamicAssistFieldsOriginList(assistsOriginList);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
package com.stdproject.charts.impl.bar;
|
||||
|
||||
import lombok.Getter;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class BidirectionalBarHandler extends ProgressBarHandler {
|
||||
@Getter
|
||||
private String type = "bidirectional-bar";
|
||||
}
|
@ -0,0 +1,81 @@
|
||||
package com.stdproject.charts.impl.bar;
|
||||
|
||||
|
||||
import com.stdproject.charts.impl.YoyChartHandler;
|
||||
import com.stdproject.entity.union.DatasetGroupInfoDTO;
|
||||
import com.stdproject.utils.ChartDataBuild;
|
||||
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 lombok.Getter;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Component
|
||||
public class BulletGraphHandler extends YoyChartHandler {
|
||||
@Getter
|
||||
private String type = "bullet-graph";
|
||||
|
||||
@Override
|
||||
public AxisFormatResult formatAxis(ChartViewDTO view) {
|
||||
var result = super.formatAxis(view);
|
||||
var yAxis = result.getAxisMap().get(ChartAxis.yAxis);
|
||||
yAxis.addAll(view.getYAxisExt());
|
||||
yAxis.addAll(view.getExtBubble());
|
||||
yAxis.addAll(view.getExtTooltip());
|
||||
result.getAxisMap().put(ChartAxis.yAxis, yAxis);
|
||||
result.getAxisMap().put(ChartAxis.yAxisExt, view.getYAxisExt());
|
||||
result.getAxisMap().put(ChartAxis.extBubble, view.getExtBubble());
|
||||
result.getAxisMap().put(ChartAxis.extTooltip, view.getExtTooltip());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> buildNormalResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, List<String[]> data) {
|
||||
boolean isDrill = filterResult
|
||||
.getFilterList()
|
||||
.stream()
|
||||
.anyMatch(ele -> ele.getFilterType() == 1);
|
||||
var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis);
|
||||
var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis);
|
||||
return ChartDataBuild.transChartData(xAxis, yAxis, view, data, isDrill);
|
||||
}
|
||||
|
||||
@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());
|
||||
}
|
||||
var result = (T) super.calcChartResult(view, formatResult, filterResult, sqlMap, sqlMeta, provider);
|
||||
try {
|
||||
//如果有同环比过滤,应该用原始sql
|
||||
var originSql = result.getQuerySql();
|
||||
var dynamicAssistFields = getDynamicAssistFields(view);
|
||||
var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis);
|
||||
var assistFields = getAssistFields(dynamicAssistFields, yAxis);
|
||||
if (CollectionUtils.isNotEmpty(assistFields)) {
|
||||
var req = new DatasourceRequest();
|
||||
req.setIsCross(((DatasetGroupInfoDTO) formatResult.getContext().get("dataset")).getIsCross());
|
||||
req.setDsList(dsMap);
|
||||
var assistSql = assistSQL(originSql, assistFields, dsMap, ((DatasetGroupInfoDTO) formatResult.getContext().get("dataset")).getIsCross());
|
||||
req.setQuery(assistSql);
|
||||
logger.debug("calcite assistSql sql: " + assistSql);
|
||||
var assistData = (List<String[]>) provider.fetchResultField(req).get("data");
|
||||
result.setAssistData(assistData);
|
||||
result.setDynamicAssistFields(dynamicAssistFields);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,76 @@
|
||||
package com.stdproject.charts.impl.bar;
|
||||
|
||||
import com.stdproject.utils.ChartDataBuild;
|
||||
import io.gisbi.extensions.view.dto.*;
|
||||
import lombok.Getter;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component
|
||||
public class GroupBarHandler extends BarHandler {
|
||||
@Getter
|
||||
private String type = "bar-group";
|
||||
|
||||
@Override
|
||||
public AxisFormatResult formatAxis(ChartViewDTO view) {
|
||||
var result = super.formatAxis(view);
|
||||
var xAxis = result.getAxisMap().get(ChartAxis.xAxis);
|
||||
xAxis.addAll(view.getXAxisExt());
|
||||
result.getAxisMap().put(ChartAxis.xAxisExt, view.getXAxisExt());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init() {
|
||||
chartHandlerManager.registerChartHandler(this.getRender(), this.getType(), this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends CustomFilterResult> T customFilter(ChartViewDTO view, List<ChartExtFilterDTO> filterList, AxisFormatResult formatResult) {
|
||||
var result = super.customFilter(view, filterList, formatResult);
|
||||
List<ChartDrillRequest> drillRequestList = view.getChartExtRequest().getDrill();
|
||||
var drillFields = formatResult.getAxisMap().get(ChartAxis.drill);
|
||||
// 分组维度下钻
|
||||
if (ObjectUtils.isNotEmpty(drillRequestList) && (drillFields.size() > drillRequestList.size())) {
|
||||
List<ChartExtFilterDTO> noDrillFilterList = filterList
|
||||
.stream()
|
||||
.filter(ele -> ele.getFilterType() != 1)
|
||||
.collect(Collectors.toList());
|
||||
var noDrillFieldAxis = formatResult.getAxisMap().get(ChartAxis.xAxis)
|
||||
.stream()
|
||||
.filter(ele -> ele.getSource() != FieldSource.DRILL)
|
||||
.collect(Collectors.toList());
|
||||
List<ChartExtFilterDTO> drillFilters = new ArrayList<>();
|
||||
ArrayList<ChartViewFieldDTO> fieldsToFilter = new ArrayList<>();
|
||||
var xAxisExt = formatResult.getAxisMap().get(ChartAxis.xAxisExt);
|
||||
if (ObjectUtils.isNotEmpty(xAxisExt) &&
|
||||
Objects.equals(drillFields.get(0).getId(), xAxisExt.get(0).getId())) {
|
||||
fieldsToFilter.addAll(view.getXAxis());
|
||||
groupStackDrill(noDrillFieldAxis, noDrillFilterList, fieldsToFilter, drillFields, drillRequestList);
|
||||
formatResult.getAxisMap().put(ChartAxis.xAxis, noDrillFieldAxis);
|
||||
result.setFilterList(noDrillFilterList);
|
||||
}
|
||||
}
|
||||
return (T) result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> buildNormalResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, List<String[]> data) {
|
||||
boolean isDrill = filterResult
|
||||
.getFilterList()
|
||||
.stream()
|
||||
.anyMatch(ele -> ele.getFilterType() == 1);
|
||||
var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis);
|
||||
var xAxisExt = formatResult.getAxisMap().get(ChartAxis.xAxisExt);
|
||||
var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis);
|
||||
var drillAxis = xAxis.stream().filter(axis -> FieldSource.DRILL == axis.getSource()).toList();
|
||||
var xAxisBase = xAxis.subList(0, xAxis.size() - xAxisExt.size() - drillAxis.size());
|
||||
return ChartDataBuild.transBaseGroupDataAntV(xAxisBase, xAxis, xAxisExt, yAxis, view, data, isDrill);
|
||||
}
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
package com.stdproject.charts.impl.bar;
|
||||
|
||||
import com.stdproject.utils.ChartDataBuild;
|
||||
import io.gisbi.extensions.view.dto.AxisFormatResult;
|
||||
import io.gisbi.extensions.view.dto.ChartAxis;
|
||||
import io.gisbi.extensions.view.dto.ChartViewDTO;
|
||||
import io.gisbi.extensions.view.dto.CustomFilterResult;
|
||||
import lombok.Getter;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Component
|
||||
public class ProgressBarHandler extends BarHandler {
|
||||
@Getter
|
||||
private String type = "progress-bar";
|
||||
|
||||
@Override
|
||||
public void init() {
|
||||
chartHandlerManager.registerChartHandler(this.getRender(), this.getType(), this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AxisFormatResult formatAxis(ChartViewDTO view) {
|
||||
var result = super.formatAxis(view);
|
||||
var yAxis = new ArrayList<>(view.getYAxis());
|
||||
yAxis.addAll(view.getYAxisExt());
|
||||
yAxis.addAll(view.getExtTooltip());
|
||||
result.getAxisMap().put(ChartAxis.yAxis, yAxis);
|
||||
result.getAxisMap().put(ChartAxis.yAxisExt, view.getYAxisExt());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> buildNormalResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, List<String[]> data) {
|
||||
boolean isDrill = filterResult
|
||||
.getFilterList()
|
||||
.stream()
|
||||
.anyMatch(ele -> ele.getFilterType() == 1);
|
||||
var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis);
|
||||
var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis);
|
||||
Map<String, Object> result = ChartDataBuild.transMixChartDataAntV(xAxis, xAxis, new ArrayList<>(), yAxis, view, data, isDrill);
|
||||
return result;
|
||||
}
|
||||
}
|
@ -0,0 +1,83 @@
|
||||
package com.stdproject.charts.impl.bar;
|
||||
|
||||
import com.stdproject.charts.impl.YoyChartHandler;
|
||||
import com.stdproject.utils.ChartDataBuild;
|
||||
import io.gisbi.extensions.datasource.model.SQLMeta;
|
||||
import io.gisbi.extensions.datasource.provider.Provider;
|
||||
import io.gisbi.extensions.view.dto.*;
|
||||
import lombok.Getter;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.BooleanUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Component
|
||||
public class RangeBarHandler extends YoyChartHandler {
|
||||
@Getter
|
||||
private final String type = "bar-range";
|
||||
|
||||
@Override
|
||||
public AxisFormatResult formatAxis(ChartViewDTO view) {
|
||||
var result = super.formatAxis(view);
|
||||
var yAxis = new ArrayList<ChartViewFieldDTO>();
|
||||
var xAxis = new ArrayList<ChartViewFieldDTO>(view.getXAxis());
|
||||
var xAxisBase = new ArrayList<ChartViewFieldDTO>(view.getXAxis());
|
||||
boolean skipBarRange = false;
|
||||
boolean barRangeDate = false;
|
||||
if (CollectionUtils.isNotEmpty(view.getYAxis()) && CollectionUtils.isNotEmpty(view.getYAxisExt())) {
|
||||
ChartViewFieldDTO axis1 = view.getYAxis().get(0);
|
||||
ChartViewFieldDTO axis2 = view.getYAxisExt().get(0);
|
||||
|
||||
if (StringUtils.equalsIgnoreCase(axis1.getGroupType(), "q") && StringUtils.equalsIgnoreCase(axis2.getGroupType(), "q")) {
|
||||
yAxis.add(axis1);
|
||||
yAxis.add(axis2);
|
||||
} else if (StringUtils.equalsIgnoreCase(axis1.getGroupType(), "d") && axis1.getDeType() == 1 && StringUtils.equalsIgnoreCase(axis2.getGroupType(), "d") && axis2.getDeType() == 1) {
|
||||
barRangeDate = true;
|
||||
if (BooleanUtils.isTrue(view.getAggregate())) {
|
||||
axis1.setSummary("min");
|
||||
axis2.setSummary("max");
|
||||
yAxis.add(axis1);
|
||||
yAxis.add(axis2);
|
||||
} else {
|
||||
xAxis.add(axis1);
|
||||
xAxis.add(axis2);
|
||||
}
|
||||
} else {
|
||||
skipBarRange = true;
|
||||
}
|
||||
} else {
|
||||
skipBarRange = true;
|
||||
}
|
||||
result.getContext().put("skipBarRange", skipBarRange);
|
||||
result.getContext().put("barRangeDate", barRangeDate);
|
||||
result.getAxisMap().put(ChartAxis.xAxis, xAxis);
|
||||
result.getAxisMap().put(ChartAxis.yAxis, yAxis);
|
||||
result.getContext().put("xAxisBase", xAxisBase);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> buildNormalResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, List<String[]> data) {
|
||||
boolean isDrill = filterResult
|
||||
.getFilterList()
|
||||
.stream()
|
||||
.anyMatch(ele -> ele.getFilterType() == 1);
|
||||
var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis);
|
||||
var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis);
|
||||
var xAxisBase = (List<ChartViewFieldDTO>) formatResult.getContext().get("xAxisBase");
|
||||
var skipBarRange = (boolean) formatResult.getContext().get("skipBarRange");
|
||||
var barRangeDate = (boolean) formatResult.getContext().get("barRangeDate");
|
||||
Map<String, Object> result = ChartDataBuild.transBarRangeDataAntV(skipBarRange, barRangeDate, xAxisBase, xAxis, yAxis, view, data, isDrill);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends ChartCalcDataResult> T calcChartResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, Map<String, Object> sqlMap, SQLMeta sqlMeta, Provider provider) {
|
||||
sqlMeta.setChartType(this.type);
|
||||
return super.calcChartResult(view, formatResult, filterResult, sqlMap, sqlMeta, provider);
|
||||
}
|
||||
}
|
@ -0,0 +1,72 @@
|
||||
package com.stdproject.charts.impl.bar;
|
||||
|
||||
import com.stdproject.utils.ChartDataBuild;
|
||||
import io.gisbi.extensions.view.dto.*;
|
||||
import lombok.Getter;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component
|
||||
public class StackBarHandler extends BarHandler {
|
||||
@Getter
|
||||
private String type = "bar-stack";
|
||||
@Override
|
||||
public void init() {
|
||||
chartHandlerManager.registerChartHandler(this.getRender(), "bar-stack", this);
|
||||
chartHandlerManager.registerChartHandler(this.getRender(), "bar-stack-horizontal", this);
|
||||
chartHandlerManager.registerChartHandler(this.getRender(), "percentage-bar-stack", this);
|
||||
chartHandlerManager.registerChartHandler(this.getRender(), "percentage-bar-stack-horizontal", this);
|
||||
}
|
||||
@Override
|
||||
public AxisFormatResult formatAxis(ChartViewDTO view) {
|
||||
var result = super.formatAxis(view);
|
||||
var xAxis = result.getAxisMap().get(ChartAxis.xAxis);
|
||||
xAxis.addAll(view.getExtStack());
|
||||
result.getAxisMap().put(ChartAxis.extStack, view.getExtStack());
|
||||
return result;
|
||||
}
|
||||
@Override
|
||||
public <T extends CustomFilterResult> T customFilter(ChartViewDTO view, List<ChartExtFilterDTO> filterList, AxisFormatResult formatResult) {
|
||||
var result = super.customFilter(view, filterList, formatResult);
|
||||
List<ChartDrillRequest> drillRequestList = view.getChartExtRequest().getDrill();
|
||||
var drillFields = formatResult.getAxisMap().get(ChartAxis.drill);
|
||||
// 堆叠维度下钻
|
||||
if (ObjectUtils.isNotEmpty(drillRequestList) && (drillFields.size() > drillRequestList.size())) {
|
||||
List<ChartExtFilterDTO> noDrillFilterList = filterList
|
||||
.stream()
|
||||
.filter(ele -> ele.getFilterType() != 1)
|
||||
.collect(Collectors.toList());
|
||||
var noDrillFieldAxis = formatResult.getAxisMap().get(ChartAxis.xAxis)
|
||||
.stream()
|
||||
.filter(ele -> ele.getSource() != FieldSource.DRILL)
|
||||
.collect(Collectors.toList());
|
||||
List<ChartExtFilterDTO> drillFilters = new ArrayList<>();
|
||||
ArrayList<ChartViewFieldDTO> fieldsToFilter = new ArrayList<>();
|
||||
var extStack = formatResult.getAxisMap().get(ChartAxis.extStack);
|
||||
if (ObjectUtils.isNotEmpty(extStack) &&
|
||||
Objects.equals(drillFields.get(0).getId(), extStack.get(0).getId())) {
|
||||
fieldsToFilter.addAll(view.getXAxis());
|
||||
groupStackDrill(noDrillFieldAxis, noDrillFilterList, fieldsToFilter, drillFields, drillRequestList);
|
||||
formatResult.getAxisMap().put(ChartAxis.xAxis, noDrillFieldAxis);
|
||||
result.setFilterList(noDrillFilterList);
|
||||
}
|
||||
}
|
||||
return (T) result;
|
||||
}
|
||||
@Override
|
||||
public Map<String, Object> buildNormalResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, List<String[]> data) {
|
||||
boolean isDrill = filterResult.getFilterList().stream().anyMatch(ele -> ele.getFilterType() == 1);
|
||||
var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis);
|
||||
var extStack = formatResult.getAxisMap().get(ChartAxis.extStack);
|
||||
var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis);
|
||||
var drillAxis = xAxis.stream().filter(axis -> FieldSource.DRILL == axis.getSource()).toList();
|
||||
var xAxisBase = xAxis.subList(0, xAxis.size() - extStack.size() - drillAxis.size());
|
||||
return ChartDataBuild.transStackChartDataAntV(xAxisBase, xAxis, yAxis, view, data, extStack, isDrill);
|
||||
}
|
||||
}
|
@ -0,0 +1,85 @@
|
||||
package com.stdproject.charts.impl.bar;
|
||||
|
||||
import com.stdproject.utils.ChartDataBuild;
|
||||
import io.gisbi.extensions.view.dto.*;
|
||||
import lombok.Getter;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component
|
||||
public class StackGroupBarHandler extends BarHandler {
|
||||
@Getter
|
||||
private String type = "bar-group-stack";
|
||||
|
||||
@Override
|
||||
public void init() {
|
||||
chartHandlerManager.registerChartHandler(this.getRender(), this.getType(), this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AxisFormatResult formatAxis(ChartViewDTO view) {
|
||||
var result = super.formatAxis(view);
|
||||
var xAxis = result.getAxisMap().get(ChartAxis.xAxis);
|
||||
xAxis.addAll(view.getXAxisExt());
|
||||
xAxis.addAll(view.getExtStack());
|
||||
result.getAxisMap().put(ChartAxis.extStack, view.getExtStack());
|
||||
result.getAxisMap().put(ChartAxis.xAxisExt, view.getXAxisExt());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends CustomFilterResult> T customFilter(ChartViewDTO view, List<ChartExtFilterDTO> filterList, AxisFormatResult formatResult) {
|
||||
var result = super.customFilter(view, filterList, formatResult);
|
||||
List<ChartDrillRequest> drillRequestList = view.getChartExtRequest().getDrill();
|
||||
var drillFields = formatResult.getAxisMap().get(ChartAxis.drill);
|
||||
// 分组维度下钻
|
||||
if (ObjectUtils.isNotEmpty(drillRequestList) && (drillFields.size() > drillRequestList.size())) {
|
||||
List<ChartExtFilterDTO> noDrillFilterList = filterList
|
||||
.stream()
|
||||
.filter(ele -> ele.getFilterType() != 1)
|
||||
.collect(Collectors.toList());
|
||||
var noDrillFieldAxis = formatResult.getAxisMap().get(ChartAxis.xAxis)
|
||||
.stream()
|
||||
.filter(ele -> ele.getSource() != FieldSource.DRILL)
|
||||
.collect(Collectors.toList());
|
||||
ArrayList<ChartViewFieldDTO> fieldsToFilter = new ArrayList<>();
|
||||
var xAxisExt = formatResult.getAxisMap().get(ChartAxis.xAxisExt);
|
||||
var extStack = formatResult.getAxisMap().get(ChartAxis.extStack);
|
||||
if (ObjectUtils.isNotEmpty(xAxisExt) && ObjectUtils.isNotEmpty(extStack)) {
|
||||
if (Objects.equals(drillFields.get(0).getId(), xAxisExt.get(0).getId())) {
|
||||
fieldsToFilter.addAll(view.getXAxis());
|
||||
fieldsToFilter.addAll(extStack);
|
||||
}
|
||||
if (Objects.equals(drillFields.get(0).getId(), extStack.get(0).getId())) {
|
||||
fieldsToFilter.addAll(view.getXAxis());
|
||||
fieldsToFilter.addAll(xAxisExt);
|
||||
}
|
||||
groupStackDrill(noDrillFieldAxis, noDrillFilterList, fieldsToFilter, drillFields, drillRequestList);
|
||||
formatResult.getAxisMap().put(ChartAxis.xAxis, noDrillFieldAxis);
|
||||
result.setFilterList(noDrillFilterList);
|
||||
}
|
||||
}
|
||||
return (T) result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> buildNormalResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, List<String[]> data) {
|
||||
boolean isDrill = filterResult
|
||||
.getFilterList()
|
||||
.stream()
|
||||
.anyMatch(ele -> ele.getFilterType() == 1);
|
||||
var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis);
|
||||
var xAxisExt = formatResult.getAxisMap().get(ChartAxis.xAxisExt);
|
||||
var extStack = formatResult.getAxisMap().get(ChartAxis.extStack);
|
||||
var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis);
|
||||
var drillAxis = xAxis.stream().filter(axis -> FieldSource.DRILL == axis.getSource()).toList();
|
||||
var xAxisBase = xAxis.subList(0, xAxis.size() - xAxisExt.size() - extStack.size() - drillAxis.size());
|
||||
return ChartDataBuild.transGroupStackDataAntV(xAxisBase, xAxis, xAxisExt, yAxis, extStack, data, view, isDrill);
|
||||
}
|
||||
}
|
@ -2,11 +2,15 @@ package com.stdproject.config;
|
||||
|
||||
import cn.hutool.cache.Cache;
|
||||
import cn.hutool.cache.CacheUtil;
|
||||
import com.stdproject.constant.AuthConstant;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
import static com.stdproject.constant.StaticResourceConstants.*;
|
||||
import static com.stdproject.utils.StaticResourceUtils.ensureBoth;
|
||||
import static com.stdproject.utils.StaticResourceUtils.ensureSuffix;
|
||||
|
||||
/**
|
||||
* Web配置类
|
||||
@ -39,5 +43,22 @@ public class WebConfig implements WebMvcConfigurer {
|
||||
// 其他静态资源
|
||||
registry.addResourceHandler("/static/**")
|
||||
.addResourceLocations("classpath:/static/");
|
||||
|
||||
String workDir = FILE_PROTOCOL + ensureSuffix(WORK_DIR, FILE_SEPARATOR);
|
||||
String uploadUrlPattern = ensureBoth(URL_SEPARATOR + UPLOAD_URL_PREFIX, AuthConstant.DE_API_PREFIX, URL_SEPARATOR) + "**";
|
||||
registry.addResourceHandler(uploadUrlPattern).addResourceLocations(workDir);
|
||||
|
||||
// map
|
||||
String mapDir = FILE_PROTOCOL + ensureSuffix(MAP_DIR, FILE_SEPARATOR);
|
||||
String mapUrlPattern = ensureBoth(MAP_URL, AuthConstant.DE_API_PREFIX, URL_SEPARATOR) + "**";
|
||||
registry.addResourceHandler(mapUrlPattern).addResourceLocations(mapDir);
|
||||
|
||||
String geoDir = FILE_PROTOCOL + ensureSuffix(CUSTOM_MAP_DIR, FILE_SEPARATOR);
|
||||
String geoUrlPattern = ensureBoth(GEO_URL, AuthConstant.DE_API_PREFIX, URL_SEPARATOR) + "**";
|
||||
registry.addResourceHandler(geoUrlPattern).addResourceLocations(geoDir);
|
||||
|
||||
String i18nDir = FILE_PROTOCOL + ensureSuffix(I18N_DIR, FILE_SEPARATOR);
|
||||
String i18nUrlPattern = ensureBoth(I18N_URL, AuthConstant.DE_API_PREFIX, URL_SEPARATOR) + "**";
|
||||
registry.addResourceHandler(i18nUrlPattern).addResourceLocations(i18nDir);
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,29 @@
|
||||
package com.stdproject.constant;
|
||||
|
||||
public class AuthConstant {
|
||||
|
||||
public final static String TOKEN_KEY = "X-DE-TOKEN";
|
||||
|
||||
public final static String EMBEDDED_TOKEN_KEY = "X-EMBEDDED-TOKEN";
|
||||
public final static String APISIX_FLAG_KEY = "APISIX_CHECK";
|
||||
|
||||
public final static String OIDC_X_USER = "X-Userinfo";
|
||||
|
||||
public final static String CAS_X_USER = "X-CAS-USER";
|
||||
|
||||
public final static String DE_API_PREFIX = "/";
|
||||
public final static String DE_CASAPI_PREFIX = "/casbi/de2api";
|
||||
public final static String DE_OIDCAPI_PREFIX = "/oidcbi/de2api";
|
||||
|
||||
// public final static String REFRESH_TOKEN_KEY = "X-DE-REFRESH-TOKEN";
|
||||
|
||||
public final static String USER_IMPORT_ERROR_KEY = "USER-IMPORT-ERROR-KEY";
|
||||
|
||||
public final static String LINK_TOKEN_KEY = "X-DE-LINK-TOKEN";
|
||||
public final static String ASK_TOKEN_KEY = "X-DE-ASK-TOKEN";
|
||||
|
||||
public final static String DE_EXECUTE_VERSION = "X-DE-EXECUTE-VERSION";
|
||||
public final static String DE_LDAP_AUTHORIZATION = "Authorization";
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,45 @@
|
||||
package com.stdproject.constant;
|
||||
import java.io.File;
|
||||
|
||||
import static com.stdproject.utils.StaticResourceUtils.ensureSuffix;
|
||||
|
||||
public class StaticResourceConstants {
|
||||
|
||||
public static final String FILE_PROTOCOL = "file:";
|
||||
|
||||
public static final String FILE_SEPARATOR = File.separator;
|
||||
|
||||
public static final String USER_HOME = getHomeData();
|
||||
|
||||
public static String WORK_DIR = ensureSuffix(USER_HOME, FILE_SEPARATOR) + "static-resource" + FILE_SEPARATOR;
|
||||
|
||||
public static String MAP_DIR = ensureSuffix(USER_HOME, FILE_SEPARATOR) + "map";
|
||||
public static String CUSTOM_MAP_DIR = ensureSuffix(USER_HOME, FILE_SEPARATOR) + "geo";
|
||||
public static String APPEARANCE_DIR = ensureSuffix(USER_HOME, FILE_SEPARATOR) + "appearance";
|
||||
public static String REPORT_DIR = ensureSuffix(USER_HOME, FILE_SEPARATOR) + "report";
|
||||
public static String PLUGIN_DIR = ensureSuffix(USER_HOME, FILE_SEPARATOR) + "plugin";
|
||||
public static String I18N_DIR = ensureSuffix(USER_HOME, FILE_SEPARATOR) + "i18n/front";
|
||||
|
||||
public static String MAP_URL = "/map";
|
||||
public static String GEO_URL = "/geo";
|
||||
public static String I18N_URL = "/i18n";
|
||||
|
||||
/**
|
||||
* Upload prefix.
|
||||
*/
|
||||
public final static String UPLOAD_URL_PREFIX = "static-resource";
|
||||
|
||||
/**
|
||||
* url separator.
|
||||
*/
|
||||
public static final String URL_SEPARATOR = "/";
|
||||
|
||||
public static String getHomeData() {
|
||||
return "E:/opt/gisbi2.0/data";
|
||||
// if (ModelUtils.isDesktop()) {
|
||||
// return ConfigUtils.getConfig("gisbi.path.data", "/opt/gisbi2.0/data");
|
||||
// } else {
|
||||
// return "/opt/gisbi2.0/data";
|
||||
// }
|
||||
}
|
||||
}
|
@ -0,0 +1,96 @@
|
||||
package com.stdproject.utils;
|
||||
|
||||
import io.gisbi.utils.LogUtil;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.lang.NonNull;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.Base64;
|
||||
|
||||
import static com.stdproject.constant.StaticResourceConstants.*;
|
||||
|
||||
public class StaticResourceUtils {
|
||||
|
||||
private final static String FILE_BASE_PATH = USER_HOME + FILE_SEPARATOR + UPLOAD_URL_PREFIX;
|
||||
|
||||
public static String ensureBoth(@NonNull String string, @NonNull String bothfix) {
|
||||
return ensureBoth(string, bothfix, bothfix);
|
||||
}
|
||||
|
||||
public static String ensureBoth(@NonNull String string, @NonNull String prefix,
|
||||
@NonNull String suffix) {
|
||||
return ensureSuffix(ensurePrefix(string, prefix), suffix);
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensures the string contain prefix.
|
||||
*
|
||||
* @param string string must not be blank
|
||||
* @param prefix prefix must not be blank
|
||||
* @return string contain prefix specified
|
||||
*/
|
||||
public static String ensurePrefix(@NonNull String string, @NonNull String prefix) {
|
||||
Assert.hasText(string, "String must not be blank");
|
||||
Assert.hasText(prefix, "Prefix must not be blank");
|
||||
|
||||
return prefix + StringUtils.removeStart(string, prefix);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Ensures the string contain suffix.
|
||||
*
|
||||
* @param string string must not be blank
|
||||
* @param suffix suffix must not be blank
|
||||
* @return string contain suffix specified
|
||||
*/
|
||||
public static String ensureSuffix(@NonNull String string, @NonNull String suffix) {
|
||||
Assert.hasText(string, "String must not be blank");
|
||||
Assert.hasText(suffix, "Suffix must not be blank");
|
||||
|
||||
return StringUtils.removeEnd(string, suffix) + suffix;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param imgFile local storage path
|
||||
* @return
|
||||
*/
|
||||
public static String getImgFileToBase64(String imgFile) {
|
||||
//Convert the picture file into byte array and encode it with Base64
|
||||
InputStream inputStream = null;
|
||||
byte[] buffer = null;
|
||||
//Read picture byte array
|
||||
try {
|
||||
inputStream = new FileInputStream(FILE_BASE_PATH + FILE_SEPARATOR + imgFile);
|
||||
int count = 0;
|
||||
while (count == 0) {
|
||||
count = inputStream.available();
|
||||
}
|
||||
buffer = new byte[count];
|
||||
inputStream.read(buffer);
|
||||
} catch (IOException e) {
|
||||
LogUtil.error(e);
|
||||
} catch (Exception e) {
|
||||
LogUtil.error(e);
|
||||
} finally {
|
||||
if (inputStream != null) {
|
||||
try {
|
||||
// Close InputStream
|
||||
inputStream.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
// Encode byte array as Base64
|
||||
if (buffer != null) {
|
||||
return Base64.getEncoder().encodeToString(buffer);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -153,7 +153,7 @@ logging:
|
||||
org.hibernate.type.descriptor.sql.BasicBinder: TRACE
|
||||
mybatis-plus:
|
||||
configuration:
|
||||
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #org.apache.ibatis.logging.nologging.NoLoggingImpl
|
||||
log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl #org.apache.ibatis.logging.stdout.StdOutImpl #org.apache.ibatis.logging.nologging.NoLoggingImpl
|
||||
springdoc:
|
||||
swagger-ui:
|
||||
enabled: true
|
||||
|
Loading…
Reference in New Issue
Block a user