动态报表模块设计
1.需求概述
- 实现根据dba提供的sql语句,动态生成业务部门需要的报表展示页面
2.页面原型
1)报表展示和预览页面
- 菜单栏,每个app代表一个应用,每个report代表一个具体报表
- “添加报表”菜单,进入添加报表页面
- 查询框,通过’ireports_report_setting’表的’query_column’动态生成
- 报表table,通过’ireports_report_setting’表的’table_column_mapping’动态生成
2)报表添加与设置页面
- 查询类型有:
1
2
3
4
5
61, = (等于)
2, > (大于)
3, < (小于)
4, >= (大于等于)
5, <= (小于等于)
6, time (时间区间)
3.模型设计
1)数据库模型图
2)模型表说明
ireports_app(报表所属应用或模块)
1
2
3
4
5
6CREATE TABLE `ireports_app` (
`aid` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL COMMENT '应用名称',
`status` tinyint(4) DEFAULT '0' COMMENT '状态',
PRIMARY KEY (`aid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='报表所属应用或模块';ireports_report(报表记录表)
1
2
3
4
5
6
7
8
9CREATE TABLE `ireports_report` (
`rid` int(11) NOT NULL AUTO_INCREMENT COMMENT '报表id',
`rsid` int(11) DEFAULT '0' COMMENT '报表详细设置id',
`report` varchar(50) NOT NULL COMMENT '报表名称',
`sql` text NOT NULL COMMENT '报表sql',
`type` tinyint(4) DEFAULT '0' COMMENT '报表类型',
`status` tinyint(4) DEFAULT '0' COMMENT '状态',
PRIMARY KEY (`rid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='报表记录表';ireports_report_setting(报表详细设置表)
1
2
3
4
5
6
7CREATE TABLE `ireports_report_setting` (
`rsid` int(11) NOT NULL AUTO_INCREMENT COMMENT '报表设置id',
`is_page` tinyint(1) DEFAULT '1' COMMENT '是否分页',
`table_column_mapping` longtext COMMENT '报表表头字段映射',
`query_column` text COMMENT '报表查询字段配置',
PRIMARY KEY (`rsid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='报表详细设置表';ireports_query_type(查询类型表)
1
2
3
4
5CREATE TABLE `ireports_query_type` (
`qtid` int(11) NOT NULL AUTO_INCREMENT COMMENT '查询类型id',
`type` varchar(20) NOT NULL COMMENT '查询类型',
PRIMARY KEY (`qtid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='查询类型表';
4.技术实现
1)报表数据来源与连接:2个方案
- 只连接业务员库,每次当添加的报表需要数据时,从基础数据库中同步到业务员库
- 业务员系统添加对基础数据库的连接,添加一个内测or公测的基础数据库
2)数据连接层
- 使用mybatis
3)动态报表展示
- 使用Freemarker + Jquery
后台读取报表配置后,使用Freemarker模板生成页面框架与页面元素。
页面载入后,使用Jquery异步请求报表数据,并展现。