加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

用Groovy和JFreeChart生成报表

发布时间:2020-12-14 16:53:14 所属栏目:大数据 来源:网络整理
导读:编写一个Groovy脚本,定期执行来生成业务报表。这个脚本主要完成三个动作: 1.??????通过GroovySql从数据库中取出原始数据 2.??????使用JfreeChart生成柱状图报表 3.??????使用Apache的common-mail发送邮件 package com.cdai.gchartimport groovy.sql.Sqlimp

编写一个Groovy脚本,定期执行来生成业务报表。这个脚本主要完成三个动作:

1.??????通过GroovySql从数据库中取出原始数据

2.??????使用JfreeChart生成柱状图报表

3.??????使用Apache的common-mail发送邮件

package com.cdai.gchart

import groovy.sql.Sql

import java.awt.Color

import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.MultiPartEmail;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset
import org.jfree.data.general.DatasetUtilities;

class GChartRunner {

	/**
	 * 报表数据
	 */
	DefaultCategoryDataset dataset
	
	/**
	 * 图片地址
	 */
	static final def PIC_PATH = "test.png"
	
	static main(args) {
		new GChartRunner().run()
	}
	
	def run() {
		doLoadDataSet()
		doGenerateChart()
		doSendMail()
	}
	
	/**
	 * 从数据库加载报表数据
	 * @return
	 */
	private def doLoadDataSet() {
		def sql = Sql.newInstance(
					"jdbc:mysql://127.0.0.1:3306/test","root","123456","com.mysql.jdbc.Driver")
		
		dataset = new DefaultCategoryDataset();
		sql.eachRow("select page_id,count(page_id) as pv " + 
				"from page_traffic group by page_id") {
			dataset.addValue(it[1],it[0],"");
		};
	}
	
	/**
	 * 创建3D柱状图图片文件
	 * @return
	 */
	private def doGenerateChart() {
        def chart = ChartFactory.createBarChart3D(
						"页面访问量统计","页面ID","访问量/次",dataset,PlotOrientation.VERTICAL,true,false)
        chart.setBackgroundPaint(Color.WHITE)
        ChartUtilities.writeChartAsPNG(new FileOutputStream(PIC_PATH),chart,500,10)
	}
	
	/**
	 * 将报表作为邮件附件发送
	 * @return
	 */
	private def doSendMail() {
		def email = new MultiPartEmail();
		email.setHostName("smtp.163.com");
		email.setAuthentication("dc_726@163.com","******");
		email.setCharset("UTF-8");
		email.addTo("manager1@163.com");
		email.addTo("manager1@163.com");
		email.setFrom("dc_726@163.com","cdai");
		email.setSubject("页面访问量统计报告");
		
		def attachment = new EmailAttachment();
		attachment.setPath(PIC_PATH);
		attachment.setDisposition(EmailAttachment.ATTACHMENT);
		attachment.setDescription("页面访问量统计报告");
		attachment.setName(PIC_PATH);
		
		email.attach(attachment);
		email.send();
	}
	
}

通过这个例子我们可以看到,强大的Groovy不仅与Java代码完美融合,并且通过语法糖及封装类库等方法,大大提高了生产力。

这在编写任务脚本等小功能时非常重要。


参考资料

?

实战 Groovy: 用 Groovy 进行 JDBC 编程

http://www.ibm.com/developerworks/cn/java/j-pg01115.html

?

JFreeChart: 基本柱状图

http://blog.csdn.net/originalcsdn/article/details/6215698

?

用Apache Commons Email简化邮件发送

http://www.blogjava.net/fastunit/archive/2008/01/25/177799.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读