fix(learning): restore mobile mistakes query
This commit is contained in:
+18
-14
@@ -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) {
|
||||
|
||||
+9
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user