yang_shj
2 years ago
12 changed files with 908 additions and 62 deletions
@ -1,4 +1,6 @@ |
|||||||
-- 巡检计划添加消息模板字段 |
-- 巡检计划添加消息模板字段 |
||||||
alter table `hz_st_re_plan` add column `message_template_id` bigint(20) comment '消息模板ID'; |
alter table `hz_st_re_plan` add column `message_template_id` bigint(20) comment '消息模板ID'; |
||||||
-- 巡检任务添加消息模板字段 |
-- 巡检任务添加消息模板字段 |
||||||
alter table `hz_st_ex_task` add column `message_template_id` bigint(20) comment '消息模板ID'; |
alter table `hz_st_ex_task` add column `message_template_id` bigint(20) comment '消息模板ID'; |
||||||
|
|
||||||
|
alter table hz_st_ex_task add COLUMN `push_status` bigint(1) default null comment '推送状态'; |
@ -0,0 +1,712 @@ |
|||||||
|
package com.hnac.hzims.operational.util; |
||||||
|
|
||||||
|
import cn.afterturn.easypoi.entity.ImageEntity; |
||||||
|
import cn.hutool.core.lang.Assert; |
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
import org.jfree.chart.ChartFactory; |
||||||
|
import org.jfree.chart.ChartUtils; |
||||||
|
import org.jfree.chart.JFreeChart; |
||||||
|
import org.jfree.chart.StandardChartTheme; |
||||||
|
import org.jfree.chart.axis.CategoryAxis; |
||||||
|
import org.jfree.chart.axis.NumberAxis; |
||||||
|
import org.jfree.chart.labels.StandardPieSectionLabelGenerator; |
||||||
|
import org.jfree.chart.plot.CategoryPlot; |
||||||
|
import org.jfree.chart.plot.PiePlot; |
||||||
|
import org.jfree.chart.renderer.category.BarRenderer; |
||||||
|
import org.jfree.chart.renderer.category.CategoryItemRenderer; |
||||||
|
import org.jfree.chart.renderer.category.LineAndShapeRenderer; |
||||||
|
import org.jfree.data.category.DefaultCategoryDataset; |
||||||
|
import org.jfree.data.general.DefaultPieDataset; |
||||||
|
|
||||||
|
import java.awt.*; |
||||||
|
import java.io.ByteArrayOutputStream; |
||||||
|
import java.io.File; |
||||||
|
import java.io.FileInputStream; |
||||||
|
import java.io.IOException; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
@Slf4j |
||||||
|
public class JFreeUtil { |
||||||
|
|
||||||
|
private static String tempImgPath = "D:\\tempJfree.jpeg"; |
||||||
|
private static String tempImgPath2 = "D:\\tempJfree2.jpeg"; |
||||||
|
|
||||||
|
/** |
||||||
|
* 将图片转化为字节数组 |
||||||
|
* |
||||||
|
* @return 字节数组 |
||||||
|
*/ |
||||||
|
private static byte[] imgToByte(String tempImgPath) { |
||||||
|
File file = new File(tempImgPath); |
||||||
|
byte[] buffer = null; |
||||||
|
try { |
||||||
|
FileInputStream fis = new FileInputStream(file); |
||||||
|
ByteArrayOutputStream bos = new ByteArrayOutputStream(1000); |
||||||
|
byte[] b = new byte[1000]; |
||||||
|
int n; |
||||||
|
while ((n = fis.read(b)) != -1) { |
||||||
|
bos.write(b, 0, n); |
||||||
|
} |
||||||
|
fis.close(); |
||||||
|
bos.close(); |
||||||
|
buffer = bos.toByteArray(); |
||||||
|
} catch (IOException e) { |
||||||
|
log.error(e.getMessage()); |
||||||
|
} |
||||||
|
//删除临时文件
|
||||||
|
file.delete(); |
||||||
|
return buffer; |
||||||
|
} |
||||||
|
|
||||||
|
public static ImageEntity pieChart(String title, Map<String, Integer> datas, int width, int height) { |
||||||
|
|
||||||
|
//创建主题样式
|
||||||
|
StandardChartTheme standardChartTheme = new StandardChartTheme("CN"); |
||||||
|
//设置标题字体
|
||||||
|
standardChartTheme.setExtraLargeFont(new Font("宋体", Font.BOLD, 20)); |
||||||
|
//设置图例的字体
|
||||||
|
standardChartTheme.setRegularFont(new Font("宋体", Font.PLAIN, 15)); |
||||||
|
//设置轴向的字体
|
||||||
|
standardChartTheme.setLargeFont(new Font("宋体", Font.PLAIN, 15)); |
||||||
|
//设置主题样式
|
||||||
|
ChartFactory.setChartTheme(standardChartTheme); |
||||||
|
|
||||||
|
//根据jfree生成一个本地饼状图
|
||||||
|
DefaultPieDataset pds = new DefaultPieDataset(); |
||||||
|
datas.forEach(pds::setValue); |
||||||
|
//图标标题、数据集合、是否显示图例标识、是否显示tooltips、是否支持超链接
|
||||||
|
JFreeChart chart = ChartFactory.createPieChart(title, pds, true, false, false); |
||||||
|
//设置抗锯齿
|
||||||
|
chart.setTextAntiAlias(false); |
||||||
|
PiePlot plot = (PiePlot) chart.getPlot(); |
||||||
|
plot.setNoDataMessage("暂无数据"); |
||||||
|
//忽略无值的分类
|
||||||
|
plot.setIgnoreNullValues(true); |
||||||
|
plot.setBackgroundAlpha(0f); |
||||||
|
//设置标签阴影颜色
|
||||||
|
plot.setShadowPaint(new Color(255, 255, 255)); |
||||||
|
//设置标签生成器(默认{0})
|
||||||
|
plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}({1})/{2}")); |
||||||
|
try { |
||||||
|
ChartUtils.saveChartAsJPEG(new File(tempImgPath), chart, width, height); |
||||||
|
} catch (IOException e1) { |
||||||
|
log.error("生成饼状图失败!"); |
||||||
|
} |
||||||
|
ImageEntity imageEntity = new ImageEntity(imgToByte(tempImgPath), width, height); |
||||||
|
Assert.notNull(imageEntity.getData(), "生成饼状图对象失败!"); |
||||||
|
return imageEntity; |
||||||
|
} |
||||||
|
// public static ImageEntity lineChart(String title, Map<String, Integer> datas, int width, int height) {
|
||||||
|
//
|
||||||
|
// //创建主题样式
|
||||||
|
// StandardChartTheme standardChartTheme = new StandardChartTheme("CN");
|
||||||
|
// //设置标题字体
|
||||||
|
// standardChartTheme.setExtraLargeFont(new Font("宋体", Font.BOLD, 20));
|
||||||
|
// //设置图例的字体
|
||||||
|
// standardChartTheme.setRegularFont(new Font("宋体", Font.PLAIN, 15));
|
||||||
|
// //设置轴向的字体
|
||||||
|
// standardChartTheme.setLargeFont(new Font("宋体", Font.PLAIN, 15));
|
||||||
|
// //设置主题样式
|
||||||
|
// ChartFactory.setChartTheme(standardChartTheme);
|
||||||
|
//
|
||||||
|
// //根据jfree生成一个本地饼状图
|
||||||
|
// DefaultPieDataset pds = new DefaultPieDataset();
|
||||||
|
// datas.forEach(pds::setValue);
|
||||||
|
// LineAndShapeRenderer pdsLine = new LineAndShapeRenderer();
|
||||||
|
// datas.forEach(pdsLine::setValue);
|
||||||
|
// //图标标题、数据集合、是否显示图例标识、是否显示tooltips、是否支持超链接
|
||||||
|
// JFreeChart chart = ChartFactory.createPieChart(title, pds, true, false, false);
|
||||||
|
// JFreeChart chart2 = ChartFactory.createLineChart(title, pdsLine, true, false, false);
|
||||||
|
// //设置抗锯齿
|
||||||
|
// chart.setTextAntiAlias(false);
|
||||||
|
// PiePlot plot = (PiePlot) chart.getPlot();
|
||||||
|
// plot.setNoDataMessage("暂无数据");
|
||||||
|
// //忽略无值的分类
|
||||||
|
// plot.setIgnoreNullValues(true);
|
||||||
|
// plot.setBackgroundAlpha(0f);
|
||||||
|
// //设置标签阴影颜色
|
||||||
|
// plot.setShadowPaint(new Color(255,255,255));
|
||||||
|
// //设置标签生成器(默认{0})
|
||||||
|
// plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}({1})/{2}"));
|
||||||
|
// try {
|
||||||
|
// ChartUtils.saveChartAsJPEG(new File(tempImgPath), chart, width, height);
|
||||||
|
// } catch (IOException e1) {
|
||||||
|
// log.error("生成饼状图失败!");
|
||||||
|
// }
|
||||||
|
// ImageEntity imageEntity = new ImageEntity(imgToByte(), width, height);
|
||||||
|
// Assert.notNull(imageEntity.getData(),"生成饼状图对象失败!");
|
||||||
|
// return imageEntity;
|
||||||
|
// }
|
||||||
|
|
||||||
|
public static ImageEntity lineChart( String title,String[] monthArray,double[] value,int width, int height) { |
||||||
|
// 创建数据
|
||||||
|
DefaultCategoryDataset dataset = new DefaultCategoryDataset(); |
||||||
|
dataset.addValue(1.0, "A", "Ⅰ"); |
||||||
|
dataset.addValue(3.0, "A", "Ⅱ"); |
||||||
|
dataset.addValue(5.0, "A", "Ⅲ"); |
||||||
|
dataset.addValue(5.0, "A", "Ⅳ"); |
||||||
|
dataset.addValue(5.0, "B", "Ⅰ"); |
||||||
|
dataset.addValue(6.0, "B", "Ⅱ"); |
||||||
|
dataset.addValue(10.0, "B", "Ⅲ"); |
||||||
|
dataset.addValue(4.0, "B", "Ⅳ"); |
||||||
|
|
||||||
|
// 创建CategoryPlot对象
|
||||||
|
CategoryPlot plot = new CategoryPlot(); |
||||||
|
|
||||||
|
// 添加第一个数据集并渲染为line
|
||||||
|
CategoryItemRenderer lineRenderer = new LineAndShapeRenderer(); |
||||||
|
plot.setDataset(0, dataset); |
||||||
|
plot.setRenderer(0, lineRenderer); |
||||||
|
|
||||||
|
// 添加第二个数据集并渲染为线条bar
|
||||||
|
CategoryItemRenderer baRenderer = new BarRenderer(); |
||||||
|
plot.setDataset(1, dataset); |
||||||
|
plot.setRenderer(1, baRenderer); |
||||||
|
|
||||||
|
// 设置坐标轴
|
||||||
|
plot.setDomainAxis(new CategoryAxis("Time")); |
||||||
|
plot.setRangeAxis(new NumberAxis("Value")); |
||||||
|
|
||||||
|
// 创建JFreeChart对象
|
||||||
|
JFreeChart chart = new JFreeChart(plot); |
||||||
|
|
||||||
|
try { |
||||||
|
ChartUtils.saveChartAsJPEG(new File(tempImgPath2), chart, width, height); |
||||||
|
} catch (IOException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
ImageEntity imageEntity = new ImageEntity(imgToByte(tempImgPath2), width, height); |
||||||
|
Assert.notNull(imageEntity.getData(),"生成饼状图对象失败!"); |
||||||
|
return imageEntity; |
||||||
|
} |
||||||
|
// public static ImageEntity lineChart( String title,String[] monthArray,double[] value,int width, int height) {
|
||||||
|
// //如果不使用Font,中文将显示不出来
|
||||||
|
// Font font = new Font("新宋体", Font.BOLD, 15);
|
||||||
|
// // 创建数据
|
||||||
|
// Map<String, Map<String, Double>> datas = new HashMap<String, Map<String, Double>>();
|
||||||
|
// for (int i = 0; i < monthArray.length; i++) {
|
||||||
|
// Map<String, Double> map = new HashMap<String, Double>();
|
||||||
|
// map.put("故障数量", value[i]);
|
||||||
|
// datas.put(monthArray[i], map);
|
||||||
|
// }
|
||||||
|
// JFreeChart chart = createLineChart(title, datas, "月份", "故障次数(次)", font);
|
||||||
|
// try {
|
||||||
|
// ChartUtils.saveChartAsJPEG(new File(tempImgPath), chart, 800, 600);
|
||||||
|
// } catch (IOException e) {
|
||||||
|
// e.printStackTrace();
|
||||||
|
// }
|
||||||
|
// ImageEntity imageEntity = new ImageEntity(imgToByte(), 800, 600);
|
||||||
|
// Assert.notNull(imageEntity.getData(),"生成饼状图对象失败!");
|
||||||
|
// return imageEntity;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public static JFreeChart createLineChart(String title, Map<String, Map<String, Double>> data, String type, String unit, Font font) {
|
||||||
|
// try {
|
||||||
|
// DefaultCategoryDataset ds = new DefaultCategoryDataset();
|
||||||
|
// Set<Map.Entry<String, Map<String, Double>>> set1 = data.entrySet();
|
||||||
|
// Iterator iterator1 = set1.iterator();
|
||||||
|
// Iterator iterator2;
|
||||||
|
// HashMap<String, Double> map;
|
||||||
|
// Set<Map.Entry<String, Double>> set2;
|
||||||
|
// Map.Entry entry1;
|
||||||
|
// Map.Entry entry2;
|
||||||
|
// while (iterator1.hasNext()) {
|
||||||
|
// entry1 = (Map.Entry) iterator1.next();
|
||||||
|
// map = (HashMap<String, Double>) entry1.getValue();
|
||||||
|
// set2 = map.entrySet();
|
||||||
|
// iterator2 = set2.iterator();
|
||||||
|
// while (iterator2.hasNext()) {
|
||||||
|
// entry2 = (Map.Entry) iterator2.next();
|
||||||
|
// ds.setValue(Double.parseDouble(entry2.getValue().toString()), entry2.getKey().toString(), entry1.getKey().toString());
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// //创建折线图,折线图分水平显示和垂直显示两种
|
||||||
|
// // //2D折线图
|
||||||
|
// JFreeChart chart = ChartFactory.createLineChart(title, type, unit, ds, PlotOrientation.VERTICAL, true, true, true);
|
||||||
|
// // //3D折线图
|
||||||
|
//// JFreeChart chart2 = ChartFactory.createLineChart3D(title, type, unit, ds, PlotOrientation.VERTICAL, true, true, false);
|
||||||
|
//
|
||||||
|
// //设置整个图片的标题字体
|
||||||
|
// chart.getTitle().setFont(font);
|
||||||
|
//
|
||||||
|
// //设置提示条字体
|
||||||
|
// font = new Font("宋体", Font.BOLD, 15);
|
||||||
|
// chart.getLegend().setItemFont(font);
|
||||||
|
//
|
||||||
|
// //得到绘图区
|
||||||
|
// CategoryPlot plot = (CategoryPlot) chart.getPlot();
|
||||||
|
// //得到绘图区的域轴(横轴),设置标签的字体
|
||||||
|
// plot.getDomainAxis().setLabelFont(font);
|
||||||
|
//
|
||||||
|
// // 设置背景透明度
|
||||||
|
// plot.setBackgroundAlpha(0.1f);
|
||||||
|
// // 设置网格横线颜色
|
||||||
|
// plot.setRangeGridlinePaint(Color.gray);
|
||||||
|
// // 设置网格横线大小
|
||||||
|
// plot.setDomainGridlineStroke(new BasicStroke(0.2F));
|
||||||
|
// plot.setRangeGridlineStroke(new BasicStroke(0.2F));
|
||||||
|
//
|
||||||
|
// //设置横轴标签项字体
|
||||||
|
// plot.getDomainAxis().setTickLabelFont(font);
|
||||||
|
//
|
||||||
|
// // 生成折线图上的数字
|
||||||
|
// //绘图区域(红色矩形框的部分)
|
||||||
|
// LineAndShapeRenderer lineAndShapeRenderer = (LineAndShapeRenderer) plot.getRenderer();
|
||||||
|
// lineAndShapeRenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
|
||||||
|
// //设置图表上的数字可见
|
||||||
|
// lineAndShapeRenderer.setBaseItemLabelsVisible(true);
|
||||||
|
// //设置图表上的数字字体
|
||||||
|
// lineAndShapeRenderer.setBaseItemLabelFont(new Font("宋体", Font.BOLD, 15));
|
||||||
|
//
|
||||||
|
// //设置折线图拐角上的正方形
|
||||||
|
// //创建一个正方形
|
||||||
|
// Rectangle shape = new Rectangle(4, 4);
|
||||||
|
// lineAndShapeRenderer.setSeriesShape(0, shape);
|
||||||
|
// //设置拐角上图形可见
|
||||||
|
// lineAndShapeRenderer.setSeriesShapesVisible(0, true);
|
||||||
|
//
|
||||||
|
// /*// 获取显示线条的对象
|
||||||
|
// LineAndShapeRenderer lasp = (LineAndShapeRenderer) plot.getRenderer();
|
||||||
|
// // 设置拐点是否可见/是否显示拐点
|
||||||
|
// lasp.setBaseShapesVisible(true);
|
||||||
|
// // 设置拐点不同用不同的形状
|
||||||
|
// lasp.setDrawOutlines(true);
|
||||||
|
// // 设置线条是否被显示填充颜色
|
||||||
|
// lasp.setUseFillPaint(true);
|
||||||
|
// // 设置拐点颜色
|
||||||
|
// lasp.setBaseFillPaint(Color.blue);//蓝色*/
|
||||||
|
// //设置范围轴(纵轴)字体
|
||||||
|
// font = new Font("宋体", Font.BOLD, 18);
|
||||||
|
// plot.getRangeAxis().setLabelFont(font);
|
||||||
|
//// plot.setForegroundAlpha(1.0f);
|
||||||
|
// return chart;
|
||||||
|
// } catch (Exception e) {
|
||||||
|
// e.printStackTrace();
|
||||||
|
// return null;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * 生成折线图
|
||||||
|
// * 1.解析数据<br>
|
||||||
|
// * 2.迭代数据,产出图片数据流,并添加到List<br>
|
||||||
|
// *
|
||||||
|
// * @throws IOException
|
||||||
|
// */
|
||||||
|
// public ArrayList createLineAndShapeChart(double[][] data, String[] rowKeys, String[] columnKeys, ChartEntity entity) throws IOException {
|
||||||
|
// ArrayList list = new ArrayList();
|
||||||
|
// byte[] bytes = new byte[]{};
|
||||||
|
// // 解析数据
|
||||||
|
// Map map = this.parseDataForBarPage(data, rowKeys, columnKeys);
|
||||||
|
// int pageNum = Integer.parseInt("" + map.get("pageNum"));
|
||||||
|
// // 迭代,产生图片数据流
|
||||||
|
// for (int i = 0; i < pageNum; i++) {
|
||||||
|
// bytes = createSingleLineAndShapeChart((double[][]) (map.get("data" + i)), (String[]) (map.get("rowKeys" + i)),
|
||||||
|
// (String[]) (map.get("columnKeys" + i)), entity);
|
||||||
|
// list.add(bytes);
|
||||||
|
// }
|
||||||
|
// return list;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * 生成单个折线图数据流
|
||||||
|
// *
|
||||||
|
// * @param data
|
||||||
|
// * @param rowKeys
|
||||||
|
// * @param columnKeys
|
||||||
|
// * @param entity
|
||||||
|
// * @return
|
||||||
|
// * @throws IOException
|
||||||
|
// */
|
||||||
|
// public byte[] createSingleLineAndShapeChart(double[][] data, String[] rowKeys, String[] columnKeys, ChartEntity entity) throws IOException {
|
||||||
|
// CategoryDataset dataset = getBarData(data, rowKeys, columnKeys);
|
||||||
|
// JFreeChart chart = createTimeXYChar(dataset, entity);
|
||||||
|
// byte[] bytes = this.createImage(chart, entity);
|
||||||
|
// return bytes;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * 生成柱状图<br>
|
||||||
|
// * 1.解析数据<br>
|
||||||
|
// * 2.迭代数据,产出图片数据流,并添加到List<br>
|
||||||
|
// *
|
||||||
|
// * @param data 数据
|
||||||
|
// * @param rowKeys 行
|
||||||
|
// * @param columnKeys 列
|
||||||
|
// * @param entity 图片配置对象
|
||||||
|
// * @return 包含多个图片数据流的List
|
||||||
|
// * @throws IOException
|
||||||
|
// */
|
||||||
|
// public ArrayList createStackedBarChart(double[][] data, String[] rowKeys, String[] columnKeys, ChartEntity entity) throws IOException {
|
||||||
|
// // 解析数据
|
||||||
|
// ArrayList list = new ArrayList();
|
||||||
|
// byte[] bytes = new byte[]{};
|
||||||
|
// Map map = this.parseDataForBarPage(data, rowKeys, columnKeys);
|
||||||
|
// int pageNum = Integer.parseInt("" + map.get("pageNum"));
|
||||||
|
// // 迭代数据,产出图片数据流,并添加到List
|
||||||
|
// for (int i = 0; i < pageNum; i++) {
|
||||||
|
// bytes = createSingleStackedBarChart((double[][]) (map.get("data" + i)), (String[]) (map.get("rowKeys" + i)),
|
||||||
|
// (String[]) (map.get("columnKeys" + i)), entity);
|
||||||
|
// list.add(bytes);
|
||||||
|
// }
|
||||||
|
// return list;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * 解析生成柱状图分页数据
|
||||||
|
// *
|
||||||
|
// * @param data
|
||||||
|
// * @param rowKeys
|
||||||
|
// * @param columnKeys
|
||||||
|
// * @return
|
||||||
|
// */
|
||||||
|
// private Map parseDataForBarPage(double[][] data, String[] rowKeys, String[] columnKeys) {
|
||||||
|
// Map map = new HashMap();
|
||||||
|
//
|
||||||
|
// double[][] pageData = null;
|
||||||
|
// String[] pageColumn = null;
|
||||||
|
//
|
||||||
|
// int sumColumnNum = columnKeys.length; // 总列数
|
||||||
|
// int indexNum = Config.getInt("image.export.pagesize", 10);// 分页的列数
|
||||||
|
// int pageNum = sumColumnNum % indexNum == 0 ? sumColumnNum / indexNum : sumColumnNum / indexNum + 1; // 分页数
|
||||||
|
// int rowNum = rowKeys.length;
|
||||||
|
//
|
||||||
|
// // log.debug("data.length="+data.length+"sumColumnNum="+sumColumnNum+" indexNum="+indexNum+" pageNum="+pageNum+" rowNum="+rowNum+" ");
|
||||||
|
//
|
||||||
|
// // 解析传递过来的数据
|
||||||
|
// for (int i = 0; i < pageNum; i++) {
|
||||||
|
// int columnNum = (sumColumnNum - i * indexNum) / indexNum > 0 ? indexNum : (sumColumnNum - i * indexNum) % indexNum;//当前页列数
|
||||||
|
// pageData = new double[rowNum][columnNum];
|
||||||
|
// // 取数据值
|
||||||
|
// for (int j = 0; j < rowNum; j++) {
|
||||||
|
// pageColumn = new String[columnNum];
|
||||||
|
// for (int k = 0; k < columnNum; k++) {
|
||||||
|
// pageData[j][k] = data[j][k + i * indexNum]; // 数据
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// // 取列值
|
||||||
|
// for (int j = 0; j < columnNum; j++) {
|
||||||
|
// pageColumn[j] = columnKeys[j + i * indexNum]; // 列
|
||||||
|
// }
|
||||||
|
// // 保存数据并返回
|
||||||
|
// map.put("data" + i, pageData);
|
||||||
|
// map.put("rowKeys" + i, rowKeys);
|
||||||
|
// map.put("columnKeys" + i, pageColumn);
|
||||||
|
// }
|
||||||
|
// // 保存分页数
|
||||||
|
// map.put("pageNum", pageNum);
|
||||||
|
// return map;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * 解析生成折线图分页数据
|
||||||
|
// *
|
||||||
|
// * @param data
|
||||||
|
// * @param rowKeys
|
||||||
|
// * @param columnKeys
|
||||||
|
// * @return
|
||||||
|
// */
|
||||||
|
// private Map parseDataForLinePage(double[][] data, String[] rowKeys, String[] columnKeys) {
|
||||||
|
// Map map = new HashMap();
|
||||||
|
//
|
||||||
|
// double[][] pageData = null;
|
||||||
|
// String[] pageColumn = null;
|
||||||
|
//
|
||||||
|
// int sumColumnNum = columnKeys.length; // 总列数
|
||||||
|
// int indexNum = Config.getInt("image.export.pagesize", 10);// 分页的列数
|
||||||
|
// int pageNum = sumColumnNum % indexNum == 0 ? sumColumnNum / indexNum : sumColumnNum / indexNum + 1; // 分页数
|
||||||
|
// int rowNum = rowKeys.length;
|
||||||
|
//
|
||||||
|
// // log.debug("data.length="+data.length+"sumColumnNum="+sumColumnNum+" indexNum="+indexNum+" pageNum="+pageNum+" rowNum="+rowNum+" ");
|
||||||
|
//
|
||||||
|
// // 解析传递过来的数据
|
||||||
|
// for (int i = 0; i < pageNum; i++) {
|
||||||
|
// int columnNum = (sumColumnNum - i * indexNum) / indexNum > 0 ? indexNum : (sumColumnNum - i * indexNum) % indexNum;//当前页列数
|
||||||
|
// pageData = new double[rowNum][columnNum];
|
||||||
|
// // 取数据值
|
||||||
|
// for (int j = 0; j < rowNum; j++) {
|
||||||
|
// pageColumn = new String[columnNum];
|
||||||
|
// for (int k = 0; k < columnNum; k++) {
|
||||||
|
// pageData[j][k] = data[j][k + i * indexNum]; // 数据
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// // 取列值
|
||||||
|
// for (int j = 0; j < columnNum; j++) {
|
||||||
|
// pageColumn[j] = columnKeys[j + i * indexNum]; // 列
|
||||||
|
// }
|
||||||
|
// // 保存数据并返回
|
||||||
|
// map.put("data" + i, pageData);
|
||||||
|
// map.put("rowKeys" + i, rowKeys);
|
||||||
|
// map.put("columnKeys" + i, pageColumn);
|
||||||
|
// }
|
||||||
|
// // 保存分页数
|
||||||
|
// map.put("pageNum", pageNum);
|
||||||
|
// return map;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * 生成单个堆栈柱状图
|
||||||
|
// *
|
||||||
|
// * @return 图片数据流
|
||||||
|
// * @throws IOException
|
||||||
|
// */
|
||||||
|
// public byte[] createSingleStackedBarChart(double[][] data, String[] rowKeys, String[] columnKeys, ChartEntity entity) throws IOException {
|
||||||
|
// CategoryDataset dataset = getBarData(data, rowKeys, columnKeys);
|
||||||
|
// JFreeChart chart = createStackedBarChart(dataset, entity);
|
||||||
|
// byte[] bytes = this.createImage(chart, entity);
|
||||||
|
// return bytes;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // 柱状图,折线图 数据集
|
||||||
|
// private CategoryDataset getBarData(double[][] data, String[] rowKeys,
|
||||||
|
// String[] columnKeys) {
|
||||||
|
// return DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * 判断文件夹是否存在,如果不存在则新建
|
||||||
|
// *
|
||||||
|
// * @param chartPath
|
||||||
|
// */
|
||||||
|
// private void isChartPathExist(String chartPath) {
|
||||||
|
// File file = new File(chartPath);
|
||||||
|
// if (!file.exists()) {
|
||||||
|
// file.mkdirs();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * 折线图
|
||||||
|
// */
|
||||||
|
// private JFreeChart createTimeXYChar(CategoryDataset xyDataset, ChartEntity entity) {
|
||||||
|
//
|
||||||
|
// JFreeChart chart = ChartFactory.createLineChart(
|
||||||
|
// entity.getTitle(),
|
||||||
|
// entity.getXname(),
|
||||||
|
// entity.getYname(),
|
||||||
|
// xyDataset,
|
||||||
|
// PlotOrientation.VERTICAL,
|
||||||
|
// true,
|
||||||
|
// true,
|
||||||
|
// false);
|
||||||
|
//
|
||||||
|
// chart.setTextAntiAlias(false);
|
||||||
|
// chart.setBackgroundPaint(Color.WHITE);
|
||||||
|
//
|
||||||
|
// CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();
|
||||||
|
// // 没有数据时显示
|
||||||
|
// this.configNoData(chart, "没有查询到数据 !");
|
||||||
|
//
|
||||||
|
// // x轴 // 分类轴网格是否可见
|
||||||
|
// categoryplot.setDomainGridlinesVisible(true);
|
||||||
|
// // y轴 //数据轴网格是否可见
|
||||||
|
// categoryplot.setRangeGridlinesVisible(true);
|
||||||
|
//
|
||||||
|
// categoryplot.setRangeGridlinePaint(Color.WHITE);// 虚线色彩
|
||||||
|
//
|
||||||
|
// categoryplot.setDomainGridlinePaint(Color.WHITE);// 虚线色彩
|
||||||
|
//
|
||||||
|
// categoryplot.setBackgroundPaint(Color.lightGray);
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// // 配置字体
|
||||||
|
// this.configFont(chart);
|
||||||
|
//
|
||||||
|
// // x轴设置
|
||||||
|
// CategoryAxis domainAxis = categoryplot.getDomainAxis();
|
||||||
|
//
|
||||||
|
// // 设置距离图片左端距离
|
||||||
|
// domainAxis.setLowerMargin(0.0);
|
||||||
|
// // 设置距离图片右端距离
|
||||||
|
// domainAxis.setUpperMargin(0.0);
|
||||||
|
// domainAxis.setTickLabelPaint(Color.BLUE);
|
||||||
|
// domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); // 横轴上的label斜显示
|
||||||
|
//
|
||||||
|
// NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();
|
||||||
|
// numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
|
||||||
|
// numberaxis.setAutoRangeIncludesZero(true);
|
||||||
|
//
|
||||||
|
// // 获得renderer 注意这里是下嗍造型到lineandshaperenderer!!
|
||||||
|
// LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer) categoryplot.getRenderer();
|
||||||
|
// lineandshaperenderer.setBaseShapesVisible(true); // series 点(即数据点)可见
|
||||||
|
// lineandshaperenderer.setBaseLinesVisible(true); // series 点(即数据点)间有连线可见
|
||||||
|
//
|
||||||
|
// // 显示折点数据
|
||||||
|
// lineandshaperenderer.setBaseItemLabelGenerator(new
|
||||||
|
// StandardCategoryItemLabelGenerator());
|
||||||
|
// lineandshaperenderer.setBaseItemLabelsVisible(true);
|
||||||
|
//
|
||||||
|
// return chart;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * 堆栈柱状图
|
||||||
|
// */
|
||||||
|
// private JFreeChart createStackedBarChart(CategoryDataset dataset, ChartEntity entity) {
|
||||||
|
//
|
||||||
|
// JFreeChart chart = ChartFactory.createStackedBarChart3D(
|
||||||
|
// entity.getTitle(),
|
||||||
|
// entity.getXname(),
|
||||||
|
// entity.getYname(),
|
||||||
|
// dataset,
|
||||||
|
// PlotOrientation.VERTICAL,
|
||||||
|
// true,
|
||||||
|
// false,
|
||||||
|
// false);
|
||||||
|
//
|
||||||
|
// // 没有数据配置
|
||||||
|
// this.configNoData(chart, "没有查询到数据 !");
|
||||||
|
//
|
||||||
|
// // 配置字体
|
||||||
|
// this.configFont(chart);
|
||||||
|
//
|
||||||
|
// // 配置 Renderer
|
||||||
|
// this.configBarRenderer(chart);
|
||||||
|
//
|
||||||
|
// // 其他配置
|
||||||
|
// this.configOtherForBar(chart);
|
||||||
|
//
|
||||||
|
// return chart;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * 配置字体
|
||||||
|
// *
|
||||||
|
// * @param chart JFreeChart 对象
|
||||||
|
// */
|
||||||
|
// private void configFont(JFreeChart chart) {
|
||||||
|
// // 配置字体
|
||||||
|
// Font xfont = new Font("宋体", Font.PLAIN, 12);// X轴
|
||||||
|
// Font yfont = new Font("宋体", Font.PLAIN, 12);// Y轴
|
||||||
|
// Font kfont = new Font("宋体", Font.PLAIN, 12);// 底部
|
||||||
|
// Font titleFont = new Font("隶书", Font.BOLD, 25); // 图片标题
|
||||||
|
// CategoryPlot plot = chart.getCategoryPlot();// 图形的绘制结构对象
|
||||||
|
//
|
||||||
|
// // 图片标题
|
||||||
|
// chart.setTitle(new TextTitle(chart.getTitle().getText(), titleFont));
|
||||||
|
//
|
||||||
|
// // 底部
|
||||||
|
// chart.getLegend().setItemFont(kfont);
|
||||||
|
//
|
||||||
|
// // X 轴
|
||||||
|
// CategoryAxis domainAxis = plot.getDomainAxis();
|
||||||
|
// domainAxis.setLabelFont(xfont);// 轴标题
|
||||||
|
// domainAxis.setTickLabelFont(xfont);// 轴数值
|
||||||
|
// domainAxis.setTickLabelPaint(Color.BLUE); // 字体颜色
|
||||||
|
// domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); // 横轴上的label斜显示
|
||||||
|
//
|
||||||
|
// // Y 轴
|
||||||
|
// ValueAxis rangeAxis = plot.getRangeAxis();
|
||||||
|
// rangeAxis.setLabelFont(yfont);
|
||||||
|
// rangeAxis.setLabelPaint(Color.BLUE); // 字体颜色
|
||||||
|
// rangeAxis.setTickLabelFont(yfont);
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * 配置柱状图
|
||||||
|
// *
|
||||||
|
// * @param chart
|
||||||
|
// */
|
||||||
|
// private void configBarRenderer(JFreeChart chart) {
|
||||||
|
//
|
||||||
|
// CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();
|
||||||
|
// // 自定义显示柱子上的总值
|
||||||
|
// ExtendedStackedBarRenderer extendedstackedbarrenderer = new ExtendedStackedBarRenderer();
|
||||||
|
// extendedstackedbarrenderer.setBaseItemLabelsVisible(true);
|
||||||
|
// extendedstackedbarrenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
|
||||||
|
// extendedstackedbarrenderer.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator());
|
||||||
|
// categoryplot.setRenderer(extendedstackedbarrenderer);
|
||||||
|
//
|
||||||
|
// BarRenderer barrenderer = (BarRenderer) categoryplot.getRenderer();
|
||||||
|
// barrenderer.setDrawBarOutline(false);
|
||||||
|
// barrenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
|
||||||
|
// barrenderer.setBaseItemLabelsVisible(true);
|
||||||
|
// barrenderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.CENTER, TextAnchor.CENTER));
|
||||||
|
// barrenderer.setBaseNegativeItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.CENTER, TextAnchor.CENTER));
|
||||||
|
//
|
||||||
|
// // 柱子显示数值
|
||||||
|
// // barrenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator("{2}",new DecimalFormat("0.0%")));
|
||||||
|
// // barrenderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
|
||||||
|
// barrenderer.setItemLabelFont(new Font("Arial Unicode MS", Font.PLAIN, 9));
|
||||||
|
// barrenderer.setItemLabelsVisible(true);
|
||||||
|
//
|
||||||
|
// // 如果数值没有显示空间,设置显示格式
|
||||||
|
// // ItemLabelPosition itemLabelPositionFallback=new ItemLabelPosition(
|
||||||
|
// // ItemLabelAnchor.OUTSIDE12,TextAnchor.BASELINE_LEFT,
|
||||||
|
// // TextAnchor.HALF_ASCENT_LEFT,0D);
|
||||||
|
// // barrenderer.setPositiveItemLabelPositionFallback(itemLabelPositionFallback);
|
||||||
|
// // barrenderer.setNegativeItemLabelPositionFallback(itemLabelPositionFallback);
|
||||||
|
//
|
||||||
|
// categoryplot.setRenderer(barrenderer);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * 配置没有数据时的显示信息
|
||||||
|
// *
|
||||||
|
// * @param chart
|
||||||
|
// */
|
||||||
|
// private void configNoData(JFreeChart chart, String message) {
|
||||||
|
// CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();
|
||||||
|
// // 没有数据时的显示
|
||||||
|
// categoryplot.setNoDataMessage(message);
|
||||||
|
// categoryplot.setNoDataMessageFont(new Font("黑体", Font.BOLD, 25));
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * 其他配置
|
||||||
|
// *
|
||||||
|
// * @param chart
|
||||||
|
// */
|
||||||
|
// private void configOtherForBar(JFreeChart chart) {
|
||||||
|
//
|
||||||
|
// chart.setTextAntiAlias(false); // 图例字体清晰
|
||||||
|
//
|
||||||
|
// chart.setBackgroundPaint(Color.WHITE); // 背景颜色
|
||||||
|
//
|
||||||
|
// CategoryPlot plot = chart.getCategoryPlot();// 图形的绘制结构对象
|
||||||
|
// NumberAxis numberaxis = (NumberAxis) plot.getRangeAxis();
|
||||||
|
// numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
|
||||||
|
// numberaxis.setAutoRangeIncludesZero(true);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * 创建图片的数据流
|
||||||
|
// *
|
||||||
|
// * @param chart
|
||||||
|
// * @param entity 图片配置对象
|
||||||
|
// * @return 图片数据流
|
||||||
|
// * @throws IOException
|
||||||
|
// */
|
||||||
|
// private byte[] createImage(JFreeChart chart, ChartEntity entity) throws IOException {
|
||||||
|
// return ChartUtilities.encodeAsPNG(chart.createBufferedImage(entity.getWidth(), entity.getHeight()));
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * 创建图片文件到硬盘
|
||||||
|
// *
|
||||||
|
// * @param chart
|
||||||
|
// * @param entity
|
||||||
|
// * @throws IOException
|
||||||
|
// */
|
||||||
|
// private void createImageFile(JFreeChart chart, ChartEntity entity) throws IOException {
|
||||||
|
// FileOutputStream fos_jpg = null;
|
||||||
|
// try {
|
||||||
|
// isChartPathExist(tempImgPath);
|
||||||
|
// String chartName = tempImgPath + entity.getFileName();
|
||||||
|
// fos_jpg = new FileOutputStream(chartName);
|
||||||
|
// ChartUtilities.writeChartAsJPEG(fos_jpg, chart, entity.getWidth(), entity.getHeight());
|
||||||
|
// } catch (Exception e) {
|
||||||
|
// e.printStackTrace();
|
||||||
|
// } finally {
|
||||||
|
// try {
|
||||||
|
// fos_jpg.close();
|
||||||
|
// } catch (Exception e) {
|
||||||
|
// e.printStackTrace();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
} |
Loading…
Reference in new issue