Bladeren bron

chore(personnel-sync): 定时任务改工作日 8/13/18 + 新增外部触发接口

定时全量同步由「03:00 基线 + 10:05~22:05 每小时(14 次)」改为工作日 08:00/13:00/
18:00 各一次(单方法挂 3 条 cron)。新增 POST /personnel-sync/trigger 无参外部触发
接口, 等价一次生产全量同步, 与排障用 /full 区分。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
malk 2 weken geleden
bovenliggende
commit
1773e1430e

+ 21 - 0
mjava-akdsbeisen/src/main/java/com/malk/controller/PersonnelSyncController.java

@@ -42,6 +42,27 @@ public class PersonnelSyncController {
         return result;
     }
 
+    /**
+     * 外部触发全量同步 POST /personnel-sync/trigger
+     * 专供外部请求(宜搭连接器 / 外部定时)配置调用: 不带任何参数, 等价于一次生产全量同步
+     * (limit 取配置 limitFirstN, 生产=0 即真·全量)。与排障用的 /full 区分, 路径语义稳定、无参,
+     * 便于固定为一条外部触发请求。
+     */
+    @PostMapping("/trigger")
+    public Map<String, Object> trigger() {
+        Map<String, Object> result = new LinkedHashMap<>();
+        try {
+            Map<String, Object> stats = personnelSyncService.fullSync(null);
+            result.put("success", true);
+            result.put("stats", stats);
+        } catch (Exception e) {
+            log.error("[PersonnelSync] 外部触发全量同步失败", e);
+            result.put("success", false);
+            result.put("message", e.getMessage());
+        }
+        return result;
+    }
+
     /**
      * 干跑 GET /personnel-sync/dry-run[?limit=N]
      */

+ 8 - 12
mjava-akdsbeisen/src/main/java/com/malk/timer/PersonnelSyncTimer.java

@@ -11,8 +11,8 @@ import java.util.concurrent.atomic.AtomicBoolean;
 
 /**
  * 钉钉 -> 宜搭 人员档案 定时全量增量同步
- * 工作日 (MON-FRI) 03:00 基线 + 10:05~22:05 每小时一次 fullSync (limit 取配置 personnel-sync.limitFirstN, 生产为 0 即真·全量)
- * 共 14 次/工作日: 03:00 / 10:05 / 11:05 / ... / 22:05; 周末不跑
+ * 工作日 (MON-FRI) 每天 08:00 / 13:00 / 18:00 各一次 fullSync (limit 取配置 personnel-sync.limitFirstN, 生产为 0 即真·全量)
+ * 共 3 次/工作日; 周末不跑
  */
 @Slf4j
 @Configuration
@@ -25,16 +25,12 @@ public class PersonnelSyncTimer {
     // fixme: 防止上一轮未完成时下一轮重入 (两轮并发会使 QPS 翻倍)
     private final AtomicBoolean running = new AtomicBoolean(false);
 
-    /** 工作日凌晨 03:00 全量基线 */
-    @Scheduled(cron = "0 0 3 ? * MON-FRI")
-    public void nightlyFullSync() {
-        runFullSync("03:00");
-    }
-
-    /** 工作日时段每小时 (10:05 ~ 22:05 含端点, 共 13 次) */
-    @Scheduled(cron = "0 5 10-22 ? * MON-FRI")
-    public void hourlyFullSync() {
-        runFullSync("HH:05");
+    /** 工作日 08:00 / 13:00 / 18:00 各一次全量同步(单方法挂 3 条 cron,离散时点无法用单条 cron 表达) */
+    @Scheduled(cron = "0 0 8 ? * MON-FRI")
+    @Scheduled(cron = "0 0 13 ? * MON-FRI")
+    @Scheduled(cron = "0 0 18 ? * MON-FRI")
+    public void scheduledFullSync() {
+        runFullSync("08/13/18");
     }
 
     private void runFullSync(String tag) {