fix(aihr): keep interview session id in finish response

This commit is contained in:
2026-07-14 09:46:41 +08:00
parent e55abec630
commit 35e3747767
2 changed files with 41 additions and 1 deletions
@@ -96,7 +96,21 @@ public class AihrInterviewService {
ScoreResult score = scoreWithModel(session).orElseGet(() -> localScore(session));
String time = LocalDateTime.now().format(TIME_FORMAT);
List<QuestionRecordResponse> questions = questionRecords(session);
RecordResponse record = new RecordResponse(time, session.candidate().name(), session.candidate().position(), score.total(), score.result(), score.summary(), questions);
RecordResponse record = new RecordResponse(
sessionKey,
time,
session.candidate().name(),
session.candidate().position(),
score.total(),
null,
score.total(),
"待复核",
"",
"",
score.result(),
score.summary(),
questions
);
saveResult(sessionKey, session, score);
return new FinishResponse(
score.total(),
@@ -3,8 +3,10 @@ package org.dromara.aihr.service;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.dromara.aihr.domain.AihrInterviewDto.CandidateLinkRequest;
import org.dromara.aihr.domain.AihrInterviewDto.CandidateLinkResponse;
import org.dromara.aihr.domain.AihrInterviewDto.FinishRequest;
import org.dromara.aihr.domain.AihrInterviewDto.RecordResponse;
import org.dromara.aihr.domain.AihrInterviewDto.ReviewRequest;
import org.dromara.aihr.domain.AihrInterviewDto.StartRequest;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import org.springframework.jdbc.core.JdbcTemplate;
@@ -18,6 +20,7 @@ import static org.junit.jupiter.api.Assertions.assertSame;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.anyDouble;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
@@ -26,6 +29,9 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.Map;
import java.util.Optional;
class AihrInterviewServiceTest {
@Test
@@ -148,4 +154,24 @@ class AihrInterviewServiceTest {
assertEquals("人工复核分必须是0到100之间的整数", error.getMessage());
verify(jdbcTemplate, never()).update(anyString(), eq(101), eq("hr-operator"), eq("超出范围"), eq("000000"), eq("iv-1"));
}
@Test
@Tag("dev")
void finishResponseRetainsSessionIdForHumanReview() {
JdbcTemplate jdbcTemplate = mock(JdbcTemplate.class);
AihrModelSeedService modelService = mock(AihrModelSeedService.class);
when(modelService.tryChat(anyString(), anyString(), anyDouble())).thenReturn(Optional.empty());
AihrInterviewService service = new AihrInterviewService(new ObjectMapper(), modelService, jdbcTemplate);
var started = service.start(new StartRequest("candidate-1", "候选人", "customer-service", "mobile"));
var finished = service.finish(new FinishRequest(
started.sessionId(),
Map.of("q1", "先安抚情绪并确认事实", "q2", "说明费用和整改安排", "q3", "同步责任人和反馈时间")
));
RecordResponse record = finished.records().get(0);
assertEquals(started.sessionId(), record.sessionId());
assertEquals("待复核", record.reviewStatus());
assertEquals(record.score(), record.finalScore());
}
}