Prechádzať zdrojové kódy

【第一版开发】
1.完善配置文件
2.完善的数据定时任务逻辑

ChenYL 10 mesiacov pred
rodič
commit
1c44088ede

+ 26 - 0
data-easy/src/main/java/com/dataeasy/server/pojo/task/TemplateData.java

@@ -0,0 +1,26 @@
+package com.dataeasy.server.pojo.task;
+
+import lombok.Data;
+import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
+
+import java.util.List;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @date 2025/3/31 21:20
+ * @description 模板数据
+ */
+@Data
+public class TemplateData {
+
+    /**
+     * 模板消息
+     */
+    private List<WxMpTemplateData> templateMessage;
+
+    /**
+     * 跳转页面
+     */
+    private String pagePath;
+}

+ 12 - 2
data-easy/src/main/java/com/dataeasy/server/service/controller/OpController.java

@@ -1,6 +1,7 @@
 package com.dataeasy.server.service.controller;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -11,6 +12,8 @@ import com.dataeasy.server.service.manager.IOpManager;
 
 import jakarta.validation.constraints.NotBlank;
 
+import java.util.concurrent.Executor;
+
 /**
  * @author tyuio
  * @version 1.0.0
@@ -25,13 +28,20 @@ public class OpController {
     @Autowired
     private IOpManager opManager;
 
+    @Autowired
+    @Qualifier("customThreadPool")
+    private Executor executor;
+
     /**
      * 通用定时任务执行
      * @param beanName
      */
     @GetMapping("scheduleTask")
-    public void scheduleTask(@RequestParam @NotBlank(message = "beanName不能为空") String beanName) {
-        opManager.scheduleTask(beanName);
+    public String scheduleTask(@RequestParam @NotBlank(message = "beanName不能为空") String beanName) {
+        executor.execute(() -> {
+            opManager.scheduleTask(beanName);
+        });
+        return String.format("已调起定时任务:%s", beanName);
     }
 
     /**

+ 5 - 4
data-easy/src/main/java/com/dataeasy/server/task/AbstractDataTask.java

@@ -7,6 +7,7 @@ import java.util.Objects;
 import java.util.Set;
 import java.util.stream.Collectors;
 
+import com.dataeasy.server.pojo.task.TemplateData;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.CacheManager;
 import org.springframework.util.CollectionUtils;
@@ -108,12 +109,12 @@ public abstract class AbstractDataTask implements TaskExecutor {
         }
 
         // 获取消息模板所需数据
-        List<WxMpTemplateData> templateDataList = getTemplateMessage();
+        TemplateData templateData = getTemplateMessage();
 
         // 设置小程序
         WxMpTemplateMessage.MiniProgram miniProgram = new WxMpTemplateMessage.MiniProgram();
         miniProgram.setAppid(wxMaProperties.getAppid());
-        miniProgram.setPagePath(subscriptionTaskConfig.getPagePath());
+        miniProgram.setPagePath(templateData.getPagePath());
 
         // 推送
         for (String mpOpenId : mpOpenIds) {
@@ -122,7 +123,7 @@ public abstract class AbstractDataTask implements TaskExecutor {
                     .toUser(mpOpenId)
                     .templateId(subscriptionTaskConfig.getTemplateId())
                     .miniProgram(miniProgram)
-                    .data(templateDataList)
+                    .data(templateData.getTemplateMessage())
                     .build();
             wxMpManager.sendTemplateMessage(mpTemplateMessage);
         }
@@ -138,5 +139,5 @@ public abstract class AbstractDataTask implements TaskExecutor {
      * 获取消息模板所需数据
      * @return
      */
-    public abstract List<WxMpTemplateData> getTemplateMessage();
+    public abstract TemplateData getTemplateMessage();
 }

+ 15 - 3
data-easy/src/main/java/com/dataeasy/server/task/DaLeTouTask.java

@@ -5,6 +5,9 @@ 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;
@@ -86,16 +89,25 @@ public class DaLeTouTask extends AbstractHzApiTask {
     }
 
     @Override
