ConsultCleaner.java 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package com.yihu.wlyy.job.consult;
  2. import com.yihu.wlyy.entity.consult.ConsultTeam;
  3. import com.yihu.wlyy.job.QuartzHelper;
  4. import com.yihu.wlyy.repository.consult.ConsultTeamDao;
  5. import com.yihu.wlyy.service.quota.JobService;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.data.domain.Page;
  8. import org.springframework.data.domain.PageRequest;
  9. import org.springframework.stereotype.Service;
  10. import org.springframework.transaction.annotation.Transactional;
  11. import java.util.Calendar;
  12. import java.util.Date;
  13. import java.util.GregorianCalendar;
  14. import static com.yihu.wlyy.job.consult.ConsultCleanerJob.ConsultTerminatorJobKey;
  15. /**
  16. * @author Sand
  17. * @since 2016/9/26
  18. */
  19. @Service
  20. public class ConsultCleaner {
  21. private final ConsultTeamDao consultTeamDao;
  22. private final JobService jobService;
  23. private final QuartzHelper quartzHelper;
  24. @Autowired
  25. public ConsultCleaner(QuartzHelper quartzHelper, JobService jobService, ConsultTeamDao consultTeamDao) {
  26. this.quartzHelper = quartzHelper;
  27. this.jobService = jobService;
  28. this.consultTeamDao = consultTeamDao;
  29. }
  30. @Transactional
  31. public void doClean() {
  32. try {
  33. System.out.println("开始清除未响应咨询......");
  34. // 先关闭超过24小时未回应的咨询
  35. consultTeamDao.updateUnresponsedConsultOver24Hours();
  36. // 计算下一次执行此任务的时间,若无下次计算时间为半个小时后
  37. Date nextTriggerTime;
  38. Page<ConsultTeam> consultTeams = consultTeamDao.getUnresponsedConsultIn24Hours(new PageRequest(0, 1));
  39. if (consultTeams.getContent().size() > 0) {
  40. ConsultTeam consultTeam = consultTeams.getContent().get(0);
  41. Calendar calendar = new GregorianCalendar();
  42. calendar.setTime(consultTeam.getCzrq());
  43. calendar.add(Calendar.HOUR, 24);
  44. nextTriggerTime = calendar.getTime();
  45. } else {
  46. Calendar calendar = GregorianCalendar.getInstance();
  47. calendar.set(Calendar.MINUTE, calendar.get(Calendar.MINUTE) + 30);
  48. nextTriggerTime = calendar.getTime();
  49. }
  50. if (quartzHelper.isExistJob(ConsultTerminatorJobKey)) {
  51. quartzHelper.removeJob(ConsultTerminatorJobKey);
  52. }
  53. System.out.println("计算下次任务执行时间,下次执行在" + nextTriggerTime.toString());
  54. quartzHelper.startAt(nextTriggerTime, ConsultCleanerJob.class, ConsultTerminatorJobKey, null);
  55. } catch (Exception e) {
  56. e.printStackTrace();
  57. }
  58. }
  59. }