fix(aihr): reload persisted case sessions
This commit is contained in:
+22
-1
@@ -226,7 +226,28 @@ public class AihrCaseService {
|
||||
}
|
||||
|
||||
private CaseState requireCase(String caseId) {
|
||||
CaseState state = cases.get(clean(caseId));
|
||||
String normalizedCaseId = clean(caseId);
|
||||
CaseState state = cases.get(normalizedCaseId);
|
||||
if (state == null && !normalizedCaseId.isBlank()) {
|
||||
ensureCaseTable();
|
||||
List<CaseState> persisted = jdbcTemplate.query("""
|
||||
SELECT case_id, file_name, project_ext_org_id, transcript, type
|
||||
FROM aihr_case_record
|
||||
WHERE tenant_id = '000000' AND case_id = ?
|
||||
LIMIT 1
|
||||
""", (rs, rowNum) -> new CaseState(
|
||||
rs.getString("case_id"),
|
||||
firstNonBlank(rs.getString("file_name"), "case-audio"),
|
||||
firstNonBlank(rs.getString("project_ext_org_id"), ""),
|
||||
firstNonBlank(rs.getString("transcript"), ""),
|
||||
tagsFromText(firstNonBlank(rs.getString("type"), "现场案例")),
|
||||
null
|
||||
), normalizedCaseId);
|
||||
state = persisted.stream().findFirst().orElse(null);
|
||||
if (state != null) {
|
||||
cases.put(normalizedCaseId, state);
|
||||
}
|
||||
}
|
||||
if (state == null) {
|
||||
throw new IllegalArgumentException("案例不存在或已过期,请重新上传语音");
|
||||
}
|
||||
|
||||
+42
-1
@@ -5,12 +5,18 @@ import org.dromara.aihr.domain.AihrCaseDto.UploadResponse;
|
||||
import org.junit.jupiter.api.Tag;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
import org.springframework.mock.web.MockMultipartFile;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
class AihrCaseServiceTest {
|
||||
|
||||
@@ -36,7 +42,22 @@ class AihrCaseServiceTest {
|
||||
assertFalse(response.transcript().contains("2-304"));
|
||||
}
|
||||
|
||||
private static final class CaseJdbcTemplate extends JdbcTemplate {
|
||||
@Test
|
||||
@Tag("dev")
|
||||
void curateCanReloadCaseAfterServiceRestart() {
|
||||
PersistentCaseJdbcTemplate jdbcTemplate = new PersistentCaseJdbcTemplate();
|
||||
AihrCaseService service = new AihrCaseService(null, null, new ObjectMapper(), jdbcTemplate);
|
||||
|
||||
var response = service.curate(new org.dromara.aihr.domain.AihrCaseDto.CurateRequest(
|
||||
"persisted-case", "可复用培训案例", 1
|
||||
));
|
||||
|
||||
assertEquals(List.of("persisted-case"), response.selectedCaseIds());
|
||||
assertEquals("已入库", response.records().get(0).status());
|
||||
assertEquals("persisted-case", jdbcTemplate.lastCaseId);
|
||||
}
|
||||
|
||||
private static class CaseJdbcTemplate extends JdbcTemplate {
|
||||
private Object[] updateArgs = new Object[0];
|
||||
|
||||
@Override
|
||||
@@ -50,4 +71,24 @@ class AihrCaseServiceTest {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
private static final class PersistentCaseJdbcTemplate extends CaseJdbcTemplate {
|
||||
private String lastCaseId;
|
||||
|
||||
@Override
|
||||
public <T> List<T> query(String sql, RowMapper<T> rowMapper, Object... args) {
|
||||
this.lastCaseId = String.valueOf(args[0]);
|
||||
try {
|
||||
ResultSet resultSet = mock(ResultSet.class);
|
||||
when(resultSet.getString("case_id")).thenReturn("persisted-case");
|
||||
when(resultSet.getString("file_name")).thenReturn("case.webm");
|
||||
when(resultSet.getString("project_ext_org_id")).thenReturn("P1");
|
||||
when(resultSet.getString("transcript")).thenReturn("业主投诉后完成跟进");
|
||||
when(resultSet.getString("type")).thenReturn("投诉处理");
|
||||
return List.of(rowMapper.mapRow(resultSet, 0));
|
||||
} catch (SQLException e) {
|
||||
throw new AssertionError(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user