报表设计 ureport 模块使用

UReport2 是一款基于架构在 Spring 之上纯 Java 的高性能报表引擎,通过迭代单元格可以实现任意复杂的中国式报表。在 UReport2 中,提供了全新的基于网页的报表设计器,可以在 Chrome、Firefox、Edge 等各种主流浏览器运行(IE 浏览器除外)。使用 UReport2,打开浏览器即可完成各种复杂报表的设计制作。

访问地址:http://IP:5006/ureport/designer

学习资源

参考官方文档快速上手:UReport2 教程UReport2 视频

国际化设置

在线报表设计会根据浏览器自动国际化,请确认浏览器 I18N 设置。

UReport2 界面

准备测试数据

DROP TABLE IF EXISTS `t_user_ureport2`;
CREATE TABLE `t_user_ureport2` (
  `id` bigint(13) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(255) COLLATE utf8mb4_bin NOT NULL COMMENT '姓名',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
  `status` tinyint(4) NOT NULL COMMENT '是否禁用',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

BEGIN;
INSERT INTO `t_user_ureport2` VALUES (1, '测试人员 1', '2020-10-22 09:01:58', 1);
INSERT INTO `t_user_ureport2` VALUES (2, '测试人员 2', '2020-10-22 09:02:00', 0);
INSERT INTO `t_user_ureport2` VALUES (3, '测试人员 3', '2020-10-23 03:02:00', 1);
INSERT INTO `t_user_ureport2` VALUES (4, '测试人员 4', '2020-10-23 23:02:00', 1);
INSERT INTO `t_user_ureport2` VALUES (5, '测试人员 5', '2020-10-23 23:02:00', 1);
INSERT INTO `t_user_ureport2` VALUES (6, '测试人员 6', '2020-10-24 11:02:00', 0);
INSERT INTO `t_user_ureport2` VALUES (7, '测试人员 7', '2020-10-24 20:02:00', 0);
INSERT INTO `t_user_ureport2` VALUES (8, '测试人员 8', '2020-10-25 08:02:00', 1);
INSERT INTO `t_user_ureport2` VALUES (9, '测试人员 9', '2020-10-25 09:02:00', 1);
INSERT INTO `t_user_ureport2` VALUES (10, '测试人员 10', '2020-10-25 13:02:00', 1);
INSERT INTO `t_user_ureport2` VALUES (11, '测试人员 11', '2020-10-26 21:02:00', 0);
INSERT INTO `t_user_ureport2` VALUES (12, '测试人员 12', '2020-10-26 23:02:00', 1);
INSERT INTO `t_user_ureport2` VALUES (13, '测试人员 13', '2020-10-26 23:02:00', 1);
COMMIT;

配置 Maven 依赖

依赖冲突

注意移除原有的 pigx-common-data 模块,避免依赖冲突。

<!-- feign 调用依赖 -->
<dependency>
    <groupId>com.pig4cloud</groupId>
    <artifactId>pigx-common-feign</artifactId>
</dependency>
<!-- druid 连接池 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
</dependency>
<!-- MYSQL 数据驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

配置数据源

前端配置数据源

前端配置数据源

代码配置数据源

配置文件:

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      username: ${MYSQL_USER:root}
      password: ${MYSQL_PWD:root}
      url: jdbc:mysql://${MYSQL_HOST:pigx-mysql}:${MYSQL_PORT:3306}/${MYSQL_DB:pigxx}?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&allowMultiQueries=true&allowPublicKeyRetrieval=true

Java 代码:

@Component
public class InnerDatasource implements BuildinDatasource {
    @Autowired
    private DataSource datasource;

    @Override
    public String name() {
        return "内部数据源";
    }

    @SneakyThrows
    @Override
    public Connection getConnection() {
        // 通过 yaml 配置数据源信息
        return datasource.getConnection();
    }
}

报表设计步骤

选择数据源

这里需要使用到上面步骤创建的内部数据源或者前端创建的数据源。

创建数据源

选择数据源:

选择数据源

此时列表里就会出现数据源:

数据源列表

选择数据集

在刚才选中的数据源右键,选择添加数据集。

添加数据集

这里选择上面步骤中初始化的用户表:

选择数据表

预览数据:

预览数据

点击确定,保存数据集:

保存数据集

报表设计

创建报表表头的位置:

创建表头

表头内容:

设置表头内容

操作完成之后,效果如下:

表头效果

然后设置数据的标题行,跟表头设置一样,效果如下:

标题行效果

接下来设置数据:

设置数据

其他字段同理,完成之后如下:

完成数据设置

此时你可以尝试预览一下数据:

预览报表 预览结果

关掉,稍微美化一下:

美化报表

此时数据虽然正常显示了,但是"是否可用"这一列显示 0/1 是否可以支持自定义呢?

自定义显示

再次预览:

自定义后预览

顺带再把创建时间的数据格式也改一下:

格式化时间

修改后,预览数据如下:

最终预览效果

保存报表设计文件

保存报表 保存确认
文件存储位置

点击保存之后,你本地在 application.yml 文件中配置的地址就会出现一个 demo.ureport.xml 文件。

下次可以直接通过 http://localhost:8080/demo/ureport/preview?_u=file:demo.ureport.xml 这个地址预览报表。

增加报表查询条件

还记得我们上面新增数据集的时候,加的条件吗?现在用起来。

查询条件设置

查询表单设计:

查询表单设计

配置查询参数:

配置查询参数

美化按钮:

美化按钮

再预览一下:

查询功能预览

UReport2 已知问题

条件表达式问题

UReport2 最新版本是 2.2.9,已较久未更新。在报表设计页打开一个已存在的报表设计文件时,可能会出现无法预览的情况。

参考 Issue #393

已知问题截图

解决办法

问题表现

条件表达式变成 undefined,这里需要注意的是,我们的 xml 文件是正常的,只不过是 ureport 解析的时候出错了。

XML 文件正常

点击编辑,重新选择表达式即可解决:

重新选择表达式

再次尝试预览:

问题解决后预览
最佳实践

该可能性出现在报表设计文件中使用了条件属性的情况下,修复方法就是打开文件之后,重新配置条件属性。最好的方法就是避免使用条件属性。