refactor(视图): 优化同环比日期字段过滤逻辑
This commit is contained in:
parent
4ff059eb70
commit
5344ed3b17
@ -341,7 +341,7 @@ public class ChartViewService {
|
|||||||
String[] dsHeader = null;
|
String[] dsHeader = null;
|
||||||
Integer[] dsTypes = null;
|
Integer[] dsTypes = null;
|
||||||
//downloadType = dataset 为下载原始名字 这里做数据转换模拟 table-info类型图表导出
|
//downloadType = dataset 为下载原始名字 这里做数据转换模拟 table-info类型图表导出
|
||||||
if("dataset".equals(request.getDownloadType())){
|
if ("dataset".equals(request.getDownloadType())) {
|
||||||
view.setType("table-info");
|
view.setType("table-info");
|
||||||
List<DatasetTableField> sourceFields = dataSetTableFieldsService.getFieldsByTableId(view.getTableId());
|
List<DatasetTableField> sourceFields = dataSetTableFieldsService.getFieldsByTableId(view.getTableId());
|
||||||
dsHeader = sourceFields.stream()
|
dsHeader = sourceFields.stream()
|
||||||
@ -353,9 +353,9 @@ public class ChartViewService {
|
|||||||
view.setXAxis(JSONObject.toJSONString(sourceFields));
|
view.setXAxis(JSONObject.toJSONString(sourceFields));
|
||||||
}
|
}
|
||||||
ChartViewDTO result = calcData(view, request, request.isCache());
|
ChartViewDTO result = calcData(view, request, request.isCache());
|
||||||
if("dataset".equals(request.getDownloadType())){
|
if ("dataset".equals(request.getDownloadType())) {
|
||||||
result.getData().put("header",dsHeader);
|
result.getData().put("header", dsHeader);
|
||||||
result.getData().put("dsTypes",dsTypes);
|
result.getData().put("dsTypes", dsTypes);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -1107,11 +1107,15 @@ public class ChartViewService {
|
|||||||
if (Arrays.asList(ChartConstants.M_Y).contains(compareCalc.getType())) {
|
if (Arrays.asList(ChartConstants.M_Y).contains(compareCalc.getType())) {
|
||||||
if (StringUtils.equalsIgnoreCase(compareCalc.getField() + "", filterDTO.getFieldId())) {
|
if (StringUtils.equalsIgnoreCase(compareCalc.getField() + "", filterDTO.getFieldId())) {
|
||||||
// -1 year
|
// -1 year
|
||||||
Calendar calendar = Calendar.getInstance();
|
try {
|
||||||
calendar.setTime(new Date(Long.parseLong(filterDTO.getValue().get(0))));
|
Calendar calendar = Calendar.getInstance();
|
||||||
calendar.add(Calendar.YEAR, -1);
|
calendar.setTime(new Date(Long.parseLong(filterDTO.getValue().get(0))));
|
||||||
filterDTO.getValue().set(0, String.valueOf(calendar.getTime().getTime()));
|
calendar.add(Calendar.YEAR, -1);
|
||||||
isYOY = true;
|
filterDTO.getValue().set(0, String.valueOf(calendar.getTime().getTime()));
|
||||||
|
isYOY = true;
|
||||||
|
} catch (Exception e) {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1146,9 +1150,11 @@ public class ChartViewService {
|
|||||||
datasourceRequest.setQuery(sql);
|
datasourceRequest.setQuery(sql);
|
||||||
data = datasourceProvider.getData(datasourceRequest);
|
data = datasourceProvider.getData(datasourceRequest);
|
||||||
data = resultCustomSort(xAxis, data);
|
data = resultCustomSort(xAxis, data);
|
||||||
Map<String, Object> mapChart = pluginViewResult(pluginViewParam, view, data, isDrill);
|
|
||||||
// 请求正确的数据,然后取值
|
// 请求正确的数据,然后取值
|
||||||
if (isYOY) {
|
if (isYOY) {
|
||||||
|
// 如果有同环比,先走插件同环比计算逻辑
|
||||||
|
data = pluginViewYOY(pluginViewParam, view, data);
|
||||||
PluginViewParam yoyPluginViewParam = buildPluginParam(fieldMap, fieldCustomFilter, yoyFilterList, ds, table, view, rowPermissionsTree, chartExtRequest);
|
PluginViewParam yoyPluginViewParam = buildPluginParam(fieldMap, fieldCustomFilter, yoyFilterList, ds, table, view, rowPermissionsTree, chartExtRequest);
|
||||||
String yoySql = pluginViewSql(yoyPluginViewParam, view);
|
String yoySql = pluginViewSql(yoyPluginViewParam, view);
|
||||||
if (StringUtils.isBlank(yoySql)) {
|
if (StringUtils.isBlank(yoySql)) {
|
||||||
@ -1177,6 +1183,7 @@ public class ChartViewService {
|
|||||||
data.clear();
|
data.clear();
|
||||||
data.addAll(resultData);
|
data.addAll(resultData);
|
||||||
}
|
}
|
||||||
|
Map<String, Object> mapChart = pluginViewResult(pluginViewParam, view, data, isDrill);
|
||||||
|
|
||||||
Map<String, Object> mapTableNormal = ChartDataBuild.transTableNormal(fieldMap, view, data, desensitizationList);
|
Map<String, Object> mapTableNormal = ChartDataBuild.transTableNormal(fieldMap, view, data, desensitizationList);
|
||||||
|
|
||||||
@ -1832,7 +1839,7 @@ public class ChartViewService {
|
|||||||
return chartViewDTO;
|
return chartViewDTO;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<? extends ForecastDataVO<?,?>> forecastData(ChartSeniorForecastDTO forecastCfg, List<String[]> data, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, ChartViewDTO view) throws ParseException {
|
private List<? extends ForecastDataVO<?, ?>> forecastData(ChartSeniorForecastDTO forecastCfg, List<String[]> data, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, ChartViewDTO view) throws ParseException {
|
||||||
List<String[]> trainingData = data;
|
List<String[]> trainingData = data;
|
||||||
if (!forecastCfg.isAllPeriod() && data.size() > forecastCfg.getTrainingPeriod()) {
|
if (!forecastCfg.isAllPeriod() && data.size() > forecastCfg.getTrainingPeriod()) {
|
||||||
trainingData = data.subList(data.size() - forecastCfg.getTrainingPeriod(), data.size() - 1);
|
trainingData = data.subList(data.size() - forecastCfg.getTrainingPeriod(), data.size() - 1);
|
||||||
@ -1842,7 +1849,7 @@ public class ChartViewService {
|
|||||||
String lastTime = data.get(data.size() - 1)[0];
|
String lastTime = data.get(data.size() - 1)[0];
|
||||||
ChartViewFieldDTO timeAxis = xAxis.get(0);
|
ChartViewFieldDTO timeAxis = xAxis.get(0);
|
||||||
List<String> forecastPeriod = DateUtils.getForecastPeriod(lastTime, forecastCfg.getPeriod(), timeAxis.getDateStyle(), timeAxis.getDatePattern());
|
List<String> forecastPeriod = DateUtils.getForecastPeriod(lastTime, forecastCfg.getPeriod(), timeAxis.getDateStyle(), timeAxis.getDatePattern());
|
||||||
if(!forecastPeriod.isEmpty()){
|
if (!forecastPeriod.isEmpty()) {
|
||||||
ForecastAlgo algo = ForecastAlgoManager.getAlgo(forecastCfg.getAlgorithm());
|
ForecastAlgo algo = ForecastAlgoManager.getAlgo(forecastCfg.getAlgorithm());
|
||||||
List<ForecastDataDTO> forecastData = algo.forecast(forecastCfg, trainingData, view);
|
List<ForecastDataDTO> forecastData = algo.forecast(forecastCfg, trainingData, view);
|
||||||
if (forecastPeriod.size() == forecastData.size()) {
|
if (forecastPeriod.size() == forecastData.size()) {
|
||||||
@ -2000,6 +2007,11 @@ public class ChartViewService {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<String[]> pluginViewYOY(PluginViewParam param, ChartViewDTO view, List<String[]> args) {
|
||||||
|
ViewPluginService viewPluginService = getPluginService(view.getType());
|
||||||
|
return viewPluginService.yoy(param, args);
|
||||||
|
}
|
||||||
|
|
||||||
private ChartViewDTO emptyChartViewDTO(ChartViewDTO view) {
|
private ChartViewDTO emptyChartViewDTO(ChartViewDTO view) {
|
||||||
ChartViewDTO dto = new ChartViewDTO();
|
ChartViewDTO dto = new ChartViewDTO();
|
||||||
BeanUtils.copyBean(dto, view);
|
BeanUtils.copyBean(dto, view);
|
||||||
|
|||||||
@ -1841,7 +1841,8 @@ export default {
|
|||||||
linear_regression: 'Linear regression',
|
linear_regression: 'Linear regression',
|
||||||
polynomial_regression: 'Polynomial regression',
|
polynomial_regression: 'Polynomial regression',
|
||||||
show_summary: 'Show summary',
|
show_summary: 'Show summary',
|
||||||
summary_label: 'Summary label'
|
summary_label: 'Summary label',
|
||||||
|
tip: 'Tip'
|
||||||
},
|
},
|
||||||
dataset: {
|
dataset: {
|
||||||
scope_edit: 'Effective only when editing',
|
scope_edit: 'Effective only when editing',
|
||||||
|
|||||||
@ -1834,7 +1834,8 @@ export default {
|
|||||||
linear_regression: '線性回歸',
|
linear_regression: '線性回歸',
|
||||||
polynomial_regression: '多項式擬合',
|
polynomial_regression: '多項式擬合',
|
||||||
show_summary: '顯示總計',
|
show_summary: '顯示總計',
|
||||||
summary_label: '總計標籤'
|
summary_label: '總計標籤',
|
||||||
|
tip: '提示'
|
||||||
},
|
},
|
||||||
dataset: {
|
dataset: {
|
||||||
scope_edit: '僅編輯時生效',
|
scope_edit: '僅編輯時生效',
|
||||||
|
|||||||
@ -1831,7 +1831,8 @@ export default {
|
|||||||
linear_regression: '线性回归',
|
linear_regression: '线性回归',
|
||||||
polynomial_regression: '多项式拟合',
|
polynomial_regression: '多项式拟合',
|
||||||
show_summary: '显示总计',
|
show_summary: '显示总计',
|
||||||
summary_label: '总计标签'
|
summary_label: '总计标签',
|
||||||
|
tip: '提示'
|
||||||
},
|
},
|
||||||
dataset: {
|
dataset: {
|
||||||
goto: ', 前往 ',
|
goto: ', 前往 ',
|
||||||
|
|||||||
@ -50,6 +50,12 @@
|
|||||||
class="exp-style"
|
class="exp-style"
|
||||||
>(本期数据 / |上期数据| - 1) * 100%</span>
|
>(本期数据 / |上期数据| - 1) * 100%</span>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item :label="$t('chart.tip')">
|
||||||
|
<span
|
||||||
|
class="exp-style"
|
||||||
|
>当对比日期需要过滤时,请使用过滤组件实现过滤;使用视图过滤器,仪表板下钻和联动等功能,会导致结果不一致</span>
|
||||||
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@ -118,9 +118,8 @@ public class ChartMixService extends ViewPluginService {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<String, Object> formatResult(PluginViewParam pluginViewParam, List<String[]> data, Boolean isDrill) {
|
public List<String[]> yoy(PluginViewParam pluginViewParam, List<String[]> data) {
|
||||||
List<PluginViewField> xAxis = new ArrayList<>();
|
List<PluginViewField> xAxis = new ArrayList<>();
|
||||||
List<PluginViewField> yAxis = new ArrayList<>();
|
List<PluginViewField> yAxis = new ArrayList<>();
|
||||||
|
|
||||||
@ -133,17 +132,7 @@ public class ChartMixService extends ViewPluginService {
|
|||||||
yAxis.add(pluginViewField);
|
yAxis.add(pluginViewField);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
Map<String, Object> map = new HashMap<>();
|
|
||||||
|
|
||||||
List<PluginSeries> series = format(pluginViewParam.getPluginViewLimit().getType(), data, xAxis, yAxis);
|
|
||||||
|
|
||||||
map.put("data", series);
|
|
||||||
|
|
||||||
|
|
||||||
return map;
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<PluginSeries> format(String type, List<String[]> data, List<PluginViewField> xAxis, List<PluginViewField> yAxis) {
|
|
||||||
// 同比/环比计算
|
// 同比/环比计算
|
||||||
// 调整data数据
|
// 调整data数据
|
||||||
for (int i = 0; i < yAxis.size(); i++) {
|
for (int i = 0; i < yAxis.size(); i++) {
|
||||||
@ -247,9 +236,35 @@ public class ChartMixService extends ViewPluginService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 同比/环比计算 over
|
// 同比/环比计算 over
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, Object> formatResult(PluginViewParam pluginViewParam, List<String[]> data, Boolean isDrill) {
|
||||||
|
List<PluginViewField> xAxis = new ArrayList<>();
|
||||||
|
List<PluginViewField> yAxis = new ArrayList<>();
|
||||||
|
|
||||||
|
|
||||||
|
pluginViewParam.getPluginViewFields().forEach(pluginViewField -> {
|
||||||
|
if (StringUtils.equals(pluginViewField.getTypeField(), "xAxis")) {
|
||||||
|
xAxis.add(pluginViewField);
|
||||||
|
}
|
||||||
|
if (StringUtils.equals(pluginViewField.getTypeField(), "yAxis")) {
|
||||||
|
yAxis.add(pluginViewField);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Map<String, Object> map = new HashMap<>();
|
||||||
|
|
||||||
|
List<PluginSeries> series = format(pluginViewParam.getPluginViewLimit().getType(), data, xAxis, yAxis);
|
||||||
|
|
||||||
|
map.put("data", series);
|
||||||
|
|
||||||
|
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<PluginSeries> format(String type, List<String[]> data, List<PluginViewField> xAxis, List<PluginViewField> yAxis) {
|
||||||
List<PluginSeries> series = new ArrayList<>();
|
List<PluginSeries> series = new ArrayList<>();
|
||||||
for (PluginViewField y : yAxis) {
|
for (PluginViewField y : yAxis) {
|
||||||
PluginSeries series1 = new PluginSeries();
|
PluginSeries series1 = new PluginSeries();
|
||||||
|
|||||||
@ -0,0 +1,12 @@
|
|||||||
|
package io.dataease.plugins.view.handler;
|
||||||
|
|
||||||
|
import io.dataease.plugins.view.entity.PluginViewParam;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author Junjun
|
||||||
|
*/
|
||||||
|
public interface PluginViewYOYHandler {
|
||||||
|
List<String[]> yoy(PluginViewParam pluginViewParam, List<String[]> data);
|
||||||
|
}
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
package io.dataease.plugins.view.handler.impl;
|
||||||
|
|
||||||
|
import io.dataease.plugins.view.entity.PluginViewParam;
|
||||||
|
import io.dataease.plugins.view.handler.PluginViewYOYHandler;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author Junjun
|
||||||
|
*/
|
||||||
|
public class DefaultViewYOYHandler implements PluginViewYOYHandler {
|
||||||
|
@Override
|
||||||
|
public List<String[]> yoy(PluginViewParam pluginViewParam, List<String[]> data) {
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -6,8 +6,11 @@ import io.dataease.plugins.view.entity.PluginViewParam;
|
|||||||
import io.dataease.plugins.view.entity.PluginViewType;
|
import io.dataease.plugins.view.entity.PluginViewType;
|
||||||
import io.dataease.plugins.view.handler.PluginViewRSHandler;
|
import io.dataease.plugins.view.handler.PluginViewRSHandler;
|
||||||
import io.dataease.plugins.view.handler.PluginViewStatHandler;
|
import io.dataease.plugins.view.handler.PluginViewStatHandler;
|
||||||
|
import io.dataease.plugins.view.handler.PluginViewYOYHandler;
|
||||||
import io.dataease.plugins.view.handler.impl.DefaultViewRSHandler;
|
import io.dataease.plugins.view.handler.impl.DefaultViewRSHandler;
|
||||||
import io.dataease.plugins.view.handler.impl.DefaultViewStatHandler;
|
import io.dataease.plugins.view.handler.impl.DefaultViewStatHandler;
|
||||||
|
import io.dataease.plugins.view.handler.impl.DefaultViewYOYHandler;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@ -20,6 +23,8 @@ public abstract class ViewPluginService extends PluginComponentService {
|
|||||||
|
|
||||||
private PluginViewRSHandler<Map> rsHandler;
|
private PluginViewRSHandler<Map> rsHandler;
|
||||||
|
|
||||||
|
private PluginViewYOYHandler yoyHandler;
|
||||||
|
|
||||||
|
|
||||||
public abstract PluginViewType viewType();
|
public abstract PluginViewType viewType();
|
||||||
|
|
||||||
@ -35,11 +40,16 @@ public abstract class ViewPluginService extends PluginComponentService {
|
|||||||
return rsHandler.format(param, lists, isDrill);
|
return rsHandler.format(param, lists, isDrill);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<String[]> yoy(PluginViewParam param, List<String[]> lists) {
|
||||||
|
yoyHandler = new DefaultViewYOYHandler();
|
||||||
|
return yoyHandler.yoy(param, lists);
|
||||||
|
}
|
||||||
|
|
||||||
public ViewPluginBaseService getBaseService() {
|
public ViewPluginBaseService getBaseService() {
|
||||||
return viewPluginBaseService;
|
return viewPluginBaseService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ViewPluginService() {
|
public ViewPluginService() {
|
||||||
this.viewPluginBaseService = (ViewPluginBaseService)PluginSpringContextUtil.getBean("viewPluginBaseServiceImpl");
|
this.viewPluginBaseService = (ViewPluginBaseService) PluginSpringContextUtil.getBean("viewPluginBaseServiceImpl");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user