/*************************************************************************
* Copyright (C) Unpublished JiuDaoTech Software, Inc. All rights reserved.
* JiuDaoTech Software, Inc., Confidential and Proprietary.
*
* This software is subject to copyright protection
* under the laws of the Public of China and other countries.
*
* Unless otherwise explicitly stated, this software is provided
* by JiuDaoTech "AS IS".
*************************************************************************/
package service.chart.line.echarts;
import com.github.abel533.echarts.Option;
import com.github.abel533.echarts.axis.Axis;
import com.github.abel533.echarts.axis.CategoryAxis;
import com.github.abel533.echarts.axis.ValueAxis;
import com.github.abel533.echarts.code.Trigger;
import com.github.abel533.echarts.series.Series;
import model.chart.ChartBuilderParams;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Transformer;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import service.chart.ChartOption;
import service.chart.ChartsUtil;
import service.system.helper.DataSetProvider;
import javax.annotation.Resource;
import java.util.*;
/**
* 标准折线图实现
*
* @author CSJ
*/
@Service
public class Line implements ChartOption {
@Resource
private DataSetProvider dataSetProvider;
@Resource
private ChartsUtil chartsUtil;
@Override
public Option transform(final ChartBuilderParams chartBuilderParams) throws Exception {
List> dataSet = dataSetProvider.prepareDataSet(chartBuilderParams);
dataSet = chartsUtil.dataGroupBy(chartBuilderParams,dataSet,"line");
chartsUtil.dataFilter(dataSet,chartBuilderParams,"line");
// 拆分数据, 结构化
Option option = new Option();
// backgroundColor
option.backgroundColor("white");
// title
option.title("标题", "副标题");
// tooltip
option.tooltip().trigger(Trigger.axis);
//legend
option.legend().data().addAll(chartBuilderParams.getBuilderModel().getyAxis());
// xAxis
final Axis axis = new CategoryAxis();
Collection> xAxisData = CollectionUtils.collect(dataSet, new Transformer, Map>() {
@Override
public Map transform(Map input) {
Object obj = input.get(chartBuilderParams.getBuilderModel().getxAxis().get(0));
LinkedHashMap category = new LinkedHashMap<>();
if (obj != null && StringUtils.isNoneEmpty(obj.toString())) {
category.put("value", String.valueOf(obj));
}
return category;
}
});
axis.data().addAll(xAxisData);
option.xAxis().add(axis);
option.yAxis().add(new ValueAxis());
// series
List list = new ArrayList<>();
for(final int[] i = {0};i[0] < chartBuilderParams.getBuilderModel().getyAxis().size();i[0]++){
Series series = new com.github.abel533.echarts.series.Line();
Collection seriesData = CollectionUtils.collect(dataSet, new Transformer, Object>() {
@Override
public Object transform(Map input) {
Object v = input.get(chartBuilderParams.getBuilderModel().getyAxis().get(i[0]));
return v;
}
});
series.setName(chartBuilderParams.getBuilderModel().getyAxis().get(i[0]));
series.data().addAll(seriesData);
list.add(series);
}
option.series(list);
return option;
}
}