IpoBondTask.java 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. package com.dataeasy.server.task;
  2. import java.time.LocalDate;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import java.util.Map;
  6. import java.util.stream.Collectors;
  7. import com.dataeasy.server.atomic.entity.SubscriptionTaskConfig;
  8. import com.dataeasy.server.pojo.task.ScheduleTaskContext;
  9. import com.dataeasy.server.pojo.task.TemplateData;
  10. import org.springframework.beans.BeanUtils;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.scheduling.annotation.Scheduled;
  13. import org.springframework.stereotype.Component;
  14. import org.springframework.util.CollectionUtils;
  15. import com.dataeasy.server.atomic.entity.DataIpoBond;
  16. import com.dataeasy.server.atomic.service.IDataIpoBondService;
  17. import com.dataeasy.server.common.annotation.ScheduleTask;
  18. import com.dataeasy.server.constant.CacheNameConstant;
  19. import com.dataeasy.server.constant.ScheduleTaskEnum;
  20. import com.dataeasy.server.core.aop.ScheduleTaskLogAspect;
  21. import com.dataeasy.server.feign.FinanceFeign;
  22. import com.dataeasy.server.feign.dto.finance.BondResponse;
  23. import com.dataeasy.server.feign.dto.finance.FinanceRequest;
  24. import com.dataeasy.server.utiis.DateUtils;
  25. import lombok.extern.slf4j.Slf4j;
  26. import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
  27. /**
  28. * @author tyuio
  29. * @version 1.0.0
  30. * @description 新债定时任务,执行时间:每天早上8:35
  31. * @date 2025/3/7 11:25
  32. */
  33. @Slf4j
  34. @Component
  35. @ScheduleTask(ScheduleTaskEnum.IPO_BOND)
  36. public class IpoBondTask extends AbstractDataTask {
  37. /**
  38. * 新债数量
  39. */
  40. private static final String CONTEXT_BOND_NUM = "bondNum";
  41. /**
  42. * 申购日期
  43. */
  44. private static final String CONTEXT_SUBSCRIPTION_DATE = "subscriptionDate";
  45. @Autowired
  46. private FinanceFeign financeFeign;
  47. @Autowired
  48. private IDataIpoBondService ipoBondService;
  49. @Scheduled(cron = "0 35 8 * * *")
  50. public void execute() {
  51. super.execute();
  52. }
  53. @Override
  54. public boolean fetchData() {
  55. // 拉取数据
  56. String todayStr = DateUtils.YYYYMMDD_FORMATTER.format(LocalDate.now());
  57. FinanceRequest financeRequest = new FinanceRequest();
  58. financeRequest.setStartDate(todayStr);
  59. financeRequest.setEndDate(todayStr);
  60. List<BondResponse> bondCovIssueCninfos = financeFeign.getBondCovIssueCninfo(financeRequest);
  61. if (CollectionUtils.isEmpty(bondCovIssueCninfos)) {
  62. log.warn("拉取新债数据失败,返回结果对象为空");
  63. return false;
  64. }
  65. // 删除历史数据数据,以防重复执行导致数据重复引发系统异常
  66. String subscriptionDate = DateUtils.YYYY_MM_DD_FORMATTER.format(LocalDate.now());
  67. ipoBondService.deleteBySubscriptionDate(subscriptionDate);
  68. List<DataIpoBond> ipoBonds = bondCovIssueCninfos.stream().map(v -> {
  69. DataIpoBond ipoBond = new DataIpoBond();
  70. BeanUtils.copyProperties(v, ipoBond);
  71. return ipoBond;
  72. }).collect(Collectors.toList());
  73. // 数据入库
  74. ipoBondService.insertList(ipoBonds);
  75. // 清除缓存,以防缓存中数据过时
  76. cacheManager.getCache(CacheNameConstant.DATA_IPO_BOND_LIST).evict(todayStr);
  77. // 设置上下文
  78. Map<String, Object> context = ScheduleTaskLogAspect.scheduleTaskContextThreadLocal.get().getContext();
  79. context.put(CONTEXT_BOND_NUM, ipoBonds.size());
  80. context.put(CONTEXT_SUBSCRIPTION_DATE, todayStr);
  81. return true;
  82. }
  83. @Override
  84. public TemplateData getTemplateMessage() {
  85. ScheduleTaskContext scheduleTaskContext = ScheduleTaskLogAspect.scheduleTaskContextThreadLocal.get();
  86. // 获取上下文
  87. Map<String, Object> context = scheduleTaskContext.getContext();
  88. int bondNum = (int) context.get(CONTEXT_BOND_NUM);
  89. String subscriptionDate = (String) context.get(CONTEXT_SUBSCRIPTION_DATE);
  90. // 获取任务配置并构建完整页面路径
  91. SubscriptionTaskConfig subscriptionTaskConfig = scheduleTaskContext.getSubscriptionTaskConfig();
  92. String pagePath = String.format("%s?subscriptionDate=%s", subscriptionTaskConfig.getPagePath(), subscriptionDate);
  93. // 模板所需数据
  94. List<WxMpTemplateData> templateDataList = new ArrayList();
  95. templateDataList.add(new WxMpTemplateData("thing76", String.format("新债申购,今天发行%s只新债", bondNum)));
  96. templateDataList.add(new WxMpTemplateData("time4", subscriptionDate));
  97. TemplateData templateData = new TemplateData();
  98. templateData.setTemplateMessage(templateDataList);
  99. templateData.setPagePath(pagePath);
  100. return templateData;
  101. }
  102. }