fix(aihr): bind sop feedback to its query

This commit is contained in:
2026-07-14 12:59:54 +08:00
parent 6d686cc87c
commit d50bfbf788
4 changed files with 8 additions and 6 deletions
@@ -238,7 +238,7 @@ public class AihrSopSeedService {
throw new ServiceException("缺少片段ID");
}
validateFeedbackFragmentOwnership(fragmentIds);
Long reviewId = normalizeFeedbackReviewId(request.reviewId());
Long reviewId = normalizeFeedbackReviewId(request.reviewId(), queryText);
ensureAnswerFeedbackTable();
String reviewStatus = "down".equals(verdict) ? "待复核" : "已复核";
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) {
return null;
}
@@ -2127,8 +2127,8 @@ public class AihrSopSeedService {
Integer count = jdbcTemplate.queryForObject("""
SELECT COUNT(*)
FROM aihr_sop_answer_review
WHERE tenant_id = ? AND id = ?
""", Integer.class, tenantId(), reviewId);
WHERE tenant_id = ? AND id = ? AND query_text = ?
""", Integer.class, tenantId(), reviewId, truncate(AihrSensitiveText.forModel(queryText), 1000));
return count != null && count > 0 ? reviewId : null;
}
@@ -187,8 +187,8 @@ public class AihrSopSeedServiceTest {
}
String code = Files.readString(source);
assertTrue(code.contains("Long reviewId = normalizeFeedbackReviewId(request.reviewId())"));
assertTrue(code.contains("WHERE tenant_id = ? AND id = ?"));
assertTrue(code.contains("Long reviewId = normalizeFeedbackReviewId(request.reviewId(), queryText)"));
assertTrue(code.contains("WHERE tenant_id = ? AND id = ? AND query_text = ?"));
}
private static AihrSopSeedService.KnowledgeHit hit(Long fragmentId, String title) {