您的位置:首页 > 其它

按区域统计采购金额 jfreechart 图表显示

2015-12-16 15:05 357 查看
1.1 需求

根据查询条件,按区域统计采购金额



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