| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- package com.dataeasy.server.task;
- import java.time.LocalDate;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import java.util.stream.Collectors;
- 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 org.springframework.util.CollectionUtils;
- import com.dataeasy.server.atomic.entity.DataIpoBond;
- import com.dataeasy.server.atomic.service.IDataIpoBondService;
- import com.dataeasy.server.common.annotation.ScheduleTask;
- import com.dataeasy.server.constant.CacheNameConstant;
- import com.dataeasy.server.constant.ScheduleTaskEnum;
- import com.dataeasy.server.core.aop.ScheduleTaskLogAspect;
- import com.dataeasy.server.feign.FinanceFeign;
- import com.dataeasy.server.feign.dto.finance.BondResponse;
- import com.dataeasy.server.feign.dto.finance.FinanceRequest;
- import com.dataeasy.server.utiis.DateUtils;
- import lombok.extern.slf4j.Slf4j;
- import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
- /**
- * @author tyuio
- * @version 1.0.0
- * @description 新债定时任务,执行时间:每天早上8:35
- * @date 2025/3/7 11:25
- */
- @Slf4j
- @Component
- @ScheduleTask(ScheduleTaskEnum.IPO_BOND)
- public class IpoBondTask extends AbstractDataTask {
- /**
- * 新债数量
- */
- private static final String CONTEXT_BOND_NUM = "bondNum";
- /**
- * 申购日期
- */
- private static final String CONTEXT_SUBSCRIPTION_DATE = "subscriptionDate";
- @Autowired
- private FinanceFeign financeFeign;
- @Autowired
- private IDataIpoBondService ipoBondService;
- @Scheduled(cron = "0 35 8 * * *")
- public void execute() {
- super.execute();
- }
- @Override
- public boolean fetchData() {
- // 拉取数据
- String todayStr = DateUtils.YYYYMMDD_FORMATTER.format(LocalDate.now());
- FinanceRequest financeRequest = new FinanceRequest();
- financeRequest.setStartDate(todayStr);
- financeRequest.setEndDate(todayStr);
- List<BondResponse> bondCovIssueCninfos = financeFeign.getBondCovIssueCninfo(financeRequest);
- if (CollectionUtils.isEmpty(bondCovIssueCninfos)) {
- log.warn("拉取新债数据失败,返回结果对象为空");
- return false;
- }
- // 删除历史数据数据,以防重复执行导致数据重复引发系统异常
- String subscriptionDate = DateUtils.YYYY_MM_DD_FORMATTER.format(LocalDate.now());
- ipoBondService.deleteBySubscriptionDate(subscriptionDate);
- List<DataIpoBond> ipoBonds = bondCovIssueCninfos.stream().map(v -> {
- DataIpoBond ipoBond = new DataIpoBond();
- BeanUtils.copyProperties(v, ipoBond);
- return ipoBond;
- }).collect(Collectors.toList());
- // 数据入库
- ipoBondService.insertList(ipoBonds);
- // 清除缓存,以防缓存中数据过时
- cacheManager.getCache(CacheNameConstant.DATA_IPO_BOND_LIST).evict(todayStr);
- // 设置上下文
- Map<String, Object> context = ScheduleTaskLogAspect.scheduleTaskContextThreadLocal.get().getContext();
- context.put(CONTEXT_BOND_NUM, ipoBonds.size());
- context.put(CONTEXT_SUBSCRIPTION_DATE, todayStr);
- return true;
- }
- @Override
- public TemplateData getTemplateMessage() {
- ScheduleTaskContext scheduleTaskContext = ScheduleTaskLogAspect.scheduleTaskContextThreadLocal.get();
- // 获取上下文
- Map<String, Object> context = scheduleTaskContext.getContext();
- int bondNum = (int) context.get(CONTEXT_BOND_NUM);
- String subscriptionDate = (String) context.get(CONTEXT_SUBSCRIPTION_DATE);
- // 获取任务配置并构建完整页面路径
- SubscriptionTaskConfig subscriptionTaskConfig = scheduleTaskContext.getSubscriptionTaskConfig();
- String pagePath = String.format("%s?subscriptionDate=%s", subscriptionTaskConfig.getPagePath(), subscriptionDate);
- // 模板所需数据
- List<WxMpTemplateData> templateDataList = new ArrayList();
- templateDataList.add(new WxMpTemplateData("thing76", String.format("新债申购,今天发行%s只新债", bondNum)));
- templateDataList.add(new WxMpTemplateData("time4", subscriptionDate));
- TemplateData templateData = new TemplateData();
- templateData.setTemplateMessage(templateDataList);
- templateData.setPagePath(pagePath);
- return templateData;
- }
- }
|