fix(aihr): bind sop feedback to its query
This commit is contained in:
+4
-4
@@ -238,7 +238,7 @@ public class AihrSopSeedService {
|
|||||||
throw new ServiceException("缺少片段ID");
|
throw new ServiceException("缺少片段ID");
|
||||||
}
|
}
|
||||||
validateFeedbackFragmentOwnership(fragmentIds);
|
validateFeedbackFragmentOwnership(fragmentIds);
|
||||||
Long reviewId = normalizeFeedbackReviewId(request.reviewId());
|
Long reviewId = normalizeFeedbackReviewId(request.reviewId(), queryText);
|
||||||
ensureAnswerFeedbackTable();
|
ensureAnswerFeedbackTable();
|
||||||
String reviewStatus = "down".equals(verdict) ? "待复核" : "已复核";
|
String reviewStatus = "down".equals(verdict) ? "待复核" : "已复核";
|
||||||
Timestamp now = Timestamp.valueOf(java.time.LocalDateTime.now());
|
Timestamp now = Timestamp.valueOf(java.time.LocalDateTime.now());
|
||||||
@@ -2119,7 +2119,7 @@ public class AihrSopSeedService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Long normalizeFeedbackReviewId(Long reviewId) {
|
private Long normalizeFeedbackReviewId(Long reviewId, String queryText) {
|
||||||
if (reviewId == null || reviewId <= 0) {
|
if (reviewId == null || reviewId <= 0) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -2127,8 +2127,8 @@ public class AihrSopSeedService {
|
|||||||
Integer count = jdbcTemplate.queryForObject("""
|
Integer count = jdbcTemplate.queryForObject("""
|
||||||
SELECT COUNT(*)
|
SELECT COUNT(*)
|
||||||
FROM aihr_sop_answer_review
|
FROM aihr_sop_answer_review
|
||||||
WHERE tenant_id = ? AND id = ?
|
WHERE tenant_id = ? AND id = ? AND query_text = ?
|
||||||
""", Integer.class, tenantId(), reviewId);
|
""", Integer.class, tenantId(), reviewId, truncate(AihrSensitiveText.forModel(queryText), 1000));
|
||||||
return count != null && count > 0 ? reviewId : null;
|
return count != null && count > 0 ? reviewId : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -187,8 +187,8 @@ public class AihrSopSeedServiceTest {
|
|||||||
}
|
}
|
||||||
String code = Files.readString(source);
|
String code = Files.readString(source);
|
||||||
|
|
||||||
assertTrue(code.contains("Long reviewId = normalizeFeedbackReviewId(request.reviewId())"));
|
assertTrue(code.contains("Long reviewId = normalizeFeedbackReviewId(request.reviewId(), queryText)"));
|
||||||
assertTrue(code.contains("WHERE tenant_id = ? AND id = ?"));
|
assertTrue(code.contains("WHERE tenant_id = ? AND id = ? AND query_text = ?"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static AihrSopSeedService.KnowledgeHit hit(Long fragmentId, String title) {
|
private static AihrSopSeedService.KnowledgeHit hit(Long fragmentId, String title) {
|
||||||
|
|||||||
@@ -251,4 +251,5 @@
|
|||||||
- 2026-07-14 BRD M5 导出指标语义复核:`formal_org_login_count` 原名会把按安全手机号映射统计的在职组织身份误读为登录次数;现统一更名为 `formal_org_identity_count`,统计 SQL 不变,CSV 契约、严格校验和验证脚本同步更新。AIHR 目标测试 `34/34`、CSV 契约测试 `5/5` 通过;不改变真实试点数据门槛,也未发布生产。
|
- 2026-07-14 BRD M5 导出指标语义复核:`formal_org_login_count` 原名会把按安全手机号映射统计的在职组织身份误读为登录次数;现统一更名为 `formal_org_identity_count`,统计 SQL 不变,CSV 契约、严格校验和验证脚本同步更新。AIHR 目标测试 `34/34`、CSV 契约测试 `5/5` 通过;不改变真实试点数据门槛,也未发布生产。
|
||||||
- 2026-07-14 BRD G3/M5 评审样本绕过复核:SOP 搜索的 `source=verify_demo_questions` 原由客户端直接控制,普通登录用户可借此跳过评审样本写入,稀释正式可用率分母;现仅超级管理员保留该内部验证来源,其他请求自动归一为普通 `knowledge_search`,并补预检标记与回归测试。未修改生产环境。
|
- 2026-07-14 BRD G3/M5 评审样本绕过复核:SOP 搜索的 `source=verify_demo_questions` 原由客户端直接控制,普通登录用户可借此跳过评审样本写入,稀释正式可用率分母;现仅超级管理员保留该内部验证来源,其他请求自动归一为普通 `knowledge_search`,并补预检标记与回归测试。未修改生产环境。
|
||||||
- 2026-07-14 M5 试点输出口径复核:严格预检的组织映射数量已与 CSV 的 `formal_org_identity_count` 统一显示为 `org_identity`,并同步行为测试断言;统计逻辑不变,避免把在职组织身份映射数误读为登录次数。未修改生产环境。
|
- 2026-07-14 M5 试点输出口径复核:严格预检的组织映射数量已与 CSV 的 `formal_org_identity_count` 统一显示为 `org_identity`,并同步行为测试断言;统计逻辑不变,避免把在职组织身份映射数误读为登录次数。未修改生产环境。
|
||||||
|
- 2026-07-14 BRD 4.7/G3 反馈追溯复核:答案反馈原先只校验客户端传入的 `reviewId` 属于当前租户,可能把其他问题的同租户评审记录绑定到当前反馈;现同时校验评审记录中的脱敏问题文本与反馈问题一致,不一致时仅清空关联、不阻断正常反馈写入,并补源码契约与预检标记。未修改生产环境。
|
||||||
- 2026-07-14 线上只读核对:生产根站、`/h5/` 和 `/prod-api/auth/tenant/list` 均返回 `200`,线上仍加载管理端 `index-CJZ3Ax3Z.js` 与 H5 `index-D4-NrEpb.js`;本轮 `aa7e1508`、`5d85d63c` 两个 BRD 修复提交尚未发布。未执行生产同步、重启或业务数据写入。
|
- 2026-07-14 线上只读核对:生产根站、`/h5/` 和 `/prod-api/auth/tenant/list` 均返回 `200`,线上仍加载管理端 `index-CJZ3Ax3Z.js` 与 H5 `index-D4-NrEpb.js`;本轮 `aa7e1508`、`5d85d63c` 两个 BRD 修复提交尚未发布。未执行生产同步、重启或业务数据写入。
|
||||||
|
|||||||
@@ -535,6 +535,7 @@ contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service
|
|||||||
contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrSopSeedService.java "hasExplicitSopReviewDecision"
|
contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrSopSeedService.java "hasExplicitSopReviewDecision"
|
||||||
contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrSopSeedService.java "validateFeedbackFragmentOwnership"
|
contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrSopSeedService.java "validateFeedbackFragmentOwnership"
|
||||||
contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrSopSeedService.java "normalizeFeedbackReviewId"
|
contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrSopSeedService.java "normalizeFeedbackReviewId"
|
||||||
|
contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrSopSeedService.java "AND query_text = ?"
|
||||||
contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrVideoService.java "处理输出已隐藏"
|
contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrVideoService.java "处理输出已隐藏"
|
||||||
contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrUploadQueueService.java "资料加工失败,请重试或联系管理员"
|
contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrUploadQueueService.java "资料加工失败,请重试或联系管理员"
|
||||||
contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrSopSeedService.java "目录导入失败,请重试或联系管理员"
|
contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrSopSeedService.java "目录导入失败,请重试或联系管理员"
|
||||||
|
|||||||
Reference in New Issue
Block a user