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