fix(aihr): preserve tenant for local imports

This commit is contained in:
2026-07-14 06:53:03 +08:00
parent 6ec1772674
commit c95cb1ff3b
3 changed files with 22 additions and 1 deletions
@@ -466,8 +466,12 @@ public class AihrSopSeedService {
public LocalImportTaskResponse startLocalImportTask(LocalImportRequest request) { public LocalImportTaskResponse startLocalImportTask(LocalImportRequest request) {
LocalImportPlan plan = localImportPlan(request); LocalImportPlan plan = localImportPlan(request);
String tenantId = tenantId();
long taskId = createLocalImportTask(plan); long taskId = createLocalImportTask(plan);
CompletableFuture.runAsync(() -> runLocalImportTask(taskId, plan), scheduledExecutorService); CompletableFuture.runAsync(() -> TenantHelper.dynamic(tenantId, () -> {
runLocalImportTask(taskId, plan);
return null;
}), scheduledExecutorService);
return localImportTask(taskId).orElseGet(() -> new LocalImportTaskResponse( return localImportTask(taskId).orElseGet(() -> new LocalImportTaskResponse(
taskId, plan.directory(), plan.category(), "导入中", "primary", 0, plan.files().size(), 0, 0, "", formatTime(new Timestamp(System.currentTimeMillis())), formatTime(new Timestamp(System.currentTimeMillis())), "" taskId, plan.directory(), plan.category(), "导入中", "primary", 0, plan.files().size(), 0, 0, "", formatTime(new Timestamp(System.currentTimeMillis())), formatTime(new Timestamp(System.currentTimeMillis())), ""
)); ));
@@ -4,6 +4,8 @@ import org.dromara.aihr.domain.AihrSopDto;
import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List; import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -80,6 +82,20 @@ public class AihrSopSeedServiceTest {
assertFalse(cleaned.contains("う")); assertFalse(cleaned.contains("う"));
} }
@Test
@Tag("dev")
public void localImportWorkerCarriesTenantContext() throws Exception {
Path source = Path.of("src/main/java/org/dromara/aihr/service/AihrSopSeedService.java");
if (!Files.exists(source)) {
source = Path.of("ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrSopSeedService.java");
}
String code = Files.readString(source);
assertTrue(code.contains("String tenantId = tenantId();"));
assertTrue(code.contains("TenantHelper.dynamic(tenantId"));
assertTrue(code.contains("runLocalImportTask(taskId, plan)"));
}
private static AihrSopSeedService.KnowledgeHit hit(Long fragmentId, String title) { private static AihrSopSeedService.KnowledgeHit hit(Long fragmentId, String title) {
return new AihrSopSeedService.KnowledgeHit(fragmentId, title, "sop", "", "doc-" + fragmentId, "片段内容", 1, 1.0); return new AihrSopSeedService.KnowledgeHit(fragmentId, title, "sop", "", "doc-" + fragmentId, "片段内容", 1, 1.0);
} }
+1
View File
@@ -98,3 +98,4 @@
- 2026-07-14 剩余固定租户审查:`AihrPracticeSeedService` 仍有 79 处运行时 `TENANT_ID`,覆盖场景、训练记录、派题、复盘、导出和 Prompt 管理;这些路径可按同步请求上下文分批迁移。`AihrUploadQueueService` 仍有 19 处固定租户引用,但其后台 worker 会脱离登录线程并调用 SOP 加工,不能机械替换为 `LoginHelper`;下一步需让队列条目携带租户、worker 按条目租户加工,并补跨租户领取/隔离测试。 - 2026-07-14 剩余固定租户审查:`AihrPracticeSeedService` 仍有 79 处运行时 `TENANT_ID`,覆盖场景、训练记录、派题、复盘、导出和 Prompt 管理;这些路径可按同步请求上下文分批迁移。`AihrUploadQueueService` 仍有 19 处固定租户引用,但其后台 worker 会脱离登录线程并调用 SOP 加工,不能机械替换为 `LoginHelper`;下一步需让队列条目携带租户、worker 按条目租户加工,并补跨租户领取/隔离测试。
- 2026-07-14 训练租户边界修复:`AihrPracticeSeedService` 的场景、训练记录、派题、复盘、导出、Prompt、标注和音频明细运行时查询/写入统一使用当前登录租户;无登录上下文回退本地开发租户 `000000`。定向 AIHR 测试 48/48、管理端完整打包均通过。`AihrUploadQueueService` 仍保留固定租户,原因是后台 worker 需要下一批显式携带条目租户后再调用 SOP 加工,避免机械替换造成跨租户队列停摆。 - 2026-07-14 训练租户边界修复:`AihrPracticeSeedService` 的场景、训练记录、派题、复盘、导出、Prompt、标注和音频明细运行时查询/写入统一使用当前登录租户;无登录上下文回退本地开发租户 `000000`。定向 AIHR 测试 48/48、管理端完整打包均通过。`AihrUploadQueueService` 仍保留固定租户,原因是后台 worker 需要下一批显式携带条目租户后再调用 SOP 加工,避免机械替换造成跨租户队列停摆。
- 2026-07-14 异步上传队列租户边界修复:请求入队、查询和重试按当前登录租户;后台领取按队列条目租户跨租户扫描,文件加工通过 `TenantHelper.dynamic` 进入对应租户,ZIP 子条目、失败回写和卡死清扫均沿用条目租户;新增队列结构回归测试。AIHR 全量测试 50/50、`ruoyi-admin` 跳测试打包通过;正式多租户文件上传、向量写入和跨租户隔离仍需测试环境回归。 - 2026-07-14 异步上传队列租户边界修复:请求入队、查询和重试按当前登录租户;后台领取按队列条目租户跨租户扫描,文件加工通过 `TenantHelper.dynamic` 进入对应租户,ZIP 子条目、失败回写和卡死清扫均沿用条目租户;新增队列结构回归测试。AIHR 全量测试 50/50、`ruoyi-admin` 跳测试打包通过;正式多租户文件上传、向量写入和跨租户隔离仍需测试环境回归。
- 2026-07-14 目录导入异步任务租户边界修复:`startLocalImportTask` 捕获当前租户,并用 `TenantHelper.dynamic` 包住整个后台导入 worker,任务进度、取消状态、OSS/片段/向量写入不再因脱离登录线程回退到 `000000`;新增异步上下文回归测试。正式多租户目录导入仍需测试环境验证。