# dynamic-report **Repository Path**: www.QQ2014.com/dynamic-report ## Basic Information - **Project Name**: dynamic-report - **Description**: 动态报表,希望能帮助更多的程序员 - **Primary Language**: Java - **License**: Unlicense - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 4 - **Created**: 2024-01-13 - **Last Updated**: 2024-01-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 动态报表设计 需求:客户每提出报表的修改就需要修改程序,所以需要针对客户的需求进行动态配置展示报表 实现:将sql语句配置到数据库里,动态显示条件,动态显示列,动态显示图形 希望看官们多多提建议和意见,希望能帮助到更多的程序员 # 一、表结构 ## 1.0、模块表 表名称:tb_module 表中文名称:模块表 用途:用于增加报表对应的模块菜单 | 字段名称 | 字段说明 | 字段类型 | 允许为空 | 说明 | | ----------- | ------------ | ------------ | -------- | ---------------------------- | | module_id | 模块编号 | int | 否 | 主键,不自增
手工自定义 | | module_code | 模块英文名称 | varchar(100) | 否 | | | module_name | 模块名称 | varchar(100) | 否 | | | url | 前端路径 | varchar(200) | 是 | | | request_url | 后端路径 | varchar(200) | 是 | | | parent_id | 父模块 | int | 否 | | | delete_flag | 删除标志 | int | 是 | | | type | 模块类型 | int | 否 | 1-平台,2-商户 | | level | 层级 | int | 否 | | | is_report | 是否是报表 | int | 是 | 默认为0 | | order_by | 排序 | int | 是 | | ## 1.1、报表设置表 表名称:tb_report_config 表中文名称:报表设置表 用途:保存报表的sql、是否图形展示等信息 | 字段名称 | 字段说明 | 字段类型 | 允许为空 | 说明 | | ---------------- | ------------- | ------------ | -------- | ------------------------- | | report_config_id | 报表配置编号 | int | 否 | 主键,自增 | | report_name | 报表英文名称 | varchar(100) | 否 | | | module_id | 模块编号 | int | 否 | tb_module.
module_id | | module_name | 模块名称 | varchar(100) | 是 | | | select_sql | select语句 | text | 否 | | | from_sql | from语句 | text | 否 | | | where_sql | 基础where语句 | text | 是 | | | group_by_sql | group语句 | text | 是 | | | order_by_sql | order语句 | text | 是 | | | need_chart | 是否需要图形 | int | 是 | 默认为0 | | user_confine | 数据权限 | text | 是 | | ## 1.2、报表字段表 表名称:tb_report_field 表中文名称:报表字段表 用途:保存一张报表对应的字段列 | 字段名称 | 字段说明 | 字段类型 | 允许为空 | 说明 | | ----------------------- | ---------------- | ------------ | -------- | --------------------------------------- | | report_field_id | 报表字段编号 | int | 否 | 主键,自增 | | report_config_id | 报表设置编号 | int | 否 | tb_report_config.
report_config_id | | field_name | 字段名称 | varchar(100) | 否 | | | alias_field_name | 字段别名 | varchar(100) | | 主要用于排序,
需要表别名 | | field_cn_name | 字段中文名称 | varchar(100) | 否 | | | field_type | 字段类型 | varchar(100) | | | | field_width | 字段长度 | int | 否 | | | on_show | 是否显示 | int | 是 | 默认为0 | | order_by | 排序 | int | 是 | | | show_detail | 是否显示明细 | int | 是 | 默认为0 | | detail_report_config_id | 明细报表配置编号 | int | 是 | | | need_total | 需要合计 | int | 是 | 默认为0 | | axis | 坐标轴 | varchar(10) | 是 | x 或者 y | ## 1.3、报表条件表 表名称:tb_report_where 表中文名称:报表条件表 用途:保存一张报表对应的条件字段列 | 字段名称 | 字段说明 | 字段类型 | 允许为空 | 说明 | | ---------------- | ------------ | ------------ | -------- | ------------------------------------------------------ | | report_where_id | 报表条件编号 | int | 否 | 主键,自增 | | report_config_id | 报表设置编号 | int | 否 | tb_report_config.
report_config_id | | param_name | 参数名称 | varchar(100) | 否 | | | param_type | 参数类型 | varchar(10) | 否 | | | field_name | 字段名称 | varchar(100) | 否 | | | field_cn_name | 字段中文名称 | varchar(100) | 否 | | | compare | 比较值 | int | 是 | 比较(1-等于,2-大于,3-大于等于,
4-小于,5-小于等于) | | default_value | 默认值 | varchar(100) | 是 | | | date_type | 日期类型 | int | 是 | 日期类型
(1-开始日期,2-结束日期) | | table_name | 表名称 | varchar(100) | 是 | 参数类型为select时,
查询表名称 | | link_json | 关联字段 | varchar(500) | 是 | 参数类型为select时,
关联字段对应json | | on_show | 是否显示 | int | 是 | 默认为0 | | order_by | 排序 | int | 是 | | ## 1.4、报表用户配置表 表名称:tb_report_user_field 表中文名称:报表用户配置表 用途:保存每个用户对每一张报表的显示列,列宽 | 字段名称 | 字段说明 | 字段类型 | 允许为空 | 说明 | | -------------------- | ---------------- | ------------ | -------- | --------------------------------------- | | report_user_field_id | 报表用户字段编号 | int | 否 | 主键,自增 | | report_config_id | 报表设置编号 | int | 否 | tb_report_config.
report_config_id | | user_id | 用户编号 | int | 否 | | | user_name | 用户名称 | varchar(30) | 是 | | | field_name | 字段名称 | varchar(100) | 否 | | | field_width | 字段长度 | int | 否 | | | order_by | 排序 | int | 是 | | | delete_flag | 删除标志 | int | 是 | | ## 1.5、报表看板表 表名称:tb_report_chart 表中文名称:报表看板表 用途:用于保存看板中图形需要的数据 | 字段名称 | 字段说明 | 字段类型 | 允许为空 | 说明 | | ---------------- | ---------------------------- | ------------ | -------- | --------------------------------------------- | | report_chart_id | 报表图形编号 | int | 否 | 主键,自增 | | report_config_id | 报表设置编号 | int | 否 | tb_report_config.
report_config_id | | module_id | 模块编号 | int | 否 | tb_module.
module_id | | chart_type | 图形类型 | int | 否 | 柱状=1,饼状=2,
折线=3,排行=4 | | chart_name | 图形名称 | varchar(50) | 是 | | | x_axis | x轴字段 | varchar(100) | 否 | | | x_field_type | x轴字段类型 | varchar(100) | 是 | | | y_axis | y轴字段 | varchar(100) | 否 | | | y_field_type | y轴字段类型 | varchar(100) | 是 | | | chart_module_id | 每个图形对应
的模块编号 | int | 否 | | | need_total | 看板是否带合计 | int | 否 | | | date_field_name | 图形中的日期字段 | varchar(100) | 否 | 用于处理看板中
近7天,
近30天的条件 | ## 1.5、报表看板条件表 表名称:tb_report_chart_where 表中文名称:报表看板条件表 用途:用于保存看板中图形需要的条件 | 字段名称 | 字段说明 | 字段类型 | 允许为空 | 说明 | | --------------------- | ---------------- | ------------ | -------- | ------------------------------------------------------ | | report_chart_where_id | 报表看板条件编号 | int | 否 | 主键,自增 | | module_id | 模块编号 | int | 否 | | | param_name | 参数名称 | varchar(100) | 否 | | | param_type | 参数类型 | varchar(10) | 否 | | | field_name | 字段名称 | varchar(100) | 否 | | | field_cn_name | 字段中文名称 | varchar(100) | 否 | | | compare | 比较值 | int | 是 | 比较(1-等于,2-大于,3-大于等于,
4-小于,5-小于等于) | | default_value | 默认值 | varchar(100) | 是 | | | table_name | 表名称 | varchar(100) | 是 | 参数类型为select时,
查询表名称 | | link_json | 关联字段 | varchar(500) | 是 | 参数类型为select时,
关联字段对应json | | on_show | 是否显示 | int | 是 | 默认为0 | | order_by | 排序 | int | 是 | | | | | | | | | | | | | | # 二、功能说明 ## 2.0、模块配置 配置对应的报表菜单到 tb_module 中 ![image-20220113104117853](images/image-20220113104117853.png) ## 2.1、报表配置 将 SQL 配置到 报表配置表 tb_report_config 中 ![image-20220113103756795](images/image-20220113103756795.png) ## 2.2、配置显示列 将显示列配置到 报表字段表中 tb_report_field 中 ![image-20220113103827411](images/image-20220113103827411.png) ## 2.3、配置条件 将显示条件配置到 报表条件中 tb_report_where 中 ![image-20220113103843287](images/image-20220113103843287.png) ## 2.4、配置看板 将看板需要显示的图形配置到 tb_report_chart 中 ![image-20220113103922146](images/image-20220113103922146.png) ## 2.5、配置看板条件 将看板需要的条件配置到 tb_report_chart_where 中 ![image-20220113104206627](images/image-20220113104206627.png) ## 2.6、前端协助 启动程序:swagger地址: http://localhost:8000/doc.html ![image-20220113121341237](images/image-20220113121341237.png) # 三、接口说明 * 前端在打开页面时,调用 /report/getBusinessType 方法 获取有多少动态报表 * 并调用 /report/getModuleReport 传入模块ID查找有多少报表条件,需要循环动态将控件显示到页面中 * 操作用户,输入条件点击查询调用 /report/getReportList 方法查询,该查询中返回包含当前页合计行 * 需要总合计行的话,需要调用 /report/getReportSum 方法 * 操作用户,点击导出EXCEL,调用/report/reportToExcel 方法导出 * 图形显示时,先调用 /report/getReportAxis 获取坐标,可以支持柱状图、饼状图、折线图、排行榜 * 获取图形报表,调用 /report/getReportAxisList 方法获取图形报表数据 * 获取看板,在调用模块接口 /report/getBusinessType 返回的数据中,isReport = 1为报表,isReport = 2 为看板 * 获取看板配置,调用 /report/getReportChart 方法,传入 moduleId 获取 * 根据看板配置的每个图形的 x 轴,y 轴,调用 /report/getReportAxisList 方法,获取每个图形的数据 ## 3.1、查询报表菜单接口 ![image-20220113105557105](images/image-20220113105557105.png) ## 3.2、获取报表配置 ![image-20220113105838376](images/image-20220113105838376.png) ## 3.3、获取报表数据(同时调用两个接口) ### 1、获取数据,以及分页时当前页合计 ![image-20220113110054765](images/image-20220113110054765.png) ### 2、获取总合计 ![image-20220113110154660](images/image-20220113110154660.png) ## 3.4、数据导出EXCEL ![image-20220113110554145](images/image-20220113110554145.png) ## 3.5、获取图形显示配置(先获取坐标轴) ![image-20220113110714667](images/image-20220113110714667.png) ## 3.6、获取图形数据 ![image-20220113111448698](images/image-20220113111448698.png) ## 3.7、获取看板配置 ![image-20220113111652895](images/image-20220113111652895.png) ## 3.8、获取看板中图形的数据 ![image-20220113111448698](images/image-20220113111448698.png) # 四、网格数据显示明细说明 ## 4.1、配置明细sql 在 tb_report_config 中配置明细查询需要的sql ![image-20220113112337215](images/image-20220113112337215.png) * module_id 为 0 * 其他和配置报表内容一致 ## 4.2、配置明细按钮 report_config_id 为**动态**报表的编号 在 tb_report_field 字段表中配置当前报表需要【查看明细】的按钮 ![image-20220113112021290](images/image-20220113112021290.png) * 配置按钮 * field_name: handle * alias_field_name: handle * 这两个字段必须是 handle,前端用这个字段进行判断是否显示按钮 * 配置显示明细 * show_detail: 值为1,意思为显示明细 * 配置明细对应sql * detail_report_config_id:对应 tb_report_config 配置表的编号 ## 4.3、配置明细对应的条件 report_config_id 为**明细**报表的编号 在 tb_report_where 条件表中配置明细对应的条件,由于是网格中点击某一行数据进行跳转明细,则需要知道根据这一行数据的哪一个字段组成条件 ![image-20220113112522738](images/image-20220113112522738.png) ## 4.4、配置明细表格对应的字段列 report_config_id 为**明细**报表的编号 在 tb_report_field 字段表中配置明细对应的字段 ![image-20220113112657493](images/image-20220113112657493.png) ## 4.5、显示效果 ![image-20220113113329273](images/image-20220113113329273.png) ![image-20220113113340067](images/image-20220113113340067.png) # 五、效率优化 * 报表的效率来源于数据量多少,还有SQL的执行效率;如果数据量大可以先把数据存下来,再用SQL展示 * 针对于配置的SQL效率进行创建索引,只能具体情况具体对待了 * 可以通过 druid 进行查看SQL执行效率,地址:http://localhost:8000/druid/login.html 用户名:admin,密码:admin ![image-20220113121007145](images/image-20220113121007145.png) # 六、效果展示 ## 6.1、表格数据 动态条件、动态列、动态按钮 ![image-20220113113407216](images/image-20220113113407216.png) 可根据汇总对象进行汇总 ![image-20220113113418031](images/image-20220113113418031.png) ## 6.2、图形数据 右上角为 x轴,y轴,可手动选择之后查询 ![image-20220113113614235](images/image-20220113113614235.png) ## 6.3、看板 根据配置展示不同的图形 ![image-20220113113652643](images/image-20220113113652643.png) ## 6.4、导出excel ![image-20220113113749025](images/image-20220113113749025.png) ## 6.5、动态生成查询条件 支持下拉多选(数据源取自表 或者 自定义)、输入、日期、时间 ![image-20220113114621255](images/image-20220113114621255.png) ![image-20220113114502202](images/image-20220113114502202.png) # 七、看板图形中的日期处理 ![image-20220113120207907](images/image-20220113120207907.png) ![image-20220113120220879](images/image-20220113120220879.png) ![image-20220113163708563](images/image-20220113163708563.png) # 八、看板图形中点击跳转的处理 ![image-20220113164813750](images/image-20220113164813750.png) **配置 tb_report_chart 时,一定注意,x轴的 xAxis 的值需要在 tb_report_where 中存在,否则条件不起作用。** tb_report_chart ![image-20220113164958429](images/image-20220113164958429.png) tb_report_where ![image-20220113164933541](images/image-20220113164933541.png)