Pārlūkot izejas kodu

排查飞书消息发送代码逻辑

syh 5 gadi atpakaļ
vecāks
revīzija
1f8ce6a0de

+ 1 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/BidWarningServiceImpl.java

@@ -83,6 +83,7 @@ public class BidWarningServiceImpl implements IBidWarningService {
 
                             if (!Check.isNull(unitWarning)) {
                                 sendMessage(project.getMediaId(), accountId, projectId, project.getProjectName(), userAllocation.getAuthName(), unitWarning, maxBid);
+                                sendFeishumessage(project.getMediaId(), accountId, projectId, project.getProjectName(), userAllocation.getAuthName(), unitWarning, maxBid);
                             }
                         }
                     }

+ 1 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/CpaBidWarningServiceImpl.java

@@ -67,6 +67,7 @@ public class CpaBidWarningServiceImpl implements ICpaBidWarningService {
 
                     if (!Check.isNull(unitWarning)) {
                         sendMessage(project.getMediaId(), accountId, project.getId(), project.getProjectName(), userAllocation.getAuthName(), unitWarning, maxDeepCpaBid);
+                        sendFeishuMessage(project.getMediaId(), accountId, project.getId(), project.getProjectName(), userAllocation.getAuthName(), unitWarning, maxDeepCpaBid);
                     }
                 }
             }

+ 46 - 1
module-common/src/main/java/cn/com/ctop/common/module/service/impl/MailLogServiceImpl.java

@@ -1,10 +1,14 @@
 package cn.com.ctop.common.module.service.impl;
 
+import cn.com.ctop.common.module.entity.CorpFeishuUser;
 import cn.com.ctop.common.module.entity.MailLog;
 import cn.com.ctop.common.module.mapper.MailLogMapper;
+import cn.com.ctop.common.module.service.ICorpFeishuUserService;
 import cn.com.ctop.common.module.service.IMailLogService;
 import cn.com.ctop.common.module.utils.Check;
 import cn.com.ctop.common.module.utils.CorpWexinUtils;
+import cn.com.feishu.provider.MessageProvider;
+import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Primary;
@@ -38,8 +42,28 @@ public class MailLogServiceImpl extends ServiceImpl<MailLogMapper, MailLog> impl
 
             CorpWexinUtils.sendMessageByWeChatId(weChatId, text.toString());
         }
