fix(aihr): hide unpublished cases from app users

This commit is contained in:
2026-07-14 11:12:30 +08:00
parent 8ed80c2982
commit 7c3d367421
3 changed files with 29 additions and 2 deletions
@@ -123,12 +123,13 @@ public class AihrCaseService {
projectWhere = " AND project_ext_org_id IN (" + placeholders(projectScopes.size()) + ")";
args.addAll(projectScopes);
}
String publishedWhere = projectScopes == null ? "" : " AND status = '已入库'";
args.add(safeLimit);
String sql = """
SELECT case_id, title, type, status, update_time, owner, summary
FROM aihr_case_record
WHERE tenant_id = ?
""" + projectWhere + """
""" + projectWhere + publishedWhere + """
ORDER BY update_time DESC, id DESC
LIMIT ?
""";
@@ -157,11 +158,12 @@ public class AihrCaseService {
projectWhere = " AND project_ext_org_id IN (" + placeholders(projectScopes.size()) + ")";
args.addAll(projectScopes);
}
String publishedWhere = projectScopes == null ? "" : " AND status = '已入库'";
String sql = """
SELECT case_id, file_name, title, type, status, update_time, owner, transcript, summary, media_url, media_oss_id
FROM aihr_case_record
WHERE tenant_id = ? AND case_id = ?
""" + projectWhere + " LIMIT 1";
""" + projectWhere + publishedWhere + " LIMIT 1";
args.add(0, tenantId());
return jdbcTemplate.query(sql, (rs, rowNum) -> {
Long mediaOssId = rs.getObject("media_oss_id", Long.class);
@@ -108,6 +108,18 @@ class AihrCaseServiceTest {
assertEquals("https://oss.local/cases/refreshed-case.webm", detail.mediaUrl());
assertEquals(456L, detail.mediaOssId());
assertEquals("P1", jdbcTemplate.lastArgs[2]);
assertTrue(jdbcTemplate.lastSql.contains("status = '已入库'"));
}
@Test
@Tag("dev")
void appCaseRecordsOnlyExposePublishedCases() {
RecordsCaseJdbcTemplate jdbcTemplate = new RecordsCaseJdbcTemplate();
AihrCaseService service = new AihrCaseService(null, null, new ObjectMapper(), jdbcTemplate, null);
service.records(10, List.of("P1"));
assertTrue(jdbcTemplate.lastSql.contains("status = '已入库'"));
}
@Test
@@ -189,9 +201,11 @@ class AihrCaseServiceTest {
private static final class PersistentCaseJdbcTemplate extends CaseJdbcTemplate {
private String lastCaseId;
private Object[] lastArgs = new Object[0];
private String lastSql = "";
@Override
public <T> List<T> query(String sql, RowMapper<T> rowMapper, Object... args) {
this.lastSql = sql;
this.lastCaseId = String.valueOf(args[1]);
this.lastArgs = args;
try {
@@ -210,4 +224,14 @@ class AihrCaseServiceTest {
}
}
}
private static final class RecordsCaseJdbcTemplate extends CaseJdbcTemplate {
private String lastSql = "";
@Override
public <T> List<T> query(String sql, RowMapper<T> rowMapper, Object... args) {
this.lastSql = sql;
return List.of();
}
}
}
+1
View File
@@ -186,3 +186,4 @@
- 2026-07-14 BRD 试点门禁租户参数化:严格试点预检此前将 M5 查询固定到 `tenant_id='000000'`,正式试点切换租户时会统计错误;现支持经过字符白名单校验的 `AIHR_PILOT_TENANT_ID`,默认仍为本地开发租户,试点命令和文档已同步。
- 2026-07-14 BRD SOP 人工评审结论完整性:`POST /api/knowledge/reviews/{id}` 现在要求明确提交 `usable=true/false`,空请求或缺少结论会拒绝,不再把未作答误记为“不可用”;`reviewer` 仍由当前登录操作人写入。已补服务层回归测试与 `demo-check` marker,但这只修正评审数据完整性,不代表住宅 SOP 可用率已达到正式试点门槛。
- 2026-07-14 线上只读核对:生产根站点、`/h5/` 和 `/prod-api/auth/tenant/list` 均返回 `200`,当前线上仍加载管理端 `index-CJZ3Ax3Z.js` 与 H5 `index-D4-NrEpb.js`;本地 `8fcc58fe` 的 SOP 评审结论校验尚未发布。`release-preflight.sh` 仍因两份既有 Figma 文档未提交而阻断,本轮未执行生产写入、静态资源同步或后端重启。
- 2026-07-14 BRD 4.6 案例发布状态复核:员工端案例列表和详情原先只按租户/项目范围读取,未限制案例状态,理论上可能看到仍处于“已转写/已整理”的管理流程半成品;现对 APP 项目范围读取增加 `status='已入库'`,管理端 HR/管理员仍可查看全部状态以继续处理。新增案例服务回归测试,AIHR 全量测试 `81/81` 通过;视频样片、学习点和主管点评仍需正式业务输入。