fix(ops): 轨迹事件 handler 补齐租户上下文
TrajectoryEnter/LeaveEventHandler 缺少 TenantContext 包裹, 与 CleanOrder 系列 handler 保持一致,避免多租户场景下 MyBatis-Plus 租户过滤失效。 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -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<String> {
|
||||
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<String> {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<String> {
|
||||
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<String> {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user