ParseSchedulerTask.java 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package com.smppw.modaq.application.task;
  2. import cn.hutool.core.collection.ListUtil;
  3. import cn.hutool.core.date.DateUtil;
  4. import cn.hutool.core.exceptions.ExceptionUtil;
  5. import com.smppw.modaq.application.service.EmailParseApiService;
  6. import com.smppw.modaq.common.conts.EmailTypeConst;
  7. import com.smppw.modaq.domain.entity.TaskRecordDO;
  8. import com.smppw.modaq.domain.service.TaskRecordService;
  9. import org.slf4j.Logger;
  10. import org.slf4j.LoggerFactory;
  11. import org.springframework.scheduling.annotation.EnableScheduling;
  12. import org.springframework.scheduling.annotation.Scheduled;
  13. import org.springframework.stereotype.Component;
  14. import java.util.Date;
  15. @Component
  16. @EnableScheduling
  17. public class ParseSchedulerTask {
  18. private final Logger logger = LoggerFactory.getLogger(this.getClass());
  19. private final EmailParseApiService emailParseApiService;
  20. private final TaskRecordService taskRecordService;
  21. public ParseSchedulerTask(EmailParseApiService emailParseApiService, TaskRecordService taskRecordService) {
  22. this.emailParseApiService = emailParseApiService;
  23. this.taskRecordService = taskRecordService;
  24. }
  25. // @PostConstruct
  26. // public void executeOnStartup() {
  27. // this.letter();
  28. //// this.report();
  29. // }
  30. /**
  31. * 定时任务每2小时执行一次
  32. */
  33. @Scheduled(cron = "0 0 */1 * * ?")
  34. public void letter() {
  35. String taskKye = "mo_email_parser_letter_task";
  36. TaskRecordDO task = this.taskRecordService.getTaskRecord(taskKye);
  37. if (task == null) {
  38. return;
  39. }
  40. long start = System.currentTimeMillis();
  41. Date now = new Date();
  42. try {
  43. // 尽可能往前找3分钟覆盖可能遗漏的邮件
  44. Date startTime = DateUtil.offsetMinute(task.getStartTime(), -3);
  45. // 确认单从 INBOX 默认文件夹获取邮件
  46. this.emailParseApiService.parseEmail(startTime, now,
  47. null, ListUtil.of(EmailTypeConst.REPORT_LETTER_EMAIL_TYPE));
  48. task.setStatus(1);
  49. } catch (Exception e) {
  50. task.setStatus(2);
  51. task.setErrMsg(ExceptionUtil.stacktraceToString(e));
  52. this.logger.error("任务{} 执行错误:{}", taskKye, ExceptionUtil.stacktraceToString(e));
  53. } finally {
  54. task.setEndTime(now);
  55. this.taskRecordService.updateStatus(task);
  56. if (this.logger.isInfoEnabled()) {
  57. this.logger.info("任务{} 执行完成,耗时:{}ms", taskKye, System.currentTimeMillis() - start);
  58. }
  59. }
  60. }
  61. /**
  62. * 定时任务每1小时执行一次
  63. */
  64. @Scheduled(cron = "0 30 */2 * * ?")
  65. public void report() {
  66. String taskKye = "mo_email_parser_report_task";
  67. TaskRecordDO task = this.taskRecordService.getTaskRecord(taskKye);
  68. if (task == null) {
  69. return;
  70. }
  71. long start = System.currentTimeMillis();
  72. Date now = new Date();
  73. try {
  74. // 尽可能往前找3分钟覆盖可能遗漏的邮件
  75. Date startTime = DateUtil.offsetMinute(task.getStartTime(), -3);
  76. // 定期报告从 我的文件夹.报告公告 文件夹获取邮件
  77. this.emailParseApiService.parseEmail(startTime, now,
  78. ListUtil.of("INBOX", "其他文件夹/报告公告"), EmailTypeConst.REPORT_EMAIL_TYPES);
  79. task.setStatus(1);
  80. } catch (Exception e) {
  81. task.setStatus(2);
  82. task.setErrMsg(ExceptionUtil.stacktraceToString(e));
  83. this.logger.error("定期报告解析任务{} 执行错误:{}", taskKye, ExceptionUtil.stacktraceToString(e));
  84. } finally {
  85. task.setEndTime(now);
  86. this.taskRecordService.updateStatus(task);
  87. if (this.logger.isInfoEnabled()) {
  88. this.logger.info("定期报告解析任务{} 执行完成,耗时:{}ms", taskKye, System.currentTimeMillis() - start);
  89. }
  90. }
  91. }
  92. }