123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- package com.smppw.modaq.application.task;
- import cn.hutool.core.collection.ListUtil;
- import cn.hutool.core.date.DateUtil;
- import cn.hutool.core.exceptions.ExceptionUtil;
- import com.smppw.modaq.application.service.EmailParseApiService;
- import com.smppw.modaq.common.conts.EmailTypeConst;
- import com.smppw.modaq.domain.entity.TaskRecordDO;
- import com.smppw.modaq.domain.service.TaskRecordService;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.scheduling.annotation.EnableScheduling;
- import org.springframework.scheduling.annotation.Scheduled;
- import org.springframework.stereotype.Component;
- import java.util.Date;
- @Component
- @EnableScheduling
- public class ParseSchedulerTask {
- private final Logger logger = LoggerFactory.getLogger(this.getClass());
- private final EmailParseApiService emailParseApiService;
- private final TaskRecordService taskRecordService;
- public ParseSchedulerTask(EmailParseApiService emailParseApiService, TaskRecordService taskRecordService) {
- this.emailParseApiService = emailParseApiService;
- this.taskRecordService = taskRecordService;
- }
- // @PostConstruct
- // public void executeOnStartup() {
- // this.letter();
- //// this.report();
- // }
- /**
- * 定时任务每2小时执行一次
- */
- @Scheduled(cron = "0 0 */1 * * ?")
- public void letter() {
- String taskKye = "mo_email_parser_letter_task";
- TaskRecordDO task = this.taskRecordService.getTaskRecord(taskKye);
- if (task == null) {
- return;
- }
- long start = System.currentTimeMillis();
- Date now = new Date();
- try {
- // 尽可能往前找3分钟覆盖可能遗漏的邮件
- Date startTime = DateUtil.offsetMinute(task.getStartTime(), -3);
- // 确认单从 INBOX 默认文件夹获取邮件
- this.emailParseApiService.parseEmail(startTime, now,
- null, ListUtil.of(EmailTypeConst.REPORT_LETTER_EMAIL_TYPE));
- task.setStatus(1);
- } catch (Exception e) {
- task.setStatus(2);
- task.setErrMsg(ExceptionUtil.stacktraceToString(e));
- this.logger.error("任务{} 执行错误:{}", taskKye, ExceptionUtil.stacktraceToString(e));
- } finally {
- task.setEndTime(now);
- this.taskRecordService.updateStatus(task);
- if (this.logger.isInfoEnabled()) {
- this.logger.info("任务{} 执行完成,耗时:{}ms", taskKye, System.currentTimeMillis() - start);
- }
- }
- }
- /**
- * 定时任务每1小时执行一次
- */
- @Scheduled(cron = "0 30 */2 * * ?")
- public void report() {
- String taskKye = "mo_email_parser_report_task";
- TaskRecordDO task = this.taskRecordService.getTaskRecord(taskKye);
- if (task == null) {
- return;
- }
- long start = System.currentTimeMillis();
- Date now = new Date();
- try {
- // 尽可能往前找3分钟覆盖可能遗漏的邮件
- Date startTime = DateUtil.offsetMinute(task.getStartTime(), -3);
- // 定期报告从 我的文件夹.报告公告 文件夹获取邮件
- this.emailParseApiService.parseEmail(startTime, now,
- ListUtil.of("INBOX", "其他文件夹/报告公告"), EmailTypeConst.REPORT_EMAIL_TYPES);
- task.setStatus(1);
- } catch (Exception e) {
- task.setStatus(2);
- task.setErrMsg(ExceptionUtil.stacktraceToString(e));
- this.logger.error("定期报告解析任务{} 执行错误:{}", taskKye, ExceptionUtil.stacktraceToString(e));
- } finally {
- task.setEndTime(now);
- this.taskRecordService.updateStatus(task);
- if (this.logger.isInfoEnabled()) {
- this.logger.info("定期报告解析任务{} 执行完成,耗时:{}ms", taskKye, System.currentTimeMillis() - start);
- }
- }
- }
- }
|