1: 猪场生产日报
package zb.pc.formplugin.pcsr.pigfarmdaily;
import kd.bos.algo.*;
import kd.bos.algo.input.CollectionInput;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.entity.DynamicObjectCollection;
import kd.bos.entity.report.AbstractReportListDataPlugin;
import kd.bos.entity.report.FilterInfo;
import kd.bos.entity.report.ReportQueryParam;
import kd.bos.orm.query.QCP;
import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.QueryServiceHelper;
import org.apache.commons.lang3.StringUtils;
import zb.common.constant.PigFieldConstant;
import zb.pc.common.constant.BaseConstant;
import zb.pc.common.constant.ImmediateLiveStockConstant;
import zb.pc.common.constant.ImportSeedRecordConstant;
import zb.pc.common.constant.pbdem.deadrecord.DeadRecordConstant;
import zb.pc.common.constant.pbsm.AbnPregRecordConstant;
import zb.pc.common.constant.pbsm.BirthConstant;
import zb.pc.common.constant.pbsm.MatingRecordConstant;
import zb.pc.common.enums.PigStateEnum;
import zb.pc.common.enums.PigTypeEnum;
import zb.pc.common.utils.DateUtil;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
/**
* @Module:
* @ClassName: PigfarmDaily
* @Description: 繁殖报表--猪场生产日报
* @Author xxx
* @Date 2022/4/18
* @Version 1.0
*/
public class PigfarmDailyListDataPlugin extends AbstractReportListDataPlugin {
@Override
public DataSet query(ReportQueryParam param, Object o) throws Throwable {
// 创建一个空的DataSet
Collection<Object[]> coll = new ArrayList<>();
//将自定义的字段和类型对应插入
ArrayList<String> names = PigfarmDailyListDataPlugin.FieldEnum.getNames();
ArrayList<DataType> types = PigfarmDailyListDataPlugin.FieldEnum.getTypes();
RowMeta rowMeta = RowMetaFactory.createRowMeta(names.toArray(new String[]{}), types.toArray(new DataType[]{}));
CollectionInput inputs = new CollectionInput(rowMeta, coll);
//Algo 创建dataSet
DataSet resultDataSet = Algo.create(this.getClass().getName()).createDataSet(inputs);
FilterInfo filterInfo = param.getFilter();
DynamicObject farm = filterInfo.getDynamicObject("zb_pigfarmfilter");
Date startDate = filterInfo.getDate("zb_stardate");
Date endDate = filterInfo.getDate("zb_enddate");
DynamicObjectCollection fields = QueryServiceHelper.query(PigFieldConstant.FORMBILLID, String.join(",", PigFieldConstant.ID), new QFilter[]{new QFilter(PigFieldConstant.ZB_PIGFARM, QCP.equals, farm.getPkValue())});
List<Long> fieldId = fields.stream().map(info -> info.getLong(BaseConstant.ID)).collect(Collectors.toList());
DynamicObjectCollection matingQuery = QueryServiceHelper.query(MatingRecordConstant.FORMBILLID,
String.join(",", MatingRecordConstant.ENTRYENTITYID_ZB_PB_MATINGRECORD_ET + "." + MatingRecordConstant.MATINGRECORD_ET_ZB_ISHBFEMALE, MatingRecordConstant.ZB_PIGFIELD),
new QFilter[]{new QFilter(MatingRecordConstant.ZB_PIGFARM, QCP.equals, farm.getPkValue()).and(MatingRecordConstant.ZB_BIZDATE, QCP.large_equals, startDate).and(MatingRecordConstant.ZB_BIZDATE, QCP.less_equals, endDate)});
Map<Long, Map<Boolean, Long>> matings = matingQuery.stream().filter(Objects::nonNull).
collect(Collectors.groupingBy(info -> info.getLong(MatingRecordConstant.ZB_PIGFIELD),
Collectors.groupingBy(item -> item.getBoolean(MatingRecordConstant.ENTRYENTITYID_ZB_PB_MATINGRECORD_ET + "." + MatingRecordConstant.MATINGRECORD_ET_ZB_ISHBFEMALE),
Collectors.counting())));
DynamicObjectCollection abnQuery = QueryServiceHelper.query(AbnPregRecordConstant.FORMBILLID,
String.join(",", AbnPregRecordConstant.ENTRYENTITYID_ZB_PB_ABNPREGRECORD_ET + "." + AbnPregRecordConstant.ABNPREGRECORD_ET_ABNREASON, AbnPregRecordConstant.PIGFIELD),
new QFilter[]{new QFilter(AbnPregRecordConstant.PIGFARM, QCP.equals, farm.getPkValue()).and(AbnPregRecordConstant.BIZDATE, QCP.large_equals, startDate).and(AbnPregRecordConstant.BIZDATE, QCP.less_equals, endDate)});
Map<Long, Map<Boolean, Long>> abns = abnQuery.stream().filter(Objects::nonNull).
collect(Collectors.groupingBy(info -> info.getLong(AbnPregRecordConstant.PIGFIELD),
Collectors.groupingBy(item -> item.getBoolean(AbnPregRecordConstant.ENTRYENTITYID_ZB_PB_ABNPREGRECORD_ET + "." + AbnPregRecordConstant.ABNPREGRECORD_ET_ABNREASON),
Collectors.counting())));
DynamicObjectCollection birthQuery = QueryServiceHelper.query(BirthConstant.FormBillId, String.join(",",
BirthConstant.Totallive, BirthConstant.Totaldith, BirthConstant.Totalmumy, BirthConstant.Totalderm, BirthConstant.EntryEntityId_zb_birth_detail, BirthConstant.Pigfield),
new QFilter[]{new QFilter(BirthConstant.Pigfarm, QCP.equals, farm.getPkValue()).and(BirthConstant.Bizdate, QCP.large_equals, startDate).and(BirthConstant.Bizdate, QCP.less_equals, endDate)});
Map<Long, List<DynamicObject>> births = birthQuery.stream().filter(Objects::nonNull).collect(Collectors.groupingBy(info -> info.getLong(BirthConstant.Pigfield)));
DynamicObjectCollection deadQuery = QueryServiceHelper.query(DeadRecordConstant.FORMBILLID, String.join(",", DeadRecordConstant.ZB_PIGFIELD,
DeadRecordConstant.ZB_PIGTYPE + ".number"), new QFilter[]{new QFilter(DeadRecordConstant.ZB_PIGFARM, QCP.equals, farm.getPkValue()).and(DeadRecordConstant.ZB_BIZDATE, QCP.large_equals, startDate).and(DeadRecordConstant.ZB_BIZDATE, QCP.less_equals, endDate)});
Map<Long, Map<String, Long>> deads = deadQuery.stream().filter(Objects::nonNull).collect(Collectors.groupingBy(info -> info.getLong(AbnPregRecordConstant.PIGFIELD),
Collectors.groupingBy(item -> item.getString(DeadRecordConstant.ZB_PIGTYPE + ".number"),
Collectors.counting())));
DynamicObjectCollection importQuery = QueryServiceHelper.query(ImportSeedRecordConstant.FORMBILLID,
String.join(",", ImportSeedRecordConstant.ZB_PIGFIELD, ImportSeedRecordConstant.ZB_SOWNO, ImportSeedRecordConstant.ZB_PIGNO),
new QFilter[]{new QFilter(ImportSeedRecordConstant.ZB_PIGFARM, QCP.equals, farm.getPkValue()).and(ImportSeedRecordConstant.ZB_BIZDATE, QCP.large_equals, startDate).and(ImportSeedRecordConstant.ZB_BIZDATE, QCP.less_equals, endDate)});
Map<Long, List<DynamicObject>> imports = importQuery.stream().filter(Objects::nonNull).collect(Collectors.groupingBy(info -> info.getLong(ImportSeedRecordConstant.ZB_PIGFIELD)));
DynamicObjectCollection immeQuery = QueryServiceHelper.query(ImmediateLiveStockConstant.FORMBILLID, String.join(",",
ImmediateLiveStockConstant.ENTRYENTITYID_ZB_LIVESTOCK + "." + ImmediateLiveStockConstant.ZB_LIVESTOCK_ZB_PIGFIELD,
ImmediateLiveStockConstant.ENTRYENTITYID_ZB_LIVESTOCK + "." + ImmediateLiveStockConstant.ZB_LIVESTOCK_ZB_PIGTYPE + ".number",
ImmediateLiveStockConstant.ENTRYENTITYID_ZB_LIVESTOCK + "." + ImmediateLiveStockConstant.ZB_LIVESTOCK_ZB_PIGSTATE + ".number",
ImmediateLiveStockConstant.ENTRYENTITYID_ZB_LIVESTOCK + "." + ImmediateLiveStockConstant.ZB_LIVESTOCK_ZB_QUANTITY),
new QFilter[]{new QFilter(ImmediateLiveStockConstant.ZB_PIGFARM, QCP.in, farm.getPkValue()).and(ImmediateLiveStockConstant.ZB_BIZDATE, QCP.equals, DateUtil.getLastDate(endDate))});
Map<Long, List<DynamicObject>> immes = immeQuery.stream().filter(Objects::nonNull).collect(Collectors.groupingBy(info -> info.getLong(ImmediateLiveStockConstant.ENTRYENTITYID_ZB_LIVESTOCK + "." + ImmediateLiveStockConstant.ZB_LIVESTOCK_ZB_PIGFIELD)));
for (Long field : fieldId) {
Object[] row = new Object[names.size()];
row[FieldEnum.PIGFIELD.no] = field;
row[FieldEnum.PRODUCTION.no] = matings.get(field).get(false);
row[FieldEnum.RESERVE.no] = matings.get(field).get(true);
//异常原因 空怀:1 返情:2 流产:3
row[FieldEnum.KH.no] = abns.get(field).get("1");
row[FieldEnum.FQ.no] = abns.get(field).get("2");
row[FieldEnum.LC.no] = abns.get(field).get("3");
int details = births.get(field).stream().mapToInt(info -> info.getDynamicObjectCollection(BirthConstant.EntryEntityId_zb_birth_detail).size()).sum();
row[FieldEnum.TOTALSON.no] = details;
int lives = births.get(field).stream().mapToInt(info -> info.getInt(BirthConstant.Totallive)).sum();
row[FieldEnum.TOTALLIVE.no] = lives;
row[FieldEnum.TOTALDITH.no] = births.get(field).stream().mapToInt(info -> info.getInt(BirthConstant.Totaldith)).sum();
row[FieldEnum.TOTALMUMY.no] = births.get(field).stream().mapToInt(info -> info.getInt(BirthConstant.Totalmumy)).sum();
row[FieldEnum.TOTALDERM.no] = births.get(field).stream().mapToInt(info -> info.getInt(BirthConstant.Totalderm)).sum();
row[FieldEnum.QUALIFIED.no] = details == 0 ? 0 : new BigDecimal(lives).divide(new BigDecimal(details), 3, RoundingMode.HALF_UP);
row[FieldEnum.LACTATION.no] = deads.get(field).get(PigTypeEnum.PIGLETS.getValue());
row[FieldEnum.CONSERVATION.no] = deads.get(field).get(PigTypeEnum.CONSERVATION.getValue());
row[FieldEnum.FATTEN.no] = deads.get(field).get(PigTypeEnum.FATTENPIG.getValue());
row[FieldEnum.PRODUCTINGSOW.no] = deads.get(field).get(PigTypeEnum.PRODUCTION_SOW.getValue());
row[FieldEnum.RESERVESOW.no] = deads.get(field).get(PigTypeEnum.BACKUP_SOW.getValue());
row[FieldEnum.PRODUCTIONBOAR.no] = deads.get(field).get(PigTypeEnum.PRODUCTION_BOAR.getValue());
row[FieldEnum.RESERVEBOAR.no] = deads.get(field).get(PigTypeEnum.BACKUP_BOAR.getValue());
row[FieldEnum.INTRODUCTION.no] = imports.get(field).stream().mapToInt(info -> info.getInt(ImportSeedRecordConstant.ZB_SOWNO) + info.getInt(ImportSeedRecordConstant.ZB_PIGNO)).sum();
row[FieldEnum.LIVESTOCKCOUNT.no] = immes.get(field).stream().
mapToInt(info -> info.getInt(ImmediateLiveStockConstant.ENTRYENTITYID_ZB_LIVESTOCK + "." + ImmediateLiveStockConstant.ZB_LIVESTOCK_ZB_QUANTITY)).sum();
row[FieldEnum.LIVESTOCKLACTATION.no] = immes.get(field).stream().
filter(info -> StringUtils.equals(info.getString(ImmediateLiveStockConstant.ENTRYENTITYID_ZB_LIVESTOCK + "." + ImmediateLiveStockConstant.ZB_LIVESTOCK_ZB_PIGTYPE + ".number"), PigTypeEnum.PIGLETS.getValue())).
mapToInt(info -> info.getInt(ImmediateLiveStockConstant.ENTRYENTITYID_ZB_LIVESTOCK + "." + ImmediateLiveStockConstant.ZB_LIVESTOCK_ZB_QUANTITY)).sum();
row[FieldEnum.LIVESTOCKCONSERVATION.no] = immes.get(field).stream().
filter(info -> StringUtils.equals(info.getString(ImmediateLiveStockConstant.ENTRYENTITYID_ZB_LIVESTOCK + "." + ImmediateLiveStockConstant.ZB_LIVESTOCK_ZB_PIGTYPE + ".number"), PigTypeEnum.CONSERVATION.getValue())).
mapToInt(info -> info.getInt(ImmediateLiveStockConstant.ENTRYENTITYID_ZB_LIVESTOCK + "." + ImmediateLiveStockConstant.ZB_LIVESTOCK_ZB_QUANTITY)).sum();
row[FieldEnum.LIVESTOCKFATTEN.no] = immes.get(field).stream().
filter(info -> StringUtils.equals(info.getString(ImmediateLiveStockConstant.ENTRYENTITYID_ZB_LIVESTOCK + "." + ImmediateLiveStockConstant.ZB_LIVESTOCK_ZB_PIGTYPE + ".number"), PigTypeEnum.FATTENPIG.getValue())).
mapToInt(info -> info.getInt(ImmediateLiveStockConstant.ENTRYENTITYID_ZB_LIVESTOCK + "." + ImmediateLiveStockConstant.ZB_LIVESTOCK_ZB_QUANTITY)).sum();
row[FieldEnum.LIVESTOCKPR.no] = immes.get(field).stream().
filter(info -> StringUtils.equals(info.getString(ImmediateLiveStockConstant.ENTRYENTITYID_ZB_LIVESTOCK + "." + ImmediateLiveStockConstant.ZB_LIVESTOCK_ZB_PIGSTATE + ".number"), PigStateEnum.BR.getValue())).
mapToInt(info -> info.getInt(ImmediateLiveStockConstant.ENTRYENTITYID_ZB_LIVESTOCK + "." + ImmediateLiveStockConstant.ZB_LIVESTOCK_ZB_QUANTITY)).sum();
row[FieldEnum.LIVESTOCKKD.no] = immes.get(field).stream().
filter(info -> StringUtils.equals(info.getString(ImmediateLiveStockConstant.ENTRYENTITYID_ZB_LIVESTOCK + "." + ImmediateLiveStockConstant.ZB_LIVESTOCK_ZB_PIGSTATE + ".number"), PigStateEnum.KHWP.getValue()) ||
StringUtils.equals(info.getString(ImmediateLiveStockConstant.ENTRYENTITYID_ZB_LIVESTOCK + "." + ImmediateLiveStockConstant.ZB_LIVESTOCK_ZB_PIGSTATE + ".number"), PigStateEnum.DNWP.getValue()) ||
StringUtils.equals(info.getString(ImmediateLiveStockConstant.ENTRYENTITYID_ZB_LIVESTOCK + "." + ImmediateLiveStockConstant.ZB_LIVESTOCK_ZB_PIGSTATE + ".number"), PigStateEnum.LCWP.getValue()) ||
StringUtils.equals(info.getString(ImmediateLiveStockConstant.ENTRYENTITYID_ZB_LIVESTOCK + "." + ImmediateLiveStockConstant.ZB_LIVESTOCK_ZB_PIGSTATE + ".number"), PigStateEnum.FQWP.getValue())).
mapToInt(info -> info.getInt(ImmediateLiveStockConstant.ENTRYENTITYID_ZB_LIVESTOCK + "." + ImmediateLiveStockConstant.ZB_LIVESTOCK_ZB_QUANTITY)).sum();
row[FieldEnum.LIVESTOCKHY.no] = immes.get(field).stream().
filter(info -> StringUtils.equals(info.getString(ImmediateLiveStockConstant.ENTRYENTITYID_ZB_LIVESTOCK + "." + ImmediateLiveStockConstant.ZB_LIVESTOCK_ZB_PIGSTATE + ".number"), PigStateEnum.HY.getValue())).
mapToInt(info -> info.getInt(ImmediateLiveStockConstant.ENTRYENTITYID_ZB_LIVESTOCK + "." + ImmediateLiveStockConstant.ZB_LIVESTOCK_ZB_QUANTITY)).sum();
row[FieldEnum.LIVESTOCKPRO.no] = immes.get(field).stream().
filter(info -> StringUtils.equals(info.getString(ImmediateLiveStockConstant.ENTRYENTITYID_ZB_LIVESTOCK + "." + ImmediateLiveStockConstant.ZB_LIVESTOCK_ZB_PIGTYPE + ".number"), PigTypeEnum.PRODUCTION_BOAR.getValue())).
mapToInt(info -> info.getInt(ImmediateLiveStockConstant.ENTRYENTITYID_ZB_LIVESTOCK + "." + ImmediateLiveStockConstant.ZB_LIVESTOCK_ZB_QUANTITY)).sum();
row[FieldEnum.LIVESTOCKPRORESERVESW.no] = immes.get(field).stream().
filter(info -> StringUtils.equals(info.getString(ImmediateLiveStockConstant.ENTRYENTITYID_ZB_LIVESTOCK + "." + ImmediateLiveStockConstant.ZB_LIVESTOCK_ZB_PIGTYPE + ".number"), PigTypeEnum.BACKUP_SOW.getValue())).
mapToInt(info -> info.getInt(ImmediateLiveStockConstant.ENTRYENTITYID_ZB_LIVESTOCK + "." + ImmediateLiveStockConstant.ZB_LIVESTOCK_ZB_QUANTITY)).sum();
row[FieldEnum.LIVESTOCKPRORESERVEBO.no] = immes.get(field).stream().
filter(info -> StringUtils.equals(info.getString(ImmediateLiveStockConstant.ENTRYENTITYID_ZB_LIVESTOCK + "." + ImmediateLiveStockConstant.ZB_LIVESTOCK_ZB_PIGTYPE + ".number"), PigTypeEnum.BACKUP_BOAR.getValue())).
mapToInt(info -> info.getInt(ImmediateLiveStockConstant.ENTRYENTITYID_ZB_LIVESTOCK + "." + ImmediateLiveStockConstant.ZB_LIVESTOCK_ZB_QUANTITY)).sum();
}
return resultDataSet;
}
enum FieldEnum {
PIGFIELD("zb_pigfield", DataType.LongType, 0),
PRODUCTION("zb_production", DataType.IntegerType, 1),
RESERVE("zb_reserve", DataType.IntegerType, 2),
KH("zb_kh", DataType.IntegerType, 3),
FQ("zb_fq", DataType.IntegerType, 4),
LC("zb_lc", DataType.IntegerType, 5),
TOTALSON("zb_totalson", DataType.IntegerType, 6),
TOTALLIVE("zb_totallive", DataType.IntegerType, 7),
TOTALDITH("zb_totaldith", DataType.IntegerType, 8),
TOTALMUMY("zb_totalmumy", DataType.IntegerType, 9),
TOTALDERM("zb_totalderm", DataType.IntegerType, 10),
QUALIFIED("zb_qualified", DataType.IntegerType, 11),
LACTATION("zb_lactation", DataType.IntegerType, 12),
CONSERVATION("zb_conservation", DataType.IntegerType, 13),
FATTEN("zb_fatten", DataType.IntegerType, 14),
PRODUCTINGSOW("zb_productingsow", DataType.IntegerType, 15),
RESERVESOW("zb_reservesow", DataType.IntegerType, 16),
PRODUCTIONBOAR("zb_productionboar", DataType.IntegerType, 17),
RESERVEBOAR("zb_reserveboar", DataType.IntegerType, 18),
FAT("zb_fat", DataType.IntegerType, 19),
FATCOUNT("zb_fatcount", DataType.IntegerType, 20),
BREEDING("zb_breeding", DataType.IntegerType, 21),
BREEDINGCOUNT("zb_breedingcount", DataType.IntegerType, 22),
PIGLET("zb_piglet", DataType.IntegerType, 23),
PIGLETCOUNT("zb_pigletcount", DataType.IntegerType, 24),
RESERVES("zb_reserves", DataType.IntegerType, 25),
RESERVESCOUNT("zb_reservescount", DataType.IntegerType, 26),
PRODUCTIONS("zb_productions", DataType.IntegerType, 27),
PRODUCTIONSCOUNT("zb_productionscount", DataType.IntegerType, 28),
INTRODUCTION("zb_introduction", DataType.IntegerType, 29),
PIGLETS("zb_piglets", DataType.IntegerType, 30),
LIVESTOCKCOUNT("zb_livestockcount", DataType.IntegerType, 31),
LIVESTOCKLACTATION("zb_livestocklactation", DataType.IntegerType, 32),
LIVESTOCKCONSERVATION("zb_livestockconservation", DataType.IntegerType, 33),
LIVESTOCKFATTEN("zb_livestockfatten", DataType.IntegerType, 34),
LIVESTOCKPR("zb_livestockpr", DataType.IntegerType, 35),
LIVESTOCKKD("zb_livestockkd", DataType.IntegerType, 36),
LIVESTOCKHY("zb_livestockhy", DataType.IntegerType, 37),
LIVESTOCKPRO("zb_livestockpro", DataType.IntegerType, 38),
LIVESTOCKPRORESERVESW("zb_livestockproreservesw", DataType.IntegerType, 39),
LIVESTOCKPRORESERVEBO("zb_livestockproreservebo", DataType.IntegerType, 40);
private String name;
private DataType type;
private Integer no;
FieldEnum(String name, DataType type, Integer no) {
this.name = name;
this.type = type;
this.no = no;
}
private static ArrayList<String> getNames() {
PigfarmDailyListDataPlugin.FieldEnum[] fieldEnums = values();
ArrayList<String> list = new ArrayList();
for (int i = 0; i < fieldEnums.length; i++) {
list.add(fieldEnums[i].name);
}
return list;
}
private static ArrayList<DataType> getTypes() {
PigfarmDailyListDataPlugin.FieldEnum[] fieldEnums = values();
ArrayList<DataType> list = new ArrayList();
for (int i = 0; i < fieldEnums.length; i++) {
list.add(fieldEnums[i].type);
}
return list;
}
}
}
2:繁殖用电明细
package zb.pc.formplugin.pcem.report.useeldetail;
import kd.bos.algo.*;
import kd.bos.algo.input.CollectionInput;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.dataentity.utils.ObjectUtils;
import kd.bos.db.DB;
import kd.bos.db.DBRoute;
import kd.bos.entity.report.AbstractReportColumn;
import kd.bos.entity.report.AbstractReportListDataPlugin;
import kd.bos.entity.report.FilterInfo;
import kd.bos.entity.report.ReportQueryParam;
import zb.common.enums.DBRouteEnum;
import java.util.*;
/**
* @Description: 正邦报表-繁殖综合-繁殖用电明细
* @Author xxx
* @Date 2022/5/26
*/
public class UseElDetailReportListPlugin extends AbstractReportListDataPlugin {
//报表的自定义字段,必须和表报中的标识名一一对应
private static final String[] fieldNames = {"zb_area", "zb_monthlivestock", "zb_nowstock", "zb_ammeternum", "zb_electrovalence"
,"zb_quota", "zb_superquota", "zb_taotal", "zb_oneweek", "zb_towweek"
,"zb_threeweek", "zb_fourweek"};
//报表列表上所有字段对应的数据类型,必须和FIELDS中的元素一一对应
private static final DataType[] dataTypes = {DataType.StringType, DataType.DoubleType, DataType.DoubleType, DataType.IntegerType, DataType.DoubleType
,DataType.DoubleType, DataType.DoubleType, DataType.DoubleType, DataType.DoubleType, DataType.DoubleType
,DataType.DoubleType, DataType.DoubleType};
/**
* 报表查询方法
* @param reportQueryParam
* @param o
* @return
* @throws Throwable
*/
@Override
public DataSet query(ReportQueryParam reportQueryParam, Object o) throws Throwable {
DataSet resultDataSet = null;
Collection<Object[]> coll = new ArrayList<>();
RowMeta rowMeta= RowMetaFactory.createRowMeta(fieldNames, dataTypes);
FilterInfo filter = reportQueryParam.getFilter();
DynamicObject pigFarm = filter.getDynamicObject("zb_pigfarmfilter");
Date month = filter.getDate("zb_datemonth");
Date startDate = null;
Date endDate = null;
if(ObjectUtils.isEmpty(month)){
coll = null;
}else{
StringBuffer sql = new StringBuffer();
sql.append("/*dialect*/ \n");
sql.append("SELECT temp.fk_zb_pigfarmid \n");
sql.append(" ,temp.fk_zb_listareaid \n");
sql.append(" ,temp.qty qty \n");
sql.append(" ,nvl(d.fk_zb_electprice, 0) electprice \n");
sql.append("\t\t\t ,e.fname areaname \n");
sql.append(" \n");
sql.append("FROM ( \n");
sql.append(" SELECT DISTINCT a.fk_zb_pigfarmid,c.fk_zb_listareaid,COUNT(c.fk_zb_listareaid) qty \n");
sql.append(" FROM yzpc.tk_zb_pc_hydropowerrecord a \n");
sql.append(" INNER JOIN yzpc.tk_zb_pc_electricentry b ON a.fid=b.fid \n");
sql.append(" INNER JOIN yzpc.tk_zb_pc_electtable c ON b.fk_zb_electric=c.fid \n");
sql.append("\tAND c.fstatus='C' AND c.fenable=1 \n");
sql.append("\tWHERE a.fbillstatus='C' \n");
sql.append("\tAND a.fk_zb_pigfarmid='560583063785050245' \n");
sql.append(" GROUP BY a.fk_zb_pigfarmid,c.fk_zb_listareaid \n");
sql.append(") temp \n");
sql.append("LEFT JOIN yzpc.tk_zb_pc_pigfarm d ON d.fid=temp.fk_zb_pigfarmid \n");
sql.append("LEFT JOIN yzpc.tk_zb_pc_areaarchives_l e ON e.fid=temp.fk_zb_listareaid AND e.flocaleid='zh_CN' \n");
Collection<Object[]> sqlData = DB.query(DBRoute.of(DBRouteEnum.PC.getValue()), sql.toString(), rs -> {
Collection<Object[]> tempColl = new ArrayList<>();
while (rs.next()) {
Object[] rowData = new Object[fieldNames.length];
rowData[0]=rs.getString("areaname"); //区域
rowData[3]=rs.getString("qty"); //电表个数
rowData[4]=rs.getString("electprice"); //电价
tempColl.add(rowData);
}
return tempColl;
});
coll = sqlData;
}
CollectionInput input = new CollectionInput(rowMeta, coll);
resultDataSet= Algo.create(this.getClass().getName()).createDataSet(input);
return resultDataSet;
}
/**
* 改变列信息
* @param columns
* @return
* @throws Throwable
*/
@Override
public List<AbstractReportColumn> getColumns(List<AbstractReportColumn> columns) throws Throwable {
return super.getColumns(columns);
}
/**
* 设置进度,用于异步查询时界面显示进度
* @param percent
*/
@Override
public void setProgress(int percent) {
super.setProgress(percent);
}
}