fix(ops): 轨迹事件 handler 补齐租户上下文
Some checks failed
Java CI with Maven / build (11) (push) Has been cancelled
Java CI with Maven / build (17) (push) Has been cancelled
Java CI with Maven / build (8) (push) Has been cancelled

TrajectoryEnter/LeaveEventHandler 缺少 TenantContext 包裹,
与 CleanOrder 系列 handler 保持一致,避免多租户场景下
MyBatis-Plus 租户过滤失效。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
lzh
2026-04-29 22:47:39 +08:00
parent fa3f2a6631
commit 1535f59a9c
2 changed files with 30 additions and 4 deletions

View File

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

View File

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