-    public List<WxMpTemplateData> getTemplateMessage() {
+    public TemplateData getTemplateMessage() {
+        ScheduleTaskContext scheduleTaskContext = ScheduleTaskLogAspect.scheduleTaskContextThreadLocal.get();
         // 获取上下文
-        Map<String, Object> context = ScheduleTaskLogAspect.scheduleTaskContextThreadLocal.get().getContext();
+        Map<String, Object> 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<WxMpTemplateData> templateDataList = new ArrayList();
         templateDataList.add(new WxMpTemplateData("thing76", String.format("大乐透开奖结果-%s期", drwaDate)));
         templateDataList.add(new WxMpTemplateData("time4", drawTime));
-        return templateDataList;
+
+        TemplateData templateData = new TemplateData();
+        templateData.setTemplateMessage(templateDataList);
+        templateData.setPagePath(pagePath);
+        return templateData;
     }
 }

+ 15 - 3
data-easy/src/main/java/com/dataeasy/server/task/IpoBondTask.java

@@ -6,6 +6,9 @@ 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;
@@ -96,16 +99,25 @@ public class IpoBondTask extends AbstractDataTask {
     }
 
     @Override
-    public List<WxMpTemplateData> getTemplateMessage() {
+    public TemplateData getTemplateMessage() {
+        ScheduleTaskContext scheduleTaskContext = ScheduleTaskLogAspect.scheduleTaskContextThreadLocal.get();
         // 获取上下文
-        Map<String, Object> context = ScheduleTaskLogAspect.scheduleTaskContextThreadLocal.get().getContext();
+        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));
-        return templateDataList;
+
+        TemplateData templateData = new TemplateData();
+        templateData.setTemplateMessage(templateDataList);
+        templateData.setPagePath(pagePath);
+        return templateData;
     }
 }

+ 15 - 3
data-easy/src/main/java/com/dataeasy/server/task/IpoStockTask.java

@@ -8,6 +8,9 @@ import java.util.Map;
 import java.util.Objects;
 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;
@@ -110,16 +113,25 @@ public class IpoStockTask extends AbstractDataTask {
     }
 
     @Override
