ureport2报表开发规范
一、目录结构
├─src
│ ├─main
│ │ ├─java
│ │ │ └─com
│ │ │ ├─bstek
│ │ │ │ └─ureport
│ │ │ │ ├─build
│ │ │ │ └─model
│ │ │ └─hotline
│ │ │ └─report
│ │ │ ├─config
│ │ │ ├─controller
│ │ │ ├─dao
│ │ │ ├─domain
│ │ │ │ ├─constant 报表查询项参数配置常量
│ │ │ │ ├─mapstruct
│ │ │ │ └─vo
│ │ │ ├─enums
│ │ │ ├─interceptor
│ │ │ ├─model 报表数据集返回对象实体类
│ │ │ │ └─base
│ │ │ ├─service
│ │ │ │ └─impl
│ │ │ ├─ureport2 报表SpringBean数据源目录
│ │ │ │ └─base
│ │ │ └─util 报表工具类
│ │ └─resources
│ │ ├─mapping
│ │ ├─static
│ │ ├─templates
│ │ │ └─views
│ │ │ ├─private
│ │ │ │ └─report 报表页面
│ │ └─ureportfiles 报表文件存储目录
二、新增报表步骤
(一)、确认报表表头项,根据表头设计报表数据返回实体类(HotlineModel.java),存放目录model
(二)、新增报表SpringBean数据源(HotlineReportBean.java),获取报表数据和获取对应钻取列表数据的方法均写在该类,这里定义的方法就是数据集(对应报表设计器SpringBean数据集配置)例如:
getHotlineStatisticsData(获取所属热线统计报表数据)
public List<HotlineModel> getHotlineStatisticsData(String dsName, String datasetName,
Map<String, Object> parameters) {
String[] createTime = ureport2Util.timeProcess(parameters, SearchItemsConstant.CREATE_TIME);
parameters.put("createStartTime", createTime[0]);
parameters.put("createEndTime", createTime[1]);
List<HotlineModel> HotlineStatisticsData =
hotlineStatisticsService.getHotlineStatisticsData(parameters);
return HotlineStatisticsData;
}
getHotlineStatisticsList(获取所属热线统计信件钻取列表)
public List<SljInfoModel> getHotlineStatisticsList(String dsName, String datasetName,
Map<String, Object> parameters) {
String[] createTime = ureport2Util.timeProcess(parameters, SearchItemsConstant.CREATE_TIME);
parameters.put("createStartTime", createTime[0]);
parameters.put("createEndTime", createTime[1]);
List<SljInfoModel> sljInfoList = hotlineStatisticsService.getHotlineStatisticsList(parameters);
return sljInfoList;
}
报表设计器对应数据源配置:
报表设计器对应数据集配置:
(三)、报表文件设计
报表文件:HotlineStatisticsData.ureport.xml
钻取列表文件:
(四)、报表查询项配置
1、前往超级管理员,对报表进行配置查询项
2、参数值说明
{
"createTime": "受理日期",
"unique": "0029所属热线统计报表" //必填项,参数编码+报表名称
}
其他可配置参数均在常量类:com.hotline.report.domain.constant.SearchItemsConstant
三、报表设计规范说明
(一)、命名规则:
-
新增报表文件时,必须已Data结尾,例如HotlineStatisticsData.ureport.xml
-
新增报表钻取文件时,必须已List结尾,例如HotlineStatisticsList.ureport.xml
-
目前所有报表均使用SpringBean数据源的方式加载数据,首先在ureport2目录新增对应报表的数据源SpringBean,类名命名规则:已ReportBean结尾,例如HotlineReportBean
-
报表数据返回实体类,必须已Model结尾,例如HotlineModel
-
SpringBean数据源配置,数据源名称:定义的bean类名,例如HotlineReportBean;Bean ID:定义的bean类名小写,例如hotlineReportBean
-
SpringBean数据集配置,数据集名称:报表数据返回实体类名,例如HotlineModel;方法名:对应获取表数据的方法名,例如getHotlineStatisticsData;返回对象:报表数据返回实体类的路径,例如com.hotline.report.model.HotlineModel
四、分页设置
分页实现思路:获取报表数据进行逻辑分页处理,对数据进行截取之后再交由ureport进行html表格渲染;钻取列表可以直接在sql内使用物理分页,然后再交由ureport处理
1、代码实现部分
需要继承 BaseReportBean 类,并且重写 queryPage 方法:
@Component
@RequiredArgsConstructor
public class HotlineReportBean extends BaseReportBean {
@Override
public PageDataModel queryPage(String dsName, String datasetName, Map<String, Object> parameters) {
String fileName = parameters.get("fileName").toString();
if (fileName.endsWith(SearchItemsConstant.REPORT_TYPE_DATA)) {
List<HotlineModel> dataList = this.getHotlineStatisticsData(dsName, datasetName, parameters);
PageDataModel pageDataModel = super.queryStatisticsDataLogicalPage(dataList, parameters);
//根据报表设计器设置的数据集名称,强烈要求数据集名称和list对象返回的实体名一致
pageDataModel.setDatasetName("HotlineModel");
return pageDataModel;
} else if (fileName.endsWith(SearchItemsConstant.REPORT_TYPE_LIST)) {
//这个地方使用的是物理分页,具体思路是,SQL limit取条数,并且把总条数totalCount放到实体类中带过来
List<SljInfoModel> dataList = this.getHotlineStatisticsList(dsName, datasetName, parameters);
PageDataModel pageDataModel = super.queryStatisticsListPhysicalPage(dataList, parameters);
if (EmptyUtils.isNotEmpty(dataList)) {
//设置总条数
pageDataModel.setTotalCount(dataList.get(0).getTotalCount());
}
//根据报表设计器设置的数据集名称,强烈要求数据集名称和list对象返回的实体名一致
pageDataModel.setDatasetName("SljInfoModel");
return pageDataModel;
}
return null;
}
}
钻取列表物理分页,请参考如下:
<select id="getHotlineStatisticsList" resultType="com.hotline.report.model.SljInfoModel">
SELECT * FROM
(SELECT i.id,i.accept_user,i.from_phone,i.link_phone,i.from_time,i.source_code,i.classify_code,i.nature_code,i.title,i.state
FROM slj_info i
<where>
1=1
<include refid="common_where">
</include>
</where>
<bind name="offset" value="(parameters.pageIndex-1)*parameters.pageSize"/>
LIMIT #{offset}, #{parameters.pageSize}) A,
(SELECT count(1) totalCount
FROM slj_info i
<where>
1=1
<include refid="common_where">
</include>
</where>
) B
</select>
2、分页配置
分页参数项配置
{
"pagingSelect": "是否分页", //是否分页选择框
"pageSize": "12", //默认分页条数,分页条数可以不设置,直接在报表设计器中设置
"createTime": "受理日期",
"unique": "0029所属热线统计报表"
}
报表设计器设置分页条数,报表查询项参数配置的条数优先级高于报表设计器中的配置,但是注意钻取列表的分页条数一定要在设计器中配置,因为钻取列表没有参数项配置
评论区