AEAI DP开发统计分析
1 背景概述
平时做统计分析都是调rest服务,给前台提供数据,然后在管理控制台里配置portlet。但并不是所有的项目都会用到portal,这时就需要在AEAI DP应用开发平台里开发统计分析了,下面讲解如何在AEAI DP应用开发平台里开发统计分析。
2 总体思路
先在DP里创建基础功能模型,然后手动创建xml配置文件,之后引入图表组件,接下来在jsp和handler里写实现代码。
3 实现步骤
3.1 创建功能模型
打开DP开发平台应用,按照AEAI DP开发平台手册创建一个项目,名为demo,在项目处右键创建目录,创建一个样例模块。在样例模块处右击选择创建功能。
弹出窗口,在窗口里选择基础功能模型,功能名称为统计分析,点击finish完成。
然后点击闪电图标,生成代码。
工程目录如图:
3.2 创建配置文件
基础功能模型生成出的代码里没有service包,sqlmap包和xml配置文件,需要自己创建,创建目录如下:
ServiceModule.xml配置文件代码如下
<bean id="demoManageTarget" class="com.agileai.demo.module.sample.service.DemoManageImpl" parent="baseService"> <property name="sqlNameSpace" value="DemoManage"/> <property name="tableName" value="test_project_defect"/> </bean> <bean id="demoManageService" parent="transactionBase"> <property name="target" ref="demoManageTarget"/> </bean> |
SqlMapModule.xml配置文件代码如下:
<sqlMap resource="sqlmap/DemoManage.xml"/> |
注意:配置ServiceModule.xml文件时,注意大小写,sqlmap里的namespace要和配置文件里的名一致。
3.3 引入图表组件
1)引入.swf格式文件
引入图表图形swf文件,把这些文件直接放入WebRoot目录下。
2)引入FusionCharts_pc.js文件
引入图表组件FusionCharts_pc.js文件,把js文件放入WebRoot目录下的js目录里。
在jsp里引入FusionCharts_pc.js文件,代码如下:
<script type="text/javascript" src="js/FusionCharts_pc.js"></script> |
3.4 Jsp代码实现
基础功能模型生成出来的jsp页里只有一段样例代码,浏览运行也没有任何的功能,所有的功能和样式排版都需要自己去写。
1)div和css
div代码如下:
<div> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="50%"><div id="lateStatChart" class="chart" align="center"></div></td> <td width="50%"><div id="askleaveStatChart" class="chart" align="center"></div></td> </tr> </table> </div> |
css代码如下:
<style type="text/css"> .chart{ height:300px; padding:1px; } </style> |
2)javascript方法
JavaScript方法代码如下:
<script type="text/javascript"> $(function(){ var __loadActiveMfStatChart = function(){ var chart = new FusionCharts("<%=request.getContextPath()%>/charts/Column3D.swf","activeMfStat","100%","100%", "0", "0","FFFFFF", "exactFit"); var url = "<%=pageBean.getHandlerURL()%>&actionType=demoXml&chartType=lateStatChart"; sendRequest(url,{dataType:'text',onComplete:function(responseText){ chart.setDataXML(responseText); chart.render("lateStatChart"); }}); }; __loadActiveMfStatChart();
var __loadDullMfStatChart = function(){ var chart = new FusionCharts("<%=request.getContextPath()%>/charts/Column2D.swf","activeMfStat","100%","100%", "0", "0","FFFFFF", "exactFit"); var url = "<%=pageBean.getHandlerURL()%>&actionType=demoXml&chartType=askleaveStatChart"; sendRequest(url,{dataType:'text',onComplete:function(responseText){ chart.setDataXML(responseText); chart.render("askleaveStatChart"); }}); }; __loadDullMfStatChart(); }); </script> |
3.5 Handler实现
handler代码如下:
@PageAction public ViewRenderer loadDemoXml(DataParam param){ DemoManage getService = lookupService(DemoManage.class); String result = ""; String chartType = param.get("chartType"); if(chartType.equals("lateStatChart")){ List<DataRow> lateRecords = getService.lateRecords(param); result = this.lateStatChartXml(lateRecords); } if(chartType.equals("askleaveStatChart")){ List<DataRow> askleaveRecords = getService.askleaveRecords(param); result = this.askleaveStatChartXml(askleaveRecords); } return new AjaxRenderer(result); }
public String lateStatChartXml(List<DataRow> lateRecords){ Document document = XmlUtil.createDocument(); Element charElement = document.addElement("chart"); charElement.addAttribute("caption","迟到统计"); charElement.addAttribute("yAxisName","迟到次数"); charElement.addAttribute("useRoundEdges","1"); charElement.addAttribute("showBorder","0"); charElement.addAttribute("legendBorderAlpha","0"); charElement.addAttribute("showBorder","1"); charElement.addAttribute("borderColor","#b5b4b4"); charElement.addAttribute("bgColor ","#e8e8e8"); for (int i=0;i < lateRecords.size();i++){ DataRow row = lateRecords.get(i); Element element = charElement.addElement("set"); element.addAttribute("label",row.stringValue("DL_NAME")); element.addAttribute("value",row.stringValue("DL_NUM")); } if(lateRecords.size()==0){ Element setElement = charElement.addElement("set"); setElement.addAttribute("value","0"); } return document.asXML().toString(); }
public String askleaveStatChartXml(List<DataRow> askleaveRecords){ Document document = XmlUtil.createDocument(); Element charElement = document.addElement("chart");
charElement.addAttribute("caption","请假统计"); charElement.addAttribute("yAxisName","请假次数"); charElement.addAttribute("useRoundEdges","1"); charElement.addAttribute("showBorder","0"); charElement.addAttribute("legendBorderAlpha","0"); charElement.addAttribute("showBorder","1"); charElement.addAttribute("borderColor","#b5b4b4"); charElement.addAttribute("bgColor ","#e8e8e8"); for (int i=0;i < askleaveRecords.size();i++){ DataRow row = askleaveRecords.get(i); Element element = charElement.addElement("set"); element.addAttribute("label",row.stringValue("DA_NAME")); element.addAttribute("value",row.stringValue("DA_NUM")); } if(askleaveRecords.size()==0){ Element setElement = charElement.addElement("set"); setElement.addAttribute("value","0"); } return document.asXML().toString(); } |
3.6 接口和实现类
1)接口
DemoManage代码如下:
List<DataRow> lateRecords(DataParam param); List<DataRow> askleaveRecords(DataParam param); |
2)实现类
DemoManageImpl代码如下
public List<DataRow> lateRecords(DataParam param) { String statementId = sqlNameSpace+"."+"lateRecords"; List<DataRow> result = this.daoHelper.queryRecords(statementId, param); return result; }
public List<DataRow> askleaveRecords(DataParam param) { String statementId = sqlNameSpace+"."+"askleaveRecords"; List<DataRow> result = this.daoHelper.queryRecords(statementId, param); return result; } |
3.7 MySQL查询
sqlmap代码如下:
<select id="lateRecords" parameterClass="com.agileai.domain.DataParam" resultClass="com.agileai.domain.DataRow"> SELECT DL_ID,DL_NAME,DL_NUM FROM demo_late </select> <select id="askleaveRecords" parameterClass="com.agileai.domain.DataParam" resultClass="com.agileai.domain.DataRow"> SELECT DA_ID,DA_NAME,DA_NUM FROM demo_askleave </select> |
4 演示效果
在浏览器里输入网址:http://localhost:6060/demo/index?Homepage预览
5 个人总结
在项目开发过程中,有时会遇到用图表做统计分析的情况,做统计分析的方法可能很多,笔者这次是用AEAI DP应用开发平台产品进行开发统计分析,通过实践发现AEAI DP可以方便、快捷的开发出统计分析功能,并可以很好的实现这个功能。笔者在这里推荐给大家,AEAI DP应用开发平台产品是开源的,大家可以到数通畅联官网下载产品介质www.agileai.com。
6 附件说明
打开AEAI DP设计器导入工程即可执行。
该项目相关的数据库。
文档及附件下载地址:http://pan.baidu.com/s/1dE6XEpj
转载于:https://my.oschina.net/agileai/blog/860795