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

2024-10-09 11:16:17 浏览数 (3)

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

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

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

代码语言:javascript复制
@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.泛型和发送的模板类设计

代码语言:javascript复制
@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) {
        //具体业务,发送人,邮件标题等参数,邮件发送实现
    }
}

0 人点赞