+
+        CorpFeishuUser user = corpFeishuUserService.getByUserId(responsibleId);
+        if(null!=user){
+            JSONArray openIds = new JSONArray();
+            openIds.add(user.getOpenId());
+            try {
+                String transferorName = mailLogMapper.getUserNameByUserId(transferor); // 转让人姓名
+                String assigneeName = mailLogMapper.getUserNameByUserId(assignee); // 转让人姓名
+                StringBuilder text = new StringBuilder();
+                text.append("转户申请").append("\n\r").
+                        append("您的项目:").append(projectName + ",").append("\n\r")
+                        .append("账号:" + accountId).append(",申请由:" + transferorName + "转户于:" + assigneeName).append("\n\r")
+                        .append("等待您的审核,请您及时处理!");
+                MessageProvider.batchSend(null,openIds,null,text.toString());
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
     }
 
+    @Autowired
+    private ICorpFeishuUserService corpFeishuUserService;
 
     /**
      * 转户通过或失败发送通知
@@ -71,6 +95,27 @@ public class MailLogServiceImpl extends ServiceImpl<MailLogMapper, MailLog> impl
             CorpWexinUtils.sendMessageByWeChatId(weChatId, text.toString());
         }
 
-
+        CorpFeishuUser user = corpFeishuUserService.getByUserId(userId);
+        if(null!=user){
+            JSONArray openIds = new JSONArray();
+            openIds.add(user.getOpenId());
+            try {
+                String statusName = "";
+                if (status == 1) {
+                    statusName = "通过";
+                } else if (status == 2) {
+                    statusName = "拒绝";
+                }
+                StringBuilder text = new StringBuilder();
+                text.append("转户申请审核通知").append("\n\r").
+                        append("您的项目:").append(projectName + ",").append("\n\r")
+                        .append("账号:" + accountId).append("\n\r")
+                        .append("申请的转户操作已:" + statusName).append("\n\r")
+                        .append("请您前往验证,谢谢!");
+                MessageProvider.batchSend(null,openIds,null,text.toString());
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
     }
 }

+ 16 - 1
module-common/src/main/java/cn/com/ctop/common/module/service/impl/SendMessageServiceImpl.java

@@ -1,9 +1,13 @@
 package cn.com.ctop.common.module.service.impl;
 
+import cn.com.ctop.common.module.entity.CorpFeishuUser;
 import cn.com.ctop.common.module.mapper.MailLogMapper;
+import cn.com.ctop.common.module.service.ICorpFeishuUserService;
 import cn.com.ctop.common.module.service.ISendMessageService;
 import cn.com.ctop.common.module.utils.Check;
 import cn.com.ctop.common.module.utils.CorpWexinUtils;
+import cn.com.feishu.provider.MessageProvider;
+import com.alibaba.fastjson.JSONArray;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -13,7 +17,8 @@ import org.springframework.stereotype.Service;
 public class SendMessageServiceImpl implements ISendMessageService {
     @Autowired
     private MailLogMapper mailLogMapper;
-
+    @Autowired
+    private ICorpFeishuUserService corpFeishuUserService;
     @Override
     public void sendMessage(String userId, String text) {
         String weChatId = mailLogMapper.getWChatIdByUserId(userId);
@@ -21,6 +26,16 @@ public class SendMessageServiceImpl implements ISendMessageService {
             CorpWexinUtils.sendMessageByWeChatId(weChatId, text);
             log.info("消息发送成功,userId:{}", userId);
         }
+        CorpFeishuUser user = corpFeishuUserService.getByUserId(userId);
+        if(null!=user){
+            JSONArray openIds = new JSONArray();
+            openIds.add(user.getOpenId());
+            try {
+                MessageProvider.batchSend(null,openIds,null,text);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
     }
 
 }

+ 104 - 2
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/AccountWarningServiceImpl.java

@@ -4,13 +4,17 @@ import cn.com.ctop.common.module.entity.MailLog;
 import cn.com.ctop.common.module.entity.UserAllocation;
 import cn.com.ctop.common.module.mapper.MailLogMapper;
 import cn.com.ctop.common.module.mapper.UserAllocationMapper;
+import cn.com.ctop.common.module.service.ICorpFeishuUserService;
 import cn.com.ctop.common.module.utils.Check;
 import cn.com.ctop.common.module.utils.CorpWexinUtils;
 import cn.com.ctop.common.module.utils.SendMailUtil;
 import cn.com.ctop.kuaishou.modules.batch.service.IAccountWarningService;
 import cn.com.ctop.kuaishou.modules.report.mapper.KuaishouReportHourlyAccountMapper;
+import cn.com.feishu.provider.MessageProvider;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -19,6 +23,7 @@ import java.math.RoundingMode;
 import java.util.List;
 
 @Service
+@Slf4j
 public class AccountWarningServiceImpl implements IAccountWarningService {
     @Autowired
     private KuaishouReportHourlyAccountMapper hourlyAccountMapper;
@@ -65,6 +70,7 @@ public class AccountWarningServiceImpl implements IAccountWarningService {
                             BigDecimal divide = nowCost.divide(lastHourCost, 2, RoundingMode.HALF_UP);
                             if (subtract.compareTo(warningAmount) > -1 && divide.compareTo(warningProportion) > -1) {
                                 sendMessage(accountId, userAllocation.getAuthName(), maxHour, nowCost, userAllocation.getProjectId(), userAllocation.getProjectName());
+                                sendFeishuMessage(accountId, userAllocation.getAuthName(), maxHour, nowCost, userAllocation.getProjectId(), userAllocation.getProjectName());
                             }
                         }
                     }
@@ -78,6 +84,7 @@ public class AccountWarningServiceImpl implements IAccountWarningService {
                     BigDecimal divide = nowCost.divide(yesterdayHourCost, 2, RoundingMode.HALF_UP);
                     if (subtract.compareTo(warningAmount) > -1 && divide.compareTo(warningProportion) > -1) {
                         sendYesterdayMessage(accountId, userAllocation.getAuthName(), maxHour, nowCost, userAllocation.getProjectId(), userAllocation.getProjectName());
+                        sendYesterdayFeishuMessage(accountId, userAllocation.getAuthName(), maxHour, nowCost, userAllocation.getProjectId(), userAllocation.getProjectName());
                     }
                 }
             }
@@ -88,6 +95,103 @@ public class AccountWarningServiceImpl implements IAccountWarningService {
 
     }
 
+    private void sendYesterdayFeishuMessage(Long accountId, String authName, Integer maxHour, BigDecimal nowCost, Long projectId, String projectName) {
+
+        StringBuilder text = new StringBuilder();
+        text.append("较昨日同时段消耗预警").append("\n\r")
+                .append("您的项目:" + projectName + "下的,").append("\n\r")
+                .append("账号:").append(accountId + ",").append("授权名称为:" + authName).append("\n\r")
+                .append("相较于昨日 " + maxHour + "时").append("\n\r")
+                .append("出现消耗暴涨,").append("消耗金额为:" + nowCost).append("\n\r")
+                .append("请您及时查看!");
+
+
+        QueryWrapper<MailLog> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("account_id", accountId);
+        queryWrapper.eq("hour", maxHour);
+        queryWrapper.eq("mail_type", 3);
+        queryWrapper.orderByDesc("create_time");
+        queryWrapper.last("limit 1");
+        MailLog checkMailLog = mailLogMapper.selectOne(queryWrapper);
+        if (Check.isNull(checkMailLog)) {
+            List<String> mailList = mailLogMapper.selectMailList(projectId);
+            String subject = "快手-较昨日同时段账户消耗预警";
+            try {
+                SendMailUtil.sendMail(mailList, subject, text.toString());
+                MailLog mailLog = new MailLog();
+                mailLog.setAccountId(accountId);
+                mailLog.setMailType(3);
+                mailLog.setHour(maxHour);
+                mailLog.setContent(text.toString());
+                mailLog.setSendEmil(JSON.toJSONString(mailList));
+                mailLog.setSubject(subject);
+                mailLogMapper.insert(mailLog);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            JSONArray openIds = corpFeishuUserService.getOpenIdByParams(projectId);
+            if(null == openIds||openIds.isEmpty()){
+                log.error("该项目下运营飞书账号尚未绑定邮箱=>projectId:{}",projectId);
+                return;
+            }
+            try {
+                MessageProvider.batchSend(null,openIds,null,text.toString());
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    @Autowired
+    private ICorpFeishuUserService corpFeishuUserService;
+
+    private void sendFeishuMessage(Long accountId, String authName, Integer hour, BigDecimal amount, Long projectId, String projectName) {
+
+        StringBuilder text = new StringBuilder();
+        text.append("较上时段消耗预警").append("\n\r")
+                .append("您的项目:" + projectName + " 下的").append("\n\r")
+                .append("账号:").append(accountId + ",").append("授权名称为:" + authName).append("\n\r")
+                .append(hour + " 时").append("相较于 " + (hour - 1) + " 时").append("<br/>")
+                .append("出现消耗暴涨,").append("消耗金额为:" + amount).append("<br/>")
+                .append("请您及时查看!");
+
+        QueryWrapper<MailLog> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("account_id", accountId);
+        queryWrapper.eq("hour", hour);
+        queryWrapper.eq("mail_type", 2);
+        queryWrapper.orderByDesc("create_time");
+        queryWrapper.last("limit 1");
+        MailLog checkMailLog = mailLogMapper.selectOne(queryWrapper);
+        if (Check.isNull(checkMailLog)) {
+            List<String> mailList = mailLogMapper.selectMailList(projectId);
+            String subject = "快手-账户消耗预警";
+            try {
+                SendMailUtil.sendMail(mailList, subject, text.toString());
+                MailLog mailLog = new MailLog();
+                mailLog.setAccountId(accountId);
+                mailLog.setMailType(2);
+                mailLog.setHour(hour);
+                mailLog.setContent(text.toString());
+                mailLog.setSendEmil(JSON.toJSONString(mailList));
+                mailLog.setSubject(subject);
+                mailLogMapper.insert(mailLog);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        JSONArray openIds = corpFeishuUserService.getOpenIdByParams(projectId);
+        if(null == openIds||openIds.isEmpty()){
+            log.error("该项目下运营飞书账号尚未绑定邮箱=>projectId:{}",projectId);
+            return;
+        }
+        try {
+            MessageProvider.batchSend(null,openIds,null,text.toString());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
     private void sendYesterdayMessage(Long accountId, String authName, Integer maxHour, BigDecimal nowCost, Long projectId, String projectName) {
 
         StringBuilder text = new StringBuilder();
@@ -125,8 +229,6 @@ public class AccountWarningServiceImpl implements IAccountWarningService {
             List<String> wexinIds = mailLogMapper.selectWeiXinIdList(projectId);
             CorpWexinUtils.sendMessage(wexinIds, text.toString());
         }
-
-
     }
 
 

+ 1 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/service/impl/ByteDanceHourlyAccountWarningServiceImpl.java

@@ -77,6 +77,7 @@ public class ByteDanceHourlyAccountWarningServiceImpl implements IByteDanceHourl
                     BigDecimal divide = nowCost.divide(yesterdayHourCost, 2, RoundingMode.HALF_UP);
                     if (subtract.compareTo(warningAmount) > -1 && divide.compareTo(warningProportion) > -1) {
                         sendYesterdayMessage(accountId, userAllocation.getAuthName(), maxHour, cost, userAllocation.getProjectId(), userAllocation.getProjectName());
+                        sendYesterdayFeishuMessage(accountId, userAllocation.getAuthName(), maxHour, cost, userAllocation.getProjectId(), userAllocation.getProjectName());
                     }
                 }
             }