ParseSchedulerTask.java 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  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 jakarta.annotation.PostConstruct;
  10. import org.slf4j.Logger;
  11. import org.slf4j.LoggerFactory;
  12. import org.springframework.scheduling.annotation.Scheduled;
  13. import org.springframework.stereotype.Component;
  14. import java.util.Date;
  15. @Component
  16. public class ParseSchedulerTask {
  17. private final Logger logger = LoggerFactory.getLogger(this.getClass());
  18. private final EmailParseApiService emailParseApiService;
  19. private final TaskRecordService taskRecordService;
  20. public ParseSchedulerTask(EmailParseApiService emailParseApiService, TaskRecordService taskRecordService) {
  21. this.emailParseApiService = emailParseApiService;
  22. this.taskRecordService = taskRecordService;
  23. }
  24. @PostConstruct
  25. public void executeOnStartup() {
  26. // try {
  27. // // 定期报告从 其他文件夹/报告公告 文件夹获取邮件
  28. // this.emailParseApiService.parseEmail(
  29. // DateUtil.parseDateTime("2025-06-06 18:00:00"),
  30. // DateUtil.parseDateTime("2025-06-06 18:10:01"),
  31. // ListUtil.of("其他文件夹/报告公告"), EmailTypeConst.REPORT_EMAIL_TYPES);
  32. // } catch (Exception e) {
  33. // logger.error(ExceptionUtil.getMessage(e));
  34. // }
  35. //
  36. // try {
  37. // // 确认函从 INBOX 文件夹获取邮件
  38. // this.emailParseApiService.parseEmail(
  39. // DateUtil.parseDateTime("2025-06-03 18:50:00"),
  40. // DateUtil.parseDateTime("2025-06-03 19:56:00"),
  41. // null, ListUtil.of(EmailTypeConst.REPORT_LETTER_EMAIL_TYPE));
  42. // } catch (Exception e) {
  43. // logger.error(ExceptionUtil.getMessage(e));
  44. // }
  45. }
  46. /**
  47. * 定时任务每11分钟执行一次
  48. */
  49. @Scheduled(cron = "0 */11 * * * ?")
  50. public void letter() {
  51. String taskKey = "daq_email_parse_letter_task";
  52. TaskRecordDO task = this.taskRecordService.getTaskRecord(taskKey, 11 * 2 * 60);
  53. if (task == null) {
  54. return;
  55. }
  56. long start = System.currentTimeMillis();
  57. Date now = new Date();
  58. try {
  59. // 尽可能往前找11分钟覆盖可能遗漏的邮件
  60. Date startTime = DateUtil.offsetMinute(task.getStartTime(), -11);
  61. // 确认单从 INBOX 默认文件夹获取邮件
  62. this.emailParseApiService.parseEmail(startTime, now,
  63. null, ListUtil.of(EmailTypeConst.REPORT_LETTER_EMAIL_TYPE));
  64. task.setStatus(1);
  65. } catch (Exception e) {
  66. task.setStatus(2);
  67. task.setErrMsg(ExceptionUtil.stacktraceToString(e));
  68. this.logger.error("任务{} 执行错误:{}", taskKey, ExceptionUtil.stacktraceToString(e));
  69. } finally {
  70. task.setEndTime(now);
  71. this.taskRecordService.updateStatus(task);
  72. if (this.logger.isInfoEnabled()) {
  73. this.logger.info("任务{} 执行完成,耗时:{}ms", taskKey, System.currentTimeMillis() - start);
  74. }
  75. }
  76. }
  77. // /**
  78. // * 定时任务每小时的15分和45分执行一次
  79. // */
  80. // @Scheduled(cron = "0 15,45 * * * ?")
  81. // public void report() {
  82. // String taskKey = "daq_email_parser_report_task";
  83. // TaskRecordDO task = this.taskRecordService.getTaskRecord(taskKey, 60 * 2 * 60);
  84. // if (task == null) {
  85. // return;
  86. // }
  87. // long start = System.currentTimeMillis();
  88. // Date now = new Date();
  89. // try {
  90. // // 尽可能往前找60分钟覆盖可能遗漏的邮件
  91. // Date startTime = DateUtil.offsetMinute(task.getStartTime(), -60);
  92. // // 定期报告从 我的文件夹.报告公告 文件夹获取邮件
  93. // this.emailParseApiService.parseEmail(startTime, now,
  94. // ListUtil.of("其他文件夹/报告公告"), EmailTypeConst.REPORT_EMAIL_TYPES);
  95. // task.setStatus(1);
  96. // } catch (Exception e) {
  97. // task.setStatus(2);
  98. // task.setErrMsg(ExceptionUtil.stacktraceToString(e));
  99. // this.logger.error("定期报告解析任务{} 执行错误:{}", taskKey, ExceptionUtil.stacktraceToString(e));
  100. // } finally {
  101. // task.setEndTime(now);
  102. // this.taskRecordService.updateStatus(task);
  103. // if (this.logger.isInfoEnabled()) {
  104. // this.logger.info("定期报告解析任务{} 执行完成,耗时:{}ms", taskKey, System.currentTimeMillis() - start);
  105. // }
  106. // }
  107. // }
  108. }