zoukankan      html  css  js  c++  java
  • 用Groovy和JFreeChart生成报表

    编写一个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, 
    						true, 
    						false)
            chart.setBackgroundPaint(Color.WHITE)
            ChartUtilities.writeChartAsPNG(new FileOutputStream(PIC_PATH), chart, 500, 500, true, 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


  • 相关阅读:
    构造方法,析构函数
    Redis Sentinel实现的机制与原理详解
    关于PageRank的总结
    再次建立wordpress
    图的研究杂记
    并行的论文
    还是bib问题
    如何解决bib的一些问题
    忙中记录
    近期一些学术相关记录
  • 原文地址:https://www.cnblogs.com/xiaomaohai/p/6157772.html
Copyright © 2011-2022 走看看