Skip to content

数据报表 PRD

文档信息

项目内容
产品名称PMForge - 数据报表
文档版本v2.0
创建日期2026-09-24
最后更新2026-09-24
文档状态评审中
优先级P1

一、功能概述

1.1 功能定位

数据报表模块是 PMForge 平台的数据分析与可视化中心。如果把平台各模块产生的数据比作"原材料",那报表模块就是"加工厂"——把散落在项目、任务、商城、CRM 等各处的原始数据,经过查询、汇总、排版,变成管理者看得懂、用得上的报表和大屏。

通俗理解: 想象你开了一家公司,每天产生大量销售单据、考勤记录、项目进度。报表模块就像一个"数据翻译官 + 可视化画板"——翻译官把数据库里的数字翻译成人类可读的表格,画板把这些表格拼成漂亮的数据大屏挂在办公室墙上。基于积木报表(JimuReport)实现,后台拖拽设计、前台一键查看。

核心能力矩阵:

能力说明使用频率
报表设计器类 Excel 拖拽设计报表布局,绑定 SQL 数据源中(设计一次,反复使用)
报表管理报表全生命周期:创建→发布→禁用→删除
数据源管理接入多种数据库(MySQL/PostgreSQL/Oracle/SQL Server)低(配置一次,持续使用)
数据大屏拖拽式设计全屏数据看板,支持 20+ 图表组件
报表导出Excel / PDF 导出 + 打印,支持异步大数据量导出高(日常高频操作)
报表查看与筛选前台用户查看报表、动态筛选、分页浏览高(日常高频操作)
报表统计报表访问量、活跃用户、使用排行等运营数据

1.2 目标用户

用户类型使用场景典型操作
数据分析师设计复杂业务报表、构建数据大屏报表设计器、数据源管理、大屏设计
项目管理人员查看项目进度报表、任务统计报表报表查看、筛选、导出
团队负责人查看团队绩效报表、周报/月报报表查看、导出 Excel
高层管理者通过数据大屏查看全局数据概览大屏全屏展示
系统管理员管理数据源、配置报表权限数据源管理、权限配置

1.3 业务价值

价值维度当前痛点解决方案量化预期
降低报表开发门槛每次新报表都需开发写代码,排期长拖拽式设计器,业务人员自助完成报表交付周期从 3-5 天→0.5 天
统一数据展示入口各系统数据分散,需登录多个平台多数据源接入,一个平台看全部减少 70% 跨系统查询操作
数据驱动决策管理层缺少实时数据看板数据大屏实时展示关键指标决策响应速度提升 50%
线下分享与存档数据只在系统中,无法离线流转Excel / PDF 导出 + 打印满足 100% 线下汇报场景
数据安全报表缺乏权限管控,敏感数据裸露角色/部门/用户三级权限控制权限覆盖率 100%

1.4 功能范围

功能分类后台管理端前台用户端说明
报表设计器拖拽式可视化设计
报表管理✅(查看)全生命周期管理
数据大屏设计✅(展示)20+ 图表组件
报表导出Excel / PDF / 打印
报表统计使用量与趋势分析
数据源管理多数据库接入
报表分类管理树形分类组织
报表权限配置细粒度访问控制
报表查看与筛选动态参数筛选
数据大屏展示全屏自适应展示

二、用户场景

2.1 用户角色

角色描述核心诉求使用频率
报表设计者数据分析师 / 开发人员快速设计复杂报表、灵活配置数据源每周 2-3 次
报表查看者项目管理人员 / 团队负责人方便查看报表数据、快速筛选和导出每天 3-5 次
大屏观众高层管理者 / 来访客户直观展示关键数据指标、视觉效果好每天 1-2 次
系统管理员运维管理人员管理数据源、配置权限、监控使用情况每周 1-2 次

2.2 使用场景

场景1:数据分析师小李设计项目进度报表

故事线: 产品经理需要一份"各项目进度统计报表",包含项目名称、计划完成日期、实际进度、延期天数。小李进入报表设计器 → 选择内置数据源 → 编写 SQL 查询项目进度数据 → 拖拽设计表头和单元格布局 → 设置延期天数 > 0 的单元格标红 → 预览确认 → 发布报表。

验收标准(AC):

#验收条件验证方式
1SQL 编辑器中输入 SELECT 后自动提示表名,输入表名后提示字段名操作验证
2设置条件格式"延期天数 > 0 标红"后,预览中延期行确实显示红色背景效果验证
3报表发布后,前台用户可在报表列表中看到并打开查看流程验证
4设计过程中断网 60 秒内恢复,重新打开设计器可看到自动保存的草稿异常验证
5从新建到发布,一个简单报表设计耗时不超过 15 分钟效率验证

场景2:高层管理者张总的数据大屏展示

故事线: 公司接待客户参观,张总打开"经营数据大屏"→ 大屏全屏展示:左侧项目总数(数字翻牌器滚动)、中间收入趋势折线图、右侧团队分布地图 → 数据每 30 秒自动刷新 → 客户对实时数据可视化效果印象深刻。

验收标准(AC):

#验收条件验证方式
1大屏在 1920×1080 分辨率下全屏展示,无滚动条、无留白UI 验证
2数字翻牌器从 0 滚动到目标值,动画时长 1.5 秒效果验证
3数据按 30 秒间隔自动刷新,刷新过程中图表无闪烁功能验证
4在 1366×768 分辨率下等比缩放,所有组件完整可见兼容性验证
5大屏访问链接可直接发给客户,客户无需登录即可查看(配置免登录时)流程验证

场景3:项目经理小王导出月度报表

故事线: 月底小王需要提交项目月报 → 打开"项目月度统计报表" → 筛选日期为本月、选择所属部门 → 点击"导出 Excel" → 浏览器自动下载 项目月度统计报表_202609241530.xlsx → 小王附上分析说明后发送给领导。

验收标准(AC):

