消息sms 邮箱/手机号/push发送的方案 & 定时任务xxlJob灵活度 & 泛型和发送的模板类设计

1.消息sms 邮箱/手机号/push发送的方案
1.判断收件人地址是否为空,不为空则发送邮件。为空则不发送。可以通过该方法终止一些消息的发送。
2.收件人的地址可以配置在Apollo中,直接删除该key测试没有生效。需要将该key配置成空字符串。

2.定时任务xxlJob灵活度
xxlJob需要接收外部的参数,来灵活处理调度任务。比如数据表格的邮件发送
需求背景:拉取前一天的数据,生成excel表格,然后通过email发送出来。

@Slf4j
@Component
@JobHandler(value = "sendEmailTask")
public class SendEmailTask extends IJobHandler { @Autowired
@Qualifier("mySendEmailImpl")
private SendBiDataService<MyBiDataEntity> sendBiDataService; //根据实体类类注入也可以。
// @Autowired
// MySendEmailImpl mySendEmailImpl; @Override
public ReturnT<String> execute(String s) throws Exception {
Transaction t = Cat.newTransaction("JOB", "sendEmailTask");
try {
log.info("report start......");
String startTime = "";
String endTime = "";
//获取外部参数,开始时间和结束时间
if(StringUtils.isNotBlank(s)){
startTime = s.split(",")[0];
endTime = s.split(",")[1];
}else{
//获取系统设置时间,前天的开始时间和结束时间
LocalDate today = LocalDate.now();
LocalDate yesterday = today.plusDays(-1);
LocalTime lt1 = LocalTime.of(0,0,1);
LocalTime lt2 = LocalTime.of(23,59,59);
LocalDateTime startLdt = yesterday.atTime(lt1);
LocalDateTime endLdt = yesterday.atTime(lt2);
startTime = LocalDateTimeUtils.formatDateTime(startLdt);
endTime = LocalDateTimeUtils.formatDateTime(endLdt);
}
//业务逻辑 查询数据
List<MyBiDataEntity> list = sendBiDataService.queryBiData(startTime,endTime);
if(CollectionUtils.isEmpty(list)){
log.info("report 数据为空......");
return ReturnT.SUCCESS;
}
//业务逻辑 创建excel
String fileName = sendBiDataService.createBiExcel(list);
log.info("report fileName......" + fileName);
//业务逻辑 发送邮件
boolean flag = sendBiDataService.sendBiExcel(fileName);
log.info("report flag......" + flag);
log.info("report end......");
t.setStatus(Transaction.SUCCESS);
return SUCCESS;
} catch (Exception e) {
log.error("report邮件发送异常:", e);
Cat.logError("report邮件发送异常:", e);
t.setStatus(e);
return FAIL;
} finally {
t.complete();
}
}
} public class LocalDateTimeUtils {
public static final String DEFAULT_PATTERN = "yyyy-MM-dd HH:mm:ss"; public static String formatDateTime(LocalDateTime dateTime) {
if(dateTime == null) {
return "";
}
return formatDateTime(dateTime, DEFAULT_PATTERN);
}
}

3.泛型和发送的模板类设计

@Service
public interface SendBiDataService<T extends Object> {
List<T> queryBiData(String startTime,String endTime);
String createBiExcel(List<T> list);
boolean sendBiExcel(String fileName);
} @Service
public abstract class SendBiDataCommonService<T> implements SendBiDataService<T> {
private Logger logger = LoggerFactory.getLogger(this.getClass()); @Override
public String createBiExcel(List<T> list) {
//通用公共逻辑实现
}
} @Slf4j
@Service("mySendEmailImpl")
public class MySendEmailImpl extends SendBiDataCommonService<MyBiDataEntity> implements SendBiDataService<MyBiDataEntity> {
private Logger logger = LoggerFactory.getLogger(this.getClass()); @Override
public List<MyBiDataEntity> queryBiData(String startTime, String endTime) {
logger.info("queryBiData startTime=[{}],endTime=[{}]",startTime,endTime);
//具体业务,查询数据 } @Override
public String createBiExcel(List<MyBiDataEntity> list) {
//调用公用的抽象类方法
return super.createBiExcel(list);
} @Override
public boolean sendBiExcel(String fileName) {
//具体业务,发送人,邮件标题等参数,邮件发送实现
}
}

消息sms 邮箱/手机号/push发送的方案 & 定时任务xxlJob灵活度 & 泛型和发送的模板类设计的更多相关文章

  1. 7个自定义定时任务并发送消息至邮箱或企业微信案例(crontab和at)

    前言 更好熟悉掌握at.crontab定时自定义任务用法. 实验at.crontab定时自定义任务运用场景案例. 作业.笔记需要. 定时计划任务相关命令及配置文件简要说明 at 工具 由包 at 提供 ...

  2. RocketMQ源码详解 | Consumer篇 · 其一:消息的 Pull 和 Push

