Browse Source

资金预警需求-预警报表:
1.动账提醒收款类报错
2.日常报销夜间提醒不需要分组
3.日常报销增加日期

lisheng 23 hours ago
parent
commit
8a0587c9ee

+ 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) {

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