fix(learning): restore mobile mistakes query

This commit is contained in:
key
2026-07-30 00:40:03 +08:00
parent 380d8e6e32
commit edb8c8255b
4 changed files with 30 additions and 14 deletions
@@ -1764,7 +1764,22 @@ public class AihrPracticeSeedService {
args.add(tenantId());
args.addAll(identity.storageKeys());
args.add(safeLimit);
return jdbcTemplate.query("""
return jdbcTemplate.query(mobileMistakesSql(identity.storageKeys().size()), (rs, rowNum) -> new MistakeResponse(
rs.getLong("id"),
rs.getString("session_id"),
rs.getString("scenario_id"),
firstNonBlank(rs.getString("scenario_name"), "场景训练"),
rs.getInt("total_score"),
firstNonBlank(rs.getString("cause"), "综合得分不足"),
rs.getObject("retry_assignment_id") == null ? null : rs.getLong("retry_assignment_id"),
firstNonBlank(rs.getString("retry_status"), "未生成"),
rs.getTimestamp("finished_time") == null ? "" : rs.getTimestamp("finished_time").toLocalDateTime().format(TIME_FORMATTER),
firstNonBlank(rs.getString("summary"), "建议回看训练对话和导师改写")
), args.toArray());
}
static String mobileMistakesSql(int identityCount) {
return """
SELECT s.id,
s.session_id,
s.scenario_id,
@@ -1797,23 +1812,12 @@ public class AihrPracticeSeedService {
FROM aihr_practice_session s
WHERE s.tenant_id = ?
AND s.mode = 'mobile'
AND s.ext_party_id IN (%s)
AND s.ext_party_id IN (__IDENTITY_KEYS__)
AND s.finished_time IS NOT NULL
AND (s.total_score < 80 OR s.dialogue_json LIKE '%"redFlag":true%')
ORDER BY s.finished_time DESC, s.id DESC
LIMIT ?
""".formatted(inClause(identity.storageKeys().size())), (rs, rowNum) -> new MistakeResponse(
rs.getLong("id"),
rs.getString("session_id"),
rs.getString("scenario_id"),
firstNonBlank(rs.getString("scenario_name"), "场景训练"),
rs.getInt("total_score"),
firstNonBlank(rs.getString("cause"), "综合得分不足"),
rs.getObject("retry_assignment_id") == null ? null : rs.getLong("retry_assignment_id"),
firstNonBlank(rs.getString("retry_status"), "未生成"),
rs.getTimestamp("finished_time") == null ? "" : rs.getTimestamp("finished_time").toLocalDateTime().format(TIME_FORMATTER),
firstNonBlank(rs.getString("summary"), "建议回看训练对话和导师改写")
), args.toArray());
""".replace("__IDENTITY_KEYS__", inClause(identityCount));
}
public PracticeTeamResponse practiceTeamSnapshot(String supervisorExtPartyId, int limit) {
@@ -74,6 +74,15 @@ import static org.mockito.Mockito.when;
@Tag("dev")
public class AihrPracticeSeedServiceTest {
@Test
public void mobileMistakesSqlPreservesJsonLikeWildcardsWithoutFormatter() {
String sql = AihrPracticeSeedService.mobileMistakesSql(2);
assertTrue(sql.contains("s.ext_party_id IN (?,?)"));
assertTrue(sql.contains("s.dialogue_json LIKE '%\"redFlag\":true%'"));
assertFalse(sql.contains("__IDENTITY_KEYS__"));
}
@Test
public void pilotExportRequiresExplicitOrderedWindow() {
AihrPracticeSeedService service = new AihrPracticeSeedService(new ObjectMapper(), null, null, null);