#验收条件验证方式
1导出的 Excel 数据与页面筛选条件一致,行数相同数据验证
2Excel 文件包含表头行,列名与报表列名一致格式验证
3导出 1 万条数据以内,文件在 5 秒内开始下载性能验证
4导出超过 10 万条时,系统提示"已提交异步导出,完成后通知"边界验证
5导出的 PDF 文件保留报表样式(合并单元格、背景色等)格式验证

场景4:系统管理员配置新数据源

故事线: 公司新上线了 CRM 系统,管理员需要将 CRM 数据库接入报表平台 → 进入数据源管理 → 新建数据源,选择 MySQL → 填写连接地址、端口、数据库名、用户名、密码 → 点击"测试连接"→ 显示"连接成功" → 保存。此后在报表设计器中即可选择该数据源查询 CRM 数据。

验收标准(AC):

#验收条件验证方式
1填写正确连接信息后,"测试连接"在 5 秒内返回成功功能验证
2填写错误密码时,"测试连接"返回明确错误提示"认证失败"异常验证
3数据源保存后,密码以加密形式存储,后台页面脱敏显示(如 ****安全验证
4被报表引用的数据源点击删除时,提示"该数据源已被 X 个报表使用,无法删除"约束验证
5内置数据源的"编辑"和"删除"按钮置灰不可操作UI 验证

场景5:系统管理员配置报表权限

故事线: 财务报表包含敏感薪资数据,管理员设置"仅财务部角色可查看" → 配置权限:选择"财务部"角色 → 权限类型"查看" → 保存。其他部门用户尝试访问该报表时,页面提示"无权限访问"。

验收标准(AC):

#验收条件验证方式
1配置财务部角色"查看"权限后,财务部用户可正常打开报表正向验证
2非财务部用户访问该报表,页面显示"暂无权限,请联系管理员"反向验证
3未配置任何权限的报表,仅管理员和设计者可访问默认策略验证
4权限配置保存后即时生效,无需用户重新登录即时性验证
5支持同时配置角色权限和部门权限,取并集组合验证

场景6:团队负责人查看报表并筛选数据

故事线: 团队负责人打开"任务统计报表" → 顶部筛选区域显示:部门(下拉选择)、日期范围(日期选择器)、任务状态(多选下拉) → 选择"研发部" + "本月" + "进行中" → 点击"查询" → 报表数据实时刷新 → 发现某项目延期率异常 → 点击"导出 Excel"下载详细记录排查。

验收标准(AC):

#验收条件验证方式
1筛选条件改变后点击"查询",报表数据在 3 秒内刷新性能验证
2点击"重置"按钮,所有筛选条件恢复默认值,报表重新加载功能验证
3下拉选择控件的选项来自数据字典,修改字典后筛选项同步更新联动验证
4报表数据超过 50 条时自动分页,页码栏显示总数和翻页按钮UI 验证
5导出的 Excel 数据与当前筛选结果完全一致(不多不少)数据验证

三、功能需求

3.1 后台管理端

3.1.1 功能清单

功能优先级说明预计开发工时
报表设计器P0基于积木报表的可视化报表设计5 人日
报表管理P0报表 CRUD、分类、权限配置3 人日
数据源管理P0多数据源接入与管理3 人日
报表导出P0Excel / PDF 导出、打印3 人日
数据大屏P1大屏设计与发布5 人日
报表分类管理P1报表分类 CRUD1 人日
报表统计P2使用统计、访问量分析2 人日

3.1.2 报表设计器

页面结构(ASCII 线框):

报表设计器

操作流程:

  1. 管理员进入报表管理页面,点击"新建报表"
  2. 选择报表类型(普通报表 / 分组报表 / 主从报表 / 卡片报表)
  3. 配置数据源:选择已有数据源或新建
  4. 编写 SQL 查询语句,配置参数(${param} 占位符)
  5. 在编辑区域拖拽设计报表布局
  6. 设置单元格样式(字体、颜色、边框、对齐方式等)
  7. 绑定数据字段到单元格
  8. 设置条件格式、合计行等高级功能
  9. 点击"预览"查看报表效果
  10. 确认无误后保存并发布

业务规则:

规则编号规则描述设计原因
R-01报表设计器基于积木报表(JimuReport)组件实现复用成熟开源方案,避免重复造轮子
R-02支持类 Excel 操作体验:合并单元格、设置行高列宽业务人员熟悉 Excel,降低学习成本
R-03SQL 中可使用 ${param} 占位符实现参数化查询让同一报表服务不同筛选条件的用户
R-04支持字典翻译:字段值自动映射为中文显示数据库存 code(如 status=1),报表显示"进行中"
R-05支持条件格式:根据数据值动态设置单元格样式让异常数据一眼可见(如延期标红)
R-06报表设计自动保存(每 60 秒)防止设计过程中意外丢失内容
R-07SQL 编辑器支持语法高亮、自动补全、一键格式化提升 SQL 编写效率和准确性
R-08支持报表模板:可保存为模板供复用相似报表无需从零设计
R-09支持报表导入/导出(JimuReport 格式)跨环境迁移报表配置
R-10报表设计支持撤销/重做操作(最多 50 步)误操作可快速回退

SQL 编辑器功能明细:

功能说明交互方式
语法高亮SQL 关键字、函数、字符串不同颜色自动生效
自动补全输入表名/字段名时弹出候选列表Ctrl + Space 触发
格式化SQL 语句一键美化排版点击"格式化"按钮
执行测试直接执行 SQL 查看数据结果(限 100 行)点击"执行"按钮
参数提取自动识别 ${param} 并生成参数表单保存时自动解析
全屏编辑SQL 编辑区域全屏展示点击"全屏"图标

接口设计:

接口名称请求方式接口路径说明
保存报表设计POST/admin-api/jmreport/save保存报表设计内容
预览报表POST/admin-api/jmreport/preview预览报表效果
执行 SQL 测试POST/admin-api/jmreport/sql/test测试 SQL 查询(限 100 行)
获取表字段列表GET/admin-api/jmreport/datasource/fields获取数据表字段
导入报表模板POST/admin-api/jmreport/import导入报表模板文件
导出报表模板GET/admin-api/jmreport/export导出报表模板文件

请求参数(保存报表设计):

参数名类型必填说明
nameString报表名称,1-100 字符
codeString报表编码,全局唯一,创建后不可修改
categoryLong分类 ID
typeInteger报表类型(1-普通 2-分组 3-主从 4-卡片)
contentString报表设计内容(JSON)
dataSourceLong数据源 ID
sqlContentStringSQL 查询语句
descriptionString报表描述,最多 500 字符

3.1.3 报表管理

页面结构(ASCII 线框):

报表管理列表

报表状态机:

报表状态机

业务规则:

规则编号规则描述设计原因
R-01报表编码全局唯一,创建后不可修改编码是前台访问报表的唯一标识,变更会导致链接失效
R-02报表状态流转:草稿→已发布→已禁用,已禁用可重新发布发布前可反复修改,发布后需先禁用才能编辑
R-03草稿状态报表仅设计者和管理员可预览避免未完成报表被普通用户看到
R-04已发布报表需先禁用再删除防止误删正在使用的报表
R-05复制报表生成新编码(原编码 + _copy快速基于已有报表创建新报表
R-06报表列表默认按更新时间倒序排列最近修改的报表最常用
R-07支持按报表名称、编码模糊搜索快速定位目标报表
R-08报表权限可配置到角色/部门/用户三级满足不同粒度的访问控制需求

接口设计:

接口名称请求方式接口路径说明
获取报表分页列表GET/admin-api/jmreport/report/page分页查询
获取报表详情GET/admin-api/jmreport/report/get单个详情
创建报表POST/admin-api/jmreport/report/create新建
更新报表PUT/admin-api/jmreport/report/update编辑
删除报表DELETE/admin-api/jmreport/report/delete删除
复制报表POST/admin-api/jmreport/report/copy复制
发布报表PUT/admin-api/jmreport/report/publish发布
禁用报表PUT/admin-api/jmreport/report/disable禁用
配置报表权限PUT/admin-api/jmreport/report/permission权限配置
批量删除DELETE/admin-api/jmreport/report/batch-delete批量删除
批量移动分类PUT/admin-api/jmreport/report/batch-move批量移动

请求参数(分页查询):

参数名类型必填说明
nameString报表名称(模糊匹配)
codeString报表编码(模糊匹配)
categoryLong分类 ID
typeInteger报表类型
statusInteger状态(0-草稿 1-已发布 2-已禁用)
createTimeDateTime[]创建时间范围
pageNoInteger页码
pageSizeInteger每页条数,默认 20

返回结果(报表列表项):

字段名类型说明
idLong报表 ID
nameString报表名称
codeString报表编码
categoryLong分类 ID
categoryNameString分类名称
typeInteger报表类型
typeNameString类型名称
statusInteger状态
statusNameString状态名称
viewCountLong访问量
descriptionString描述
creatorString创建者
createTimeDateTime创建时间
updateTimeDateTime更新时间

3.1.4 数据源管理

页面结构(ASCII 线框):

数据源管理

支持的数据源类型:

数据源类型说明驱动类使用场景
MySQLMySQL 数据库com.mysql.cj.jdbc.Driver最常用,PMForge 默认
PostgreSQLPostgreSQL 数据库org.postgresql.Driver开源场景
OracleOracle 数据库oracle.jdbc.OracleDriver企业级财务/ERP 系统
SQL ServerSQL Server 数据库com.microsoft.sqlserver.jdbc.SQLServerDriverWindows 生态
内置数据源PMForge 自身数据库系统默认查询平台本身数据

业务规则:

规则编号规则描述设计原因
R-01数据源名称不能重复避免设计器中选错数据源
R-02数据库密码使用 AES 加密存储防止数据库密码泄露
R-03新建数据源必须通过连接测试才可保存确保数据源可用,避免保存无效配置
R-04数据源被报表引用时不可删除防止正在使用的报表查询失败
R-05内置数据源不可编辑和删除平台基础能力,不允许误操作
R-06支持连接池配置(最大连接数、超时时间)不同数据源负载不同,需独立配置
R-07数据源状态定期自动检测(每 5 分钟)及时发现连接异常,通知管理员

接口设计:

接口名称请求方式接口路径说明
获取数据源列表GET/admin-api/jmreport/datasource/list列表查询
获取数据源详情GET/admin-api/jmreport/datasource/get单个详情
创建数据源POST/admin-api/jmreport/datasource/create新建
更新数据源PUT/admin-api/jmreport/datasource/update编辑
删除数据源DELETE/admin-api/jmreport/datasource/delete删除
测试数据源连接POST/admin-api/jmreport/datasource/test连接测试
获取数据库表列表GET/admin-api/jmreport/datasource/tables获取表列表

请求参数(创建数据源):

参数名类型必填说明
nameString数据源名称
typeString类型(mysql/postgresql/oracle/sqlserver/builtin)
urlString连接 URL
usernameString用户名
passwordString密码
maxPoolSizeInteger最大连接池大小(默认 10)
connectionTimeoutInteger连接超时(毫秒,默认 30000)
descriptionString描述

返回结果(数据源详情):

字段名类型说明
idLong数据源 ID
nameString数据源名称
typeString数据源类型
urlString连接 URL
usernameString用户名
passwordString密码(脱敏:****
maxPoolSizeInteger最大连接池大小
connectionTimeoutInteger连接超时时间
statusInteger状态(0-正常 1-异常)
lastTestTimeDateTime最后测试时间
descriptionString描述
createTimeDateTime创建时间

3.1.5 数据大屏

页面结构(ASCII 线框):

数据大屏设计器

支持的图表组件(20 种):

组件类别组件名称典型用途
图表(10 种)折线图展示数据趋势变化(如月度收入走势)
柱状图对比不同类别数据(如各部门任务数)
饼图展示数据占比(如项目状态分布)
环形图类似饼图,中间可显示总数
仪表盘展示百分比/进度(如任务完成率)
雷达图多维度数据对比(如团队能力画像)
散点图展示数据分布关系
漏斗图展示转化流程(如销售漏斗)
地图地理数据可视化(如客户分布)
热力图数据密度展示
文本(3 种)文本组件标题、说明文字
数字翻牌器动态数字滚动(如今日订单数)
跑马灯滚动文字通知
媒体(3 种)图片静态图片展示
视频视频播放
时钟实时时钟显示
装饰(4 种)边框装饰性边框
背景大屏背景设置
分割线区域分割线
图标装饰性图标

业务规则:

规则编号规则描述设计原因
R-01大屏默认分辨率 1920×1080,支持自定义1080p 是当前主流显示器分辨率
R-02组件支持自由拖拽、缩放、对齐、图层调整大屏设计需要灵活的布局能力
R-03数据刷新间隔可配置(默认 30 秒,最小 5 秒)平衡数据实时性和服务器压力
R-04大屏支持全屏展示模式(F11 适配)展示场景通常需要全屏
R-05发布后生成访问链接,可配置免登录访问方便分享给外部访客
R-06支持大屏模板:保存为模板、从模板创建同类大屏无需从零搭建
R-07组件数据支持静态数据和动态数据源两种模式静态用于固定文字,动态用于实时数据
R-08画布支持网格吸附、辅助线对齐帮助设计者快速对齐组件
R-09大屏支持多页面轮播展示一块屏幕展示更多内容
R-10支持组件复制、粘贴、快捷键操作提升设计效率

接口设计:

接口名称请求方式接口路径说明
获取大屏分页列表GET/admin-api/jmreport/screen/page分页查询
获取大屏详情GET/admin-api/jmreport/screen/get单个详情
创建大屏POST/admin-api/jmreport/screen/create新建
更新大屏PUT/admin-api/jmreport/screen/update编辑
删除大屏DELETE/admin-api/jmreport/screen/delete删除
发布大屏PUT/admin-api/jmreport/screen/publish发布
获取访问链接GET/admin-api/jmreport/screen/link访问链接
保存大屏模板POST/admin-api/jmreport/screen/template/save保存模板
获取模板列表GET/admin-api/jmreport/screen/template/list模板列表

请求参数(创建大屏):

参数名类型必填说明
nameString大屏名称
widthInteger画布宽度(默认 1920)
heightInteger画布高度(默认 1080)
backgroundString背景设置(颜色/图片 URL)
componentsJSON组件配置列表
descriptionString大屏描述

返回结果(大屏详情):

字段名类型说明
idLong大屏 ID
nameString大屏名称
widthInteger画布宽度
heightInteger画布高度
backgroundString背景设置
componentsJSON组件配置列表
statusInteger状态(0-草稿 1-已发布 2-已禁用)
viewCountLong访问量
accessUrlString访问链接
refreshIntervalInteger刷新间隔(秒)
descriptionString描述
creatorString创建者
createTimeDateTime创建时间
updateTimeDateTime更新时间

3.1.6 报表导出

导出状态机:

导出任务状态机

业务规则:

规则编号规则描述设计原因
R-01Excel 导出使用 .xlsx 格式兼容主流 Office 软件
R-02PDF 导出保留报表样式和布局确保打印效果与设计一致
R-03同步导出数据量上限 10 万条防止大数据量同步导出导致请求超时
R-04超过 10 万条自动切换异步导出大数据量后台生成,完成后通知下载
R-05导出文件名格式:报表名称_yyyyMMddHHmmss避免多次导出文件同名覆盖
R-06打印支持自定义纸张大小和方向适配不同打印需求
R-07导出权限受报表独立权限控制有查看权不一定有导出权
R-08导出时带入当前筛选条件确保导出数据与用户看到的一致
R-09异步导出任务可在"导出记录"中查看进度和下载用户不需要一直等待

接口设计:

接口名称请求方式接口路径说明
导出 ExcelPOST/admin-api/jmreport/export/excel同步导出
导出 PDFPOST/admin-api/jmreport/export/pdf同步导出
打印报表POST/admin-api/jmreport/export/print打印
异步导出POST/admin-api/jmreport/export/async提交异步任务
获取导出记录GET/admin-api/jmreport/export/records任务列表
下载导出文件GET/admin-api/jmreport/export/download下载文件

请求参数(导出 Excel):

参数名类型必填说明
reportIdLong报表 ID
paramsMap报表参数
exportRangeString导出范围(all/page/selected,默认 all)
includeHeaderBoolean是否包含表头(默认 true)

返回结果(异步导出):

字段名类型说明
taskIdString导出任务 ID
statusString任务状态(processing/completed/failed)
messageString提示信息

3.1.7 报表统计

页面结构(ASCII 线框):

报表统计

业务规则:

规则编号规则描述设计原因
R-01统计数据每小时更新一次避免频繁统计消耗数据库资源
R-02访问量统计包含查看和导出操作全面反映报表使用情况
R-03支持按日/周/月粒度查看趋势不同管理场景需要不同时间粒度
R-04统计时间范围最长 90 天防止查询范围过大导致性能问题
R-05支持统计数据导出为 Excel满足线下汇报需求

接口设计:

接口名称请求方式接口路径说明
获取统计概览GET/admin-api/jmreport/statistics/overview概览数据
获取访问趋势GET/admin-api/jmreport/statistics/trend趋势图
获取报表使用排行GET/admin-api/jmreport/statistics/report-rankTop10
获取用户访问排行GET/admin-api/jmreport/statistics/user-rank用户排行
导出统计数据GET/admin-api/jmreport/statistics/export导出

请求参数(访问趋势):

参数名类型必填说明
startTimeDate开始日期
endTimeDate结束日期
granularityString统计粒度(day/week/month)
reportIdLong指定报表 ID(不传则统计全部)

返回结果(统计概览):

字段名类型说明
totalReportsInteger报表总数
totalScreensInteger大屏总数
todayViewCountLong今日访问量
todayActiveUsersInteger今日活跃用户数
totalViewCountLong累计访问量
totalDataSourcesInteger数据源总数

3.1.8 报表分类管理

业务规则:

规则编号规则描述设计原因
R-01分类支持多级树形结构(最多 3 级)满足不同组织维度的分类需求
R-02分类名称同级不可重复避免分类混淆
R-03分类下有报表时不可删除防止报表变成"无分类"状态
R-04支持拖拽调整排序和层级直观的分类管理体验

接口设计:

接口名称请求方式接口路径说明
获取分类树GET/admin-api/jmreport/category/tree树形列表
创建分类POST/admin-api/jmreport/category/create新建
更新分类PUT/admin-api/jmreport/category/update编辑
删除分类DELETE/admin-api/jmreport/category/delete删除
排序分类PUT/admin-api/jmreport/category/sort调整排序

请求参数(创建分类):

参数名类型必填说明
nameString分类名称,1-50 字符
parentIdLong父分类 ID(空则顶级)
sortInteger排序值
descriptionString分类描述

3.2 前台用户端

3.2.1 功能清单

功能优先级说明预计开发工时
报表查看P0查看已发布的报表3 人日
报表筛选P0通过参数筛选报表数据2 人日
报表导出P1导出报表为 Excel / PDF2 人日
数据大屏展示P1全屏查看数据大屏2 人日

3.2.2 报表查看

页面结构(ASCII 线框):

报表查看

业务规则:

规则编号规则描述设计原因
R-01仅展示已发布状态的报表草稿和禁用报表不应被普通用户看到
R-02报表数据根据用户权限进行过滤不同角色看到不同范围的数据
R-03报表参数表单根据 SQL 参数自动生成设计器配好参数,前台自动渲染筛选表单
R-04支持参数默认值配置打开报表即显示最常用数据,减少操作
R-05报表数据支持自动刷新(可配置间隔)实时性要求高的报表需定时刷新
R-06表格支持列排序、列宽调整用户自定义查看习惯
R-07大数据量报表默认分页展示(每页 50 条)避免一次加载过多数据导致页面卡顿
R-08支持报表全屏展示模式专注查看数据,排除干扰

接口设计:

接口名称请求方式接口路径说明
查看报表GET/app-api/jmreport/view报表页面
获取报表数据POST/app-api/jmreport/data数据查询
获取报表参数GET/app-api/jmreport/params参数定义

请求参数(获取报表数据):

参数名类型必填说明
reportCodeString报表编码
paramsMap报表查询参数
pageNoInteger页码(默认 1)
pageSizeInteger每页条数(默认 50)

返回结果(报表数据):

字段名类型说明
columnsColumn[]列定义(字段名、类型、标题)
rowsMap[]数据行列表
totalLong总记录数
pageNoInteger当前页码
pageSizeInteger每页条数

3.2.3 报表筛选

支持的筛选控件类型:

控件类型说明参数格式适用场景
输入框文本输入字符串名称、编号等模糊搜索
下拉选择单选下拉单个值状态、类型等固定选项
多选下拉多选下拉框值数组同时选择多个部门/角色
日期选择单个日期日期字符串指定某一天
日期范围起止日期[start, end]按月/周筛选
级联选择多级联动值数组省/市/区等多级分类
数字范围起止数值[min, max]金额、数量范围

业务规则:

规则编号规则描述设计原因
R-01筛选控件类型根据参数类型自动匹配减少设计器配置工作量
R-02下拉控件支持数据字典和 SQL 数据源两种数据来源字典用于固定选项,SQL 用于动态数据
R-03支持必填参数和可选参数必填参数确保报表数据有意义
R-04支持参数默认值打开报表即显示常用数据
R-05支持参数联动(选 A 后自动筛选 B 的可选值)如选"部门"后,"员工"下拉只显示该部门员工
R-06筛选条件区域可折叠/展开报表内容区域最大化

接口设计:

接口名称请求方式接口路径说明
获取筛选参数定义GET/app-api/jmreport/filter/params参数定义
获取下拉数据GET/app-api/jmreport/filter/options下拉选项

返回结果(筛选参数定义):

字段名类型说明
paramNameString参数名
paramLabelString参数标签
controlTypeString控件类型
requiredBoolean是否必填
defaultValueObject默认值
optionsOption[]选项列表
dataSourceString数据来源(dict/sql/static)

3.2.4 报表导出

业务规则:

规则编号规则描述设计原因
R-01导出数据受报表权限控制有查看权不一定有导出权
R-02导出数据与当前筛选条件一致用户看到什么就导出什么
R-03Excel 导出包含表头和所有数据行确保文件可独立使用
R-04PDF 导出保留报表样式确保打印效果
R-05数据量超过上限时提示使用异步导出避免浏览器超时
R-06打印功能调用浏览器原生打印无需额外组件,兼容性好

接口设计:

接口名称请求方式接口路径说明
导出 ExcelPOST/app-api/jmreport/export/excel导出
导出 PDFPOST/app-api/jmreport/export/pdf导出
打印报表POST/app-api/jmreport/export/print打印

请求参数(导出 Excel):

参数名类型必填说明
reportCodeString报表编码
paramsMap当前筛选参数
includeHeaderBoolean是否包含表头(默认 true)

3.2.5 数据大屏展示

业务规则:

规则编号规则描述设计原因
R-01大屏自动适配屏幕分辨率(等比缩放)不同会议室显示器分辨率可能不同
R-02数据按配置的间隔自动刷新保持数据实时性
R-03数字翻牌器组件支持动态滚动效果视觉冲击力更强
R-04图表组件支持数据加载动画刷新时不突兀
R-05大屏支持多页轮播(可配置间隔)一块屏展示多组数据
R-06访问大屏可配置免登录展厅/前台场景方便展示
R-07支持通过 URL 参数传入动态过滤条件从其他系统跳转时带入筛选条件

接口设计:

接口名称请求方式接口路径说明
查看大屏GET/app-api/jmreport/screen/view大屏页面
获取大屏数据GET/app-api/jmreport/screen/data组件数据
获取大屏配置GET/app-api/jmreport/screen/config配置信息

请求参数(获取大屏数据):

参数名类型必填说明
screenIdLong大屏 ID
paramsMap动态过滤参数

返回结果(大屏数据):

字段名类型说明
componentsComponentData[]各组件的数据列表
refreshIntervalInteger建议刷新间隔(秒)
lastUpdateTimeDateTime数据最后更新时间

四、非功能需求

4.1 性能要求

指标要求实现策略
报表查询响应时间< 3 秒(10 万条数据以内)SQL 优化 + 数据库索引 + 结果缓存
报表设计器加载时间< 2 秒懒加载组件面板,设计内容按需渲染
数据大屏加载时间< 3 秒组件数据并行加载,骨架屏过渡
Excel 导出速度10 万条 < 30 秒流式写入(SXSSFWorkbook),避免内存溢出
PDF 导出速度100 页以内 < 15 秒异步生成 + 进度回调
报表并发访问量500 并发用户读写分离 + 连接池 + 结果缓存
数据大屏并发访问量200 并发用户数据缓存 + 定时预计算
SQL 查询超时默认 30 秒,可配置Statement.setQueryTimeout()
数据库连接池每个数据源最大 10 个连接HikariCP 连接池管理

4.2 安全要求

要求说明实现方式
报表权限控制基于角色/部门/用户的细粒度权限拦截器校验 report_permission 表
SQL 注入防护参数化查询,禁止拼接 SQLPreparedStatement + 参数校验
数据源密码加密AES 加密存储AES-256-GCM 加密,密钥从配置中心获取
导出权限报表导出受独立权限控制导出接口单独校验 jmreport:report:export
数据脱敏敏感字段支持配置脱敏规则手机号/身份证等字段中间位替换为 *
访问日志记录所有报表访问和导出操作AOP 切面写入 report_access_log
数据源隔离不同租户的数据源严格隔离tenant_id 过滤 + 数据源连接隔离
XSS 防护报表内容 HTML 标签过滤Jsoup.clean() 白名单过滤

4.3 错误码定义

错误码说明触发场景用户提示
JMREPORT_001报表编码已存在创建报表时编码重复"报表编码已存在,请更换"
JMREPORT_002报表不存在查看/编辑不存在的报表"报表不存在"
JMREPORT_003报表未发布前台查看草稿状态报表"报表尚未发布,请联系管理员"
JMREPORT_004无报表访问权限用户无权查看该报表"暂无权限,请联系管理员"
JMREPORT_005数据源名称重复创建数据源时名称重复"数据源名称已存在"
JMREPORT_006数据源连接失败测试连接不通"连接失败:{具体原因}"
JMREPORT_007数据源被引用无法删除删除被报表使用的数据源"该数据源已被 {N} 个报表使用,无法删除"
JMREPORT_008SQL 执行超时SQL 查询超过 30 秒"查询超时,请优化 SQL 或缩小数据范围"
JMREPORT_009导出数据量超限同步导出数据超过 10 万条"数据量较大,已提交异步导出,完成后通知"
JMREPORT_010报表已发布不可直接删除删除已发布报表"已发布报表需先禁用再删除"
JMREPORT_011分类下存在报表不可删除删除非空分类"该分类下还有报表,请先移动报表"
JMREPORT_012内置数据源不可操作编辑/删除内置数据源"内置数据源不可修改"
JMREPORT_013大屏名称重复创建大屏时名称重复"大屏名称已存在"

4.4 兼容性要求

要求
PC 浏览器Chrome 80+、Firefox 75+、Safari 13+、Edge 80+
数据大屏展示推荐 Chrome 全屏模式,分辨率 1920×1080
报表导出Excel 兼容 Office 2016+、WPS 2019+
PDF 查看兼容主流 PDF 阅读器
打印兼容浏览器原生打印功能
移动端支持移动端浏览器查看简单报表(响应式布局)

五、数据设计

5.1 数据表概览

表名说明核心字段预计数据量
report报表主表name, code, type, status, sql_content百级
report_category报表分类name, parent_id, sort十级
report_data_source数据源name, type, url, password(加密)个位数
report_screen数据大屏name, width, height, components十级
report_permission报表权限report_id, target_type, target_id, permission百级
report_export_record导出记录report_id, export_type, file_url, status千级/月
report_access_log访问日志report_id, user_id, access_type, duration万级/月

5.2 表关系图

报表表关系

5.3 缓存策略

缓存 Key缓存内容过期时间更新策略
jmreport:config:{reportId}报表配置信息(设计内容、SQL 等)30 分钟报表保存时主动失效
jmreport:screen:config:{screenId}大屏配置信息30 分钟大屏保存时主动失效
jmreport:datasource:list数据源列表10 分钟数据源变更时主动失效
jmreport:category:tree分类树1 小时分类变更时主动失效
jmreport:stats:overview统计概览数据1 小时定时刷新

5.4 数据表结构

5.4.1 报表表(report)

字段名类型必填说明
idBIGINT报表 ID(主键)
nameVARCHAR(100)报表名称
codeVARCHAR(100)报表编码(唯一)
categoryBIGINT分类 ID
typeTINYINT报表类型(1-普通 2-分组 3-主从 4-卡片)
contentLONGTEXT报表设计内容(JSON)
data_sourceBIGINT数据源 ID
sql_contentLONGTEXTSQL 查询语句
api_urlVARCHAR(512)API 数据源 URL
statusTINYINT状态(0-草稿 1-已发布 2-已禁用)
view_countBIGINT访问量(默认 0)
descriptionVARCHAR(500)报表描述
sortINT排序值(默认 0)
creatorVARCHAR(64)创建者
create_timeDATETIME创建时间
updaterVARCHAR(64)更新者
update_timeDATETIME更新时间
deletedBIT删除标记(0-未删除 1-已删除)
tenant_idBIGINT租户 ID

5.4.2 报表分类表(report_category)

字段名类型必填说明
idBIGINT分类 ID(主键)
nameVARCHAR(50)分类名称
parent_idBIGINT父分类 ID(0 为顶级)
sortINT排序值
descriptionVARCHAR(200)分类描述
statusTINYINT状态(0-正常 1-禁用)
creatorVARCHAR(64)创建者
create_timeDATETIME创建时间
updaterVARCHAR(64)更新者
update_timeDATETIME更新时间
deletedBIT删除标记
tenant_idBIGINT租户 ID

5.4.3 报表数据源表(report_data_source)

字段名类型必填说明
idBIGINT数据源 ID(主键)
nameVARCHAR(100)数据源名称
typeVARCHAR(20)类型(mysql/postgresql/oracle/sqlserver/builtin)
urlVARCHAR(512)连接 URL
usernameVARCHAR(100)用户名
passwordVARCHAR(255)密码(AES 加密存储)
max_pool_sizeINT最大连接池大小(默认 10)
connection_timeoutINT连接超时(毫秒,默认 30000)
statusTINYINT状态(0-正常 1-异常)
last_test_timeDATETIME最后测试时间
descriptionVARCHAR(200)描述
creatorVARCHAR(64)创建者
create_timeDATETIME创建时间
updaterVARCHAR(64)更新者
update_timeDATETIME更新时间
deletedBIT删除标记
tenant_idBIGINT租户 ID

5.4.4 数据大屏表(report_screen)

字段名类型必填说明
idBIGINT大屏 ID(主键)
nameVARCHAR(100)大屏名称
widthINT画布宽度(默认 1920)
heightINT画布高度(默认 1080)
backgroundVARCHAR(512)背景设置(JSON)
componentsLONGTEXT组件配置(JSON)
statusTINYINT状态(0-草稿 1-已发布 2-已禁用)
view_countBIGINT访问量(默认 0)
access_urlVARCHAR(255)访问链接标识
refresh_intervalINT刷新间隔(秒,默认 30)
enable_authBIT是否需要认证(默认 1)
descriptionVARCHAR(500)描述
creatorVARCHAR(64)创建者
create_timeDATETIME创建时间
updaterVARCHAR(64)更新者
update_timeDATETIME更新时间
deletedBIT删除标记
tenant_idBIGINT租户 ID

5.4.5 报表权限表(report_permission)

字段名类型必填说明
idBIGINT主键 ID
report_idBIGINT报表 ID(与 screen_id 二选一)
screen_idBIGINT大屏 ID
target_typeTINYINT授权对象类型(1-角色 2-部门 3-用户)
target_idBIGINT授权对象 ID
permissionTINYINT权限类型(1-查看 2-导出 3-管理)
creatorVARCHAR(64)创建者
create_timeDATETIME创建时间
updaterVARCHAR(64)更新者
update_timeDATETIME更新时间
deletedBIT删除标记
tenant_idBIGINT租户 ID

5.4.6 报表导出记录表(report_export_record)

字段名类型必填说明
idBIGINT主键 ID
report_idBIGINT报表 ID
screen_idBIGINT大屏 ID
user_idBIGINT操作用户 ID
export_typeTINYINT导出类型(1-Excel 2-PDF 3-打印)
file_nameVARCHAR(255)文件名
file_urlVARCHAR(512)文件 URL
file_sizeBIGINT文件大小(字节)
statusTINYINT状态(0-处理中 1-已完成 2-失败)
paramsJSON导出参数
error_msgVARCHAR(500)错误信息
creatorVARCHAR(64)创建者
create_timeDATETIME创建时间
updaterVARCHAR(64)更新者
update_timeDATETIME更新时间
deletedBIT删除标记
tenant_idBIGINT租户 ID

5.4.7 报表访问日志表(report_access_log)

字段名类型必填说明
idBIGINT主键 ID
report_idBIGINT报表 ID
screen_idBIGINT大屏 ID
user_idBIGINT访问用户 ID
access_typeTINYINT访问类型(1-查看 2-导出 3-打印)
user_ipVARCHAR(50)用户 IP
user_agentVARCHAR(512)浏览器 UA
durationINT访问时长(毫秒)
paramsJSON访问参数
creatorVARCHAR(64)创建者
create_timeDATETIME创建时间
updaterVARCHAR(64)更新者
update_timeDATETIME更新时间
deletedBIT删除标记
tenant_idBIGINT租户 ID

5.5 数据字典

字典类型字典值说明
report_type1-普通报表 2-分组报表 3-主从报表 4-卡片报表报表类型
report_status0-草稿 1-已发布 2-已禁用报表/大屏状态
report_datasource_typemysql / postgresql / oracle / sqlserver / builtin数据源类型
report_datasource_status0-正常 1-异常数据源状态
report_permission_type1-角色 2-部门 3-用户权限授权对象类型
report_permission_action1-查看 2-导出 3-管理权限操作类型
report_export_type1-Excel 2-PDF 3-打印导出类型
report_export_status0-处理中 1-已完成 2-失败导出任务状态
report_access_type1-查看 2-导出 3-打印访问类型

六、跨模块联动

6.1 联动关系总览

联动模块联动方向联动内容触发方式
认证授权(01-01)报表 → 认证报表访问需登录态校验拦截器
角色权限(01-03)报表 → 权限报表权限基于角色体系接口调用
用户管理(01-05)报表 → 用户报表权限可绑定到用户/部门接口调用
消息通知(02-03)报表 → 通知异步导出完成后推送通知事件驱动
文件存储(02-02)报表 → 存储导出文件存储到文件服务接口调用
日志审计(01-08)报表 → 审计报表设计变更操作记录审计日志AOP 切面

6.2 详细联动设计

6.2.1 报表 ↔ 认证授权(01-01)

联动场景触发条件联动行为数据流向
报表访问鉴权用户访问报表页面校验用户登录态和 Token 有效性报表 → 认证模块
大屏免登录访问大屏配置 enable_auth=0跳过登录校验,允许匿名访问报表 → 认证模块
前台接口鉴权调用 /app-api/jmreport/*Token 校验 + 用户身份解析报表 → 认证模块

6.2.2 报表 ↔ 角色权限(01-03)

联动场景触发条件联动行为数据流向
后台菜单权限用户登录加载菜单根据 jmreport:* 权限标识过滤菜单权限模块 → 报表
报表访问权限用户打开报表查询 report_permission 表,校验角色/部门/用户权限报表 → 权限模块
导出权限校验用户点击导出校验 jmreport:report:export 权限 + 报表独立导出权限报表 → 权限模块
权限对象关联配置报表权限授权对象从角色列表/部门列表中选择报表 → 权限模块

6.2.3 报表 ↔ 用户管理(01-05)

联动场景触发条件联动行为数据流向
用户权限查询校验报表访问权限获取用户所属角色和部门,匹配权限记录报表 → 用户模块
用户离职处理用户状态变为禁用该用户创建的报表标记为禁用,转移给管理员用户模块 → 报表
部门筛选报表 SQL 中使用部门参数从部门树获取部门 ID 传入报表参数用户模块 → 报表

6.2.4 报表 ↔ 消息通知(02-03)

联动场景触发条件联动行为数据流向
异步导出完成导出任务状态变为 completed向用户发送站内通知"您的报表已导出完成,点击下载"报表 → 通知模块
异步导出失败导出任务状态变为 failed向用户发送站内通知"报表导出失败:{原因}"报表 → 通知模块
数据源异常数据源自动检测失败向管理员发送告警通知"数据源 {name} 连接异常"报表 → 通知模块

6.2.5 报表 ↔ 文件存储(02-02)

联动场景触发条件联动行为数据流向
导出文件存储Excel/PDF 导出完成将生成的文件上传到文件存储服务,获取 file_url报表 → 文件存储
导出文件下载用户点击下载通过 file_url 从文件存储服务获取文件报表 → 文件存储
报表模板导入用户上传报表模板文件模板文件上传到临时存储,设计器读取解析报表 → 文件存储
导出文件清理导出记录超过 30 天定时任务清理过期导出文件报表 → 文件存储

6.2.6 报表 ↔ 日志审计(01-08)

联动场景触发条件联动行为数据流向
报表设计变更保存报表设计内容记录操作日志:操作人、报表名称、变更时间报表 → 审计模块
数据源配置变更创建/编辑/删除数据源记录操作日志(含数据源名称、操作类型)报表 → 审计模块
权限配置变更修改报表访问权限记录操作日志(含报表名称、权限变更内容)报表 → 审计模块
报表发布/禁用发布或禁用报表记录状态变更日志报表 → 审计模块

七、附录

7.1 名词解释

术语全称通俗理解
积木报表JimuReport一款开源的可视化报表工具,像搭积木一样拼出报表
数据源Data Source报表连接的数据库,就像水管的水源地,报表从这取数据
报表设计器Report Designer可视化报表编辑工具,类似 Excel 但能绑定数据库
数据大屏Data Screen把多个图表拼成一张全屏"数据海报",挂在大屏幕上
分组报表Group Report按某个字段分组展示,如"按部门分组看任务数"
主从报表Master-Detail Report上面看主表(如订单列表),下面看子表(如订单明细)
参数化查询Parameterized QuerySQL 里留"填空位",用户填什么就查什么
条件格式Conditional Formatting数据满足某条件时自动变色,如"延期>0 标红"
数据字典Data Dictionary系统预定义的"翻译对照表",如 1=进行中 2=已完成
连接池Connection Pool数据库连接的"共享单车",用完放回,下个人继续用
数字翻牌器Number Flipper大屏上从 0 滚动到目标数字的动画效果
异步导出Async Export数据太多时后台慢慢生成文件,完成后通知你下载
报表编码Report Code报表的唯一身份证号,创建后不能改
报表模板Report Template保存好的报表设计,可以复制给新报表用
网格吸附Grid Snap拖拽组件时自动对齐到网格线,让布局整齐
辅助线Guide Line设计器中的对齐参考线,帮助精确排列组件
SQL 注入SQL Injection黑客通过拼接恶意 SQL 攻击数据库,需用参数化查询防范
等比缩放Proportional Scale大屏在不同分辨率下按比例缩放,不变形不留白
数据脱敏Data Masking把手机号中间 4 位变成 ****,防止隐私泄露
多租户Multi-Tenant一套系统服务多家公司,各家公司数据互相看不到
报表权限Report Permission控制谁能看/导出/管理某个报表的安全机制

7.2 权限标识汇总

权限标识说明所属功能
jmreport:report:list查看报表列表报表管理
jmreport:report:query查询报表详情报表管理
jmreport:report:create创建报表报表管理
jmreport:report:update编辑报表报表管理
jmreport:report:delete删除报表报表管理
jmreport:report:publish发布报表报表管理
jmreport:report:export导出报表报表管理
jmreport:report:permission配置报表权限报表管理
jmreport:designer:use使用报表设计器报表设计器
jmreport:datasource:list查看数据源列表数据源管理
jmreport:datasource:create创建数据源数据源管理
jmreport:datasource:update编辑数据源数据源管理
jmreport:datasource:delete删除数据源数据源管理
jmreport:datasource:test测试数据源连接数据源管理
jmreport:screen:list查看大屏列表数据大屏
jmreport:screen:create创建大屏数据大屏
jmreport:screen:update编辑大屏数据大屏
jmreport:screen:delete删除大屏数据大屏
jmreport:screen:publish发布大屏数据大屏
jmreport:category:list查看分类列表分类管理
jmreport:category:create创建分类分类管理
jmreport:category:update编辑分类分类管理
jmreport:category:delete删除分类分类管理
jmreport:statistics:view查看报表统计报表统计
jmreport:statistics:export导出统计数据报表统计

7.3 积木报表集成说明

项目说明
集成方式通过 JimuReport Starter 集成到 Spring Boot
版本要求JimuReport >= 1.6.0
路由前缀/jmreport(设计器)、/admin-api/jmreport(后台接口)、/app-api/jmreport(前台接口)
权限对接自定义权限拦截器对接 PMForge 权限体系
数据源对接扩展 JimuReport 数据源接口支持多租户
主题适配报表设计器样式与 PMForge 后台主题保持一致

7.4 变更记录

版本日期修改内容修改人
v1.02026-09-24初始版本PM Team
v2.02026-09-24增强版:补充验收标准、状态机、ASCII 线框、跨模块联动、名词解释PM Team

本文档为数据报表模块 PRD v2.0,如有问题请联系产品负责人。