背景:我司最近几个月都在调研大屏报表可视化的平台,以前客户为了灵活的做几个各种大屏报表和统计直接采购了帆软的,整个项目才 100 来万,然后帆软采购就要花近 10w,在这个比较卷的时代,针对于新客户我们在试图尝试降低客户的成本,自研或者二开一些可视化大屏组件,让从每次客户提出领导驾驶舱->需求调用->开发->上线这个流程转变为直接在线配置发布,大大的提高交付速度。

通过了解市面上的开源产品,并且协议友好的很少,不是半吊子就是只开源前端或者只开源后端,没有完整的商业案例。很多年前就使用过 jeecg 旗下的低代码和积木 report,但是由于官方这个产品是 开源协议:功能免费、可以商用、代码不开放,如果我们要自己做的话肯定得大概了解一下思路,于是进行了反编译学习底层思路,严厉声明:本文只用于交流学习使用,请勿直接用于商业用途,若侵权请邮件底部邮箱我删除。

介绍

积木报表(JimuReport)是一款免费的 AI 可视化报表。一句话描述需求,AI 自动生成报表与数据大屏;同时提供类 Excel 拖拽设计器,兼容 30 余种数据源,轻松应对各类复杂报表场景——帆软、Tableau 的高性价比开源替代。

GitHub:https://github.com/jeecgboot/JimuReport

  • AI 智能报表:自然语言描述需求,AI 自动生成数据报表、图表、明细表,告别繁琐手工设计
  • AI 智能大屏:一句话生成数据大屏,AI 自动完成布局、配色、组件选型,并智能绑定数据
  • Web 版报表设计器,类 Excel 操作风格,通过拖拽完成报表设计,所见即所得
  • 大屏采用类 word 风格,可以随意拖动组件,想怎么设计怎么设计,可以像百度和阿里一样,设计出炫酷大屏!
  • 从 v1.9+ 起推出 JimuBI 产品,她的牛叉之处,同时支持仪表盘、大屏、门户 (支持交互)、移动.
  • 秉承"简单、易用、专业"的产品理念,极大的降低报表开发难度、缩短开发周期、节省成本。
  • 领先的企业级 Web 报表,支持各种复杂报表,专注于解决企业报表难题。
  • 数据可视化领域,帆软、Tableau、DataV 的高性价比开源替代方案,拥有更好的体验和更简单的使用方式

快速开始

在学习之前肯定是现跑起来,官方仓库就是有集成示例,我们直接拉取下来简单修改下数据库就可以跑起来,由于 v2.5.0 最近官方发布了 AI 功能,所以还需要配置一下 AI 相关的配置。

本文基于最新的 2.5.0 进行学习。

直接拉取:https://github.com/jeecgboot/jimureport/tree/master/jimureport-example 然后启动。readme 里面有详细说明这里不做过多解释。

启动成功了可以看到报表和 BI 两个界面,大概如下:

报表工作台:         http://localhost:8085/jmreport/list
BI大屏工作台:         http://localhost:8085/drag/list

Java侧开源报表大屏 - jimureport 逆向学习及二开思路

Java侧开源报表大屏 - jimureport 逆向学习及二开思路

逆向学习

我们直接反编译两个 jar 核心 jar 包。

jimureport-spring-boot3-starter、jimubi-spring-boot3-starter

我使用的工具是:https://github.com/skylot/jadx/releases,你也可以直接使用 IDEA 里面自带的反编译。

主要功能都在jimureport-spring-boot3-starter,看懂一个其实其他都一样。

反编译后直接让 AI 大概阅读一下。

整个 jar 包是采用的ProGuard 商业加固混淆的,只混淆了核心类,我们通过前端接口然后打断点还是可以看到具体的请求的,然后随便追踪一个方法发现静态资源文件前端都是在 .template 下的加密文件里,通过 debug 挨个看最终找到了解密的密钥,因为要渲染到前端必然需要把解密文件写在 jar 包里,所以这个不难。核心类就在:原始类org.jeecg.modules.a.a.a.a.java -> 最终原始名是org.jeecg.modules.a.a.a.FreeMarkerUtils。

由于只是学习,这里不讲破解流程。

主要前端代码就是 freemarker 模板文件写的,说实话这块维护工作量还是挺大的,官方一直采用这种方式都没有单开前端项目进行重构这是我不能理解,现在 AI 重构还是挺快的,估计也是历史包袱的原因,如果借鉴从 0 开始直接前后端重写了。

Java侧开源报表大屏 - jimureport 逆向学习及二开思路

后台操作全部都是 freemaker模板,当然你要进行进行修改或者调整也是很简单的了,而预览最终渲染是单独的项目最终编译打包完成后 js 文件直接做为资源访问,在 resource 目录下还发现了一些 script 的 py 脚本文件,部分界面上导出 excel 或者文件的时候采用的 python 脚本直接输出。

开源版本很多高级功能是没有的,如果采购官方正版那么应该是发一个全新的 jar 包过来的,不是通过代码的形式条件判断的。

后端主要就是通过 minidao 进行动态查询数据数据,通过 sql 动态查询数据库,api 是通过标准的工具类调用外部进行返回数据。由于自己不是做前端的,前端具体技术栈这里不过多描述。

要二开的话只能做 bug补丁修复,要完全二开是无法实现,官方定位就是只能使用不能进行自定义二开,半开源状态,如果只是个人使用可以完全没问题。

可以看几个官方示例,基本上主流的都是可以配置出来的。

Java侧开源报表大屏 - jimureport 逆向学习及二开思路

Java侧开源报表大屏 - jimureport 逆向学习及二开思路

后话

如果在官方开源协议前提下不改动任何逻辑若出现 bug 只能依靠官方的更新肯定是不行,那么我们可以通过二开的方式先快速修复 bug 然后反馈给官方。针对于部分代码存在问题的话排查后可以直接在项目中进行1:1 重写,通过双亲委派的机制会优先加载你项目中的类替换原始的类,但是不建议这样做,当官方升级了之后你每次都是反编译去做这些事,所以本文只针对于官方的混淆和加密逻辑进行了分析,主要是AES/RSA标准算法,无自定义变换。

jar 包只要放出来了几乎没有安全可言,这也给企业内部如果要做 license 强制商业化建议用其他语言来做底层,但是这个东西只防君子不防小人,本文仅供学习请勿用于商业用途。

最后说一句试用了一下jimureport 相对于帆软这种中型项目,可以完美去平替 datav 的大屏,前前前司有一年几个大屏一年几千,用就用那么一段时间,虽然功能没有帆软这种强大,但是中小企业还是可以基本上能满足,最近出的 2.5.0 带了 AI 功能体验了下还可以,直接文字描述生成报表简单调整下就 ok,这也是趋势。在这个产品的作用下,可以再结合 magic-api 动态 api 去扩展更强的场景,sql2api 结合动态报表几乎可以不动代码直接在线配置完成客户需求。

本文就写到这里。若对你有帮助或者交流项目请评论区留言。

文章目录