package com.hjp.shop.controller;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardChartTheme;
import org.jfree.chart.labels.StandardPieToolTipGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import com.hjp.shop.model.Product;
import com.hjp.shop.model.Salesitem;
import com.jfinal.core.Controller;
import com.jfinal.kit.PathKit;
public class ReportController extends Controller {
public void chart(){
//步骤1:创建CategoryDataset对象(准备数据)
CategoryDataset dataset = createDataset();
DefaultPieDataset pieDataset = createPieDataset();
//步骤2:根据Dataset 生成JFreeChart对象,以及做相应的设置
JFreeChart freeChart = createChart(dataset);
JFreeChart freeChart2 = createPieChart(pieDataset);
//步骤3:将JFreeChart对象输出到文件,Servlet输出流等
String path = PathKit.getWebRootPath();
String path1 =path + "\\img\\report\\rep.png";
String path2 =path + "\\img\\report\\pie.png";
saveAsFile(freeChart, path1, 600, 400);
saveAsFile(freeChart2, path2, 500, 400);
render("report.html");
}
//保存为文件
public static void saveAsFile(JFreeChart chart, String outputPath, int weight, int height) {
FileOutputStream out = null;
try {
File outFile = new File(outputPath);
if (!outFile.getParentFile().exists()) {
outFile.getParentFile().mkdirs();
}
out = new FileOutputStream(outputPath);
//保存为PNG文件
ChartUtilities.writeChartAsPNG(out, chart, weight, height);
//保存为JPEG文件
//ChartUtilities.writeChartAsJPEG(out, chart, 500, 400);
out.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//根据CategoryDataset生成JFreeChart对象
public static JFreeChart createChart(CategoryDataset categoryDataset) {
//创建主题样式
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);
JFreeChart jfreechart = ChartFactory.createBarChart("产品销量图", //标题
"产品", //categoryAxisLabel (category轴,横轴,X轴的标签)
"数量", //valueAxisLabel(value轴,纵轴,Y轴的标签)
categoryDataset, // dataset
PlotOrientation.VERTICAL,
true, // legend
false, // tooltips
false); // URLs
//以下的设置可以由用户定制,也可以省略
CategoryPlot plot = (CategoryPlot) jfreechart.getPlot();
//背景色 透明度
plot.setBackgroundAlpha(0.5f);
//前景色 透明度
plot.setForegroundAlpha(0.5f);
//其它设置可以参考 CategoryPlot
return jfreechart;
}
/**
* 创建CategoryDataset对象
*
*/
public static CategoryDataset createDataset() {
List<Salesitem> items = Salesitem.dao.getAllItem();
DefaultCategoryDataset categoryDataset = new DefaultCategoryDataset();
for (Salesitem salesitem : items) {
String name = Product.dao.findById(salesitem.getInt("productid")).getStr("name");
categoryDataset.addValue(salesitem.getNumber("count"), "", name);
}
return categoryDataset;
}
public static DefaultPieDataset createPieDataset() {
List<Salesitem> items = Salesitem.dao.getAllItem();
DefaultPieDataset dfp = new DefaultPieDataset();
for (Salesitem salesitem : items) {
String name = Product.dao.findById(salesitem.getInt("productid")).getStr("name");
dfp.setValue(name,salesitem.getNumber("count"));
}
return dfp;
}
public static JFreeChart createPieChart(DefaultPieDataset dfp){
//创建主题样式
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);
JFreeChart chart = ChartFactory.createPieChart3D("产品销量饼图",dfp, true, true, true);
PiePlot3D plot = (PiePlot3D) chart.getPlot();
// 图形边框颜色
plot.setBaseSectionOutlinePaint(Color.RED);
// plot.setBaseSectionPaint(Color.WHITE);
// 图形边框粗细
plot.setBaseSectionOutlineStroke(new BasicStroke(1.0f));
// 指定图片的透明度(0.0-1.0)
plot.setForegroundAlpha(0.65f);
// 指定显示的饼图上圆形(false)还椭圆形(true)
plot.setCircular(true);
// 设置第一个 饼块section 的开始位置,默认是12点钟方向
plot.setStartAngle(360);
// 设置鼠标悬停提示
plot.setToolTipGenerator(new StandardPieToolTipGenerator());
return chart;
}
}
不会倒的鸡蛋
- 粉丝: 1615
- 资源: 307
最新资源
- 电路分析基础 实验五 RLC串联谐振的multisim仿真
- 2个月涨粉8w,新玩法AI做漫画小说赛道,操作简单可批量制作,新手小白....mp4
- 高分辨率下的遥感目标分割
- 网络攻防原理与技术-实验8资料.7z
- 电机控制器,永磁同步电机调速控制软件工程PMSM,该工程主要基于DSP28335硬件控制平台,两电平IPM模块主回路,通过位置传感器,速度传感器实时检测位置和速度信号,电流传感器采集电流信号,控制器控
- 24年快手无人直播暴利变现3.0,直播间人气轻松破千上热门,普通人也能....mp4
- 2024年9月28日支付宝分成最新搬运玩法.mp4
- 西门子1200PLC模板通讯程序 modbus 包含多种通讯Modbus-RTU(485),S7通讯,Modbus-TCP,TCP IP等,博途V16及较新版本可打开,简单明了,初学者也能明白
- ICED Smart 网站部署教程文件
- 2024淘宝暴力掘金 单机500+.mp4
- 2024年最新暴力起店玩法,拼多多虚拟电商4.0,24小时实现成交,单人可以...mp4
- 2024影视解说最新玩法,AI一键生成原创影视解说, 十秒钟制作成品,解....mp4
- 2024掌握拼多多运营精髓:爆款流程、定价技巧与SKU设计实战课.mp4
- 房屋租赁推荐系统 房租租赁系统 基于协同过滤的房屋租赁推荐系统 特色功能:协同过滤推荐 对于房租租赁,结合实际场景选择用户对房子的浏览次数作为数据集,体现用户喜好度,应用余弦相似度,实现基于用户协同过
- X6程序模块 AE-10D00.GDL
- AspSweb网页服务器1.0.0.93
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