|
@@ -0,0 +1,79 @@
|
|
|
+package kd.cosmic.jkjt.tmc.bei.report.plugin;
|
|
|
+
|
|
|
+import kd.bos.algo.DataSet;
|
|
|
+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 kd.cosmic.jkjt.tmc.bei.common.CommonUtils;
|
|
|
+import kd.cosmic.jkjt.tmc.bei.common.constant.BeiBeTransDetailConstant;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Set;
|
|
|
+
|
|
|
+public class NonDirectConQueryListDataPlugin extends AbstractReportListDataPlugin {
|
|
|
+ @Override
|
|
|
+ public DataSet query(ReportQueryParam reportQueryParam, Object o) throws Throwable {
|
|
|
+
|
|
|
+ FilterInfo filterInfo = reportQueryParam.getFilter();
|
|
|
+ List<QFilter> filterList = new ArrayList<>();
|
|
|
+ QFilter companyFilter = CommonUtils.getQFilterFormInfo(filterInfo, "nckd_filter_company", "company");
|
|
|
+ QFilter bizdateFilter = CommonUtils.getQFilterFormInfo(filterInfo, "nckd_filter_bizdate", "biztime");
|
|
|
+ filterList.add(companyFilter);
|
|
|
+ filterList.add(bizdateFilter);
|
|
|
+ filterList.add(QFilter.isNotNull("oppunit"));
|
|
|
+ filterList.add(new QFilter("debitamount", QCP.large_than, BigDecimal.ZERO));
|
|
|
+ filterList.add(new QFilter("accountbank.isdefaultpay",QCP.equals, true));
|
|
|
+ return getTransDetailData(companyFilter,bizdateFilter);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ protected DataSet getTransDetailData(QFilter companyFilter , QFilter bizdateFilter){
|
|
|
+ DataSet debitDetailDataSet = getTransDetailDataSet(companyFilter, bizdateFilter,true);
|
|
|
+ DataSet crediDetailDataSet = getTransDetailDataSet(companyFilter, bizdateFilter,false);
|
|
|
+ // 看报表与消息的兼容程度,再看怎么处理,暂时转成动态对象集合
|
|
|
+ return debitDetailDataSet.union(crediDetailDataSet);
|
|
|
+ }
|
|
|
+
|
|
|
+ protected DataSet getTransDetailDataSet(QFilter companyFilter , QFilter bizdateFilter, boolean isDebitamount){
|
|
|
+
|
|
|
+ String amountField = isDebitamount? BeiBeTransDetailConstant.KEY_DEBITAMOUNT:BeiBeTransDetailConstant.KEY_CREDITAMOUNT;
|
|
|
+ List<QFilter> filterList = new ArrayList<>();
|
|
|
+ if(companyFilter != null){
|
|
|
+ filterList.add(companyFilter);
|
|
|
+ }
|
|
|
+ if(bizdateFilter != null){
|
|
|
+ filterList.add(bizdateFilter);
|
|
|
+ }
|
|
|
+ filterList.add(new QFilter("nckd_generatemethod", QCP.equals,"Manual import"));
|
|
|
+ filterList.add(new QFilter(amountField, QCP.large_than,BigDecimal.ZERO));
|
|
|
+
|
|
|
+
|
|
|
+ DataSet dataSet = QueryServiceHelper.queryDataSet(this.getClass().getName(), BeiBeTransDetailConstant.ENTITYID,
|
|
|
+ "id,company.id,accountbank.id,"+amountField+",biztime",
|
|
|
+ filterList.toArray(new QFilter[0]), "");
|
|
|
+
|
|
|
+ // 通过公司、我方账号,对方账号分组,求和
|
|
|
+ DataSet amountDataSet = dataSet
|
|
|
+ .groupBy(new String[]{"company.id", "accountbank.id"}).sum(amountField).count("totaltimes").finish()
|
|
|
+ .select("company.id,accountbank.id,"+amountField+" totalamount,totaltimes");
|
|
|
+
|
|
|
+ Set companyIdSet = CommonUtils.getFieldValue(amountDataSet, "company.id");
|
|
|
+ DataSet companyDataSet = QueryServiceHelper
|
|
|
+ .queryDataSet(this.getClass().getName(), "bos_org", "id,name", new QFilter("id", QCP.in, companyIdSet).toArray(), "");
|
|
|
+ // 查询银行账户
|
|
|
+ Set accountBankIdSet = CommonUtils.getFieldValue(amountDataSet, "accountbank.id");
|
|
|
+ DataSet accountBankDataSet = QueryServiceHelper
|
|
|
+ .queryDataSet(this.getClass().getName(), "bd_accountbanks", "id,bankaccountnumber,bank.name", new QFilter("id", QCP.in, accountBankIdSet).toArray(), "");
|
|
|
+ return amountDataSet
|
|
|
+ .leftJoin(companyDataSet).on("company.id", "id")
|
|
|
+ .select( new String[] {"company.id nckd_company", "accountbank.id accountbankid","totaltimes nckd_count","totalamount nckd_amount"}, new String[] {"name nckd_payaccount"}).finish()
|
|
|
+ .leftJoin(accountBankDataSet).on("accountbankid", "id")
|
|
|
+ .select(new String[] {"nckd_company", "nckd_payaccount","nckd_count","nckd_amount", String.format("'%s' nckd_dc",isDebitamount?"1":"-1")}, new String[]{"bankaccountnumber nckd_payaccbanknumber", "bank.name nckd_payaccbank"})
|
|
|
+ .finish();
|
|
|
+ }
|
|
|
+}
|