报表-时间范围和日期范围过滤原创
金蝶云社区-吴锐雄
吴锐雄
6人赞赏了该文章 3,406次浏览 未经作者许可,禁止转载编辑于2022年04月12日 10:50:32

看完文章,请点赞收藏,谢谢您嘞


时间字段和时间范围(时间范围包括2个字段:时间开始字段、时间结束字段)在mysql里面是整型int(11),

日期字段和日期范围(日期范围包括2个字段:日期开始字段、日期结束字段)在mysql里面是日期类型datetime,

所以在构造QFilter时,时间直接使用>、<、=这些运算符对比就行,而日期要用 时间戳Timestamp去对比


本文使用报表来展示过滤之后的数据。

关于如何创建报表,如何注册报表插件,请参考文章:

https://club.kdcloud.com/article/172459984633274368


数据源是一个单据:“纺织物”

image.png


image.png


使用报表来展示数据,过滤之前,报表有5行数据

image.png


在报表取数插件中,添加QFilter,获取时间范围内 包含03:10:15的数据

package kd.ecos.demo;

import kd.bos.algo.DataSet;
import kd.bos.entity.report.AbstractReportListDataPlugin;
import kd.bos.entity.report.ReportQueryParam;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.QueryServiceHelper;

import java.sql.Timestamp;

public class DemoTextLineReportListDataPlugin extends AbstractReportListDataPlugin {


    @Override
    public DataSet query(ReportQueryParam reportQueryParam, Object o) throws Throwable {

        // 获取时间范围包含03:10:15的数据
        // 03:10:15=3*60*60+10*60+15=11415
        QFilter timeFilterSt = new QFilter("kdec_timerangefield_st", QCP.less_equals, 11415);
        QFilter timeFilterEn = new QFilter("kdec_timerangefield_en", QCP.large_equals, 11415);
        QFilter[] timeFilters = new QFilter[]{timeFilterSt, timeFilterEn};

        DataSet dataSet = QueryServiceHelper.queryDataSet(getClass().getName(), "kdec_textline_bill",
                "id, billno as kdec_billno, kdec_textline_name, " +
                        "kdec_timerangefield_st, kdec_timerangefield_en," +
                        "kdec_daterangefield_st, kdec_daterangefield_en",
                // QFilters为空,没有过滤条件,查询全部数据
                timeFilters,
                null);

        return dataSet;
    }
}


结果如下:

image.png



在报表取数插件中,添加QFilter,获取日期范围内 包含2021年10月20日的数据

2021年10月20日转换为时间戳是1635523200000

时间戳转换可以自行百度搜索文章,或者以下参考文章

https://www.cnblogs.com/EasonJim/p/7896082.html

也可以直接在线上网站做转换:

https://tool.lu/timestamp/


代码如下:

package kd.ecos.demo;

import kd.bos.algo.DataSet;
import kd.bos.entity.report.AbstractReportListDataPlugin;
import kd.bos.entity.report.ReportQueryParam;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.QueryServiceHelper;
import java.sql.Timestamp;

public class DemoTextLineReportListDataPlugin extends AbstractReportListDataPlugin {

    @Override
    public DataSet query(ReportQueryParam reportQueryParam, Object o) throws Throwable {

        // 2021年10月20日(时间戳:1635523200000)
        // 获取日期范围内 包含 2021年10月20日的数据
        Timestamp timestamp = new Timestamp(1635091200000L);
        QFilter dataFilterSt = new QFilter("kdec_daterangefield_st", QCP.less_equals, timestamp);
        QFilter dataFilterEn = new QFilter("kdec_daterangefield_en", QCP.large_equals, timestamp);
        QFilter[] dataFilters = new QFilter[]{dataFilterSt, dataFilterEn};

        DataSet dataSet = QueryServiceHelper.queryDataSet(getClass().getName(), "kdec_textline_bill",
                "id, billno as kdec_billno, kdec_textline_name, " +
                        "kdec_timerangefield_st, kdec_timerangefield_en," +
                        "kdec_daterangefield_st, kdec_daterangefield_en",
                // QFilters为空,没有过滤条件,查询全部数据
                dataFilters,
                null);

        return dataSet;
    }
}


结果如下:

image.png



图标赞 6
6人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!

您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!

请选择打赏金币数 *

10金币20金币30金币40金币50金币60金币
可用金币: 0