From 35e37477678812cf558e040947af4df67fa1285b Mon Sep 17 00:00:00 2001 From: let5sne Date: Tue, 14 Jul 2026 09:46:41 +0800 Subject: [PATCH] fix(aihr): keep interview session id in finish response --- .../aihr/service/AihrInterviewService.java | 16 +++++++++++- .../service/AihrInterviewServiceTest.java | 26 +++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrInterviewService.java b/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrInterviewService.java index 927ad318..81457bbe 100644 --- a/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrInterviewService.java +++ b/backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrInterviewService.java @@ -96,7 +96,21 @@ public class AihrInterviewService { ScoreResult score = scoreWithModel(session).orElseGet(() -> localScore(session)); String time = LocalDateTime.now().format(TIME_FORMAT); List 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(), diff --git a/backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrInterviewServiceTest.java b/backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrInterviewServiceTest.java index fab49376..40d0d156 100644 --- a/backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrInterviewServiceTest.java +++ b/backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrInterviewServiceTest.java @@ -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()); + } }