前言:策略模式和适配器模式很像 但前者策略的接口和相干类会裸露进去,并且每个策略的“计算内容”都不同【罕用于计算】。
一、钻研下echarts官网的重要配置
1.1 罕用项次要有title legend xAxis yAxis legend dataset series textStyle 如下图所示
![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppa3VpY3VpNzQwMg_size_16_color_FFFFFF_t_70][] ![20200704092450556.png][]
二、建设Echarts的option类 我在此命名为EchartsOption 【注:前面个别option下间接属性 java命名前缀都是Echarts】
package com.ken.sys.common.entity.echarts.option;import com.ken.sys.common.entity.echarts.axis.EchartsXYAxis;import com.ken.sys.common.entity.echarts.dataset.EchartDataset;import com.ken.sys.common.entity.echarts.legend.EchartsLegend;import com.ken.sys.common.entity.echarts.series.EchartBaseSeries;import com.ken.sys.common.entity.echarts.textStyle.EchartsTextStyle;import com.ken.sys.common.entity.echarts.title.EchartsTitle;import java.util.List;/** * * @author swc * * @date 2020/7/3 0003 下午 13:43 */public class EchartsOption { //题目 private EchartsTitle title; //图例组件。 //图例组件展示了不同系列的标记(symbol),色彩和名字。能够通过点击图例管制哪些系列不显示。 private EchartsLegend legend; //直角坐标系 grid 中的 x 轴, private EchartsXYAxis xAxis; //直角坐标系 grid 中的 y 轴,[x轴和y轴 属性是一样的] private EchartsXYAxis yAxis; //默认色彩值 全局 private Object color =new String[]{"#c23531","#2f4554", "#61a0a8", "#d48265", "#91c7ae","#749f83", "#ca8622", "#bda29a","#6e7074", "#546570", "#c4ccd3"}; //全局的字体款式。 private EchartsTextStyle textStyle; //系列列表。每个系列通过 type 决定本人的图表类型 private List<EchartBaseSeries> series; //留神 //Charts 4 开始反对了 数据集(dataset)组件用于独自的数据集申明, // 从而数据能够独自治理,被多个组件复用,并且能够自在指定数据到视觉的映射。这在不少场景下能带来应用上的不便。 private EchartDataset dataset; //省略get set办法}
2.1 以title 为例子 写相干 的java类EchartsTitle
![20200704094736425.png][]
/****************************************************************************** * * * ****************************************************************************** * *****************************************************************************/package com.ken.sys.common.entity.echarts.title;/** * <ul> * <li>Title= EchartsTitle</li> * <li>Description= TODO </li> * <li>Copyright= Copyright (c) 2018</li> * <li>Company= http=//www.jiangqiaotech.com/</li> * </ul> * * @author swc * * @date 2020/7/3 0003 下午 13=54 */public class EchartsTitle { private String id ; //是否显示题目组件 private boolean show= true ; //主题目文本,反对应用 \n 换行。 private String text= "" ; private String link= "" ; private String target= "blank" ; private Object textStyle; private String subtext= "" ; private String sublink= "" ; private String subtarget= "blank" ; private String subtextStyle; //可选值:"auto"、"left"、"right"、"center"。 private String textAlign= "auto" ; private String textVerticalAlign= "auto" ; private boolean triggerEvent= false ; //number /Array //5 or [5,10,2,20] private Object padding= 5 ; private Integer itemGap= 10 ; private Integer zlevel= 0 ; private Integer z= 2 ; //string | number private Object left= "auto" ; //string | number private Object top= "auto" ; //string | number private Object right= "auto" ; //string | number private Object bottom= "auto" ; //Color private Object backgroundColor= "transparent" ; //Color private Object borderColor= "#ccc" ; private Integer borderWidth= 0 ; private Integer borderRadius= 0 ; private Integer shadowBlur ; //Color private Object shadowColor ; private Integer shadowOffsetX= 0 ; private Integer shadowOffsetY= 0 ; //省略get set办法}
![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppa3VpY3VpNzQwMg_size_16_color_FFFFFF_t_70 1][]
其余相干类在此不做赘述
这里简略说一下 series 应用基类【EchartBaseSeries】 其余如饼图 折线图等的series都是集成EchartBaseSeries
![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppa3VpY3VpNzQwMg_size_16_color_FFFFFF_t_70 2][]
三、编写策略类【策略模式】
3.1 次要分为三局部,一是策略接口 【EchartsStrategy】 二是策略的上下文 对外裸露 匹配不同的策略 行使不同的计划
三是工厂类将策略注入 做到匹配不同的类型的策略
3.1.1 策略接口 【EchartsStrategy】
public interface EchartsStrategy {// //创立option <T> EchartsOption createOption(IEchartSeries iEchartSeries, List<T> list, HandEchartsDto handEchartsDto); //会创立多个option <T>List<EchartsOption> createMulOption(IEchartSeries iEchartSeries, List<T> list, HandEchartsDto handEchartsDto);}
3.1.2 策略上下文 【EchartStrategyContext】
package com.ken.sys.common.strategycontext.echarts;import com.ken.sys.common.entity.echarts.dto.HandEchartsDto;import com.ken.sys.common.entity.echarts.option.EchartsOption;import com.ken.sys.common.ifs.IEchartSeries;import com.ken.sys.common.strategy.echarts.base.EchartsStrategy;import java.util.List;/** * <ul> * <li>Title: EchartStrategyContext</li> * </ul> * * @author swc * * @date 2020/7/3 0003 下午 14:54 */public class EchartStrategyContext { //echart 的生成策略 private EchartsStrategy echartsStrategy; public <T>EchartsOption createOption(IEchartSeries iEchartSeries, List<T> list,HandEchartsDto echartsDto){ if (echartsStrategy != null) { return echartsStrategy.createOption(iEchartSeries,list,echartsDto); } return null; } //会创立多个option public <T> List<EchartsOption> createMulOption(IEchartSeries iEchartSeries, List<T> list,HandEchartsDto echartsDto){ if (echartsStrategy != null) { return echartsStrategy.createMulOption(iEchartSeries,list,echartsDto); } return null; } public EchartStrategyContext(EchartsStrategy echartsStrategy) { this.echartsStrategy = echartsStrategy; } private EchartStrategyContext() { }}
3.1.3 策略的 工厂类【EchartsStrategyFactory】
/****************************************************************************** * * * ****************************************************************************** * *****************************************************************************/package com.ken.sys.common.factory.echarts;import com.ken.sys.common.constant.EchartsConstant;import com.ken.sys.common.strategy.echarts.*;import com.ken.sys.common.strategy.echarts.base.EchartsStrategy;import java.util.HashMap;import java.util.Map;/** * <ul> * <li>Title: EchartsStrategyFactory</li> * <li>Description: TODO </li> * <li>Copyright: Copyright (c) 2018</li> * <li>微信:tianji_vip</li> * </ul> * * @author swc * * @date 2020/7/3 0003 下午 15:07 */public class EchartsStrategyFactory { public static Map<String,EchartsStrategy> hashMap; static { hashMap = new HashMap<String,EchartsStrategy>(); hashMap.put(EchartsConstant.LINE,new EchartsLineStrategy()); hashMap.put(EchartsConstant.BAR,new EchartsBarStrategy()); hashMap.put(EchartsConstant.PIE,new EchartsPieStrategy()); hashMap.put(EchartsConstant.FUNNEL,new EchartsFunnelStrategy()); hashMap.put(EchartsConstant.GAUGE,new EchartsGaugeStrategy()); hashMap.put(EchartsConstant.HEATMAP,new EchartsHeatMapStrategy()); } public static EchartsStrategy getEchartsStrategy(String type) { return hashMap.get(type); }}
四 、局部策略内容展现【这里是把策略封装在BaseStrategy外面 作为公共局部】
![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppa3VpY3VpNzQwMg_size_16_color_FFFFFF_t_70 3][]
BaseStrategy的相干办法package com.ken.sys.common.strategy.echarts.base;import com.ken.sys.common.entity.echarts.axis.EchartsXYAxis;import com.ken.sys.common.entity.echarts.dto.HandEchartsDto;import com.ken.sys.common.entity.echarts.legend.EchartsLegend;import com.ken.sys.common.entity.echarts.option.EchartsOption;import com.ken.sys.common.entity.echarts.series.EchartBaseSeries;import com.ken.sys.common.entity.echarts.series.HeatMapSeries;import com.ken.sys.common.entity.echarts.series.data.SeriesData;import com.ken.sys.common.entity.echarts.series.property.SeriesAreaStyle;import com.ken.sys.common.entity.echarts.series.property.SeriesItemStyle;import com.ken.sys.common.entity.echarts.series.property.SeriesLabel;import com.ken.sys.common.entity.echarts.series.property.SeriesLineStyle;import com.ken.sys.common.entity.echarts.title.EchartsTitle;import com.ken.sys.common.ifs.IEchartSeries;import com.ken.sys.common.util.EmptyUtils;import com.ken.sys.common.util.ReflectUtils;import java.util.*;/** * <ul> * <li>Title: BaseStrategy</li> * <li>Description: TODO </li> * </ul> * * @author swc * * @date 2020/7/3 0003 下午 15:57 */public class BaseStrategy { //针对line和bar图像 public <T> EchartsOption createOptionForLineAndBar(IEchartSeries iEchartSeries,Class<? extends EchartBaseSeries> seriesClass, List<T> list, HandEchartsDto handEchartsDto){ String xyAxisName = handEchartsDto.getxAxisDataName(); Object[] legends = handEchartsDto.getLegends(); Object[] fields = handEchartsDto.getFields(); List[] saveList = handEchartsDto.getSaveList(); EchartsOption option =new EchartsOption(); List<Object> xAxisDataList =new ArrayList<Object>(); Map<String,List<Object>> map =new HashMap<String,List<Object>>(); Number value =null; SeriesData data=null; String nameValue =null; try { for(T t:list){ nameValue = ReflectUtils.getFieldValue(t,xyAxisName).toString(); xAxisDataList.add(nameValue); for(int ind=0;ind<fields.length;ind++){ value = (Number) ReflectUtils.getFieldValue(t,(String)fields[ind]); value = EmptyUtils.isNullOrEmpty(value)?0:value; data =new SeriesData(); data.setValue(value); //设置单个数据 款式 if(!EmptyUtils.isNullOrEmpty(iEchartSeries)){ iEchartSeries.setSeriesDataProp(data,new SeriesLabel(),new SeriesItemStyle(),new SeriesAreaStyle(),new SeriesLineStyle()); } saveList[ind].add(data); } } //多个series List<EchartBaseSeries> mulseries =new ArrayList<EchartBaseSeries>(); commonSetSeries(iEchartSeries, seriesClass, legends, fields, mulseries, saveList); EchartsLegend legend = new EchartsLegend(); legend.setData(Arrays.asList(legends)); EchartsXYAxis xAxis = new EchartsXYAxis(); xAxis.setData(xAxisDataList); option.setLegend(legend); option.setxAxis(xAxis); option.setSeries(mulseries); }catch (Exception e){ //理论换成日志打印 e.printStackTrace(); } return option; } //针对漏斗图、仪器图 和饼图图像 public <T> EchartsOption createOptionFGP(IEchartSeries iEchartSeries, Class<? extends EchartBaseSeries> seriesClass, List<T> list, HandEchartsDto handEchartsDto){ EchartsOption option =new EchartsOption(); String xyAxisName = handEchartsDto.getxAxisDataName(); Object[] legends = handEchartsDto.getLegends(); Object[] fields = handEchartsDto.getFields(); List[] saveList = handEchartsDto.getSaveList(); boolean requireXAxis = handEchartsDto.getRequireXAxis(); List<Object> xAxisDataList =new ArrayList<Object>(); Map<String,List<Object>> map =new HashMap<String,List<Object>>(); Number value =null; SeriesData data=null; String xAxisDataValue =null; try { for(T t:list){ xAxisDataValue = ReflectUtils.getFieldValue(t,xyAxisName).toString(); for(int ind=0;ind<fields.length;ind++){ value = (Number) ReflectUtils.getFieldValue(t,(String)fields[ind]); value = EmptyUtils.isNullOrEmpty(value)?0:value; data =new SeriesData(); data.setValue(value); data.setName(xAxisDataValue); xAxisDataList.add(xAxisDataValue); //设置单个数据 款式 if(!EmptyUtils.isNullOrEmpty(iEchartSeries)){ iEchartSeries.setSeriesDataProp(data,new SeriesLabel(),new SeriesItemStyle(),new SeriesAreaStyle(),new SeriesLineStyle()); } saveList[ind].add(data); } } List<EchartBaseSeries> mulseries =new ArrayList<EchartBaseSeries>(); commonSetSeries(iEchartSeries, seriesClass, legends, fields, mulseries, saveList); EchartsLegend legend =new EchartsLegend(); legend.setData(Arrays.asList(legends)); EchartsXYAxis xAxis =new EchartsXYAxis(); xAxis.setData(xAxisDataList); //须要x轴 if(requireXAxis){ option.setxAxis(xAxis); } option.setLegend(legend); option.setSeries(mulseries); }catch (Exception e){ e.printStackTrace(); } return option; } /** * 性能形容: 创立热力求的option * @param iEchartSeries 接口 * @param t 对象 // * @param titleFieldName // * @param subFieldName 对象外面须要解决的list数据 // * @param xDimension 维度x轴 // * @param yDimension 维度y // * @param xAxisDataName x轴须要展现的信息 // * @param yAxisDataName y轴须要展现的信息 // * @param showValField 须要展现数据的列 * @return: java.util.Map<java.lang.String,java.lang.Object> * @author: swc * @date: 2020/7/2 0002 下午 12:52 */ public static <T> EchartsOption createHeatMapOption(IEchartSeries iEchartSeries, T t, HandEchartsDto handEchartsDto) { EchartsOption option =new EchartsOption(); List<EchartBaseSeries> seriesList =new ArrayList<EchartBaseSeries>(); String titleFieldName = handEchartsDto.getTitleFieldName(); String subFieldName = handEchartsDto.getSubFieldName(); String xDimension = handEchartsDto.getxDimension(); String yDimension = handEchartsDto.getyDimension(); String xAxisDataName = handEchartsDto.getxAxisDataName(); String yAxisDataName = handEchartsDto.getyAxisDataName(); String showValField = handEchartsDto.getShowValField(); String showDateField = handEchartsDto.getShowDateField(); String coordinateSystem = handEchartsDto.getCoordinateSystem(); Map<String,Object> map =new HashMap<String,Object>(); //题目 String titleName =null; if(!EmptyUtils.isNullOrEmpty(titleFieldName)){ titleName = ReflectUtils.getFieldValue(t,titleFieldName).toString(); } List subList = (List)ReflectUtils.getFieldValue(t,subFieldName); Set<String> xAxisData =new TreeSet<String>(); Set<String> yAxisData =new TreeSet<String>(); //数据值---单个数据 List seriesDataValue ; EchartBaseSeries echartBaseSeries = new HeatMapSeries(); if("calendar".equals(coordinateSystem)){ ((HeatMapSeries)echartBaseSeries).setCoordinateSystem("calendar"); ((HeatMapSeries)echartBaseSeries).setCalendarIndex(handEchartsDto.getCalendarIndex()); } List<SeriesData> seriesDataList = new ArrayList<SeriesData>(); SeriesData seriesData =null; String xAxisValue =null; String yAxisValue =null; // 维度X String xDim = null; // 维度y String yDim = null; for(int i=0;i<subList.size();i++){ seriesData =new SeriesData(); if(!EmptyUtils.isNullOrEmpty(xDimension)){ // 维度X xDim = ReflectUtils.getFieldValue(subList.get(i),xDimension).toString(); } if(!EmptyUtils.isNullOrEmpty(xDimension)){ // 维度y yDim = ReflectUtils.getFieldValue(subList.get(i),yDimension).toString(); } //x轴的值 if(!EmptyUtils.isNullOrEmpty(xAxisDataName)){ xAxisValue = ReflectUtils.getFieldValue(subList.get(i),xAxisDataName).toString(); xAxisData.add(xAxisValue); } //y轴的值 if(!EmptyUtils.isNullOrEmpty(yAxisDataName)){ yAxisValue = ReflectUtils.getFieldValue(subList.get(i),yAxisDataName).toString(); yAxisData.add(yAxisValue); } seriesDataValue =new ArrayList(); //目前反对cartesian2d呈现x-y维度 if("cartesian2d".equals(coordinateSystem)){ seriesDataValue.add(xDim); seriesDataValue.add(yDim); } //coordinateSystem为calendar series外面的data-[value]为工夫+某项值的数组 if("calendar".equals(coordinateSystem)){ Object showDate =EmptyUtils.isNullOrEmpty(showDateField)?0:ReflectUtils.getFieldValue(subList.get(i),showDateField); seriesDataValue.add(showDate); } Object showVal =EmptyUtils.isNullOrEmpty(showValField)?0:ReflectUtils.getFieldValue(subList.get(i),showValField); seriesDataValue.add(showVal); seriesDataValue.add(subList.get(i)); //设置值 seriesData.setValue(seriesDataValue);// seriesData.setVisualMap(false); if(!EmptyUtils.isNullOrEmpty(iEchartSeries)){ iEchartSeries.setSeriesDetailProp(echartBaseSeries,new SeriesLabel(),new SeriesItemStyle(),new SeriesAreaStyle(),new SeriesLineStyle()); iEchartSeries.setSeriesDataProp(seriesData,new SeriesLabel(),new SeriesItemStyle(),new SeriesAreaStyle(),new SeriesLineStyle()); } seriesDataList.add(seriesData); echartBaseSeries.setData(seriesDataList); } seriesList.add(echartBaseSeries); EchartsTitle title =new EchartsTitle(); title.setText(titleName); EchartsXYAxis xAxis =new EchartsXYAxis(); xAxis.setData(new ArrayList(xAxisData)); option.setxAxis(xAxis); EchartsXYAxis yAxis =new EchartsXYAxis(); yAxis.setData(new ArrayList(yAxisData)); option.setyAxis(yAxis); option.setSeries(seriesList); return option; } /** * 性能形容: * @param iEchartSeries 接口 * @param list 对象 // * @param titleFieldName // * @param subFieldName 对象外面须要解决的list数据 // * @param xDimension 维度x轴 // * @param yDimension 维度y // * @param xAxisDataName x轴须要展现的信息 // * @param yAxisDataName y轴须要展现的信息 // * @param showValField 须要展现数据的列 * @return: java.util.Map<java.lang.String,java.lang.Object> * @author: swc * @date: 2020/7/2 0002 下午 12:52 */ public static <T> List<EchartsOption> createHeatMapOption(IEchartSeries iEchartSeries, List<T> list, HandEchartsDto handEchartsDto) { List<EchartsOption> optionList =new ArrayList<EchartsOption>(); String coordinateSystem = handEchartsDto.getCoordinateSystem(); //拼接不同年份日历的series的值 List<EchartBaseSeries> seriesList =new ArrayList<EchartBaseSeries>(); EchartsOption option = null; for(int i=0;i<list.size();i++){ handEchartsDto.setCalendarIndex(i); //如果coordinateSystem 是 cartesian2d 默认为 多个[option]热力求 if("cartesian2d".equalsIgnoreCase(coordinateSystem)){ optionList.add(createHeatMapOption(iEchartSeries,list.get(i),handEchartsDto)); } //如果coordinateSystem 是 calendar 默认为 日历 则是一个option的热力求 series的值为多个 而不是一个 if("calendar".equalsIgnoreCase(coordinateSystem)){ option = createHeatMapOption(iEchartSeries, list.get(i), handEchartsDto); seriesList.addAll(option.getSeries()); } } if("calendar".equalsIgnoreCase(coordinateSystem)){ option.setSeries(seriesList); optionList.add(option); } return optionList; } //布告的设置多个series的办法 private void commonSetSeries(IEchartSeries iEchartSeries, Class<? extends EchartBaseSeries> seriesClass, Object[] legends, Object[] fields, List<EchartBaseSeries> mulseries, List[] saveList) throws InstantiationException, IllegalAccessException { EchartBaseSeries echartBaseSeries; for (int ind = 0; ind < fields.length; ind++) { //获取指定的series echartBaseSeries = seriesClass.newInstance(); echartBaseSeries.setName((String) legends[ind]); echartBaseSeries.setData(saveList[ind]); //设置整体款式[如一条折线或条状图的款式] if (!EmptyUtils.isNullOrEmpty(iEchartSeries)) { iEchartSeries.setSeriesDetailProp(echartBaseSeries, new SeriesLabel(), new SeriesItemStyle(), new SeriesAreaStyle(), new SeriesLineStyle()); } mulseries.add(echartBaseSeries); } }}
五、为了不便 最初写了工具类【EChartsNewUtil】 把策略调用进行封装
注:1.这里次要看有正文的办法 因为参数是最全的 2.对于IEchartSeries ,EchartsStrategy 这两类,IEchartSeries 是针对series的数据处理 或增加批改款式(毕竟每个公司 /每个零碎业务多多少少会有些不同) ,EchartsStrategy 这个是自定义你本人业务需要的策略(须要继承EchartsStrategy ,这个齐全是从新定义这个办法 IEchartSeries 再次不起作用 除非你主动代码回调到它)
5.1 HandEchartsDto是封装的参数,用于反射数据源的属性或解决局部业务
/****************************************************************************** * * * ****************************************************************************** * *****************************************************************************/package com.ken.sys.common.entity.echarts.dto;import java.util.List;/** * <ul> * <li>Title: HandEchartsDto</li> * <li>Description: TODO </li> * <li>Copyright: Copyright (c) 2018</li> * <li>微信:tianji_vip</li> * </ul> * * @author swc * * @date 2020/7/2 0002 下午 13:44 */public class HandEchartsDto {// 该系列应用的坐标系,可选:// 'cartesian2d'// 应用二维的直角坐标系(也称笛卡尔坐标系),通过 xAxisIndex, yAxisIndex指定相应的坐标轴组件。// 'geo'// 应用天文坐标系,通过 geoIndex 指定相应的天文坐标系组件。// ‘calendar’// 应用日历坐标系 private String coordinateSystem ="cartesian2d"; //题目[主-列名] private String titleFieldName; //子对象的属性名[列名] private String subFieldName; //维度x轴[列名] private String xDimension; //维度y轴[列名] private String yDimension; //x轴须要展现的信息[列名] private String xAxisDataName; //y轴须要展现的信息[列名] private String yAxisDataName; //须要展现数据的列的属性名[工夫列] private String showDateField; //须要展现数据的列的属性名[列名] private String showValField; //应用的日历坐标系的 index,在单个图表实例中存在多个日历坐标系的时候有用。 private int calendarIndex; //legend的值 private Object[] legends; //个别为legend 一一对应的属性项的值 private Object[] fields; //个别为fields 一一对应的列的 单个serie的data外面的value值 个别为数组 private List[] saveList; //是否须要x轴 private boolean requireXAxis =true; //此处省略get set办法 }package com.ken.sys.common.util;import com.ken.sys.common.entity.echarts.dto.HandEchartsDto;import com.ken.sys.common.entity.echarts.option.EchartsOption;import com.ken.sys.common.factory.echarts.EchartsStrategyFactory;import com.ken.sys.common.ifs.IEchartSeries;import com.ken.sys.common.strategy.echarts.base.EchartsStrategy;import com.ken.sys.common.strategycontext.echarts.EchartStrategyContext;import java.util.*;public class EChartsNewUtil { /** * 性能形容: * @param type 图形类别 * @param iEchartSeries 内部接口 用于重写参数 或 款式等 * @param list 数据源 * @param handEchartsDto 须要解决的相应字段【list或list的子集外面】 * @return: com.ken.sys.common.entity.echarts.option.EchartsOption * @param strategy 自定义的策略 * @author: swc * @date: 2020/7/4 0:48 */ public static <T>EchartsOption creatOption(String type, IEchartSeries iEchartSeries, List<T> list, HandEchartsDto handEchartsDto, EchartsStrategy strategy) { //获取匹配的策略 if(EmptyUtils.isNullOrEmpty(strategy)){ strategy =EchartsStrategyFactory.getEchartsStrategy(type); } EchartStrategyContext context = new EchartStrategyContext(strategy); return context.createOption(iEchartSeries,list,handEchartsDto); } public static <T>EchartsOption creatOption(String type, List<T> list, HandEchartsDto handEchartsDto) { return creatOption(type,null,list,handEchartsDto,null); } public static <T>EchartsOption creatOption(String type, List<T> list, HandEchartsDto handEchartsDto,EchartsStrategy strategy) { return creatOption(type,null,list,handEchartsDto,strategy); } public static <T>EchartsOption creatOption(String type,IEchartSeries iEchartSeries, List<T> list, HandEchartsDto handEchartsDto) { return creatOption(type,iEchartSeries,list,handEchartsDto,null); } /** * 性能形容: * @param type 图形类别 * @param iEchartSeries 内部接口 用于重写参数 或 款式等 * @param list 数据源 * @param handEchartsDto 须要解决的相应字段【list或list的子集外面】 * @param strategy 自定义的策略 * @return: com.ken.sys.common.entity.echarts.option.EchartsOption * @author: swc * @date: 2020/7/4 0:48 */ public static <T>List<EchartsOption> creatMulOptionForHeatMap(String type, IEchartSeries iEchartSeries, List<T> list, HandEchartsDto handEchartsDto,EchartsStrategy strategy) { //获取匹配的策略 if(EmptyUtils.isNullOrEmpty(strategy)){ strategy =EchartsStrategyFactory.getEchartsStrategy(type); } EchartStrategyContext context = new EchartStrategyContext(strategy); return context.createMulOption(iEchartSeries,list,handEchartsDto); } public static <T>List<EchartsOption> creatMulOptionForHeatMap(String type, IEchartSeries iEchartSeries, List<T> list, HandEchartsDto handEchartsDto) { return creatMulOptionForHeatMap(type,iEchartSeries,list,handEchartsDto,null); } public static <T>List<EchartsOption> creatMulOptionForHeatMap(String type, List<T> list, HandEchartsDto handEchartsDto, EchartsStrategy strategy) { return creatMulOptionForHeatMap(type,null,list,handEchartsDto,strategy); } public static <T>List<EchartsOption> creatMulOptionForHeatMap(String type, List<T> list, HandEchartsDto handEchartsDto) { return creatMulOptionForHeatMap(type,null,list,handEchartsDto,null); }}
六、测试数据和测试该工具类
局部代码
//柱状图 折线图 @Test public void barOrLine()throws Exception{ String type=EChartsUtil.LINE;//BAR List<EchartsEntity> list= getData(); Object[] legends ={"总金额","实付金额"}; Object[] fields ={"nums1","nums2"}; List[] saveList =new List[]{new ArrayList<BigDecimal>(),new ArrayList<BigDecimal>()}; HandEchartsDto dto =new HandEchartsDto(); dto.setxAxisDataName("name"); dto.setLegends(legends); dto.setFields(fields); dto.setSaveList(saveList); EchartsOption option = EChartsNewUtil.creatOption(type, new IEchartSeries() { @Override public void setSeriesDetailProp(EchartBaseSeries series, SeriesLabel label, SeriesItemStyle itemStyle, SeriesAreaStyle areaStyle, SeriesLineStyle lineStyle) {// ((BarSeries) series).setBarMaxWidth("60%");// label.setShow(true);// label.setPosition("top");// series.setLabel(label); } @Override public void setSeriesDataProp(SeriesData seriesData, SeriesLabel label, SeriesItemStyle itemStyle, SeriesAreaStyle areaStyle, SeriesLineStyle lineStyle) { } }, list, dto); option.setSeries(null); }
源码:https://gitee.com/ten-ken/jav... [先找测试类TestStrategyEcharts]
微信: tianji_vip
![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppa3VpY3VpNzQwMg_size_16_color_FFFFFF_t_70 4][]
本文来源于:宋文超super,专属平台有csdn、思否(SegmentFault)、 简书、 开源中国(oschina),转载请注明出处。