代码调整

This commit is contained in:
2023-06-25 21:51:19 +08:00
parent e19cb5e732
commit 3855accc61
8 changed files with 309 additions and 193 deletions

View File

@@ -0,0 +1,114 @@
package com.njcn.echarts.json;
import com.njcn.echarts.pojo.constant.PicCommonData;
import org.icepear.echarts.Option;
import org.icepear.echarts.charts.bar.BarLabel;
import org.icepear.echarts.charts.bar.BarSeries;
import org.icepear.echarts.charts.bar3D.Bar3DSeries;
import org.icepear.echarts.components.coord.AxisNameTextStyle;
import org.icepear.echarts.components.coord.SplitLine;
import org.icepear.echarts.components.coord.cartesian.CategoryAxis;
import org.icepear.echarts.components.coord.cartesian.ValueAxis;
import org.icepear.echarts.components.grid.Grid;
import org.icepear.echarts.components.grid3D.Grid3D;
import org.icepear.echarts.components.grid3D.ViewControl;
import org.icepear.echarts.components.inRange.InRange;
import org.icepear.echarts.components.legend.Legend;
import org.icepear.echarts.components.series.LineStyle;
import org.icepear.echarts.components.title.Title;
import org.icepear.echarts.components.visualMap.ContinousVisualMap;
import org.icepear.echarts.origin.util.SeriesOption;
import org.icepear.echarts.render.Engine;
import java.util.List;
/**
* @author hongawen
* @version 1.0.0
* @date 2023年06月25日 20:10
*/
public class BarGenerator {
private final static Engine ENGINE = new Engine();
/***
* 生成月份统计
* @author wr
* @date 2023/6/21 10:06
*/
public static String generateMonthOption(List<String> xName, List<Integer> times, String year, Integer flag) {
xName.set(0, xName.get(0) + "\n" + "(" + year + ")");
String name;
Option monthOption = new Option();
//取消渲染动画
monthOption.setAnimation(false);
//背景色
monthOption.setBackgroundColor(PicCommonData.PIC_BACK_COLOR);
//标题
if (flag == 0) {
monthOption.setTitle(new Title().setLeft(PicCommonData.CENTER).setText("月份统计"));
name = "月份";
} else {
monthOption.setTitle(new Title().setLeft(PicCommonData.CENTER).setText("天数统计"));
name = "天数";
}
//上下左右的图内间距
monthOption.setGrid(new Grid().setTop("80px").setLeft("40px").setRight("60px").setBottom("20px"));
//设置图例
monthOption.setLegend(new Legend().setData(new String[]{"暂降次数"}).setTop("26px").setLeft(10).setBottom("94%").setShow(true));
//设置图例对应的颜色
monthOption.setColor(new String[]{"#FF8C00"});
//横坐标
monthOption.setXAxis(new CategoryAxis()
.setBoundaryGap(true)
.setName(name)
.setNameTextStyle(new AxisNameTextStyle().setFontStyle("15px"))
.setData(xName.toArray())
);
//纵坐标
monthOption.setYAxis(new ValueAxis[]{
new ValueAxis()
.setName("")
.setType("value")
});
//配置暂降次数
BarSeries probability = new BarSeries()
.setName("暂降次数")
.setLabel(new BarLabel().setShow(true).setColor("#8B008B"))
.setData(times);
monthOption.setSeries(new SeriesOption[]{probability});
return ENGINE.renderJsonOption(monthOption);
}
/***
* 生成暂降密度图
* @author hongawen
* @date 2023/6/25 20:12
*/
public static String generateEventDensity(Number[][] data) {
Option option3D = new Option();
option3D.setBackgroundColor("#fff");
option3D.setTitle(new Title().setText("暂降密度图").setX("center"));
option3D.setVisualMap(new ContinousVisualMap().setMax(20).setShow(false).setInRange(new InRange().setColor(new String[]{"#313695", "#00BB00", "#ff8000", "#a50026"})));
option3D.setXAxis3D(new CategoryAxis().setName("剩余电压(%)").setData(new String[]{"0-10", "10-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70-80", "80-90", "90-100"}));
option3D.setYAxis3D(new CategoryAxis()
.setName("持续时间(cyc)")
.setData(new String[]{"1cyc", "2cyc", "3cyc", "4cyc", "5cyc", "6~10cyc", "10~20cyc", "20~30cyc", "30~60cyc"})
.setSplitLine(new SplitLine().setLineStyle(new LineStyle().setColor("#").setType("dashed").setOpacity(0.5)))
);
option3D.setZAxis3D(new ValueAxis().setSplitNumber(8).setMinInterval(5).setName("次数"));
option3D.setGrid3D(new Grid3D()
.setViewControl(new ViewControl().setBeta(8).setAlpha(5))
.setBoxWidth(200)
.setBoxDepth(80)
);
Bar3DSeries bar3DSeries = new Bar3DSeries()
.setData(data)
.setShading("realistic");
option3D.setSeries(new SeriesOption[]{bar3DSeries});
return ENGINE.renderJsonOption(option3D);
}
}

