package com.dataeasy.server.task; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Objects; import com.dataeasy.server.atomic.entity.SubscriptionTaskConfig; import com.dataeasy.server.pojo.task.ScheduleTaskContext; import com.dataeasy.server.pojo.task.TemplateData; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import com.dataeasy.server.atomic.entity.DataDaLeTou; import com.dataeasy.server.atomic.service.IDataDaLeTouService; import com.dataeasy.server.common.annotation.ScheduleTask; import com.dataeasy.server.constant.CacheNameConstant; import com.dataeasy.server.constant.HzApiStatusEnum; import com.dataeasy.server.constant.ScheduleTaskEnum; import com.dataeasy.server.core.aop.ScheduleTaskLogAspect; import com.dataeasy.server.feign.dto.hzapi.DaLeTouResponse; import com.dataeasy.server.feign.dto.hzapi.HzApiRequest; import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.mp.bean.template.WxMpTemplateData; /** * @author tyuio * @version 1.0.0 * @description 大乐透定时任务,执行时间:每周一、三、六,晚上21:45 * @date 2025/3/6 20:19 */ @Slf4j @Component @ScheduleTask(ScheduleTaskEnum.DA_LE_TOU) public class DaLeTouTask extends AbstractHzApiTask { /** * 开奖期号 */ private static final String CONTEXT_QIHAO = "qihao"; /** * 开奖时间 */ private static final String CONTEXT_TIME = "time"; @Autowired private IDataDaLeTouService daLeTouService; @Scheduled(cron = "0 45 21 * * 1,3,6") public void execute() { super.execute(); } @Override public boolean fetchData() { // 拉取数据 HzApiRequest request = buildCommonRequest(); DaLeTouResponse daLeTouResponse = hzApiFeign.getDaLeTou(request); if (Objects.isNull(daLeTouResponse)) { log.warn("拉取大乐透数据失败,返回结果对象为空"); return false; } if (!HzApiStatusEnum.SUCCESS.getCode().equals(daLeTouResponse.getCode())) { log.warn("拉取大乐透数据失败,接口盒子返回错误信息:{}", daLeTouResponse.getMsg()); return false; } // 删除历史数据数据,以防重复执行导致数据重复引发系统异常 daLeTouService.deleteByQihao(daLeTouResponse.getQihao()); // 数据入库 DataDaLeTou addDaLeTou = new DataDaLeTou(); BeanUtils.copyProperties(daLeTouResponse, addDaLeTou); daLeTouService.insert(addDaLeTou); // 清除缓存,以防缓存中数据过时 cacheManager.getCache(CacheNameConstant.DATA_DA_LE_TOU_LIST).evict(addDaLeTou.getQihao()); // 设置上下文 Map context = ScheduleTaskLogAspect.scheduleTaskContextThreadLocal.get().getContext(); context.put(CONTEXT_QIHAO, addDaLeTou.getQihao()); context.put(CONTEXT_TIME, addDaLeTou.getTime()); return true; } @Override public TemplateData getTemplateMessage() { ScheduleTaskContext scheduleTaskContext = ScheduleTaskLogAspect.scheduleTaskContextThreadLocal.get(); // 获取上下文 Map context = scheduleTaskContext.getContext(); String drwaDate = (String) context.get(CONTEXT_QIHAO); String drawTime = (String) context.get(CONTEXT_TIME); // 获取任务配置并构建完整页面路径 SubscriptionTaskConfig subscriptionTaskConfig = scheduleTaskContext.getSubscriptionTaskConfig(); String pagePath = String.format("%s?drawDate=%s", subscriptionTaskConfig.getPagePath(), drwaDate); // 模板所需数据 List templateDataList = new ArrayList(); templateDataList.add(new WxMpTemplateData("thing76", String.format("大乐透开奖结果-%s期", drwaDate))); templateDataList.add(new WxMpTemplateData("time4", drawTime)); TemplateData templateData = new TemplateData(); templateData.setTemplateMessage(templateDataList); templateData.setPagePath(pagePath); return templateData; } }