From 5d46502fb9781088e748c61c9729f6bd9c88fab2 Mon Sep 17 00:00:00 2001 From: lzh Date: Tue, 31 Mar 2026 22:58:25 +0800 Subject: [PATCH] =?UTF-8?q?fix(ops):=20=E5=90=AF=E5=8A=A8=E6=97=B6?= =?UTF-8?q?=E6=81=A2=E5=A4=8D=E5=B7=A5=E5=8D=95=E9=98=9F=E5=88=97=E7=BC=93?= =?UTF-8?q?=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 OrderQueueInitializer\n- 服务启动时调用 QueueSyncService.forceSyncAll()\n- 在 Redis 队列数据丢失或过期后,自动用 MySQL 数据回填 Sorted Set --- .../job/queue/OrderQueueInitializer.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 viewsh-module-ops/viewsh-module-ops-server/src/main/java/com/viewsh/module/ops/framework/job/queue/OrderQueueInitializer.java diff --git a/viewsh-module-ops/viewsh-module-ops-server/src/main/java/com/viewsh/module/ops/framework/job/queue/OrderQueueInitializer.java b/viewsh-module-ops/viewsh-module-ops-server/src/main/java/com/viewsh/module/ops/framework/job/queue/OrderQueueInitializer.java new file mode 100644 index 0000000..ebf8623 --- /dev/null +++ b/viewsh-module-ops/viewsh-module-ops-server/src/main/java/com/viewsh/module/ops/framework/job/queue/OrderQueueInitializer.java @@ -0,0 +1,43 @@ +package com.viewsh.module.ops.framework.job.queue; + +import com.viewsh.framework.tenant.core.util.TenantUtils; +import com.viewsh.module.ops.service.queue.QueueSyncService; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.stereotype.Component; + +/** + * 工单队列 Redis 启动恢复器 + *

+ * 职责:服务启动时,全量同步 MySQL 队列数据到 Redis, + * 确保 Redis Sorted Set 与 MySQL 一致。 + *

+ * 解决场景: + * - 服务重启后 Redis 队列数据丢失或过期 + * - 异步写入 Redis 失败导致的数据不一致 + * + * @author AI + */ +@Slf4j +@Component +public class OrderQueueInitializer implements ApplicationRunner { + + @Resource + private QueueSyncService queueSyncService; + + @Override + public void run(ApplicationArguments args) { + log.info("[初始化] 开始全量同步工单队列到 Redis..."); + + try { + TenantUtils.executeIgnore(() -> { + int count = queueSyncService.forceSyncAll(); + log.info("[初始化] 工单队列全量同步完成:同步 {} 条记录", count); + }); + } catch (Exception e) { + log.error("[初始化] 工单队列全量同步失败", e); + } + } +}