From 1535f59a9c0705cf39b1daa90e179ee5952dd1c9 Mon Sep 17 00:00:00 2001 From: lzh Date: Wed, 29 Apr 2026 22:47:39 +0800 Subject: [PATCH] =?UTF-8?q?fix(ops):=20=E8=BD=A8=E8=BF=B9=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6=20handler=20=E8=A1=A5=E9=BD=90=E7=A7=9F=E6=88=B7?= =?UTF-8?q?=E4=B8=8A=E4=B8=8B=E6=96=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TrajectoryEnter/LeaveEventHandler 缺少 TenantContext 包裹, 与 CleanOrder 系列 handler 保持一致,避免多租户场景下 MyBatis-Plus 租户过滤失效。 Co-Authored-By: Claude Opus 4.7 --- .../consumer/TrajectoryEnterEventHandler.java | 17 +++++++++++++++-- .../consumer/TrajectoryLeaveEventHandler.java | 17 +++++++++++++++-- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/integration/consumer/TrajectoryEnterEventHandler.java b/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/integration/consumer/TrajectoryEnterEventHandler.java index 3b68a3dc..d75968c4 100644 --- a/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/integration/consumer/TrajectoryEnterEventHandler.java +++ b/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/integration/consumer/TrajectoryEnterEventHandler.java @@ -1,6 +1,8 @@ package com.viewsh.module.ops.environment.integration.consumer; import com.fasterxml.jackson.databind.ObjectMapper; +import com.viewsh.framework.tenant.core.context.TenantContextHolder; +import com.viewsh.framework.tenant.core.util.TenantUtils; import com.viewsh.module.ops.environment.integration.dto.TrajectoryEnterEventDTO; import com.viewsh.module.ops.environment.service.trajectory.DeviceTrajectoryService; import jakarta.annotation.Resource; @@ -13,6 +15,7 @@ import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; +import java.util.Objects; /** * 轨迹进入区域事件消费者 @@ -60,8 +63,9 @@ public class TrajectoryEnterEventHandler implements RocketMQListener { event.getEventId(), event.getDeviceId(), event.getAreaId()); // 解析事件时间 - projectContextExecutor.execute(event.getProjectId(), null, event.getAreaId(), event.getDeviceId(), - event.getEventId(), () -> handleTrajectoryEnter(event)); + executeInTenantContext(event.getTenantId(), () -> + projectContextExecutor.execute(event.getProjectId(), null, event.getAreaId(), event.getDeviceId(), + event.getEventId(), () -> handleTrajectoryEnter(event))); } catch (Exception e) { log.error("[TrajectoryEnterHandler] 消息处理失败:message={}", message, e); @@ -92,4 +96,13 @@ public class TrajectoryEnterEventHandler implements RocketMQListener { return LocalDateTime.now(); } } + + private void executeInTenantContext(Long tenantId, Runnable runnable) { + Long currentTenantId = TenantContextHolder.getTenantId(); + if (tenantId == null || Objects.equals(currentTenantId, tenantId)) { + runnable.run(); + return; + } + TenantUtils.execute(tenantId, runnable); + } } diff --git a/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/integration/consumer/TrajectoryLeaveEventHandler.java b/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/integration/consumer/TrajectoryLeaveEventHandler.java index 25565328..93666b44 100644 --- a/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/integration/consumer/TrajectoryLeaveEventHandler.java +++ b/viewsh-module-ops/viewsh-module-environment-biz/src/main/java/com/viewsh/module/ops/environment/integration/consumer/TrajectoryLeaveEventHandler.java @@ -1,6 +1,8 @@ package com.viewsh.module.ops.environment.integration.consumer; import com.fasterxml.jackson.databind.ObjectMapper; +import com.viewsh.framework.tenant.core.context.TenantContextHolder; +import com.viewsh.framework.tenant.core.util.TenantUtils; import com.viewsh.module.ops.environment.integration.dto.TrajectoryLeaveEventDTO; import com.viewsh.module.ops.environment.service.trajectory.DeviceTrajectoryService; import jakarta.annotation.Resource; @@ -13,6 +15,7 @@ import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; +import java.util.Objects; /** * 轨迹离开区域事件消费者 @@ -60,8 +63,9 @@ public class TrajectoryLeaveEventHandler implements RocketMQListener { event.getEventId(), event.getDeviceId(), event.getAreaId(), event.getLeaveReason()); // 解析事件时间 - projectContextExecutor.execute(event.getProjectId(), null, event.getAreaId(), event.getDeviceId(), - event.getEventId(), () -> handleTrajectoryLeave(event)); + executeInTenantContext(event.getTenantId(), () -> + projectContextExecutor.execute(event.getProjectId(), null, event.getAreaId(), event.getDeviceId(), + event.getEventId(), () -> handleTrajectoryLeave(event))); } catch (Exception e) { log.error("[TrajectoryLeaveHandler] 消息处理失败:message={}", message, e); @@ -90,4 +94,13 @@ public class TrajectoryLeaveEventHandler implements RocketMQListener { return LocalDateTime.now(); } } + + private void executeInTenantContext(Long tenantId, Runnable runnable) { + Long currentTenantId = TenantContextHolder.getTenantId(); + if (tenantId == null || Objects.equals(currentTenantId, tenantId)) { + runnable.run(); + return; + } + TenantUtils.execute(tenantId, runnable); + } }