如何利用Algo自定义函数实现分组并求最大值原创
金蝶云社区-陈来珍
陈来珍
10人赞赏了该文章 2959次浏览 未经作者许可,禁止转载编辑于2022年04月14日 17:48:03

关键词

Algo,自定义聚合函数、max、字符串

一、需求背景

有一个报表开发的需求,对一个单据的数据进行汇总处理。要求根据“适用组织”字段进行分组,在报表中显示每个适用组织(组织类型字段)的最新(即版本号值最大的规则)的版本号(文本类型字段)和版本名称。

规则引擎列表数据如下:

b1.png

二、实现方案

在algo中,可以通过dataSet.groupBy(a).max(b). finish(),但是要求b必须是整型或者日期类型的字段。但是在需求中的求最大值中的版本号是文本类型,即字符串类型,所以无法直接通过algomax聚合函数直接求分组的最大值。需求通过自定义聚合函数,实现分组后求最大版本号的逻辑。

三、实现过程

1、创建自定义聚合函数

public class GroupMaxStrFunction extends CustomAggFunction<String> {
    public GroupMaxStrFunction() {
       super("group_maxstr", DataType.StringType);
       // TODO Auto-generated constructor stub
    }
    //分组返回的新值
    @Override
    public String newAggValue() {
       return new String();
    }
    //分组后遍历每一组的数据,进行自定义处理
    @Override
    public String addValue(String oldValue, Object newValue) {
       String curRowData = String.valueOf(newValue);
       return  oldValue.compareTo(curRowData)<0?curRowData:oldValue;
    }
    //分批处理分组情况下:分批结果之间处理
    @Override
    public String combineAggValue(String paramT1, String paramT2) {
       // TODO Auto-generated method stub
       return null;
    }
    @Override
    public Object getResult(String result) {
       // TODO Auto-generated method stub
       return result;
    }
 }
}

2、报表查询插件调用自定义聚合函数

public class RuleRptListDataPlugin extends AbstractReportListDataPlugin {
    @Override
    public DataSet query(ReportQueryParam arg0, Object arg1) throws Throwable {
       DataSet queryDataSet = QueryServiceHelper.queryDataSet(this.getClass().getName(),"kded_ruledemo","org,kded_vesion,kded_name as rulename",null, null);
       //agg(自定义聚合函数构造方法,处理的参数字段,输出处理结果的别名)
       DataSet groupbyresult = queryDataSet.groupBy(new String[] {"org"}).agg(new GroupMaxStrFunction(), "kded_vesion", "maxversion").finish();
       DataSet result = queryDataSet.join(groupbyresult).on("kded_vesion", "maxversion").select(new String[] {"org","kded_name as rulename"},new String[] {"maxversion"}).finish();
       return result;
    }
}

注册报表查询插件

b2.png

四、实现效果

点击预览报表

b3.png

五、开发环境版本

COSMICV4.0.010.0

六、参考资料

【开发平台】指导手册

学习成长中心


赞 10