diff --git a/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrUploadQueueService.java b/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrUploadQueueService.java index e658e5c7..109e5904 100644 --- a/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrUploadQueueService.java +++ b/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrUploadQueueService.java @@ -6,7 +6,6 @@ import org.dromara.aihr.domain.AihrSopDto.UploadEnqueueResponse; import org.dromara.aihr.domain.AihrSopDto.UploadItemResponse; import org.dromara.aihr.domain.AihrSopDto.UploadResponse; import org.dromara.common.core.exception.ServiceException; -import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.tenant.helper.TenantHelper; import org.springframework.beans.factory.annotation.Value; import org.springframework.dao.DataAccessException; @@ -498,7 +497,7 @@ public class AihrUploadQueueService { } private String currentTenantId() { - String tenantId = LoginHelper.getTenantId(); + String tenantId = TenantHelper.getTenantId(); return tenantId == null || tenantId.isBlank() ? TENANT_ID : tenantId; } diff --git a/backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrUploadQueueServiceTest.java b/backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrUploadQueueServiceTest.java index bfcdafbb..9813162d 100644 --- a/backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrUploadQueueServiceTest.java +++ b/backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrUploadQueueServiceTest.java @@ -22,6 +22,7 @@ class AihrUploadQueueServiceTest { assertTrue(code.contains("select i.tenant_id, i.id, i.file_name")); assertTrue(code.contains("p.tenant_id = i.tenant_id")); + assertTrue(code.contains("TenantHelper.getTenantId()")); assertTrue(code.contains("TenantHelper.dynamic(tenantId")); assertTrue(code.contains("new ItemRow(rs.getString(\"tenant_id\")")); assertTrue(code.contains("where status = 1\n and (")); diff --git a/docs/BRD_IMPLEMENTATION_AUDIT.md b/docs/BRD_IMPLEMENTATION_AUDIT.md index 5f776eac..ec614e32 100644 --- a/docs/BRD_IMPLEMENTATION_AUDIT.md +++ b/docs/BRD_IMPLEMENTATION_AUDIT.md @@ -102,3 +102,5 @@ - 2026-07-14 线上只读复核:生产根站点、`/h5/`、租户列表和员工首页 API 均返回 200;线上仍加载管理端 `index-CJZ3Ax3Z.js` 与 H5 `index-D4-NrEpb.js`,本地最新租户边界修复提交 `6ec17726`、`c95cb1ff` 尚未发布。本次未修改生产环境,发布前需先做测试环境跨租户上传/目录导入回归。 - 2026-07-14 异步队列清扫修复:上传队列 worker 的卡死任务清扫改为跨租户扫描,避免无登录线程回退到 `000000` 后只清理默认租户;实际加工、失败回写和 SOP 处理仍按队列条目租户隔离。`AihrUploadQueueServiceTest` 与 AIHR 全量测试 51/51 通过;双租户上传/目录导入仍需测试环境回归。 - 2026-07-14 移动端短信登录租户修复:手机号查询补充 `tenant_id` 条件,避免同一手机号在不同租户登录时复用其他租户的 `sys_user`;新增认证策略边界回归测试。正式多租户登录仍需用测试租户账号做 HTTP 回归。 +- 2026-07-14 测试租户 HTTP 回归:在本地临时建立 `codex-a`/`codex-b` 两个租户,用同一手机号分别登录并授予各自 `superadmin` 测试角色;两租户分别调用异步上传和目录导入接口。A 查询不到 B 的上传批次/导入任务,B 也查询不到 A;两个目录导入任务均完成 `1/1`。后台 worker 的队列加工、目录导入、任务进度和查询均保持租户隔离。测试产生的租户、用户、角色、知识库行和临时文件已清理为 0。该证据只覆盖本地测试环境,不替代正式组织同步和生产多租户验收。 +- 2026-07-14 上传队列上下文收口:`AihrUploadQueueService` 的同步请求租户读取改为 `TenantHelper.getTenantId()`,动态租户上下文优先于登录态,避免重试/嵌套任务回退到错误租户;`AihrUploadQueueServiceTest` 已补对应源码契约断言。AIHR 定向测试与模块编译通过。