动态报表模块设计

动态报表模块设计

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
    6
    1, = (等于)
    2, > (大于)
    3, < (小于)
    4, >= (大于等于)
    5, <= (小于等于)
    6, time (时间区间)

3.模型设计

1)数据库模型图

2)模型表说明

  • ireports_app(报表所属应用或模块)

    1
    2
    3
    4
    5
    6
    CREATE 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
    9
    CREATE 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
    7
    CREATE 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
    5
    CREATE 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异步请求报表数据,并展现。