按区域统计采购金额 jfreechart 图表显示
2015-12-16 15:05
357 查看
1.1 需求
根据查询条件,按区域统计采购金额
1.2 实现
1.2.1 dao
根据查询条件,获取jfreechart的dataset所需要的统计数据。
Sql:
统计数据的原始数据,是交易明细列表。
1.2.2 service
Action
页面
1.3 小结
使用jfreechart进行统计图形生成:
第一步:了解统计需求,获取统计数据
第二步:使用jfreechart生成统计图形
1、 定义dataset
将第一步获取的统计数据填充到dataset中
2、 定义chart(根据图形的类型调用不同的api(常用的:柱状图、饼图、折线图))
注意:设置字体,否则 会出现中文乱码
如果需要修改图形的布局,可以通过CategoryPlot plot = chart.getCategoryPlot();来操作
3、 输出图形
a) 使用response直接输出(输出的图片)
b) 使用jfreechart的servlet输出图形(常用)
根据查询条件,按区域统计采购金额
1.2 实现
1.2.1 dao
根据查询条件,获取jfreechart的dataset所需要的统计数据。
Sql:
统计数据的原始数据,是交易明细列表。
select yybusiness.areaname, sum(yybusiness.cgje) cgje from (select yybusiness.*, (select bss_sys_area.areaname from bss_sys_area where areaid = yybusiness.parentid) areaname from (select yybusiness.*, (select parentid from bss_sys_area where areaid = yybusiness.useryydq) parentid from (select yybusiness.useryyid, (select dq from useryy where id = yybusiness.useryyid) useryydq, yybusiness.cgje from ( select useryy.id useryyid, useryy.mc useryymc, yycgd.bm yycgdbm, yycgd.id yycgdid, usergys.id usergysid, usergys.mc usergysmc, yycgdmx.ypxxid, ypxx.id, ypxx.bm, ypxx.mc, ypxx.jx, ypxx.gg, ypxx.zhxs, ypxx.scqymc, ypxx.spmc, ypxx.jyzt, (select info from dictinfo where ypxx.jyzt = dictcode and typecode = '003') jyztmc, (select info from dictinfo where typecode = '011' and dictcode = yycgdmx.cgzt) cgztmc, yycgdmx.cgl, yycgdmx.cgje, yycgdmx.rkl, yycgdmx.rkje, yycgdmx.thl, yycgdmx.thje, yycgdmx.jsl, yycgdmx.jsje from yybusiness2015 yycgdmx, yycgd2015 yycgd, useryy, usergys, ypxx where yycgdmx.yycgdid = yycgd.id and yycgd.useryyid = useryy.id and yycgdmx.usergysid = usergys.id and yycgdmx.ypxxid = ypxx.id ) yybusiness) yybusiness) yybusiness) yybusiness group by yybusiness.areaname //区域采购金额统计查询列表 图表显示用 public List<YycgdmxCustom> findYybusinessGroupByAearList( YycgdQueryVo yycgdQueryVo) throws Exception;
1.2.2 service
// 区域采购金额统计查询列表 图表显示用 @Override public List<YycgdmxCustom> findYybusinessGroupByAearList(String year, String sysid, String groupid, YycgdQueryVo yycgdQueryVo) throws Exception { YycgdQueryVo yycgdQueryVo_query = query_findYybusiness(year, sysid, groupid, yycgdQueryVo); return yybusinessMapperCustom .findYybusinessGroupByAearList(yycgdQueryVo_query); }
Action
// 按区域查询 图标显示 @RequestMapping("/groupbyarea") public String groupbyarea(Model model, HttpSession httpSession, String year, ActiveUser activeUser, YycgdQueryVo yycgdQueryVo) throws Exception { if (year == null) { year = MyUtil.get_YYYY(MyUtil.getDate()); } // 单位id String sysid = activeUser.getSysid(); // 用户类型 String groupid = activeUser.getGroupid(); // 调用service查询数据 List<YycgdmxCustom> list = businessService .findYybusinessGroupByAearList(year, sysid, groupid, yycgdQueryVo); // jfreechart定义 DefaultCategoryDataset dataset = new DefaultCategoryDataset(); for (YycgdmxCustom yycgdmxCustom : list) { dataset.addValue(yycgdmxCustom.getCgje(), "药品采购金额", yycgdmxCustom.getAreaname()); } JFreeChart chart = ChartFactory.createBarChart3D("药品采购金额汇总",// 图形名称 "",// 分类名称,为横坐标名称 "采购金额(元)",// 值名称,为纵坐标名称 dataset,// 数据集合 PlotOrientation.VERTICAL,// 垂直显示 false,// 是否显示图例 false,// 是否使用工具提示 false);// 是否使用url // 在柱上显示数值 CategoryPlot plot = chart.getCategoryPlot(); BarRenderer3D renderer = new BarRenderer3D(); // 设置柱的颜色 // renderer.setSeriesPaint(0, Color.decode("#ff0000")); renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); renderer.setBaseItemLabelsVisible(true); // 默认的数字显示在柱子中,通过如下两句可调整数字的显示 // 注意:此句很关键,若无此句,数字的显示会被覆盖 renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition( ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT)); renderer.setItemLabelAnchorOffset(10D); // 设置每个地区所包含的平行柱的之间距离 // renderer.setItemMargin(0.3); plot.setRenderer(renderer); // 设置字体 // 配置字体 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); // 图片标题 // 图形的绘制结构对象,对于饼图不适用 // 图片标题 chart.setTitle(new TextTitle(chart.getTitle().getText(), titleFont)); // 底部 LegendTitle legendTitle = chart.getLegend(); if (legendTitle != null) { legendTitle.setItemFont(kfont); } // X 轴 CategoryAxis domainAxis = plot.getDomainAxis(); domainAxis.setLabelFont(xfont);// 轴标题 domainAxis.setTickLabelFont(xfont);// 轴数值 domainAxis.setTickLabelPaint(Color.BLUE); // 字体颜色 // domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); // Y 轴 ValueAxis rangeAxis = plot.getRangeAxis(); rangeAxis.setLabelFont(yfont); rangeAxis.setLabelPaint(Color.BLUE); // 字体颜色 rangeAxis.setTickLabelFont(yfont); // 将图形放在session,得到filename String jfreechart_filename = ServletUtilities.saveChartAsPNG(chart, 900, 500, null, httpSession); model.addAttribute("jfreechart_filename", jfreechart_filename); return "/business/tj/groupbyarea"; }
页面
<TABLE border=0 cellSpacing=0 cellPadding=0 width="99%" align=center> <TBODY> <TR> <TD> <!-- jfreechart图形 jfreechart 为servlet 的名字 filename 为action 中的key --> <img src="${baseurl }/jfreechart?filename=${jfreechart_filename }" border=0 /> </TD> </TR> </TBODY> </TABLE>
1.3 小结
使用jfreechart进行统计图形生成:
第一步:了解统计需求,获取统计数据
第二步:使用jfreechart生成统计图形
1、 定义dataset
将第一步获取的统计数据填充到dataset中
2、 定义chart(根据图形的类型调用不同的api(常用的:柱状图、饼图、折线图))
注意:设置字体,否则 会出现中文乱码
如果需要修改图形的布局,可以通过CategoryPlot plot = chart.getCategoryPlot();来操作
3、 输出图形
a) 使用response直接输出(输出的图片)
b) 使用jfreechart的servlet输出图形(常用)
相关文章推荐
- jfreechart插件将数据展示成饼状图、柱状图和折线图
- opensuse下如何解决jfreechart中文乱码的问题
- jsp JFreeChart使用心得与例子
- java类中生成jfreechart,返回图表的url地址 代码分享
- java类中使用Jfreechart的简单实例
- java生成饼图svg及JFreeChart生成svg图表
- JFreeChart系列教程
- Jfreechart绘制漂亮的图表
- Jfreechart中文API和属性详解
- 使用jfreechart导致JSP页面汉字出现乱码
- JFreeChart部分中文API
- JFreeChart图形报表
- 试用jfreechart1.0.9和BIRT2.1.1后不该忘记的
- jfreechart的饼图对应的每块都是有值注释显示的,柱图和线图如何在柱子或点旁边这个柱子或这个点的值呢?
- jfreechart的线性图是所有的点的连接,线是连续的。如何实现间断的线性图呢?即一条线,当满足某个条件:如值为零时,线在此中断,只连接相邻的不为零的点。
- 好的学习站点
- JFreeChart乱码解决方法
- JFreeChart Examples
- Linux(Slackware)下配置jdk1.5中文字体
- 使用Jasperreport作为报表控件开发Web 报表应用