Browse Source

资金预警需求-公转私消息通知:
1.日常报销、日常报销夜间、其他账户增加对私(对方户名小于等于4)
2.日常报销增加消息防重标识,规则:通知类型 + 通知月份 + 对方户名
3.日常报销夜间增加消息防重标识,规则:通知类型 + 通知天 + 对方户名

lisheng 1 week ago
parent
commit
09f4396837

+ 7 - 3
main/java/kd/cosmic/jkjt/tmc/bei/task/DailyReimMsgWarnTask.java

@@ -19,6 +19,7 @@ import kd.bos.servicehelper.BusinessDataServiceHelper;
 import kd.bos.servicehelper.QueryServiceHelper;
 import kd.bos.workflow.engine.msg.info.MessageInfo;
 import kd.cosmic.jkjt.tmc.bei.common.CommonUtils;
+import kd.cosmic.jkjt.tmc.bei.common.DateUtils;
 import kd.cosmic.jkjt.tmc.bei.common.FeishuSendMessageUtils;
 import kd.cosmic.jkjt.tmc.bei.common.constant.BeiBeTransDetailConstant;
 import kd.cosmic.jkjt.tmc.bei.common.constant.MsgWarnConfigConstant;
@@ -87,8 +88,11 @@ public class DailyReimMsgWarnTask extends AbstractTask implements StopTask {
             BizLog.log("没有符合条件的数据,不进行消息发送。");
             return;
         }
