|
@@ -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.entity.UserAllocation;
|
|
import cn.com.ctop.common.module.mapper.MailLogMapper;
|
|
import cn.com.ctop.common.module.mapper.MailLogMapper;
|
|
import cn.com.ctop.common.module.mapper.UserAllocationMapper;
|
|
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.Check;
|
|
import cn.com.ctop.common.module.utils.CorpWexinUtils;
|
|
import cn.com.ctop.common.module.utils.CorpWexinUtils;
|
|
import cn.com.ctop.common.module.utils.SendMailUtil;
|
|
import cn.com.ctop.common.module.utils.SendMailUtil;
|
|
import cn.com.ctop.kuaishou.modules.batch.service.IAccountWarningService;
|
|
import cn.com.ctop.kuaishou.modules.batch.service.IAccountWarningService;
|
|
import cn.com.ctop.kuaishou.modules.report.mapper.KuaishouReportHourlyAccountMapper;
|
|
import cn.com.ctop.kuaishou.modules.report.mapper.KuaishouReportHourlyAccountMapper;
|
|
|
|
+import cn.com.feishu.provider.MessageProvider;
|
|
import com.alibaba.fastjson.JSON;
|
|
import com.alibaba.fastjson.JSON;
|
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
@@ -19,6 +23,7 @@ import java.math.RoundingMode;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
|
|
@Service
|
|
@Service
|
|
|
|
+@Slf4j
|
|
public class AccountWarningServiceImpl implements IAccountWarningService {
|
|
public class AccountWarningServiceImpl implements IAccountWarningService {
|
|
@Autowired
|
|
@Autowired
|
|
private KuaishouReportHourlyAccountMapper hourlyAccountMapper;
|
|
private KuaishouReportHourlyAccountMapper hourlyAccountMapper;
|
|
@@ -65,6 +70,7 @@ public class AccountWarningServiceImpl implements IAccountWarningService {
|
|
BigDecimal divide = nowCost.divide(lastHourCost, 2, RoundingMode.HALF_UP);
|
|
BigDecimal divide = nowCost.divide(lastHourCost, 2, RoundingMode.HALF_UP);
|
|
if (subtract.compareTo(warningAmount) > -1 && divide.compareTo(warningProportion) > -1) {
|
|
if (subtract.compareTo(warningAmount) > -1 && divide.compareTo(warningProportion) > -1) {
|
|
sendMessage(accountId, userAllocation.getAuthName(), maxHour, nowCost, userAllocation.getProjectId(), userAllocation.getProjectName());
|
|
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);
|
|
BigDecimal divide = nowCost.divide(yesterdayHourCost, 2, RoundingMode.HALF_UP);
|
|
if (subtract.compareTo(warningAmount) > -1 && divide.compareTo(warningProportion) > -1) {
|
|
if (subtract.compareTo(warningAmount) > -1 && divide.compareTo(warningProportion) > -1) {
|
|
sendYesterdayMessage(accountId, userAllocation.getAuthName(), maxHour, nowCost, userAllocation.getProjectId(), userAllocation.getProjectName());
|
|
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) {
|
|
private void sendYesterdayMessage(Long accountId, String authName, Integer maxHour, BigDecimal nowCost, Long projectId, String projectName) {
|
|
|
|
|
|
StringBuilder text = new StringBuilder();
|
|
StringBuilder text = new StringBuilder();
|
|
@@ -125,8 +229,6 @@ public class AccountWarningServiceImpl implements IAccountWarningService {
|
|
List<String> wexinIds = mailLogMapper.selectWeiXinIdList(projectId);
|
|
List<String> wexinIds = mailLogMapper.selectWeiXinIdList(projectId);
|
|
CorpWexinUtils.sendMessage(wexinIds, text.toString());
|
|
CorpWexinUtils.sendMessage(wexinIds, text.toString());
|
|
}
|
|
}
|
|
-
|
|
|
|
-
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|