2
0

2 Revīzijas 64ede35260 ... 8a0587c9ee

Autors SHA1 Ziņojums Datums
  lisheng 8a0587c9ee 资金预警需求-预警报表: 23 stundas atpakaļ
  lisheng 7eddc797ea 资金预警需求-预警报表: 1 dienu atpakaļ

+ 35 - 11
main/java/kd/cosmic/jkjt/tmc/bei/common/constant/MsgWarnTemplateConstant.java

@@ -42,9 +42,10 @@ public class MsgWarnTemplateConstant {
         return String.format(MSGTEMPLATE_LARGETRANS,receiver,amount,payerAccount, payerAccountId, payerBank, description, time);
     }
 
-    public static String formatDailyMessage(String payerAccount, String payerAccountId, String payerBank,
+    public static String formatDailyMessage(String time ,String payerAccount, String payerAccountId, String payerBank,
                                                           String receiver, String paymentCount, String totalAmount) {
         String MSGTEMPLATE_PAYMENT_NOTIFICATION = new StringBuffer()
+                .append("时间:").append("%s").append("\r\n")
                 .append("收款方:").append("%s").append("\r\n")
                 .append("合计金额:").append("%s").append("\r\n")
                 .append("付款方账户:").append("%s").append("\r\n")
@@ -54,6 +55,7 @@ public class MsgWarnTemplateConstant {
                 .toString();
 
         return String.format(MSGTEMPLATE_PAYMENT_NOTIFICATION,
+                time,
                 receiver,
                 totalAmount,
                 payerAccount,
@@ -63,6 +65,30 @@ public class MsgWarnTemplateConstant {
     }
 
 
+    public static String formatDailyNightMessage(String receiver , String amount, String payerAccount, String payerAccountId, String payerBank,
+                                           String description,String time  ) {
+        String MSGTEMPLATE_PAYMENT_NOTIFICATION = new StringBuffer()
+                .append("收款方:").append("%s").append("\r\n")
+                .append("金额:").append("%s").append("\r\n")
+                .append("付款方账户:").append("%s").append("\r\n")
+                .append("付款方账号:").append("%s").append("\r\n")
+                .append("付款方开户行:").append("%s").append("\r\n")
+                .append("摘要:").append("%s").append("\r\n")
+                .append("时间:").append("%s").append("\r\n")
+
+                .toString();
+
+        return String.format(MSGTEMPLATE_PAYMENT_NOTIFICATION,
+                receiver,
+                amount,
+                payerAccount,
+                payerAccountId,
+                payerBank,
+                description,
+                time);
+    }
+
+
     public static String formatOtherAccountMessage(String payerAccount, String payerAccountId, String payerBank, String amount,
                                                  String receiver, String description, String time) {
         String MSGTEMPLATE_LARGETRANS = new StringBuffer()
@@ -146,26 +172,24 @@ public class MsgWarnTemplateConstant {
 
     /** 收款通知消息格式化
      * @param amount         到账金额
-     * @param payerAccount   付方账户
-     * @param payerAccountId 付方账号
-     * @param payerBank      付方开户行
-     * @param receiver       收方
+     * @param payerAccount   付款方账户
+     * @param receiveAccount 收款方账号
+     * @param receiveBank       收款方开户行
      * @param description    摘要
      * @param time           到账时间
      * @return               格式化后的字符串
      */
-    public static String formatAccChangeCreditMessage(String amount, String payerAccount, String payerAccountId, String payerBank,
-                                              String receiver, String description, String time) {
+    public static String formatAccChangeCreditMessage(String amount, String payerAccount, String receiveAccount,
+                                              String receiveBank, String description, String time) {
         String MSGTEMPLATE_ACCCHANGE_CREDIT = new StringBuffer()
-                .append("收款方:").append("%s").append("\r\n")
                 .append("到账金额:").append("%s").append("\r\n")
                 .append("付款方账户:").append("%s").append("\r\n")
-                .append("款方账号:").append("%s").append("\r\n")
-                .append("款方开户行:").append("%s").append("\r\n")
+                .append("款方账号:").append("%s").append("\r\n")
+                .append("款方开户行:").append("%s").append("\r\n")
                 .append("摘要:").append("%s").append("\r\n")
                 .append("到账时间:").append("%s").append("\r\n")
                 .toString();
-        return String.format(MSGTEMPLATE_ACCCHANGE_CREDIT, receiver,amount, payerAccount, payerAccountId, payerBank, description, time);
+        return String.format(MSGTEMPLATE_ACCCHANGE_CREDIT, amount, payerAccount, receiveAccount, receiveBank, description, time);
     }
 
     public static String getFeishuTemplate(String title , String content) {

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

@@ -72,7 +72,7 @@ public class TransDetailMsgWarnList extends AbstractListPlugin {
         List<QFilter> qFilters = e.getQFilters();
         // 其他账户
         if("nckd_rpt_otheraccount".equals(billFormId)){
-            //qFilters.add(new QFilter("accountbank.isdefaultpay", QFilter.equals, false));
+            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));
@@ -84,5 +84,18 @@ public class TransDetailMsgWarnList extends AbstractListPlugin {
         if( "nckd_rpt_accchange".equals(billFormId)){
             return;
         }
+        // 动账提醒夜间提醒
+        if("nckd_rpt_dailyreimnight".equals(billFormId)){
+            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));
+            qFilters.add(new QFilter("debitamount",QCP.large_than, BigDecimal.ZERO));
+            qFilters.add(new QFilter("accountbank.isdefaultpay",QCP.equals, true));
+
+            QFilter bizTimeFilter = new QFilter("Hour(biztime)", QCP.large_equals,21).and(new QFilter("Hour(biztime)", QCP.less_equals,24))
+                    .or(new QFilter("Hour(biztime)", QCP.less_than,9));
+            qFilters.add(bizTimeFilter);
+
+        }
     }
 }

+ 8 - 8
main/java/kd/cosmic/jkjt/tmc/bei/report/plugin/DailyReimQueryListDataPlugin.java

@@ -80,8 +80,8 @@ public class DailyReimQueryListDataPlugin extends AbstractReportListDataPlugin {
 
         // 通过公司、我方账号,对方账号分组,求和
         DataSet amountDataSet = dataSet
-                .groupBy(new String[]{"company.id", "accountbank.id", "oppunit"}).sum("debitamount").count("totaltimes").finish()
-                .select("company.id,oppunit,accountbank.id,debitamount totalamount,totaltimes").filter("totalamount > 1000000");
+                .groupBy(new String[]{"company.id", "accountbank.id", "oppunit"}).groupConcat("id","idlist",",").sum("debitamount").count("totaltimes").finish()
+                .select("company.id,oppunit,accountbank.id,debitamount totalamount,totaltimes,idlist").filter("totalamount > 1000000");
         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(), "");
@@ -91,9 +91,9 @@ public class DailyReimQueryListDataPlugin extends AbstractReportListDataPlugin {
                 .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", "oppunit nckd_oppunit", "accountbank.id accountbankid","totaltimes nckd_count","totalamount nckd_amount"},  new String[] {"name nckd_payaccount"}).finish()
+                .select( new String[] {"company.id nckd_company", "oppunit nckd_oppunit", "accountbank.id accountbankid","totaltimes nckd_count","totalamount nckd_amount","idlist nckd_relateids"},  new String[] {"name nckd_payaccount"}).finish()
                 .leftJoin(accountBankDataSet).on("accountbankid", "id")
-                .select(new String[] {"nckd_company", "nckd_oppunit", "nckd_payaccount","nckd_count","nckd_amount","'amount' nckd_source"}, new String[]{"bankaccountnumber nckd_payaccbanknumber", "bank.name nckd_payaccbank"})
+                .select(new String[] {"nckd_company", "nckd_oppunit", "nckd_payaccount","nckd_count","nckd_amount","'amount' nckd_source","nckd_relateids"}, new String[]{"bankaccountnumber nckd_payaccbanknumber", "bank.name nckd_payaccbank"})
                 .finish();
 
     }
@@ -106,8 +106,8 @@ public class DailyReimQueryListDataPlugin extends AbstractReportListDataPlugin {
 
         // 通过公司、我方账号,对方账号分组,求和
         DataSet amountDataSet = dataSet
-                .groupBy(new String[]{"company.id", "accountbank.id", "oppunit"}).sum("debitamount").count("totaltimes").finish()
-                .select("company.id,oppunit,accountbank.id,debitamount totalamount,totaltimes").filter("totaltimes > 20");
+                .groupBy(new String[]{"company.id", "accountbank.id", "oppunit"}).groupConcat("id","idlist",",").sum("debitamount").count("totaltimes").finish()
+                .select("company.id,oppunit,accountbank.id,debitamount totalamount,totaltimes,idlist").filter("totaltimes > 20");
         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(), "");
@@ -117,9 +117,9 @@ public class DailyReimQueryListDataPlugin extends AbstractReportListDataPlugin {
                 .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", "oppunit nckd_oppunit", "accountbank.id accountbankid","totaltimes nckd_count","totalamount nckd_amount"},  new String[] {"name nckd_payaccount"}).finish()
+                .select( new String[] {"company.id nckd_company", "oppunit nckd_oppunit", "accountbank.id accountbankid","totaltimes nckd_count","totalamount nckd_amount","idlist nckd_relateids"},  new String[] {"name nckd_payaccount"}).finish()
                 .leftJoin(accountBankDataSet).on("accountbankid", "id")
-                .select(new String[] {"nckd_company", "nckd_oppunit", "nckd_payaccount","nckd_count","nckd_amount","'times' nckd_source"}, new String[]{"bankaccountnumber nckd_payaccbanknumber", "bank.name nckd_payaccbank"})
+                .select(new String[] {"nckd_company", "nckd_oppunit", "nckd_payaccount","nckd_count","nckd_amount","'times' nckd_source","nckd_relateids"}, new String[]{"bankaccountnumber nckd_payaccbanknumber", "bank.name nckd_payaccbank"})
                 .finish();
     }
 }

+ 51 - 0
main/java/kd/cosmic/jkjt/tmc/bei/report/plugin/DailyReimReportFormPlugin.java

@@ -0,0 +1,51 @@
+package kd.cosmic.jkjt.tmc.bei.report.plugin;
+
+import kd.bos.form.ShowType;
+import kd.bos.form.events.HyperLinkClickEvent;
+import kd.bos.form.events.HyperLinkClickListener;
+import kd.bos.list.ListShowParameter;
+import kd.bos.orm.query.QFilter;
+import kd.bos.report.ReportList;
+import kd.bos.report.plugin.AbstractReportFormPlugin;
+import kd.bos.util.StringUtils;
+import kd.cosmic.jkjt.tmc.bei.common.constant.BeiBeTransDetailConstant;
+
+import java.util.Arrays;
+import java.util.EventObject;
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class DailyReimReportFormPlugin extends AbstractReportFormPlugin implements HyperLinkClickListener {
+
+
+    @Override
+    public void registerListener(EventObject e) {
+        super.registerListener(e);
+        ReportList reportList = (ReportList)this.getControl("reportlistap");
+        reportList.addHyperClickListener(this);
+    }
+
+    @Override
+    public void hyperLinkClick(HyperLinkClickEvent event) {
+        String fieldName = event.getFieldName();
+        if("nckd_count".equals(fieldName)){
+            int rowIndex = event.getRowIndex();
+            String nckd_relateids = event.getRowData().getString("nckd_relateids");
+            if(StringUtils.isNotEmpty(nckd_relateids)){
+                List<Long> idList = Arrays.stream(nckd_relateids.split(",")).map(r -> Long.valueOf(r)).collect(Collectors.toList());
+                ListShowParameter listShowParameter = new ListShowParameter();
+
+                listShowParameter.setFormId("bos_list");
+
+                listShowParameter.setBillFormId("nckd_rpt_dailyreimdetail");
+
+                listShowParameter.getOpenStyle().setShowType(ShowType.MainNewTabPage);
+
+                List<QFilter> qFilters = listShowParameter.getListFilterParameter().getQFilters();
+                qFilters.add(new QFilter("id", QFilter.in, idList));
+                this.getView().showForm(listShowParameter);
+            }
+        }
+
+    }
+}

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

@@ -59,8 +59,8 @@ public class NonDirectConQueryListDataPlugin extends AbstractReportListDataPlugi
 
         // 通过公司、我方账号,对方账号分组,求和
         DataSet amountDataSet = dataSet
-                .groupBy(new String[]{"company.id", "accountbank.id"}).sum(amountField).count("totaltimes").finish()
-                .select("company.id,accountbank.id,"+amountField+" totalamount,totaltimes");
+                .groupBy(new String[]{"company.id", "accountbank.id"}).groupConcat("id","idlist",",").sum(amountField).count("totaltimes").finish()
+                .select("company.id,accountbank.id,"+amountField+" totalamount,totaltimes,idlist");
 
         Set companyIdSet = CommonUtils.getFieldValue(amountDataSet, "company.id");
         DataSet companyDataSet = QueryServiceHelper
@@ -71,9 +71,9 @@ public class NonDirectConQueryListDataPlugin extends AbstractReportListDataPlugi
                 .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()
+                .select( new String[] {"company.id nckd_company", "accountbank.id accountbankid","totaltimes nckd_count","totalamount nckd_amount","idlist nckd_relateids"},  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"})
+                .select(new String[] {"nckd_company", "nckd_payaccount","nckd_count","nckd_amount", String.format("'%s' nckd_dc",isDebitamount?"1":"-1"),"nckd_relateids"}, new String[]{"bankaccountnumber nckd_payaccbanknumber", "bank.name nckd_payaccbank"})
                 .finish();
     }
 }

+ 0 - 15
main/java/kd/cosmic/jkjt/tmc/bei/report/plugin/TransDetailMsgListDataPlugin.java

@@ -1,15 +0,0 @@
-package kd.cosmic.jkjt.tmc.bei.report.plugin;
-
-import kd.bos.algo.DataSet;
-import kd.bos.entity.report.AbstractReportListDataPlugin;
-import kd.bos.entity.report.ReportQueryParam;
-
-import java.util.Map;
-
-public class TransDetailMsgListDataPlugin extends AbstractReportListDataPlugin {
-    @Override
-    public DataSet query(ReportQueryParam reportQueryParam, Object o) throws Throwable {
-        Map<String, Object> customParam = reportQueryParam.getCustomParam();
-        return null;
-    }
-}

+ 0 - 29
main/java/kd/cosmic/jkjt/tmc/bei/report/plugin/TransDetailMsgWarnReportPlugin.java

@@ -1,29 +0,0 @@
-package kd.cosmic.jkjt.tmc.bei.report.plugin;
-
-import kd.bos.entity.report.FilterInfo;
-import kd.bos.entity.report.ReportQueryParam;
-import kd.bos.form.control.events.FilterContainerInitEvent;
-import kd.bos.report.events.CreateFilterInfoEvent;
-import kd.bos.report.plugin.AbstractReportFormPlugin;
-
-public class TransDetailMsgWarnReportPlugin extends AbstractReportFormPlugin {
-    @Override
-    protected void filterContainerInit(FilterContainerInitEvent contInitEvent, ReportQueryParam queryParam) {
-        super.filterContainerInit(contInitEvent, queryParam);
-
-    }
-
-    @Override
-    public void beforeQuery(ReportQueryParam queryParam) {
-        super.beforeQuery(queryParam);
-        FilterInfo filter = queryParam.getFilter();
-        filter.getFilterItems().removeIf(filterItemInfo -> filterItemInfo.getPropName().equals("nckd_warntype"));
-    }
-
-    @Override
-    public void beforeCreateFilterInfo(CreateFilterInfoEvent event) {
-        super.beforeCreateFilterInfo(event);
-
-    }
-
-}

+ 6 - 4
main/java/kd/cosmic/jkjt/tmc/bei/task/AccChangeMsgWarnTask.java

@@ -107,10 +107,9 @@ public class AccChangeMsgWarnTask extends AbstractTask implements StopTask {
         }else{
             return MsgWarnTemplateConstant.formatAccChangeCreditMessage(
                     creditAmount.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString(),
-                    transDetail.getString("company.name"),
-                    transDetail.getString("oppbanknumber"),
-                    transDetail.getString("oppbank"),
+                    transDetail.getString("oppunit"),
                     transDetail.getString("accountbank.bankaccountnumber"),
+                    transDetail.getString("bank.name"),
                     transDetail.getString(BeiBeTransDetailConstant.KEY_DESCRIPTION),
                     DateUtils.formatDate(transDetail.getDate(BeiBeTransDetailConstant.KEY_BIZTIME)));
         }
@@ -121,12 +120,15 @@ public class AccChangeMsgWarnTask extends AbstractTask implements StopTask {
         filterList.add(new QFilter(BeiBeTransDetailConstant.KEY_COMPANY, QFilter.equals, company.getPkValue()));
         Date beginDate = DateUtils.getMinutesBefore(changeMinute);
         filterList.add(new QFilter(BeiBeTransDetailConstant.KEY_BIZTIME, QFilter.large_equals, beginDate));
+        filterList.add(new QFilter(BeiBeTransDetailConstant.KEY_BIZTIME, QFilter.less_than, new Date()));
+
         // 从银企同步的流水
         filterList.add(new QFilter("accountbank.issetbankinterface", QFilter.equals, true));
 
         return QueryServiceHelper.query(this.getClass().getName() ,BeiBeTransDetailConstant.ENTITYID,
-                "id,billno,company.name,accountbank.name,accountbank.bankaccountnumber,bank.name,debitamount,creditamount,oppunit,description,bizdate,biztime",
+                "id,billno,company.name,accountbank.name,accountbank.bankaccountnumber,bank.name,debitamount,creditamount,oppunit,oppbanknumber,oppbank,description,bizdate,biztime",
                 filterList.toArray(new QFilter[0]),"bizdate desc");
+
     }
         //TODO
     protected Set<Long> getAccChangeRange() {

+ 5 - 2
main/java/kd/cosmic/jkjt/tmc/bei/task/DailyReimMsgWarnTask.java

@@ -90,6 +90,7 @@ public class DailyReimMsgWarnTask extends AbstractTask implements StopTask {
         }
         // 获取流水的月份,同一个月只能发送一次
         String timeFlag = DateUtils.formatDateMonth(beginDate);
+        String timeStr = String.format("%s年%s月",firstDayOfLastMonth.getYear(),firstDayOfLastMonth.getMonthValue()-1);
 
         for(DynamicObject transDetail : transDetailData){
             String uniqueKey = String.join("-", WARTYPE.getValue(),timeFlag,transDetail.getString("foppunit"));
@@ -97,7 +98,7 @@ public class DailyReimMsgWarnTask extends AbstractTask implements StopTask {
                 // 消息如果已发送,就不在执行
                 continue;
             }
-            String messageContent = getMcCenterMessage(company.getString("name"),transDetail);
+            String messageContent = getMcCenterMessage(timeStr,company.getString("name"),transDetail);
 
             MessageInfo messageInfo = new MessageInfo();
             messageInfo.setTitle(String.join("-",WARTYPE.getName()));
@@ -119,11 +120,13 @@ public class DailyReimMsgWarnTask extends AbstractTask implements StopTask {
 
     }
 
-    protected String getMcCenterMessage(String payerAccount , DynamicObject transDetail) {
+    protected String getMcCenterMessage(String timeStr , String payerAccount , DynamicObject transDetail) {
         Long accountBankId = transDetail.getLong("faccountbankid");
         DynamicObject accountBank = QueryServiceHelper.queryOne("bd_accountbanks", "bankaccountnumber,bank.name",
                 new QFilter("id", QCP.equals,accountBankId).toArray());
+
         return MsgWarnTemplateConstant.formatDailyMessage(
+                timeStr,
                 payerAccount,
                 accountBank.getString("bankaccountnumber"),
                 accountBank.getString("bank.name"),

+ 32 - 34
main/java/kd/cosmic/jkjt/tmc/bei/task/DailyReimNightMsgWarnTask.java

@@ -72,14 +72,14 @@ public class DailyReimNightMsgWarnTask extends AbstractTask implements StopTask
         Date beginDate = DateUtils.getDateByDayAndHour(-1, 21);
         Date endDate = DateUtils.getDateByDayAndHour(0, 9);
 
-        DynamicObjectCollection transDetailData = getTransDetailData(company, beginDate, endDate,null,0);
+        DynamicObjectCollection transDetailData = getTransDetailData(company, beginDate, endDate);
         if(transDetailData == null || transDetailData.isEmpty()){
             BizLog.log("没有符合条件的数据,不进行消息发送。");
             return;
         }
         String timeFlag = DateUtils.formatDateDay(new Date());
         for(DynamicObject transDetail : transDetailData){
-            String uniqueKey = String.join("-", WARTYPE.getValue(),timeFlag,transDetail.getString("foppunit"));
+            String uniqueKey = String.join("-", WARTYPE.getValue(),timeFlag,transDetail.getString("billno"));
             if(ORM.create().exists("nckd_msgwarnlog",new QFilter("nckd_unique_key", QCP.equals,uniqueKey).toArray())){
                 // 消息如果已发送,就不在执行
                 continue;
@@ -107,44 +107,42 @@ public class DailyReimNightMsgWarnTask extends AbstractTask implements StopTask
     }
 
     protected String getMcCenterMessage(String payerAccount , DynamicObject transDetail) {
-        Long accountBankId = transDetail.getLong("faccountbankid");
-        DynamicObject accountBank = QueryServiceHelper.queryOne("bd_accountbanks", "bankaccountnumber,bank.name",
-                new QFilter("id", QCP.equals,accountBankId).toArray());
-        return MsgWarnTemplateConstant.formatDailyMessage(
-                payerAccount,
-                accountBank.getString("bankaccountnumber"),
-                accountBank.getString("bank.name"),
-                transDetail.getString("foppunit"),
-                transDetail.getString("totaltimes"),
-                transDetail.getBigDecimal("totalamount").setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString());
+        return MsgWarnTemplateConstant.formatDailyNightMessage(
+                transDetail.getString("oppunit"),
+                transDetail.getBigDecimal("debitamount").setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString(),
+                transDetail.getString("company.name"),
+                transDetail.getString("accountbank.bankaccountnumber"),
+                transDetail.getString("bank.name"),
+                transDetail.getString("description"),
+                DateUtils.formatDate(transDetail.getDate("biztime")));
     }
 
-    protected DynamicObjectCollection getTransDetailData(DynamicObject company , Date beginDate , Date endDate,BigDecimal maxAmount,int maxTimes){
-        DataSet transDetailDataSet = getTransDetailDataSet(company, beginDate, endDate,maxAmount,maxTimes);
+    protected DynamicObjectCollection getTransDetailData(DynamicObject company , Date beginDate , Date endDate){
+        DataSet transDetailDataSet = getTransDetailDataSet(company, beginDate, endDate);
         // 看报表与消息的兼容程度,再看怎么处理,暂时转成动态对象集合
         return ORM.create().toPlainDynamicObjectCollection(transDetailDataSet.copy());
     }
 
-    protected DataSet getTransDetailDataSet(DynamicObject company , Date beginDate , Date endDate,BigDecimal maxAmount,int maxTimes){
-        MainEntityType dt = EntityMetadataCache.getDataEntityType(BeiBeTransDetailConstant.ENTITYID);
-        Long defualtAccountBankId = getDefualtAccountBankId(company);
+    protected DataSet getTransDetailDataSet(DynamicObject company , Date beginDate , Date endDate){
 
-        
-        String dbRouteKey = dt.getDBRouteKey();
-        String nightSql = "SELECT faccountbankid, foppunit, COUNT(1) totaltimes, SUM(fdebitAmount) totalamount , 'times' source FROM t_bei_transdetail "
-                + "WHERE fcompanyid = ? and faccountbankid = ? AND fbiztime >= ? AND fbiztime < ? "
-                + "AND TRIM(foppunit) <> '' AND LENGTH(foppunit) <= 4 AND fdebitAmount != 0 "
-                + "GROUP BY faccountbankid, foppunit";
-
-        return DB.queryDataSet(this.getClass().getName(), DBRoute.of(dbRouteKey), nightSql,
-                new Object[]{company.getPkValue(),defualtAccountBankId, beginDate, endDate});
-    }
-
-    protected Long getDefualtAccountBankId(DynamicObject company){
-        DynamicObject accountBankBill = QueryServiceHelper.queryOne("bd_accountbanks", "id", new QFilter[]{
-                new QFilter("company", QCP.equals, company.getPkValue()),
-                new QFilter("isdefaultpay", QCP.equals, true)
-        });
-        return accountBankBill == null ? null : accountBankBill.getLong("id");
+        List<QFilter> filterList = new ArrayList<>();
+        filterList.add(new QFilter(BeiBeTransDetailConstant.KEY_COMPANY, QFilter.equals, company.getPkValue()));
+        if(beginDate != null){
+            filterList.add(new QFilter(BeiBeTransDetailConstant.KEY_BIZTIME, QFilter.large_equals, beginDate));
+        }
+        if(endDate != null){
+            filterList.add(new QFilter(BeiBeTransDetailConstant.KEY_BIZTIME, QFilter.less_than, endDate));
+        }
+        // 除默认付款付之外的付款
+        filterList.add(new QFilter("accountbank.isdefaultpay", QFilter.equals, true));
+        filterList.add(QFilter.isNotNull("oppunit"));
+        filterList.add(new QFilter("length(trim(oppunit))", QCP.large_than,0));
+        filterList.add(new QFilter("length(oppunit)", QCP.less_equals,4));
+
+        // 付款金额大于0
+        filterList.add(new QFilter(BeiBeTransDetailConstant.KEY_DEBITAMOUNT, QFilter.large_than, BigDecimal.ZERO));
+        return QueryServiceHelper.queryDataSet(this.getClass().getName() ,BeiBeTransDetailConstant.ENTITYID,
+                "id,billno,company.name,accountbank.name,accountbank.bankaccountnumber,bank.name,debitamount,oppunit,description,bizdate,biztime",
+                filterList.toArray(new QFilter[0]),"bizdate desc");
     }
 }

+ 1 - 0
main/java/kd/cosmic/jkjt/tmc/bei/task/PersonalFinanceMsgWarnTask.java

@@ -120,6 +120,7 @@ public class PersonalFinanceMsgWarnTask extends AbstractTask implements StopTask
         DynamicObject accountBank = QueryServiceHelper.queryOne("bd_accountbanks", "bankaccountnumber,bank.name",
                 new QFilter("id", QCP.equals,accountBankId).toArray());
         return MsgWarnTemplateConstant.formatDailyMessage(
+                null,
                 payerAccount,
                 accountBank.getString("bankaccountnumber"),
                 accountBank.getString("bank.name"),