liuaini před 1 týdnem
rodič
revize
df99c9084f

+ 31 - 0
services/load-transfer-bf/src/main/java/com/hdkj/lt/bf/config/SeSchedulingConfig.java

@@ -0,0 +1,31 @@
+package com.hdkj.lt.bf.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.SchedulingConfigurer;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
+import org.springframework.scheduling.config.ScheduledTaskRegistrar;
+
+/**
+ * 定时任务调度线程池配置
+ * <p>
+ * Spring 默认 @Scheduled 单线程池:断面拉取(每15min)长时间执行时,
+ * 会饿死同进程其他定时任务(凌晨日汇总等)。此处显式配置多线程池,
+ * 线程名前缀 se-sched- 便于日志排查。
+ *
+ * @author lsl
+ * @since 2026-08-05
+ */
+@Configuration
+public class SeSchedulingConfig implements SchedulingConfigurer {
+
+    @Override
+    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
+        ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
+        scheduler.setPoolSize(8);
+        scheduler.setThreadNamePrefix("se-sched-");
+        scheduler.setWaitForTasksToCompleteOnShutdown(true);
+        scheduler.setAwaitTerminationSeconds(60);
+        scheduler.initialize();
+        taskRegistrar.setTaskScheduler(scheduler);
+    }
+}

+ 35 - 0
services/ruoyi-job/src/main/java/com/hdkj/lt/job/task/SeCapacityDailyTask.java

@@ -0,0 +1,35 @@
+package com.hdkj.lt.job.task;
+
+import com.hdkj.lt.bf.scheduler.SeCapacityDailyScheduler;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDate;
+
+/**
+ * 供电能力日汇总定时任务(凌晨1点聚合昨天)
+ * <p>
+ * sys_job 配置:invokeTarget = seCapacityDaily.noParams(),cron = 0 0 1 * * ?
+ *
+ * @author lsl
+ * @since 2026-08-05
+ */
+@Slf4j
+@Component("seCapacityDaily")
+@RequiredArgsConstructor
+public class SeCapacityDailyTask {
+
+    private final SeCapacityDailyScheduler seCapacityDailyScheduler;
+
+    public void noParams() {
+        LocalDate yesterday = LocalDate.now().minusDays(1);
+        log.info("[供电能力日汇总] 开始处理 {} 数据", yesterday);
+        try {
+            String result = seCapacityDailyScheduler.aggregateForDate(yesterday);
+            log.info("[供电能力日汇总] {} {}", yesterday, result);
+        } catch (Exception e) {
+            log.error("[供电能力日汇总] {} 处理失败", yesterday, e);
+        }
+    }
+}

+ 35 - 0
services/ruoyi-job/src/main/java/com/hdkj/lt/job/task/SeConsumerCountDailyTask.java

@@ -0,0 +1,35 @@
+package com.hdkj.lt.job.task;
+
+import com.hdkj.lt.bf.scheduler.SeConsumerCountDailyScheduler;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDate;
+
+/**
+ * 分层分级用户数量日汇总定时任务(凌晨1点聚合昨天,IEC 用户电压指数分母)
+ * <p>
+ * sys_job 配置:invokeTarget = seConsumerCountDaily.noParams(),cron = 0 0 1 * * ?
+ *
+ * @author lsl
+ * @since 2026-08-05
+ */
+@Slf4j
+@Component("seConsumerCountDaily")
+@RequiredArgsConstructor
+public class SeConsumerCountDailyTask {
+
+    private final SeConsumerCountDailyScheduler seConsumerCountDailyScheduler;
+
+    public void noParams() {
+        LocalDate yesterday = LocalDate.now().minusDays(1);
+        log.info("[用户数量日汇总] 开始处理 {} 数据", yesterday);
+        try {
+            String result = seConsumerCountDailyScheduler.aggregateForDate(yesterday);
+            log.info("[用户数量日汇总] {} {}", yesterday, result);
+        } catch (Exception e) {
+            log.error("[用户数量日汇总] {} 处理失败", yesterday, e);
+        }
+    }
+}

+ 35 - 0
services/ruoyi-job/src/main/java/com/hdkj/lt/job/task/SeLineLossDailyTask.java

@@ -0,0 +1,35 @@
+package com.hdkj.lt.job.task;
+
+import com.hdkj.lt.bf.scheduler.SeLineLossDailyScheduler;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDate;
+
+/**
+ * 线路线损日汇总定时任务(凌晨1点聚合昨天)
+ * <p>
+ * sys_job 配置:invokeTarget = seLineLossDaily.noParams(),cron = 0 0 1 * * ?
+ *
+ * @author lsl
+ * @since 2026-08-05
+ */
+@Slf4j
+@Component("seLineLossDaily")
+@RequiredArgsConstructor
+public class SeLineLossDailyTask {
+
+    private final SeLineLossDailyScheduler seLineLossDailyScheduler;
+
+    public void noParams() {
+        LocalDate yesterday = LocalDate.now().minusDays(1);
+        log.info("[线路线损日汇总] 开始处理 {} 数据", yesterday);
+        try {
+            String result = seLineLossDailyScheduler.aggregateForDate(yesterday);
+            log.info("[线路线损日汇总] {} {}", yesterday, result);
+        } catch (Exception e) {
+            log.error("[线路线损日汇总] {} 处理失败", yesterday, e);
+        }
+    }
+}

+ 32 - 0
services/ruoyi-job/src/main/java/com/hdkj/lt/job/task/SeVoltageCleanupTask.java

@@ -0,0 +1,32 @@
+package com.hdkj.lt.job.task;
+
+import com.hdkj.lt.bf.scheduler.SeVoltageCleanupScheduler;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+/**
+ * 电压事件兜底清扫定时任务(凌晨3点)
+ * <p>
+ * sys_job 配置:invokeTarget = seVoltageCleanup.noParams(),cron = 0 0 3 * * ?
+ *
+ * @author lsl
+ * @since 2026-08-05
+ */
+@Slf4j
+@Component("seVoltageCleanup")
+@RequiredArgsConstructor
+public class SeVoltageCleanupTask {
+
+    private final SeVoltageCleanupScheduler seVoltageCleanupScheduler;
+
+    public void noParams() {
+        log.info("[电压事件清扫] 开始执行");
+        try {
+            int updated = seVoltageCleanupScheduler.cleanupStaleVoltageEvents();
+            log.info("[电压事件清扫] 执行完成,共关闭 {} 条", updated);
+        } catch (Exception e) {
+            log.error("[电压事件清扫] 执行失败", e);
+        }
+    }
+}