//折线图
@RequestMapping(value = "/rankTable")
public void rankTable(HttpServletRequest request,HttpServletResponse response,String taskName){
PrintWriter out =null;
List<Map<String, Object>> ranks = siteUrlService.getAllRank();
// 使用普通数据集
try {
out =response.getWriter();
//获取数据对象
DefaultCategoryDataset cd = new DefaultCategoryDataset();
for(int i=0;i<ranks.size();i++){
Map<String, Object> rk = ranks.get(i);
//System.out.println(rk.get("create_date")+" \t"+rk.get("rank"));
cd.addValue(Integer.valueOf(rk.get("rank").toString()), "排名榜", rk.get("create_date").toString());
}
//创建图形对象
JFreeChart jfc = ChartFactory.createLineChart(taskName, null, "排行量", cd, PlotOrientation.VERTICAL, true, false, false);
//设置图例的字体显示,防止中文乱码
jfc.getLegend().setItemFont(new Font("黑体", 0, 10));
//设置标题并且设置其字体,防止中文乱码
TextTitle textTitle = new TextTitle(taskName);
textTitle.setFont(new Font("宋体", Font.BOLD, 12));
jfc.setTitle(textTitle);
//设置图表子标题
jfc.addSubtitle(new TextTitle(" 按天份"));
//创建一个标题对象,用于放置产生图形日前
TextTitle tt = new TextTitle("日期:"+DateUtil.Sysdate()+" ");
//设置该标题的字体,防止中文乱码
tt.setFont(new Font("黑体", 0, 10));
//设置该标题的位置为产生的图形下面
tt.setPosition(RectangleEdge.BOTTOM);
//设置图片为右对齐
tt.setHorizontalAlignment(HorizontalAlignment.RIGHT);
//将该标题添加到图表
jfc.addSubtitle(tt);
//设置整个图表的背景色为绿色
jfc.setBackgroundPaint(Color.green);
//获取图表区域对象
CategoryPlot cp = jfc.getCategoryPlot();
//设置图表区域背景色
cp.setBackgroundPaint(Color.white);
//设置边线不可见
cp.setRangeGridlinesVisible(false);
//设置横轴的字体,防止中文乱码
cp.getDomainAxis().setTickLabelFont(new Font("黑体", 0, 10));
//设置竖轴的字体,防止中文乱码
cp.getRangeAxis().setLabelFont(new Font("黑体", 0, 10));
//获取显示线条的对象
LineAndShapeRenderer lasp = (LineAndShapeRenderer)cp.getRenderer();
//设置拐点是否可见/是否显示拐点
lasp.setBaseShapesVisible(true);
//设置拐点不同用不同的形状
lasp.setDrawOutlines(true);
//设置线条是否被显示填充颜色
lasp.setUseFillPaint(true);
//设置拐点颜色
lasp.setBaseFillPaint(Color.yellow);
// 设置折线加粗
lasp.setSeriesStroke(0, new BasicStroke(3F));
lasp.setSeriesOutlineStroke(0, new BasicStroke(2.0F));
// 设置折线拐点
lasp.setSeriesShape(0,new java.awt.geom.Ellipse2D.Double(-5D, -5D, 10D, 10D));
// 将图表已数据流的方式返回给客户端
// ChartUtilities.writeChartAsPNG(response.getOutputStream(), jfc,500, 270);
/* 生成文件 */
File file =new File(request.getSession().getServletContext().getRealPath("/uploads")+ "/"+"allsum.png");
if(file.exists())
file.delete();
OutputStream os = new FileOutputStream(request.getSession().getServletContext().getRealPath("/uploads")+ "/"+"allsum.png");
ChartUtilities.writeChartAsJPEG(os, jfc, 1024, 300);
os.flush();
os.close();
out.write("true");
} catch (Exception e) {
out.write("false");
}
finally{
if(out!=null){
out.close();
}
}
}
//柱形图
@RequestMapping(value = "/rankTable")
public void rankTable(String taskName,Integer taskId,HttpServletRequest request,HttpServletResponse response){
PrintWriter out =null;
List<Map<String, Object>> ranks = siteUrlService.getAllRank(taskId);
// 使用普通数据集
try {
out =response.getWriter();
DefaultCategoryDataset chartDate = new DefaultCategoryDataset();
for(int i=0;i<ranks.size();i++){
Map<String, Object> rk = ranks.get(i);
//System.out.println(rk.get("create_date")+" \t"+rk.get("rank"));
chartDate.setValue(Integer.valueOf(rk.get("rank").toString()), "排名榜", rk.get("create_date").toString());
}
DefaultCategoryDataset data = chartDate;
JFreeChart chart = ChartFactory.createBarChart3D(
"任务排行榜", // 图表标题
"月份", // 目录轴的显示标签
taskName, // 数值轴的显示标签
data, // 数据集
PlotOrientation.VERTICAL, // 图表方向,此处为垂直方向
true, // 是否显示图例
true, // 是否生成工具
false // 是否生成URL链接
);
Font kfont = new Font("宋体", Font.PLAIN, 12); // 底部
Font titleFont = new Font("宋体", Font.BOLD, 25); // 图片标题
// 图片标题
chart.setTitle(new TextTitle(chart.getTitle().getText(), titleFont));
// 底部
chart.getLegend().setItemFont(kfont);
//** 得到坐标设置字体解决乱码
CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();
/* 设置 X轴坐标上的文字 X轴的标题文字 */
CategoryAxis domainAxis = categoryplot.getDomainAxis();
domainAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 11));
domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));
/* 设置 Y轴坐标上的文字 Y轴的标题文字 */
ValueAxis rangeAxis = categoryplot.getRangeAxis();
rangeAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 12));
rangeAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));
/* 设置柱状图上面显示真实数据 */
BarRenderer3D renderer = (BarRenderer3D) categoryplot.getRenderer();
ItemLabelPosition itemLabelPositionFallback = new ItemLabelPosition(
ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_CENTER,
TextAnchor.TOP_CENTER, 0D);
renderer.setPositiveItemLabelPositionFallback(itemLabelPositionFallback);
renderer.setNegativeItemLabelPositionFallback(itemLabelPositionFallback);
renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setItemLabelFont(new Font("宋体", Font.PLAIN, 12));
renderer.setItemLabelsVisible(true);
categoryplot.setRenderer(renderer);
/* 生成文件 */
OutputStream os = new FileOutputStream(request.getSession().getServletContext().getRealPath("/uploads")+ "/"+"allsum.png");
ChartUtilities.writeChartAsJPEG(os, chart, 450, 230);
System.out.println(request.getSession().getServletContext().getRealPath("/uploads")+ "/"+"allsum.png");
os.close();
out.write("true");
} catch (Exception e) {
//e.printStackTrace();
out.write("false");
}
finally{
if(out!=null){
out.close();
}
}
}