AEAI DP开发统计分析

1 背景概述

平时做统计分析都是调rest服务,给前台提供数据,然后在管理控制台里配置portlet。但并不是所有的项目都会用到portal,这时就需要在AEAI DP应用开发平台里开发统计分析了,下面讲解如何在AEAI DP应用开发平台里开发统计分析。

2 总体思路

先在DP里创建基础功能模型,然后手动创建xml配置文件,之后引入图表组件,接下来在jsp和handler里写实现代码。

3 实现步骤

3.1 创建功能模型

打开DP开发平台应用,按照AEAI DP开发平台手册创建一个项目,名为demo,在项目处右键创建目录,创建一个样例模块。在样例模块处右击选择创建功能。

AEAI DP开发统计分析

AEAI DP开发统计分析

弹出窗口,在窗口里选择基础功能模型,功能名称为统计分析,点击finish完成。

AEAI DP开发统计分析 

然后点击闪电图标,生成代码。

AEAI DP开发统计分析 

工程目录如图:

AEAI DP开发统计分析

3.2 创建配置文件

基础功能模型生成出的代码里没有service包,sqlmap包和xml配置文件,需要自己创建,创建目录如下:

AEAI DP开发统计分析

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目录下。

AEAI DP开发统计分析 

2)引入FusionCharts_pc.js文件

引入图表组件FusionCharts_pc.js文件,把js文件放入WebRoot目录下的js目录里。

AEAI DP开发统计分析

在jsp里引入FusionCharts_pc.js文件,代码如下:

<script type="text/javascript" src="js/FusionCharts_pc.js"></script>

3.4 Jsp代码实现

基础功能模型生成出来的jsp页里只有一段样例代码,浏览运行也没有任何的功能,所有的功能和样式排版都需要自己去写。

AEAI DP开发统计分析

AEAI DP开发统计分析

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预览

AEAI DP开发统计分析

5 个人总结

在项目开发过程中,有时会遇到用图表做统计分析的情况,做统计分析的方法可能很多,笔者这次是用AEAI DP应用开发平台产品进行开发统计分析,通过实践发现AEAI DP可以方便、快捷的开发出统计分析功能,并可以很好的实现这个功能。笔者在这里推荐给大家,AEAI DP应用开发平台产品是开源的,大家可以到数通畅联官网下载产品介质www.agileai.com。

6 附件说明

AEAI DP开发统计分析打开AEAI DP设计器导入工程即可执行。

AEAI DP开发统计分析该项目相关的数据库。 

文档及附件下载地址:http://pan.baidu.com/s/1dE6XEpj

转载于:https://my.oschina.net/agileai/blog/860795