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); + } }