Ver Fonte

【第一版开发】
1.完善代码注释
2.优化op运维类,简化代码逻辑
3.定时任务增加公用接口,方便调用

ChenYL há 10 meses atrás
pai
commit
54b1d14604

+ 2 - 2
data-easy/src/main/java/com/dataeasy/server/core/aop/ScheduleTaskLogAspect.java

@@ -53,7 +53,7 @@ public class ScheduleTaskLogAspect {
      */
      */
     public static final ThreadLocal<ScheduleTaskContext> scheduleTaskContextThreadLocal = new ThreadLocal<>();
     public static final ThreadLocal<ScheduleTaskContext> scheduleTaskContextThreadLocal = new ThreadLocal<>();
 
 
-    @Pointcut("@annotation(org.springframework.scheduling.annotation.Scheduled)")
+    @Pointcut("execution(* com.dataeasy.server.task..*.*execute(..)) and @annotation(org.springframework.scheduling.annotation.Scheduled)")
     public void pointcut() {}
     public void pointcut() {}
 
 
     @Around("pointcut()")
     @Around("pointcut()")
@@ -63,7 +63,7 @@ public class ScheduleTaskLogAspect {
         // 获取类上的 @ScheduleTask 注解
         // 获取类上的 @ScheduleTask 注解
         ScheduleTask scheduleTask = targetClass.getAnnotation(ScheduleTask.class);
         ScheduleTask scheduleTask = targetClass.getAnnotation(ScheduleTask.class);
         if (scheduleTask == null) {
         if (scheduleTask == null) {
-            log.info("类上没有@ScheduleTask注解,没法记录定时任务日志,类名:{}", targetClass.getSimpleName());
+            log.info("类上没有@ScheduleTask注解,没法记录定时任务信息,结束执行,类名:{}", targetClass.getSimpleName());
             return null;
             return null;
         }
         }
         // 获取定时任务信息
         // 获取定时任务信息

+ 1 - 1
data-easy/src/main/java/com/dataeasy/server/core/interceptor/MybatisAuditDataInterceptor.java

@@ -43,7 +43,7 @@ public class MybatisAuditDataInterceptor implements Interceptor {
         /**
         /**
          * 插入或更新的时候,赋予createBy、updateBy、creationTime、lastUpdateTime值
          * 插入或更新的时候,赋予createBy、updateBy、creationTime、lastUpdateTime值
          */
          */
-        Long currentUserId = UserUtils.getCurrentUserId(1L);
+        Long currentUserId = UserUtils.getCurrentUserId(0L);
         Timestamp currentTime = new Timestamp(System.currentTimeMillis());
         Timestamp currentTime = new Timestamp(System.currentTimeMillis());
 
 
         // 识别SQL类型,看是INSERT还是UPDATE
         // 识别SQL类型,看是INSERT还是UPDATE

+ 44 - 0
data-easy/src/main/java/com/dataeasy/server/service/controller/OpController.java

@@ -0,0 +1,44 @@
+package com.dataeasy.server.service.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.dataeasy.server.service.manager.IOpManager;
+
+import jakarta.validation.constraints.NotBlank;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @date 2025/3/13 8:53
+ * @description 运维操作接口
+ */
+@Validated
+@RestController
+@RequestMapping("/op")
+public class OpController {
+
+    @Autowired
+    private IOpManager opManager;
+
+    /**
+     * 通用定时任务执行
+     * @param beanName
+     */
+    @GetMapping("scheduleTask")
+    public void scheduleTask(@RequestParam @NotBlank(message = "beanName不能为空") String beanName) {
+        opManager.scheduleTask(beanName);
+    }
+
+    /**
+     * 清除缓存
+     */
+    @GetMapping("clearCache")
+    public void clearCache(@RequestParam @NotBlank(message = "cacheName不能为空") String cacheName) {
+        opManager.clearCache(cacheName);
+    }
+}

+ 0 - 95
data-easy/src/main/java/com/dataeasy/server/service/controller/TaskOpController.java

@@ -1,95 +0,0 @@
-package com.dataeasy.server.service.controller;
-
-import com.dataeasy.server.task.AutoCLosePayOrderTask;
-import com.dataeasy.server.task.AutoDeleteSubscriptionUserConfigTask;
-import com.dataeasy.server.task.DaLeTouTask;
-import com.dataeasy.server.task.IpoBondTask;
-import com.dataeasy.server.task.IpoStockTask;
-import com.dataeasy.server.task.ProductHuntTask;
-import com.dataeasy.server.task.ShuangSeQiuTask;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @author tyuio
- * @version 1.0.0
- * @date 2025/3/13 8:53
- * @description 定时任务运维操作接口
- */
-@RestController
-@RequestMapping("/taskOp")
-public class TaskOpController {
-
-    @Autowired
-    private DaLeTouTask daLeTouTask;
-
-    @Autowired
-    private ShuangSeQiuTask shuangSeQiuTask;
-
-    @Autowired
-    private ProductHuntTask productHuntTask;
-
-    @Autowired
-    private IpoBondTask ipoBondTask;
-
-    @Autowired
-    private IpoStockTask ipoStockTask;
-
-    @Autowired
-    private AutoCLosePayOrderTask autoCLosePayOrderTask;
-
-    @Autowired
-    private AutoDeleteSubscriptionUserConfigTask autoDeleteSubscriptionUserConfigTask;
-
-    /**
-     * 大乐透定时任务
-     */
-    @GetMapping("daLeTouTask")
-    public void daLeTouTask() {
-        daLeTouTask.execute();
-    }
-
-    /**
-     * 双色球定时任务
-     */
-    @GetMapping("shuangSeQiuTask")
-    public void shuangSeQiuTask() {
-        shuangSeQiuTask.execute();
-    }
-
-    /**
-     * ProductHunt热榜定时任务
-     */
-    @GetMapping("productHuntTask")
-    public void productHuntTask() {
-        productHuntTask.execute();
-    }
-
-    /**
-     * 新债定时任务
-     */
-    @GetMapping("ipoBondTask")
-    public void ipoBondTask() {
-        ipoBondTask.execute();
-    }
-
-    /**
-     * 新股定时任务
-     */
-    @GetMapping("ipoStockTask")
-    public void ipoStockTask() {
-        ipoStockTask.execute();
-    }
-
-    @GetMapping("autoCloseOrderTask")
-    public void autoCloseOrderTask() {
-        autoCLosePayOrderTask.execute();
-    }
-
-    @GetMapping("autoDeleteSubscriptionUserConfigTask")
-    public void autoDeleteSubscriptionUserConfigTask() {
-        autoDeleteSubscriptionUserConfigTask.execute();
-    }
-}

+ 22 - 0
data-easy/src/main/java/com/dataeasy/server/service/manager/IOpManager.java

@@ -0,0 +1,22 @@
+package com.dataeasy.server.service.manager;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @date 2025/3/19 9:33
+ * @description 运维服务类
+ */
+public interface IOpManager {
+
+    /**
+     * 调度任务
+     * @param beanName 任务bean名称
+     */
+    void scheduleTask(String beanName);
+
+    /**
+     * 清除缓存
+     * @param cacheName 缓存名称
+     */
+    void clearCache(String cacheName);
+}

+ 50 - 0
data-easy/src/main/java/com/dataeasy/server/service/manager/impl/OpManagerImpl.java

@@ -0,0 +1,50 @@
+package com.dataeasy.server.service.manager.impl;
+
+import java.util.Objects;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.Cache;
+import org.springframework.cache.CacheManager;
+import org.springframework.stereotype.Component;
+
+import com.dataeasy.server.common.exception.BusinessException;
+import com.dataeasy.server.service.manager.IOpManager;
+import com.dataeasy.server.task.TaskExecutor;
+import com.dataeasy.server.utiis.SpringUtils;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @date 2025/3/19 9:35
+ * @description 运维服务类
+ */
+@Slf4j
+@Component
+public class OpManagerImpl implements IOpManager {
+
+    @Autowired
+    private CacheManager cacheManager;
+
+    @Override
+    public void scheduleTask(String beanName) {
+        TaskExecutor task = SpringUtils.getBean(beanName);
+        if (Objects.isNull(task)) {
+            BusinessException.throwFail("bean不存在");
+        }
+        if (!(task instanceof TaskExecutor)) {
+            BusinessException.throwFail("bean没有实现TaskExecutor接口,无法调用");
+        }
+        task.execute();
+    }
+
+    @Override
+    public void clearCache(String cacheName) {
+        Cache cache = cacheManager.getCache(cacheName);
+        if (Objects.isNull(cache)) {
+            BusinessException.throwFail(String.format("%s 缓存不存在", cacheName));
+        }
+        cache.clear();
+    }
+}

+ 2 - 1
data-easy/src/main/java/com/dataeasy/server/service/manager/impl/SubscriptionManagerImpl.java

@@ -144,7 +144,8 @@ public class SubscriptionManagerImpl implements ISubscriptionManager {
                 subscriptionUserConfigVO.setSubscriptionSourceId(subscriptionSource.getId());
                 subscriptionUserConfigVO.setSubscriptionSourceId(subscriptionSource.getId());
             }
             }
 
 
-            long remainingDays = ChronoUnit.DAYS.between(userConfig.getStartDate(), userConfig.getEndDate());
+            // 因为ChronoUnit.DAYS.between不包含结束的那天,所以需要+1
+            long remainingDays = ChronoUnit.DAYS.between(userConfig.getStartDate(), userConfig.getEndDate().plusDays(1));
             subscriptionUserConfigVO.setRemainingDays(remainingDays);
             subscriptionUserConfigVO.setRemainingDays(remainingDays);
 
 
             return subscriptionUserConfigVO;
             return subscriptionUserConfigVO;

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

@@ -38,7 +38,7 @@ import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
  * @date 2025/3/7 10:44
  * @date 2025/3/7 10:44
  */
  */
 @Slf4j
 @Slf4j
-public abstract class AbstractDataTask {
+public abstract class AbstractDataTask implements TaskExecutor {
 
 
     @Autowired
     @Autowired
     protected ISysScheduleTaskLogService taskLogService;
     protected ISysScheduleTaskLogService taskLogService;

+ 1 - 1
data-easy/src/main/java/com/dataeasy/server/task/AutoCLosePayOrderTask.java

@@ -26,7 +26,7 @@ import lombok.extern.slf4j.Slf4j;
 @Slf4j
 @Slf4j
 @Component
 @Component
 @ScheduleTask(ScheduleTaskEnum.AUTO_CLOSE_PAY_ORDER)
 @ScheduleTask(ScheduleTaskEnum.AUTO_CLOSE_PAY_ORDER)
-public class AutoCLosePayOrderTask {
+public class AutoCLosePayOrderTask implements TaskExecutor{
 
 
     @Autowired
     @Autowired
     private ISubscriptionOrderService subscriptionOrderService;
     private ISubscriptionOrderService subscriptionOrderService;

+ 1 - 1
data-easy/src/main/java/com/dataeasy/server/task/AutoDeleteSubscriptionUserConfigTask.java

@@ -19,7 +19,7 @@ import java.time.LocalDate;
 @Slf4j
 @Slf4j
 @Component
 @Component
 @ScheduleTask(ScheduleTaskEnum.AUTO_DELETE_SUBSCRIPTION_USER_CONFIG)
 @ScheduleTask(ScheduleTaskEnum.AUTO_DELETE_SUBSCRIPTION_USER_CONFIG)
-public class AutoDeleteSubscriptionUserConfigTask {
+public class AutoDeleteSubscriptionUserConfigTask implements TaskExecutor {
 
 
     @Autowired
     @Autowired
     private ISubscriptionUserConfigService subscriptionUserConfigService;
     private ISubscriptionUserConfigService subscriptionUserConfigService;

+ 15 - 0
data-easy/src/main/java/com/dataeasy/server/task/TaskExecutor.java

@@ -0,0 +1,15 @@
+package com.dataeasy.server.task;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @date 2025/3/19 9:26
+ * @description 定时任务接口
+ */
+public interface TaskExecutor {
+
+    /**
+     * 任务入口
+     */
+    void execute();
+}

+ 10 - 0
data-easy/src/main/java/com/dataeasy/server/utiis/SpringUtils.java

@@ -28,4 +28,14 @@ public class SpringUtils implements ApplicationContextAware {
     public static <T> T getBean(Class<T> clazz) {
     public static <T> T getBean(Class<T> clazz) {
         return applicationContext.getBean(clazz);
         return applicationContext.getBean(clazz);
     }
     }
+
+    /**
+     * 通过bean的名称获取对应的bean
+     * @param beanName bean的名称
+     * @return
+     * @param <T>
+     */
+    public static <T> T getBean(String beanName) {
+        return (T) applicationContext.getBean(beanName);
+    }
 }
 }