ensign/src/main/java/com/yem/wm/utils/RptUtil.java
2024-08-26 09:19:12 +08:00

111 lines
3.6 KiB
Java

package com.yem.wm.utils;
import kd.bos.algo.*;
import kd.bos.algo.input.CollectionInput;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* 报表工具类
*
* @author longh
* @description:
* @date 2021年12月4日 上午9:35:41
*/
public class RptUtil {
public static Object[] getBaseDataPkIds(DynamicObjectCollection col) {
List<Object> list = new ArrayList<>();
if (col != null) {
for (DynamicObject baseData : col) {
list.add(baseData.getPkValue());
}
}
return list.toArray();
}
public static List<String> getBaseDataPkIdStrList(DynamicObjectCollection col) {
List<String> list = new ArrayList<>();
if (col != null) {
for (DynamicObject baseData : col) {
list.add(baseData.getString("id"));
}
}
return list;
}
public static List<String> getDataSetAliasList(DataSet dataSet) {
return getDataSetAliasList(dataSet, true, null);
}
public static List<String> getDataSetAliasList(DataSet dataSet, String joinKey) {
return getDataSetAliasList(dataSet, false, joinKey);
}
public static String[] getDataSetFiledAlias(DataSet dataSet) {
return getDataSetAliasList(dataSet, true, null).toArray(new String[0]);
}
public static String[] getDataSetFiledAlias(DataSet dataSet, String joinKey) {
return getDataSetAliasList(dataSet, false, joinKey).toArray(new String[0]);
}
private static List<String> getDataSetAliasList(DataSet dataSet, boolean isLeft, String joinKey) {
Stream<String> flatMap = Stream.of(dataSet.getRowMeta().getFields()).flatMap(v -> Stream.of(v.getAlias()));
return (isLeft ? flatMap : flatMap.filter(v -> !v.equals(joinKey))).collect(Collectors.toList());
}
public static JoinHint getJoinHint(boolean nullAsZero) {
JoinHint joinHint = new JoinHint();
joinHint.setNullAsZero(nullAsZero);
return joinHint;
}
public static DataSet zeroNullNums(DataSet dataSet) {
return dataSet.select(Stream.of(dataSet.getRowMeta().getFields()).flatMap(v -> {
DataType dataType = v.getDataType();
String alias = v.getAlias();
String value;
switch (dataType.ordinal) {
case 2://IntegerType
value = "0";
break;
case 3://LongType
value = "0l";
break;
case 4://DoubleType
case 5://BigDecimalType
value = "0.0";
break;
default:
return Stream.of(alias);
}
return Stream.of(String.format("(case when %s is null then %s else %s end) %s", alias, value, alias, alias));
}).toArray(String[]::new));
}
public static DataSet plainDataSet(String algoKey, DataSet dataSet, DynamicObjectCollection dataObjs) {
RowMeta rowMeta = dataSet.getRowMeta();
int fieldCount = rowMeta.getFieldCount();
Collection<Object[]> collection = new ArrayList<>();
for (DynamicObject dataObj : dataObjs) {
Object[] obj = new Object[fieldCount];
for (int i = 0; i < fieldCount; i++) {
obj[i] = dataObj.get(i);
}
collection.add(obj);
}
return Algo.create(algoKey).createDataSet(new CollectionInput(rowMeta, collection));
}
}