View File

@@ -20,6 +20,7 @@ import org.icepear.echarts.components.grid.Grid;
import org.icepear.echarts.components.legend.Legend;
import org.icepear.echarts.components.title.Title;
import org.icepear.echarts.components.tooltip.Tooltip;
import org.icepear.echarts.components.visualMap.ContinousVisualMap;
import org.icepear.echarts.origin.util.SeriesOption;
import org.icepear.echarts.render.Engine;
@@ -95,23 +96,23 @@ public class LineGenerator {
* @date 2023/6/21 10:06
*/
public static String generateF47Option(TolerateData tolerateData) {
Option iticOption = new Option();
Option f47Option = new Option();
//取消渲染动画
iticOption.setAnimation(false);
f47Option.setAnimation(false);
//背景色
iticOption.setBackgroundColor(PicCommonData.PIC_BACK_COLOR);
f47Option.setBackgroundColor(PicCommonData.PIC_BACK_COLOR);
//标题
iticOption.setTitle(new Title().setLeft(PicCommonData.CENTER).setText("SEMI F47曲线"));
f47Option.setTitle(new Title().setLeft(PicCommonData.CENTER).setText("SEMI F47曲线"));
//上下左右的图内间距
iticOption.setGrid(new Grid().setTop("80px").setLeft("40px").setRight("40px").setBottom("10%"));
f47Option.setGrid(new Grid().setTop("80px").setLeft("40px").setRight("40px").setBottom("10%"));
//设置图例
iticOption.setLegend(new Legend().setData(new String[]{"边界线", "可容忍事件", "不可容忍事件"}).setTop("26px").setLeft(0).setBottom("94%"));
f47Option.setLegend(new Legend().setData(new String[]{"边界线", "可容忍事件", "不可容忍事件"}).setTop("26px").setLeft(0).setBottom("94%"));
//设置图例对应的颜色
iticOption.setColor(new String[]{"yellow", "green", "red"});
f47Option.setColor(new String[]{"yellow", "green", "red"});
//横坐标
iticOption.setXAxis(new LogAxis().setMin("0.001").setMax("1000").setSplitLine(new SplitLine().setShow(false)).setName("s"));
f47Option.setXAxis(new LogAxis().setMin("0.001").setMax("1000").setSplitLine(new SplitLine().setShow(false)).setName("s"));
//纵坐标
iticOption.setYAxis(new ValueAxis().setName("%").setMinInterval(0.1).setSplitNumber(10).setMax(100));
f47Option.setYAxis(new ValueAxis().setName("%").setMinInterval(0.1).setSplitNumber(10).setMax(100));
//处理边界线
LineSeries borderLimit = new LineSeries()
.setName("边界线")
@@ -128,8 +129,8 @@ public class LineGenerator {
.setName("不可容忍事件")
.setSymbol("circle")
.setData(tolerateData.getUnTolerateData());
iticOption.setSeries(new SeriesOption[]{borderLimit, tolerate, unTolerate});
return ENGINE.renderJsonOption(iticOption);
f47Option.setSeries(new SeriesOption[]{borderLimit, tolerate, unTolerate});
return ENGINE.renderJsonOption(f47Option);
}
@@ -139,24 +140,24 @@ public class LineGenerator {
* @date 2023/6/21 10:06
*/
public static String generateEventAmplitudeOption(List<String> ylinedata, List<String> ybardata) {
Option iticOption = new Option();
Option eventAmplitudeOption = new Option();
//取消渲染动画
iticOption.setAnimation(false);
eventAmplitudeOption.setAnimation(false);
//背景色
iticOption.setBackgroundColor(PicCommonData.PIC_BACK_COLOR);
eventAmplitudeOption.setBackgroundColor(PicCommonData.PIC_BACK_COLOR);
//标题
iticOption.setTitle(new Title().setLeft(PicCommonData.CENTER).setText("暂降幅值的概率分布"));
eventAmplitudeOption.setTitle(new Title().setLeft(PicCommonData.CENTER).setText("暂降幅值的概率分布"));
//设置图例
iticOption.setLegend(new Legend().setData(new String[]{"概率分布", "占比"}).setLeft(10).setShow(true));
eventAmplitudeOption.setLegend(new Legend().setData(new String[]{"概率分布", "占比"}).setLeft(10).setShow(true));
//横坐标
iticOption.setXAxis(new CategoryAxis()
eventAmplitudeOption.setXAxis(new CategoryAxis()
.setBoundaryGap(true)
.setName("暂降幅值")
.setNameTextStyle(new AxisNameTextStyle().setFontStyle("15px"))
.setData(new String[]{"0", "10%", "20%", "30%", "40%", "50%", "60%", "70%", "80%", "90%"})
);
//纵坐标
iticOption.setYAxis(new ValueAxis[]{
eventAmplitudeOption.setYAxis(new ValueAxis[]{
new ValueAxis()
.setName("%")
.setNameTextStyle(new AxisNameTextStyle().setFontStyle("15px"))
@@ -173,8 +174,8 @@ public class LineGenerator {
.setBarWidth(30)
.setData(ybardata);
iticOption.setSeries(new SeriesOption[]{probability, proportion});
return ENGINE.renderJsonOption(iticOption);
eventAmplitudeOption.setSeries(new SeriesOption[]{probability, proportion});
return ENGINE.renderJsonOption(eventAmplitudeOption);
}
/***
@@ -183,24 +184,24 @@ public class LineGenerator {
* @date 2023/6/21 10:06
*/
public static String generatePersistentTimeOption(List<String> ylinedata, List<String> ybardata) {
Option iticOption = new Option();
Option persistentTimeOption = new Option();
//取消渲染动画
iticOption.setAnimation(false);
persistentTimeOption.setAnimation(false);
//背景色
iticOption.setBackgroundColor(PicCommonData.PIC_BACK_COLOR);
persistentTimeOption.setBackgroundColor(PicCommonData.PIC_BACK_COLOR);
//标题
iticOption.setTitle(new Title().setLeft(PicCommonData.CENTER).setText("持续时间的概率分布"));
persistentTimeOption.setTitle(new Title().setLeft(PicCommonData.CENTER).setText("持续时间的概率分布"));
//设置图例
iticOption.setLegend(new Legend().setData(new String[]{"概率分布", "占比"}).setLeft(10).setShow(true));
persistentTimeOption.setLegend(new Legend().setData(new String[]{"概率分布", "占比"}).setLeft(10).setShow(true));
//横坐标
iticOption.setXAxis(new CategoryAxis()
persistentTimeOption.setXAxis(new CategoryAxis()
.setBoundaryGap(true)
.setName("暂态持续时间(s)")
.setNameTextStyle(new AxisNameTextStyle().setFontStyle("15px"))
.setData(new String[]{"0.01", "0.1", "0.25", "0.5", "1", "3", "20", "60", "180"})
);
//纵坐标
iticOption.setYAxis(new ValueAxis[]{
persistentTimeOption.setYAxis(new ValueAxis[]{
new ValueAxis()
.setName("%")
.setNameTextStyle(new AxisNameTextStyle().setFontStyle("15px"))
@@ -217,114 +218,9 @@ public class LineGenerator {
.setBarWidth(30)
.setData(ybardata);
iticOption.setSeries(new SeriesOption[]{probability, proportion});
return ENGINE.renderJsonOption(iticOption);
persistentTimeOption.setSeries(new SeriesOption[]{probability, proportion});
return ENGINE.renderJsonOption(persistentTimeOption);
}
/***
* 生成月份统计
* @author wr
* @date 2023/6/21 10:06
*/
public static String generateMonthOption(List<String> xName, List<Integer> times, String year, Integer flag) {
xName.set(0, xName.get(0) + "\n" + "(" + year + ")");
String name = "";
Option iticOption = new Option();
//取消渲染动画
iticOption.setAnimation(false);
//背景色
iticOption.setBackgroundColor(PicCommonData.PIC_BACK_COLOR);
//标题
if (flag == 0) {
iticOption.setTitle(new Title().setLeft(PicCommonData.CENTER).setText("月份统计"));
name = "月份";
} else {
iticOption.setTitle(new Title().setLeft(PicCommonData.CENTER).setText("天数统计"));
name = "天数";
}
//上下左右的图内间距
iticOption.setGrid(new Grid().setTop("80px").setLeft("40px").setRight("60px").setBottom("20px"));
//设置图例
iticOption.setLegend(new Legend().setData(new String[]{"暂降次数"}).setTop("26px").setLeft(10).setBottom("94%").setShow(true));
//设置图例对应的颜色
iticOption.setColor(new String[]{"#FF8C00"});
//横坐标
iticOption.setXAxis(new CategoryAxis()
.setBoundaryGap(true)
.setName(name)
.setNameTextStyle(new AxisNameTextStyle().setFontStyle("15px"))
.setData(xName.toArray())
);
//纵坐标
iticOption.setYAxis(new ValueAxis[]{
new ValueAxis()
.setName("")
.setType("value")
});
//配置暂降次数
BarSeries probability = new BarSeries()
.setName("暂降次数")
.setLabel(new BarLabel().setShow(true).setColor("#8B008B"))
.setData(times);
iticOption.setSeries(new SeriesOption[]{probability});
return ENGINE.renderJsonOption(iticOption);
}
/***
* 生成暂降原因
* @author wr
* @date 2023/6/21 10:06
*/
public static String generateReasonOption(List<String> xName, List<Map<String,Object>> map2) {
Option iticOption = new Option();
//取消渲染动画
iticOption.setAnimation(false);
//背景色
iticOption.setBackgroundColor(PicCommonData.PIC_BACK_COLOR);
//标题
iticOption.setTitle(new Title().setRight("10%").setText("暂降原因"));
//上下左右的图内间距
iticOption.setGrid(new Grid().setTop("80px").setLeft("40px").setRight("60px").setBottom("20px"));
//设置图例
iticOption.setLegend(new Legend().setOrient("vertical").setData(xName.toArray()).setTop("26px").setLeft(10).setBottom("94%").setShow(true));
String s = map2.toString();
//配置暂降次数
PieSeries probability = new PieSeries()
.setType("pie")
.setName("暂降原因")
.setLabel(new PieLabel().setFormatter("{b}:{d}%"))
.setData(map2);
iticOption.setSeries(new SeriesOption[]{probability});
return ENGINE.renderJsonOption(iticOption);
}
/***
* 生成暂降类型
* @author wr
* @date 2023/6/21 10:06
*/
public static String generateTypeOption(List<String> xName, List<Map<String,Object>> map) {
Option iticOption = new Option();
//取消渲染动画
iticOption.setAnimation(false);
//背景色
iticOption.setBackgroundColor(PicCommonData.PIC_BACK_COLOR);
//标题
iticOption.setTitle(new Title().setRight("10%").setText("暂降类型"));
//上下左右的图内间距
iticOption.setGrid(new Grid().setTop("80px").setLeft("40px").setRight("60px").setBottom("20px"));
//设置图例
iticOption.setLegend(new Legend().setOrient("vertical").setData(xName.toArray()).setTop("26px").setLeft(10).setBottom("94%").setShow(true));
//配置暂降次数
PieSeries probability = new PieSeries()
.setType("pie")
.setName("暂降类型")
.setLabel(new PieLabel().setFormatter("{b}:{d}%"))
.setData(map);
iticOption.setSeries(new SeriesOption[]{probability});
return ENGINE.renderJsonOption(iticOption);
}
}

View File

@@ -0,0 +1,83 @@
package com.njcn.echarts.json;
import com.njcn.echarts.pojo.constant.PicCommonData;
import org.icepear.echarts.Option;
import org.icepear.echarts.charts.pie.PieLabel;
import org.icepear.echarts.charts.pie.PieSeries;
import org.icepear.echarts.components.grid.Grid;
import org.icepear.echarts.components.legend.Legend;
import org.icepear.echarts.components.title.Title;
import org.icepear.echarts.origin.util.SeriesOption;
import org.icepear.echarts.render.Engine;
import java.util.List;
import java.util.Map;
/**
* @author hongawen
* @version 1.0.0
* @date 2023年06月25日 21:42
*/
public class PieGenerator {
private final static Engine ENGINE = new Engine();
/***
* 生成暂降原因
* @author wr
* @date 2023/6/21 10:06
*/
public static String generateReasonOption(List<String> xName, List<Map<String,Object>> map2) {
Option reasonOption = new Option();
//取消渲染动画
reasonOption.setAnimation(false);
//背景色
reasonOption.setBackgroundColor(PicCommonData.PIC_BACK_COLOR);
//标题
reasonOption.setTitle(new Title().setRight("10%").setText("暂降原因"));
//上下左右的图内间距
reasonOption.setGrid(new Grid().setTop("80px").setLeft("40px").setRight("60px").setBottom("20px"));
//设置图例
reasonOption.setLegend(new Legend().setOrient("vertical").setData(xName.toArray()).setTop("26px").setLeft(10).setBottom("94%").setShow(true));
String s = map2.toString();
//配置暂降次数
PieSeries probability = new PieSeries()
.setType("pie")
.setName("暂降原因")
.setLabel(new PieLabel().setFormatter("{b}:{d}%"))
.setData(map2);
reasonOption.setSeries(new SeriesOption[]{probability});
return ENGINE.renderJsonOption(reasonOption);
}
/***
* 生成暂降类型
* @author wr
* @date 2023/6/21 10:06
*/
public static String generateTypeOption(List<String> xName, List<Map<String,Object>> map) {
Option typeOption = new Option();
//取消渲染动画
typeOption.setAnimation(false);
//背景色
typeOption.setBackgroundColor(PicCommonData.PIC_BACK_COLOR);
//标题
typeOption.setTitle(new Title().setRight("10%").setText("暂降类型"));
//上下左右的图内间距
typeOption.setGrid(new Grid().setTop("80px").setLeft("40px").setRight("60px").setBottom("20px"));
//设置图例
typeOption.setLegend(new Legend().setOrient("vertical").setData(xName.toArray()).setTop("26px").setLeft(10).setBottom("94%").setShow(true));
//配置暂降次数
PieSeries probability = new PieSeries()
.setType("pie")
.setName("暂降类型")
.setLabel(new PieLabel().setFormatter("{b}:{d}%"))
.setData(map);
typeOption.setSeries(new SeriesOption[]{probability});
return ENGINE.renderJsonOption(typeOption);
}
}

View File

@@ -2,7 +2,9 @@ package com.njcn.echarts.util;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.njcn.echarts.json.BarGenerator;
import com.njcn.echarts.json.LineGenerator;
import com.njcn.echarts.json.PieGenerator;
import com.njcn.web.utils.RestTemplateUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
@@ -46,8 +48,8 @@ public class DrawPicUtil {
*/
private String drawPic(String option, int width, int height) {
JSONObject jsonObject = new JSONObject();
jsonObject.set("width", width == 0 ? 925 : width);
jsonObject.set("height", height == 0 ? 300 : height);
jsonObject.set("width", width == 0 ? 950 : width);
jsonObject.set("height", height == 0 ? 400 : height);
jsonObject.set("option", JSONUtil.parseObj(option));
ResponseEntity<String> picResult = RestTemplateUtil.post(URL, jsonObject, String.class);
return Objects.requireNonNull(picResult.getBody()).indexOf("image/png") > 0 ? picResult.getBody() : "";
@@ -160,7 +162,7 @@ public class DrawPicUtil {
* @return String base64数据
*/
public String drawMonth(List<String> xName, List<Integer> times, String year, Integer flag, int width, int height) {
String monthJson = LineGenerator.generateMonthOption( xName, times, year, flag);
String monthJson = BarGenerator.generateMonthOption( xName, times, year, flag);
return drawPic(monthJson, width, height);
}
@@ -181,7 +183,7 @@ public class DrawPicUtil {
* @return String base64数据
*/
public String drawReason(List<String> xname, List<Map<String,Object>> map2, int width, int height) {
String monthJson = LineGenerator.generateReasonOption(xname, map2);
String monthJson = PieGenerator.generateReasonOption(xname, map2);
return drawPic(monthJson, width, height);
}
@@ -202,7 +204,29 @@ public class DrawPicUtil {
* @return String base64数据
*/
public String drawType(List<String> xname, List<Map<String,Object>> map2, int width, int height) {
String monthJson = LineGenerator.generateTypeOption(xname, map2);
String monthJson = PieGenerator.generateTypeOption(xname, map2);
return drawPic(monthJson, width, height);
}
/***
* 绘制生成暂降密度图
* @author hongawen
* @date 2023/6/21 11:01
* @return String base64数据
*/
public String drawEventDensity(Number[][] data) {
return drawEventDensity(data, 0, 0);
}
/***
* 绘制生成暂降类型图
* @author hongawen
* @date 2023/6/21 11:01
* @return String base64数据
*/
public String drawEventDensity(Number[][] data, int width, int height) {
String eventDensityJson = BarGenerator.generateEventDensity(data);
return drawPic(eventDensityJson, width, height);
}
}