1.横轴对象
public class EChartXAxisVo implements Serializable {
public static final EChartXAxisVo NULL = new EChartXAxisVo(Collections.emptyList(), "横轴");
private static final long serialVersionUID = -5457112144258948057L;
private List> data;
private String name;
public EChartXAxisVo(List data, String name) {
this.data = data;
this.name = name;
}
2.图标vo
public class EChartVo implements Serializable {
public static final EChartVo NULL = new EChartVo(EChartXAxisVo.NULL, EChartSeriesVo.NULL);
private static final long serialVersionUID = -1863666898042856758L;
private EChartXAxisVo xAxis;
private List series;
public EChartVo(EChartXAxisVo xAxis) {
this.xAxis = xAxis;
this.series = new ArrayList<>();
}
}
数据组装进对象
//日期图 (这里是将日期转换为每一天的日期,返回为集合)
List times = BiUtils.between(params.getStartDate(), params.getEndDate(), params.getTimeDimension()).stream().map(c -> c.toString()).collect(Collectors.toList());
ArrayList xAxisList = new ArrayList<>(times.size());
//时间粒度(粒度这里,我们需求是根据天周月的粒度来展示)
Integer timeDimension = params.getTimeDimension();
for (int i = 0; i < times.size(); i++) {
String localDate = times.get(i);
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate date2 = LocalDate.parse(localDate, fmt);
if (timeDimension == 3) {
xAxisList.add(localDate);
} else if (timeDimension == 2) {
String weekOfYear = BiUtils.getWeekOfYear(date2);
xAxisList.add(weekOfYear);
} else if (timeDimension == 1) {
String monthOfYear = BiUtils.getMonthOfYear(date2);
xAxisList.add(monthOfYear);
}
}
//X轴数据
EChartXAxisVo demoX = new EChartXAxisVo(xAxisList, "时间");
EChartVo eChartVo = new EChartVo();
//查询商品成本,毛利率,折扣金额,折扣率,支付金额(这里注意一下,是直接调用Mapper对象查询)
List goodsAnalysisInfoList = mapper.query(params);
//商品成本
Map collect = goodsAnalysisInfoList.stream().collect(Collectors.toMap(c -> c.getDates(), c -> c.getSellCostMoney()));
//毛利率
Map collect2 = goodsAnalysisInfoList.stream().collect(Collectors.toMap(c -> c.getDates(), c -> c.getProfitRateStr()));
//折扣金额
Map collect3 = goodsAnalysisInfoList.stream().collect(Collectors.toMap(c -> c.getDates(), c -> c.getDiscountMoney()));
//折扣率
Map collect4 = goodsAnalysisInfoList.stream().collect(Collectors.toMap(c -> c.getDates(), c -> c.getDiscountRateStr()));
//支付
Map collect5 = goodsAnalysisInfoList.stream().collect(Collectors.toMap(c -> c.getDates(), c -> c.getPaidAmount()));
ArrayList xList = new ArrayList<>();
//组装参数对象
EChartSeriesVo seriesVo1 = new EChartSeriesVo();
EChartSeriesVo seriesVo2 = new EChartSeriesVo();
EChartSeriesVo seriesVo3 = new EChartSeriesVo();
EChartSeriesVo seriesVo4 = new EChartSeriesVo();
EChartSeriesVo seriesVo5 = new EChartSeriesVo();
for (Object datum : demoX.getData()) {
BigDecimal orDefault = collect.getOrDefault(datum, new BigDecimal("0.00"));
seriesVo1.getData().add(orDefault.toString());
seriesVo1.setName("商品成本");
String orDefault1 = collect2.getOrDefault(datum, "0%");
seriesVo2.getData().add(orDefault1);
seriesVo2.setName("毛利率");
BigDecimal orDefault2 = collect3.getOrDefault(datum, new BigDecimal("0.00"));
seriesVo3.getData().add(orDefault2.toString());
seriesVo3.setName("折扣金额");
String orDefault3 = collect4.getOrDefault(datum, "0.00");
seriesVo4.getData().add(orDefault3);
seriesVo4.setName("折扣率");
BigDecimal orDefault4 = collect5.getOrDefault(datum, new BigDecimal("0.00"));
seriesVo5.getData().add(orDefault4.toString());
seriesVo5.setName("折扣金额");
}
//将参数对象放入集合
xList.add(seriesVo1);
xList.add(seriesVo2);
xList.add(seriesVo3);
xList.add(seriesVo4);
xList.add(seriesVo5);
//(这里只是写到这种写法,如果有更好的写法欢迎留言lqm)
eChartVo.setXAxis(demoX);
eChartVo.setSeries(xList);
return eChartVo;
展示成果
返回前端的数据结构
ok~折线图的数据组装暂时就这样,按照这个写法的话,柱状图也是可以使用的,如果觉得可以的话,麻烦点个赞,留个言。不清楚的也可以留言,我看到就会回



