先说下背景吧:
公司为电子商务网站,所以商务部门经常会进行数据分析,而我们这边主要是做开发,也没有专门负责数据的分析的人员,所以经常我会兼职担当报表输出人员,时间一长,商务部门领导也闲麻烦,希望有自动发报表的功能,其实装个BI系统什么的也挺快的,或者有ERP系统也行,但是领导要求越快越好,原来是想用一些开源的报表系统实现,如SpagoBI、Reportico等等。不过上手太慢,同时开发起来也麻烦,最后我就想用最简单的方式实现吧,也就是所谓的小米加步枪嘞。
软件说明:
a. 闲置的公司机器一台,centos 6.5 系统。通过ssh隧道,直接在本地机器上连接到远程数据库上:
/usr/bin/autossh -M 0 -f -NCPf -i /usr/bin/auth_key root@remote -p22 -L 3399:remote:3306
上面remote为远程机器、auth_key为认证key,具体的可以百度一下ssh映射端口。
通过这样的方式我就可以直接连接到远程的数据库上面咯。
b. thinkphp框架
因为一直用习惯了它,所以就用它来做一些业务处理。
c. 其它PHP框架,暂时用到了 pChart2.1.3 及 PHPExcel
http://www.pchart.net/
http://phpexcel.codeplex.com/
d. wkhtmltopdf,将html转换成pdf,解决了中文乱码问题。之前之所以不用开源的原因就是中文乱码处理起来麻烦。而没选择php之类转pdf的功能原因是因为速度太慢太慢了。然后就用它了。
http://code.google.com/p/wkhtmltopdf/
e. 一些shell脚本及centos的crontab
基本上用以上的工具就搞定了。
处理流程:
第一步. 针对pdf报表,我会直接生成HTML页面,然后使用wkhtmltopdf转换成pdf。而对excel表格,我直接用linux下curl命令,使用php生成文件。
第二步. 通过crontab发送各个报表
不足之处:
需要手工配置,涉及内容较多,维护较麻烦。
方便之处:
因为是用php实现,修改起来简单,尤其是pdf是基于html转换来的,所以修改起来也很简单,比使用iReport做模板方便,美观。
当然这种方案只是应对突发情况而不得不为之的。不过运行了一个月了,还比较良好,对一些新的报表要求,也能很快完工。所以对创业公司,或者小规模的电子商务公司,这种使用免费的工具搭建报表,也是一种可取之法。如有朋友有兴趣,可基于此进行深入整合,使用如java来做一些定时处理等等,功能将会更加完善。
创建PDF的shell脚本:
#!/bin/bashpdf_name=PDF_$(date -d"1 day ago" +'%d_%m_%Y')".pdf"pdf_path=/data/home/website2/htdocs/bi/pdfs/pdf_log=$pdf_path"create_"$(date +%Y%m).logpdf_src="http://192.168.1.6/bi/index.php?m=Index&a=bi"######### Start ###########if [ -f $pdf_path$pdf_name ]then rm -rf $pdf_path$pdf_name echo "######### REMOVE PDF --> "$pdf_name" : "$(date +'%Y-%m-%d %H:%M:%S') >> $pdf_logfi/usr/bin/wkhtmltopdf $pdf_src $pdf_path$pdf_nameecho "######### Create PDF --> "$pdf_name" : "$(date +'%Y-%m-%d %H:%M:%S') >> $pdf_log######### End ###########
创建Excel的shell脚本:
#!/bin/bashexcel_path=/data/home/website2/htdocs/bi/excel/reports/excel_log=$excel_path"create_"$(date +%Y%m).logexcel_src_1="http://192.168.1.6/bi/excel/excel01.php"excel_src_2="http://192.168.1.6/bi/excel/excel02.php"######### Start ###########curl $excel_src_1 >> $excel_logsleep 2scurl $excel_src_2 >> $excel_log######### End ###########