fix(aihr): preserve tenant for local imports
This commit is contained in:
+5
-1
@@ -466,8 +466,12 @@ public class AihrSopSeedService {
|
||||
|
||||
public LocalImportTaskResponse startLocalImportTask(LocalImportRequest request) {
|
||||
LocalImportPlan plan = localImportPlan(request);
|
||||
String tenantId = tenantId();
|
||||
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(
|
||||
taskId, plan.directory(), plan.category(), "导入中", "primary", 0, plan.files().size(), 0, 0, "", formatTime(new Timestamp(System.currentTimeMillis())), formatTime(new Timestamp(System.currentTimeMillis())), ""
|
||||
));
|
||||
|
||||
+16
@@ -4,6 +4,8 @@ import org.dromara.aihr.domain.AihrSopDto;
|
||||
import org.junit.jupiter.api.Tag;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.List;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
@@ -80,6 +82,20 @@ public class AihrSopSeedServiceTest {
|
||||
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) {
|
||||
return new AihrSopSeedService.KnowledgeHit(fragmentId, title, "sop", "", "doc-" + fragmentId, "片段内容", 1, 1.0);
|
||||
}
|
||||
|
||||
@@ -98,3 +98,4 @@
|
||||
- 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 异步上传队列租户边界修复:请求入队、查询和重试按当前登录租户;后台领取按队列条目租户跨租户扫描,文件加工通过 `TenantHelper.dynamic` 进入对应租户,ZIP 子条目、失败回写和卡死清扫均沿用条目租户;新增队列结构回归测试。AIHR 全量测试 50/50、`ruoyi-admin` 跳测试打包通过;正式多租户文件上传、向量写入和跨租户隔离仍需测试环境回归。
|
||||
- 2026-07-14 目录导入异步任务租户边界修复:`startLocalImportTask` 捕获当前租户,并用 `TenantHelper.dynamic` 包住整个后台导入 worker,任务进度、取消状态、OSS/片段/向量写入不再因脱离登录线程回退到 `000000`;新增异步上下文回归测试。正式多租户目录导入仍需测试环境验证。
|
||||
|
||||
Reference in New Issue
Block a user