Browse Source

资金预警需求-预警报表:
1.动账通知过滤出通知范围内的公司
2.其他账户预警报表开发
3.非直连报表开发

lisheng 1 week ago
parent
commit
911d25a26e

+ 39 - 14
main/java/kd/cosmic/jkjt/tmc/bei/formplugin/detail/TransDetailMsgWarnList.java

@@ -1,30 +1,27 @@
 package kd.cosmic.jkjt.tmc.bei.formplugin.detail;
 
-import com.alibaba.fastjson.JSON;
+import com.grapecity.documents.excel.Q;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
-import kd.bos.dataentity.entity.LocaleString;
 import kd.bos.filter.CommonFilterColumn;
 import kd.bos.filter.FilterColumn;
 import kd.bos.form.events.FilterContainerInitArgs;
-import kd.bos.form.events.FilterContainerSearchClickArgs;
 import kd.bos.form.events.SetFilterEvent;
 import kd.bos.form.field.ComboItem;
+import kd.bos.form.field.events.BeforeFilterF7SelectEvent;
 import kd.bos.list.IListView;
 import kd.bos.list.plugin.AbstractListPlugin;
+import kd.bos.logging.BizLog;
+import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
 import kd.bos.servicehelper.QueryServiceHelper;
-import kd.bos.util.StringUtils;
+import kd.cosmic.jkjt.tmc.bei.common.constant.BeiBeTransDetailConstant;
 import kd.cosmic.jkjt.tmc.bei.common.constant.LargeTransConfigConstant;
-import kd.cosmic.jkjt.tmc.bei.common.enums.MsgWarnTypeEnum;
 
-import java.util.ArrayList;
+import java.math.BigDecimal;
 import java.util.List;
-import java.util.Map;
 import java.util.stream.Collectors;
 
 public class TransDetailMsgWarnList extends AbstractListPlugin {
-    private static final String DEFUAL_ORG_CACHE_KEY = "defual_org";
-    private static final String KEY_FILTER_MSGTYPE = "msgtype";
 
     @Override
     public void filterContainerInit(FilterContainerInitArgs args) {
@@ -41,8 +38,30 @@ public class TransDetailMsgWarnList extends AbstractListPlugin {
                     new QFilter(LargeTransConfigConstant.KEY_STATUS, QFilter.equals, "C"),
                     new QFilter(LargeTransConfigConstant.KEY_ENABLE, QFilter.equals, "1")
             });
-            List<Long> orgList = configCol.stream().map(r -> r.getLong("nckd_company.id")).collect(Collectors.toList());
+            List<String> orgList = configCol.stream().map(r -> r.getString("nckd_company.id")).collect(Collectors.toList());
             comboItems.removeIf(comboItem -> !orgList.contains(comboItem.getValue()));
+            if(comboItems.size() > 0){
+                companyFilter.setDefaultValues(comboItems.get(0).getValue());
+            }
+            BizLog.log("动账提醒组织:" + orgList);
+        }
+    }
+
+    @Override
+    public void filterContainerBeforeF7Select(BeforeFilterF7SelectEvent args) {
+        super.filterContainerBeforeF7Select(args);
+        String billFormId = ((IListView) this.getView()).getBillFormId();
+        String fieldName = args.getFieldName();
+        List<QFilter> qfilters = args.getQfilters();
+        if("nckd_rpt_accchange".equals(billFormId)){
+            if("company.id".equals(fieldName)){
+                DynamicObjectCollection configCol = QueryServiceHelper.query("nckd_accchangerange", "id,nckd_company.id", new QFilter[]{
+                        new QFilter(LargeTransConfigConstant.KEY_STATUS, QFilter.equals, "C"),
+                        new QFilter(LargeTransConfigConstant.KEY_ENABLE, QFilter.equals, "1")
+                });
+                List<Long> orgList = configCol.stream().map(r -> r.getLong("nckd_company.id")).collect(Collectors.toList());
+                qfilters.add(new QFilter("id", QCP.in, orgList));
+            }
         }
     }
 
@@ -50,14 +69,20 @@ public class TransDetailMsgWarnList extends AbstractListPlugin {
     public void setFilter(SetFilterEvent e) {
         super.setFilter(e);
         String billFormId = ((IListView) this.getView()).getBillFormId();
+        List<QFilter> qFilters = e.getQFilters();
         // 其他账户
-        if("nckd_rpt_other".equals(billFormId)){
-
+        if("nckd_rpt_otheraccount".equals(billFormId)){
+            //qFilters.add(new QFilter("accountbank.isdefaultpay", QFilter.equals, false));
+            qFilters.add(QFilter.isNotNull("oppunit"));
+            qFilters.add(new QFilter("length(trim(oppunit))", QCP.large_than,0));
+            qFilters.add(new QFilter("length(oppunit)", QCP.less_equals,4));
+            // 付款金额大于0
+            qFilters.add(new QFilter(BeiBeTransDetailConstant.KEY_DEBITAMOUNT, QFilter.large_than, BigDecimal.ZERO));
             return ;
         }
-        // 非直连支付
+        // 动账提醒
         if( "nckd_rpt_accchange".equals(billFormId)){
-
+            return;
         }
     }
 }

+ 79 - 0
main/java/kd/cosmic/jkjt/tmc/bei/report/plugin/NonDirectConQueryListDataPlugin.java

@@ -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();
+    }
+}