DaLeTouTask.java 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. package com.dataeasy.server.task;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Map;
  5. import java.util.Objects;
  6. import com.dataeasy.server.atomic.entity.SubscriptionTaskConfig;
  7. import com.dataeasy.server.pojo.task.ScheduleTaskContext;
  8. import com.dataeasy.server.pojo.task.TemplateData;
  9. import org.springframework.beans.BeanUtils;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.scheduling.annotation.Scheduled;
  12. import org.springframework.stereotype.Component;
  13. import com.dataeasy.server.atomic.entity.DataDaLeTou;
  14. import com.dataeasy.server.atomic.service.IDataDaLeTouService;
  15. import com.dataeasy.server.common.annotation.ScheduleTask;
  16. import com.dataeasy.server.constant.CacheNameConstant;
  17. import com.dataeasy.server.constant.HzApiStatusEnum;
  18. import com.dataeasy.server.constant.ScheduleTaskEnum;
  19. import com.dataeasy.server.core.aop.ScheduleTaskLogAspect;
  20. import com.dataeasy.server.feign.dto.hzapi.DaLeTouResponse;
  21. import com.dataeasy.server.feign.dto.hzapi.HzApiRequest;
  22. import lombok.extern.slf4j.Slf4j;
  23. import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
  24. /**
  25. * @author tyuio
  26. * @version 1.0.0
  27. * @description 大乐透定时任务,执行时间:每周一、三、六,晚上21:45
  28. * @date 2025/3/6 20:19
  29. */
  30. @Slf4j
  31. @Component
  32. @ScheduleTask(ScheduleTaskEnum.DA_LE_TOU)
  33. public class DaLeTouTask extends AbstractHzApiTask {
  34. /**
  35. * 开奖期号
  36. */
  37. private static final String CONTEXT_QIHAO = "qihao";
  38. /**
  39. * 开奖时间
  40. */
  41. private static final String CONTEXT_TIME = "time";
  42. @Autowired
  43. private IDataDaLeTouService daLeTouService;
  44. @Scheduled(cron = "0 45 21 * * 1,3,6")
  45. public void execute() {
  46. super.execute();
  47. }
  48. @Override
  49. public boolean fetchData() {
  50. // 拉取数据
  51. HzApiRequest request = buildCommonRequest();
  52. DaLeTouResponse daLeTouResponse = hzApiFeign.getDaLeTou(request);
  53. if (Objects.isNull(daLeTouResponse)) {
  54. log.warn("拉取大乐透数据失败,返回结果对象为空");
  55. return false;
  56. }
  57. if (!HzApiStatusEnum.SUCCESS.getCode().equals(daLeTouResponse.getCode())) {
  58. log.warn("拉取大乐透数据失败,接口盒子返回错误信息:{}", daLeTouResponse.getMsg());
  59. return false;
  60. }
  61. // 删除历史数据数据,以防重复执行导致数据重复引发系统异常
  62. daLeTouService.deleteByQihao(daLeTouResponse.getQihao());
  63. // 数据入库
  64. DataDaLeTou addDaLeTou = new DataDaLeTou();
  65. BeanUtils.copyProperties(daLeTouResponse, addDaLeTou);
  66. daLeTouService.insert(addDaLeTou);
  67. // 清除缓存,以防缓存中数据过时
  68. cacheManager.getCache(CacheNameConstant.DATA_DA_LE_TOU_LIST).evict(addDaLeTou.getQihao());
  69. // 设置上下文
  70. Map<String, Object> context = ScheduleTaskLogAspect.scheduleTaskContextThreadLocal.get().getContext();
  71. context.put(CONTEXT_QIHAO, addDaLeTou.getQihao());
  72. context.put(CONTEXT_TIME, addDaLeTou.getTime());
  73. return true;
  74. }
  75. @Override
  76. public TemplateData getTemplateMessage() {
  77. ScheduleTaskContext scheduleTaskContext = ScheduleTaskLogAspect.scheduleTaskContextThreadLocal.get();
  78. // 获取上下文
  79. Map<String, Object> context = scheduleTaskContext.getContext();
  80. String drwaDate = (String) context.get(CONTEXT_QIHAO);
  81. String drawTime = (String) context.get(CONTEXT_TIME);
  82. // 获取任务配置并构建完整页面路径
  83. SubscriptionTaskConfig subscriptionTaskConfig = scheduleTaskContext.getSubscriptionTaskConfig();
  84. String pagePath = String.format("%s?drawDate=%s", subscriptionTaskConfig.getPagePath(), drwaDate);
  85. // 模板所需数据
  86. List<WxMpTemplateData> templateDataList = new ArrayList();
  87. templateDataList.add(new WxMpTemplateData("thing76", String.format("大乐透开奖结果-%s期", drwaDate)));
  88. templateDataList.add(new WxMpTemplateData("time4", drawTime));
  89. TemplateData templateData = new TemplateData();
  90. templateData.setTemplateMessage(templateDataList);
  91. templateData.setPagePath(pagePath);
  92. return templateData;
  93. }
  94. }