+        // 获取流水的月份,同一个月只能发送一次
+        String timeFlag = DateUtils.formatDateMonth(beginDate);
+
         for(DynamicObject transDetail : transDetailData){
-            String uniqueKey = String.join("-", WARTYPE.getValue(),transDetail.getString("foppunit"));
+            String uniqueKey = String.join("-", WARTYPE.getValue(),timeFlag,transDetail.getString("foppunit"));
             if(ORM.create().exists("nckd_msgwarnlog",new QFilter("nckd_unique_key", QCP.equals,uniqueKey).toArray())){
                 // 消息如果已发送,就不在执行
                 continue;
@@ -141,7 +145,7 @@ public class DailyReimMsgWarnTask extends AbstractTask implements StopTask {
         String dbRouteKey = dt.getDBRouteKey();
         String sumTimesSql = "SELECT faccountbankid, foppunit, COUNT(1) totaltimes, SUM(fdebitAmount) totalamount , 'times' source FROM t_bei_transdetail "
                 + "WHERE fcompanyid = ? and faccountbankid = ? AND fbiztime > ? AND fbiztime < ? AND (HOUR(fbiztime) >= 9 AND HOUR(fbiztime) < 21) "
-                + "AND TRIM(foppunit) <> '' AND fdebitAmount != 0 "
+                + "AND TRIM(foppunit) <> '' AND LENGTH(foppunit) <= 4 AND fdebitAmount != 0 "
                 + "GROUP BY faccountbankid, foppunit HAVING COUNT(1) > ?";
 
         DataSet sumTimesDataSet = DB.queryDataSet(this.getClass().getName(), DBRoute.of(dbRouteKey), sumTimesSql,
@@ -150,7 +154,7 @@ public class DailyReimMsgWarnTask extends AbstractTask implements StopTask {
 
         String sumAmountSql = "SELECT faccountbankid, foppunit, COUNT(1) totaltimes, SUM(fdebitAmount) totalamount , 'amount' source FROM t_bei_transdetail "
                 + "WHERE fcompanyid = ? and faccountbankid = ? AND fbiztime > ? AND fbiztime < ? AND (HOUR(fbiztime) >= 9 AND HOUR(fbiztime) < 21) "
-                + "AND TRIM(foppunit) <> '' AND fdebitAmount != 0 "
+                + "AND TRIM(foppunit) <> '' AND LENGTH(foppunit) <= 4 AND fdebitAmount != 0 "
                 + "GROUP BY faccountbankid, foppunit HAVING SUM(fdebitAmount) > ?";
         DataSet sumAmountDataSet = DB.queryDataSet(this.getClass().getName(), DBRoute.of(dbRouteKey), sumAmountSql,
                 new Object[]{company.getPkValue(), defualtAccountBankId,beginDate, endDate, maxAmount});

+ 3 - 2
main/java/kd/cosmic/jkjt/tmc/bei/task/DailyReimNightMsgWarnTask.java

@@ -77,8 +77,9 @@ public class DailyReimNightMsgWarnTask extends AbstractTask implements StopTask
             BizLog.log("没有符合条件的数据,不进行消息发送。");
             return;
         }
+        String timeFlag = DateUtils.formatDateDay(new Date());
         for(DynamicObject transDetail : transDetailData){
-            String uniqueKey = String.join("-", WARTYPE.getValue(),transDetail.getString("foppunit"));
+            String uniqueKey = String.join("-", WARTYPE.getValue(),timeFlag,transDetail.getString("foppunit"));
             if(ORM.create().exists("nckd_msgwarnlog",new QFilter("nckd_unique_key", QCP.equals,uniqueKey).toArray())){
                 // 消息如果已发送,就不在执行
                 continue;
@@ -132,7 +133,7 @@ public class DailyReimNightMsgWarnTask extends AbstractTask implements StopTask
         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 fdebitAmount != 0 "
+                + "AND TRIM(foppunit) <> '' AND LENGTH(foppunit) <= 4 AND fdebitAmount != 0 "
                 + "GROUP BY faccountbankid, foppunit";
 
         return DB.queryDataSet(this.getClass().getName(), DBRoute.of(dbRouteKey), nightSql,

+ 39 - 34
main/java/kd/cosmic/jkjt/tmc/bei/task/OtherAccountMsgWarnTask.java

@@ -4,10 +4,6 @@ import kd.bos.algo.DataSet;
 import kd.bos.context.RequestContext;
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
-import kd.bos.db.DB;
-import kd.bos.db.DBRoute;
-import kd.bos.entity.EntityMetadataCache;
-import kd.bos.entity.MainEntityType;
 import kd.bos.exception.KDException;
 import kd.bos.logging.BizLog;
 import kd.bos.orm.ORM;
@@ -17,8 +13,8 @@ import kd.bos.schedule.api.StopTask;
 import kd.bos.schedule.executor.AbstractTask;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
 import kd.bos.servicehelper.QueryServiceHelper;
+import kd.bos.util.StringUtils;
 import kd.bos.workflow.engine.msg.info.MessageInfo;
-import kd.cosmic.jkjt.tmc.bei.common.CommonUtils;
 import kd.cosmic.jkjt.tmc.bei.common.DateUtils;
 import kd.cosmic.jkjt.tmc.bei.common.FeishuSendMessageUtils;
 import kd.cosmic.jkjt.tmc.bei.common.constant.BeiBeTransDetailConstant;
@@ -41,6 +37,10 @@ public class OtherAccountMsgWarnTask extends AbstractTask implements StopTask {
     public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
         // 查询生效的账户大额交易通知配置
         Set<Long> largeTransIdConfig = getMsgWarnConfig();
+        Object changeMinute = map.get("changeMinute");
+        if(map.containsKey("changeMinute") && StringUtils.isNotEmpty((String)changeMinute)){
+            changeMinute = Integer.parseInt((String) changeMinute);
+        }
         largeTransIdConfig.forEach(configId -> transConfigSendMessage(configId));
     }
 
@@ -60,15 +60,28 @@ public class OtherAccountMsgWarnTask extends AbstractTask implements StopTask {
         DynamicObject company = msgWarnConfig.getDynamicObject(MsgWarnConfigConstant.KEY_NCKD_COMPANY);
         DynamicObject financeDirectors = msgWarnConfig.getDynamicObject(MsgWarnConfigConstant.KEY_NCKD_FINANCE_DIRECTOR);
         DynamicObject financeLeader = msgWarnConfig.getDynamicObject(MsgWarnConfigConstant.KEY_NCKD_FINANCE_LEADER);
-
+        DynamicObject unitDirectors = msgWarnConfig.getDynamicObject(MsgWarnConfigConstant.KEY_NCKD_UNIT_DIRECTOR);
+        DynamicObject unitLeader = msgWarnConfig.getDynamicObject(MsgWarnConfigConstant.KEY_NCKD_UNIT_LEADER);
         // 没有设置接收人时跳过
-        if(financeDirectors == null || financeLeader == null){
+        if(financeDirectors == null && financeLeader == null && unitDirectors == null && unitLeader == null){
             BizLog.log("消息接收人为空,不进行消息发送。");
             return;
         }
-        List<Long> receiverIdList = new ArrayList<>();
-        receiverIdList.add(financeDirectors.getLong("id"));
-        receiverIdList.add(financeLeader.getLong("id"));
+        Set<Long> receiverIdSet = new HashSet<>();
+        if(financeDirectors != null) {
+            receiverIdSet.add(financeDirectors.getLong("id"));
+        }
+        if(financeLeader != null) {
+            receiverIdSet.add(financeLeader.getLong("id"));
+        }
+        if(unitDirectors != null) {
+            receiverIdSet.add(unitDirectors.getLong("id"));
+        }
+        if(unitLeader != null) {
+            receiverIdSet.add(unitLeader.getLong("id"));
+        }
+
+
         Date beginDate = DateUtils.getMinutesBefore(changeMinute);
         DynamicObjectCollection transDetailData = getTransDetailData(company, beginDate);
         if(transDetailData == null || transDetailData.isEmpty()){
@@ -76,23 +89,23 @@ public class OtherAccountMsgWarnTask extends AbstractTask implements StopTask {
             return;
         }
         for(DynamicObject transDetail : transDetailData){
-            String uniqueKey = String.join("-", WARTYPE.getValue(),transDetail.getString("foppunit"));
+            String uniqueKey = String.join("-", WARTYPE.getValue(),transDetail.getString("billno"));
             if(ORM.create().exists("nckd_msgwarnlog",new QFilter("nckd_unique_key", QCP.equals,uniqueKey).toArray())){
                 // 消息如果已发送,就不在执行
                 continue;
             }
-            String messageContent = getMcCenterMessage(company.getString("name"),transDetail);
+            String messageContent = getMcCenterMessage(transDetail);
 
             MessageInfo messageInfo = new MessageInfo();
             messageInfo.setTitle(String.join("-",WARTYPE.getName()));
-            messageInfo.setUserIds(receiverIdList);
+            messageInfo.setUserIds(new ArrayList<>(receiverIdSet));
             messageInfo.setContent(messageContent);
             messageInfo.setTag(WARTYPE.getName());
             messageInfo.setSenderId(RequestContext.get().getCurrUserId());
             messageInfo.setEntityNumber("nckd_msgwarnconfig");
             messageInfo.setBizDataId(configId);
 
-            String feishuMessage = MsgWarnTemplateConstant.getFeishuTemplate(WARTYPE.getName(),messageContent);
+            String feishuMessage = MsgWarnTemplateConstant.getFeishuTemplate(WARTYPE.getName(),messageContent,MsgWarnTemplateConstant.TEMPLATESTR_OTHERACCOUNT);
             MsgWarnMessageInfo warnMessageInfo = new MsgWarnMessageInfo(WARTYPE.getValue(),
                     company.getString("name"),
                     uniqueKey,
@@ -103,17 +116,15 @@ public class OtherAccountMsgWarnTask 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());
+    protected String getMcCenterMessage(DynamicObject transDetail) {
+        return MsgWarnTemplateConstant.formatOtherAccountMessage(
+                transDetail.getString("company.name"),
+                transDetail.getString("accountbank.bankaccountnumber"),
+                transDetail.getString("bank.name"),
+                transDetail.getBigDecimal("debitamount").setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString(),
+                transDetail.getString(BeiBeTransDetailConstant.KEY_OPPUNIT),
+                transDetail.getString(BeiBeTransDetailConstant.KEY_DESCRIPTION),
+                DateUtils.formatDate(transDetail.getDate(BeiBeTransDetailConstant.KEY_BIZTIME)));
     }
 
     protected DynamicObjectCollection getTransDetailData(DynamicObject company , Date beginDate){
@@ -138,17 +149,11 @@ public class OtherAccountMsgWarnTask extends AbstractTask implements StopTask {
         }
         // 除默认付款付之外的付款
         filterList.add(new QFilter("accountbank.isdefaultpay", QFilter.equals, false));
-
+        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");
     }
-
-    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");
-    }
 }

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

@@ -73,7 +73,7 @@ public class PersonalFinanceMsgWarnTask extends AbstractTask implements StopTask
         //每月首个工作日上午9点发送上月预警信息
         LocalDate today = LocalDate.now();
         // 上个月第一天
-        LocalDate firstDayOfLastMonth = today.minusMonths(13).withDayOfMonth(1);
+        LocalDate firstDayOfLastMonth = today.minusMonths(1).withDayOfMonth(1);
         // 本月第一天
         LocalDate firstDayOfThisMonth = today.withDayOfMonth(1);
         Date beginDate = Date.from(firstDayOfLastMonth.atStartOfDay().atZone(java.time.ZoneId.systemDefault()).toInstant());