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;
}

报表设计器对应数据源配置:

1654685829999.png

报表设计器对应数据集配置:

1654685917938.png

(三)、报表文件设计

报表文件:HotlineStatisticsData.ureport.xml

截图

钻取列表文件:

截图

(四)、报表查询项配置

1、前往超级管理员,对报表进行配置查询项

截图

2、参数值说明

{
  "createTime": "受理日期",
  "unique": "0029所属热线统计报表" //必填项,参数编码+报表名称
}

其他可配置参数均在常量类:com.hotline.report.domain.constant.SearchItemsConstant

三、报表设计规范说明

(一)、命名规则:

  1. 新增报表文件时,必须已Data结尾,例如HotlineStatisticsData.ureport.xml

  2. 新增报表钻取文件时,必须已List结尾,例如HotlineStatisticsList.ureport.xml

  3. 目前所有报表均使用SpringBean数据源的方式加载数据,首先在ureport2目录新增对应报表的数据源SpringBean,类名命名规则:已ReportBean结尾,例如HotlineReportBean

  4. 报表数据返回实体类,必须已Model结尾,例如HotlineModel

  5. SpringBean数据源配置,数据源名称:定义的bean类名,例如HotlineReportBean;Bean ID:定义的bean类名小写,例如hotlineReportBean

  6. 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所属热线统计报表"
}

报表设计器设置分页条数,报表查询项参数配置的条数优先级高于报表设计器中的配置,但是注意钻取列表的分页条数一定要在设计器中配置,因为钻取列表没有参数项配置

截图

Last modification:June 9, 2022
如果觉得我的文章对你有用,请随意赞赏