-    public List<WxMpTemplateData> getTemplateMessage() {
+    public TemplateData getTemplateMessage() {
+        ScheduleTaskContext scheduleTaskContext = ScheduleTaskLogAspect.scheduleTaskContextThreadLocal.get();
         // 获取上下文
-        Map<String, Object> context = ScheduleTaskLogAspect.scheduleTaskContextThreadLocal.get().getContext();
+        Map<String, Object> context = scheduleTaskContext.getContext();
         int stockNum = (int) context.get(CONTEXT_STOCK_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只新股", stockNum)));
         templateDataList.add(new WxMpTemplateData("time4", subscriptionDate));
-        return templateDataList;
+
+        TemplateData templateData = new TemplateData();
+        templateData.setTemplateMessage(templateDataList);
+        templateData.setPagePath(pagePath);
+        return templateData;
     }
 }

+ 15 - 3
data-easy/src/main/java/com/dataeasy/server/task/ProductHuntTask.java

@@ -18,12 +18,15 @@ import java.util.function.Function;
 import java.util.stream.Collectors;
 
 import com.dataeasy.server.atomic.entity.DataProductHuntPostMedia;
+import com.dataeasy.server.atomic.entity.SubscriptionTaskConfig;
 import com.dataeasy.server.atomic.service.IDataProductHuntPostMediaService;
 import com.dataeasy.server.common.exception.BusinessException;
 import com.dataeasy.server.constant.CacheNameConstant;
 import com.dataeasy.server.core.aop.ScheduleTaskLogAspect;
 import com.dataeasy.server.feign.dto.producthunt.PostMedia;
 import com.dataeasy.server.pojo.task.ProductHuntTranslateDto;
+import com.dataeasy.server.pojo.task.ScheduleTaskContext;
+import com.dataeasy.server.pojo.task.TemplateData;
 import com.dataeasy.server.utiis.DateUtils;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -266,16 +269,25 @@ public class ProductHuntTask extends AbstractDataTask {
     }
 
     @Override
-    public List<WxMpTemplateData> getTemplateMessage() {
+    public TemplateData getTemplateMessage() {
+        ScheduleTaskContext scheduleTaskContext = ScheduleTaskLogAspect.scheduleTaskContextThreadLocal.get();
         // 获取上下文
-        Map<String, Object> context = ScheduleTaskLogAspect.scheduleTaskContextThreadLocal.get().getContext();
+        Map<String, Object> context = scheduleTaskContext.getContext();
         int postNum = (int) context.get(CONTEXT_POST_NUM);
         String rankDate = (String) context.get(CONTEXT_RANK_DATE);
 
+        // 获取任务配置并构建完整页面路径
+        SubscriptionTaskConfig subscriptionTaskConfig = scheduleTaskContext.getSubscriptionTaskConfig();
+        String pagePath = String.format("%s?rankDate=%s", subscriptionTaskConfig.getPagePath(), rankDate);
+
         // 模板所需数据
         List<WxMpTemplateData> templateDataList = new ArrayList();
         templateDataList.add(new WxMpTemplateData("thing76", String.format("ProductHunt热榜-TOP%s", postNum)));
         templateDataList.add(new WxMpTemplateData("time4", rankDate));
-        return templateDataList;
+
+        TemplateData templateData = new TemplateData();
+        templateData.setTemplateMessage(templateDataList);
+        templateData.setPagePath(pagePath);
+        return templateData;
     }
 }

+ 15 - 3
data-easy/src/main/java/com/dataeasy/server/task/ShuangSeQiuTask.java

@@ -5,6 +5,9 @@ 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;
@@ -86,16 +89,25 @@ public class ShuangSeQiuTask extends AbstractHzApiTask {
     }
 
     @Override
-    public List<WxMpTemplateData> getTemplateMessage() {
+    public TemplateData getTemplateMessage() {
+        ScheduleTaskContext scheduleTaskContext = ScheduleTaskLogAspect.scheduleTaskContextThreadLocal.get();
         // 获取上下文
-        Map<String, Object> context = ScheduleTaskLogAspect.scheduleTaskContextThreadLocal.get().getContext();
+        Map<String, Object> 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<WxMpTemplateData> templateDataList = new ArrayList();
         templateDataList.add(new WxMpTemplateData("thing76", String.format("双色球开奖结果-%s期", drwaDate)));
         templateDataList.add(new WxMpTemplateData("time4", drawTime));
-        return templateDataList;
+
+        TemplateData templateData = new TemplateData();
+        templateData.setTemplateMessage(templateDataList);
+        templateData.setPagePath(pagePath);
+        return templateData;
     }
 }

+ 3 - 1
data-easy/src/main/resources/application-prod.yaml

@@ -14,6 +14,8 @@ wx:
   mp:
     app-id: ENC(gXkcnGDSthbTBGiWRViu6cxg+oGqDUBD7+RVSX11gjCG+SOtQtqeGw==)
     secret: ENC(bjbWnwPoGkro9+ALtfPTf6ww8OYaUFD+ASrrQYPtHwNCt3mw4Nfj4XdqbsioYN9zYpuDgAK3q5o=)
+    token: ENC(WeJN/KPArLAc05Bauo4ur5WYKaVbdtP+s6JzDQH+lpB5SP9RTFlJ9A==)
+    aes-key: ENC(zpRp1eRcgv+lAsJy48d2pA434loJspW9HJrXfl09Uqb0iZ71mduKq53qrxjHqCsABH8fZrSAGEuCaGmwZcA5PQ==)
   # 微信支付
   pay:
     #小程序APPID
@@ -45,7 +47,7 @@ finance:
 
 # 自建ProductHunt服务配置
 product-hunt:
-  base-url: http://api-producthunt.zhixinghe1.top
+  base-url: https://api-producthunt.20261001.xyz
   # 加密密码
   password: ENC(V0XvB+A9qK6Xmd1q7M9Bjls8aW4QH3m91GMcr+zpiAIhXFiLALCn+w==)
   # 系统自访问密钥