    概述 当消息被存储后,消费者就会将其消费. 这句话简要的概述了一条消息的最总去向,也引出了本文将讨论的问题: 消息什么时候才对被消费者可见? 是在 page cache 中吗?还是在落盘后?还是像 K ...

  3. iOS 验证邮箱手机号格式

    做登录界面时,用户在UITextfield中输入输入邮箱账号后,我们应该在本地验证格式是否正确,再将参数传给服务器验证. 最简单的就是利用系统的NSPredicate //利用正则表达式验证 -(BO ...

  4. js 正则表达式,匹配邮箱/手机号/用户名

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. asp.net利用QQ邮箱发送邮件,关键在于开启pop并设置授权码为发送密码

    public static bool SendEmail(string mailTo, string mailSubject, string mailContent)        {         ...

  6. php 常用正则表达 邮箱 手机号啥的

    class RegexConst { const REGEX_MOBLIE_86 = '/^1(3|4|5|7|8)\d{9}$/';//中国手机号 const REGEX_MOBLIE_852 = ...

  7. 个人永久性免费-Excel催化剂功能第85波-灵活便捷的批量发送短信功能(使用腾讯云接口)

    微信时代的今天,短信一样不可缺席,大系统都有集成短信接口.若只是临时用一下,若能够直接在Excel上加工好内容就可以直接发送,这些假设在此篇批量群发短信功能中都为大家带来完美答案. 业务场景 不多说, ...

  8. 使用Python发送HTML格式的邮件(收到的邮件有发送方才是正解)

    发送html格式的和普通文本格式差不多,只是MIMEText(content,"html","utf-8"))与MIMEText(content,"p ...

  9. 一个python的邮件发送脚本,自动,定时,可以附件发送,抄送,附有说明文件

    #!/bin/env python # -*- coding: utf-8 -*- import datetime import smtplib import os,sys from email.mi ...

  10. iOS开发之多种Cell高度自适应实现方案的UI流畅度分析

    本篇博客的主题是关于UI操作流畅度优化的一篇博客,我们以TableView中填充多个根据内容自适应高度的Cell来作为本篇博客的使用场景.当然Cell高度的自适应网上的解决方案是铺天盖地呢,今天我们的 ...

随机推荐

  1. Kubernetes 稳定性保障手册 -- 极简版

    简介: Kubernetes 在生产环境中的采用率越来越高,复杂度越来越高,由此带来的稳定性保障的挑战越来越大. Kubernetes 在生产环境中的采用率越来越高,复杂度越来越高,由此带来的稳定性保 ...

  2. OceanBase再破纪录!核心成员陈萌萌:坚持HTAP就是坚持我们做数据库的初心

    简介: 2021年5月20日,据国际事务处理性能委员会(TPC,Transaction Processing Performance Council)官网披露,蚂蚁集团自主研发的分布式关系型数据库Oc ...

  3. rerank来提升RAG的准确度的策略

    RAG(Retrieval-Augmented Generation)是一种结合检索和生成两种技术的模型,旨在通过检索大规模知识库来增强文本生成任务的准确性. 要通过reranking(重排序)来提升 ...

  4. [FAQ] uni-app 运行微信小程序 main.wxss 报错 unexpected token "$"

    检查一下你是否在 App.vue 中有手动操作引入过 uni.scss,比如下面的 import: <style lang="scss"> @import url(&q ...

  5. Listener监听器,实现一个显示在线用户人数

    Listener监听器,实现一个显示在线用户人数 每博一文案 关于后半身,脾气越温,福报越深. 师傅说:惜命最好的方式不是养生,而是管好自己的情绪. 坏毛病都是惯出来的,但好脾气都是磨出来的,与人生气 ...

  6. Java中的多态、抽象类和接口简述

    1. 引言 本文对Java编程中的多态.抽象类和接口概念进行了简明扼要的讲解,并对extends和implements进行了辨析. 2. 多态 多态是指所调用的方法只有在运行的时候才可以明确,如下例所 ...

  7. 如何获取Github Token

    登录我们的github账号,点击头像后选择Settings 进入界面之后下拉到左侧菜单的最后,选择Developer settings 进入界面后,选择Personal access tokens-- ...

  8. C#语言:散修笔记

    文章目录 前言 数组的几种定义方法 out 和 ref 的区别 可变参数params 静态方法与非静态方法 >❀什么时候使用静态和非静态 构造函数 >❀类中方法的重载 >❀在类中输出 ...

  9. JDK源码阅读-------自学笔记(二十二)(java.util.ArrayList自定义晋级,ArrayList实战详解)

    简介(Introduction)   上篇文章主要介绍了ArrayList自行模仿建立的方式,那么,其实这个类不是一次性就那么完美的,现在做一个一步步变成那样完整的ArrayList的版本升级测试. ...

  10. 【漏洞复现】Apache RocketMQ 代码注入漏洞(CVE-2023-37582)

    产品介绍 Apache RocketMQ是美国阿帕奇(Apache)基金会的一款轻量级的数据处理平台和消息传递引擎. 漏洞概述 Apache RocketMQ 存在代码注入漏洞,该漏洞源于当 Name ...