fix(aihr): require explicit SOP review verdict

This commit is contained in:
2026-07-14 11:07:43 +08:00
parent a34aeacc09
commit 8fcc58fe22
4 changed files with 18 additions and 0 deletions
@@ -199,6 +199,9 @@ public class AihrSopSeedService {
if (id == null) {
return null;
}
if (!hasExplicitSopReviewDecision(request)) {
throw new ServiceException("SOP评审必须明确选择可用或不可用");
}
ensureSopReviewTable();
int updated = jdbcTemplate.update("""
UPDATE aihr_sop_answer_review
@@ -216,6 +219,10 @@ public class AihrSopSeedService {
return updated == 0 ? null : sopReview(id);
}
static boolean hasExplicitSopReviewDecision(SopReviewRequest request) {
return request != null && request.usable() != null;
}
public AnswerFeedbackResponse answerFeedback(AnswerFeedbackRequest request) {
String queryText = request == null ? "" : Optional.ofNullable(request.queryText()).orElse("").trim();
String queryNorm = normalizeFeedbackQuery(queryText);
@@ -44,6 +44,15 @@ public class AihrSopSeedServiceTest {
assertFalse(AihrSopSeedService.shouldCreateSopReview("物业费怎么交", "verify_demo_questions"));
}
@Test
@Tag("dev")
public void sopReviewRequiresExplicitUsableDecision() {
assertFalse(AihrSopSeedService.hasExplicitSopReviewDecision(null));
assertFalse(AihrSopSeedService.hasExplicitSopReviewDecision(new AihrSopDto.SopReviewRequest(null, null, null)));
assertTrue(AihrSopSeedService.hasExplicitSopReviewDecision(new AihrSopDto.SopReviewRequest(true, null, null)));
assertTrue(AihrSopSeedService.hasExplicitSopReviewDecision(new AihrSopDto.SopReviewRequest(false, null, null)));
}
@Test
@Tag("dev")
public void evidenceHitsKeepsNamedDocumentOnly() {
+1
View File
@@ -184,3 +184,4 @@
- 2026-07-14 BRD 知识反馈关联复核:答案反馈原先直接接受客户端传入的 `reviewId`;现仅保留当前租户存在的 SOP 评审关联,非法或跨租户 ID 归一为空。
- 2026-07-14 BRD 候选资料审核留痕:候选资料审核此前只有状态三态,没有审核人和审核时间;现由服务端从当前 HR 登录态写入 `reviewer/reviewed_time`,管理端审核表同步展示。
- 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 可用率已达到正式试点门槛。
+1
View File
@@ -498,6 +498,7 @@ contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/control
contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrSopSeedService.java "仅支持 txt/md/markdown/pdf/doc/docx/xls/xlsx/ppt/pptx/图片文件"
contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrSopSeedService.java "/embeddings"
contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrSopSeedService.java "aihr_knowledge_gap"
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 "normalizeFeedbackReviewId"
contains backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrVideoService.java "处理输出已隐藏"