Creating a new SqlSession SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@397c3388] was not registered for synchronization because synchronization is not active JDBC Connection [HikariProxyConnection@1741726566 wrapping com.mysql.cj.jdbc.ConnectionImpl@51638967] will not be managed by Spring ==> Preparing: SELECT id,username,password,real_name,email,phone,avatar,user_type,status,dept_id,last_login_time,create_time,update_time FROM user WHERE id=? ==> Parameters: 1(Long) <== Columns: id, username, password, real_name, email, phone, avatar, user_type, status, dept_id, last_login_time, create_time, update_time <== Row: 1, admin, $2a$10$o/mdlaGbhm7Fm0yrYFGICODFyqYUu/cd9Nj1xzc/qD9r3ukNZQr8W, 系统管理员, admin@system.com, 13800000000, null, 1, 1, 1, null, 2026-04-16 09:05:15, 2026-05-10 19:08:59 <== Total: 1 Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@397c3388] 2026-06-11 14:19:33 - 请求 | URL: http://localhost:8080/api/exam/grade | 方法: POST | IP: 127.0.0.1 2026-06-11 14:19:33 - ========== 批阅接口请求开始 ========== 2026-06-11 14:19:33 - 请求完整内容: {"answer_type":"formal_exam","answers":[{"max_score":2.0,"question_content":{"answer":"B","data":{"options":[{"key":"A","content":"允许入住并记录信息"},{"key":"B","content":"一律不予入住并立即上报属地公安机关"},{"key":"C","content":"暂时允许入住并后续核查"},{"key":"D","content":"要求重新提供证件"}]},"stem":"根据文档内容,当发现人证不符、证件伪造或冒用证件时,应采取的措施是?"},"question_id":"ea6a7f44-9077-4f19-b10e-8239a5198f4d","question_type":"single_choice","student_answer":"B"},{"max_score":2.0,"question_content":{"answer":"B","data":{"options":[{"key":"A","content":"安保人员"},{"key":"B","content":"前台工作人员"},{"key":"C","content":"经理"},{"key":"D","content":"客户"}]},"stem":"根据文档内容,谁是住宿登记的第一责任人?"},"question_id":"9d59e7c5-edfc-4517-9fb5-780b389b66fb","question_type":"single_choice","student_answer":"B"}],"record_id":"683de5c4-cce6-47b4-8518-a582dce02ca4","request_id":"formal_683de5c4-cce6-47b4-8518-a582dce02ca4"} Creating a new SqlSession SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@cf3c606] was not registered for synchronization because synchronization is not active JDBC Connection [HikariProxyConnection@26303885 wrapping com.mysql.cj.jdbc.ConnectionImpl@51638967] will not be managed by Spring ==> Preparing: SELECT id,username,password,real_name,email,phone,avatar,user_type,status,dept_id,last_login_time,create_time,update_time FROM user WHERE id=? ==> Parameters: 1(Long) <== Columns: id, username, password, real_name, email, phone, avatar, user_type, status, dept_id, last_login_time, create_time, update_time <== Row: 1, admin, $2a$10$o/mdlaGbhm7Fm0yrYFGICODFyqYUu/cd9Nj1xzc/qD9r3ukNZQr8W, 系统管理员, admin@system.com, 13800000000, null, 1, 1, 1, null, 2026-04-16 09:05:15, 2026-05-10 19:08:59 <== Total: 1 Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@cf3c606] 2026-06-11 14:19:33 - 当前用户ID: 1 2026-06-11 14:19:33 - 答案数量: 2 2026-06-11 14:19:33 - 检测到正式考试模式: recordId=683de5c4-cce6-47b4-8518-a582dce02ca4 2026-06-11 14:19:33 - 通过recordId提交考试: userId=1, recordId=683de5c4-cce6-47b4-8518-a582dce02ca4, 答案数量=2 2026-06-11 14:19:33 - gradeAnswersForRecord 开始 2026-06-11 14:19:33 - 请求参数: recordId=683de5c4-cce6-47b4-8518-a582dce02ca4, userId=1, answerType=formal_exam, answers count=2 Creating a new SqlSession Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7777103a] JDBC Connection [HikariProxyConnection@1859153704 wrapping com.mysql.cj.jdbc.ConnectionImpl@51638967] will be managed by Spring ==> Preparing: SELECT id,record_id,paper_id,answer_type,user_id,status,total_score,submit_time,graded_time,graded_by,time_spent,start_time,last_active_time,created_at,updated_at FROM exam_record WHERE (record_id = ?) ==> Parameters: 683de5c4-cce6-47b4-8518-a582dce02ca4(String) <== Columns: id, record_id, paper_id, answer_type, user_id, status, total_score, submit_time, graded_time, graded_by, time_spent, start_time, last_active_time, created_at, updated_at <== Row: 263, 683de5c4-cce6-47b4-8518-a582dce02ca4, ff10df62-4fd4-4bc4-8f8b-4dfb348aae8b, formal_exam, 1, graded, 0.00, 2026-06-11 14:18:51, 2026-06-11 14:18:51, null, 401, 2026-06-11 14:12:09, 2026-06-11 14:12:09, 2026-06-11 14:12:04, 2026-06-11 14:18:51 <== Total: 1 Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7777103a] Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7777103a] from current transaction ==> Preparing: SELECT id,paper_id,title,description,total_score,duration,question_count,status,permission_scope,dept_id,question_ids,created_by,created_at,updated_at,publish_time,deadline FROM exam_paper WHERE (paper_id = ?) ==> Parameters: ff10df62-4fd4-4bc4-8f8b-4dfb348aae8b(String) <== Columns: id, paper_id, title, description, total_score, duration, question_count, status, permission_scope, dept_id, question_ids, created_by, created_at, updated_at, publish_time, deadline <== Row: 65, ff10df62-4fd4-4bc4-8f8b-4dfb348aae8b, 自动生成的试卷, <>, 4.00, 120, 2, published, 本部门, 1, <>, 1, 2026-06-11 14:11:57, 2026-06-11 14:12:04, 2026-06-11 14:12:04, null <== Total: 1 Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7777103a] 2026-06-11 14:19:33 - 检测到空试卷提交: isBlankSubmission=false Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7777103a] from current transaction ==> Preparing: SELECT id,question_id,question_type,difficulty,tags,score,version,document_id,exclude_stems,knowledge_base_path,source_context,chunk_ids,source_chunks_used,exam_count,correct_count,last_exam_time,page_numbers,content,status,reviewer_comment,created_at,updated_at,is_deleted FROM question WHERE (question_id = ?) ==> Parameters: ea6a7f44-9077-4f19-b10e-8239a5198f4d(String) <== Columns: id, question_id, question_type, difficulty, tags, score, version, document_id, exclude_stems, knowledge_base_path, source_context, chunk_ids, source_chunks_used, exam_count, correct_count, last_exam_time, page_numbers, content, status, reviewer_comment, created_at, updated_at, is_deleted <== Row: 826, ea6a7f44-9077-4f19-b10e-8239a5198f4d, single_choice, 3, <>, 2.00, 1.0, 80, 根据文档内容,当发现人证不符、证件伪造或冒用证件时,应采取的措施是?, null, <>, <>, 22, 0, 0, null, <>, <>, pending, <>, 2026-06-10 06:24:40, 2026-06-10 06:24:40, 0 <== Total: 1 Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7777103a] 2026-06-11 14:19:33 - 转换题目内容失败 com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "explanation" (class top.tqx.demo_1.dto.ExamGradeRequest$QuestionContent), not marked as ignorable (3 known properties: "stem", "data", "answer"]) at [Source: UNKNOWN; byte offset: #UNKNOWN] (through reference chain: top.tqx.demo_1.dto.ExamGradeRequest$QuestionContent["explanation"]) at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:61) at com.fasterxml.jackson.databind.DeserializationContext.handleUnknownProperty(DeserializationContext.java:1138) at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:2224) at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1719) at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1697) at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:320) at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177) at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323) at com.fasterxml.jackson.databind.ObjectMapper._readValue(ObjectMapper.java:4801) at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2974) at com.fasterxml.jackson.databind.ObjectMapper.treeToValue(ObjectMapper.java:3438) at top.tqx.demo_1.service.impl.ExamServiceImpl.gradeAnswersForRecord(ExamServiceImpl.java:490) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:354) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:392) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720) at top.tqx.demo_1.service.impl.ExamServiceImpl$$SpringCGLIB$$0.gradeAnswersForRecord() at top.tqx.demo_1.controller.ExamController.gradeAnswers(ExamController.java:330) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:354) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89) at top.tqx.demo_1.aspect.LogAspect.around(LogAspect.java:43) at jdk.internal.reflect.GeneratedMethodAccessor191.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:637) at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:627) at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:71) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720) at top.tqx.demo_1.controller.ExamController$$SpringCGLIB$$0.gradeAnswers() at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:175) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150) at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:175) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:175) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:175) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:175) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1736) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) at java.base/java.lang.Thread.run(Unknown Source) 2026-06-11 14:19:33 - 题目内容为空,已设置默认值: questionId=ea6a7f44-9077-4f19-b10e-8239a5198f4d Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7777103a] from current transaction ==> Preparing: SELECT id,question_id,question_type,difficulty,tags,score,version,document_id,exclude_stems,knowledge_base_path,source_context,chunk_ids,source_chunks_used,exam_count,correct_count,last_exam_time,page_numbers,content,status,reviewer_comment,created_at,updated_at,is_deleted FROM question WHERE (question_id = ?) ==> Parameters: 9d59e7c5-edfc-4517-9fb5-780b389b66fb(String) <== Columns: id, question_id, question_type, difficulty, tags, score, version, document_id, exclude_stems, knowledge_base_path, source_context, chunk_ids, source_chunks_used, exam_count, correct_count, last_exam_time, page_numbers, content, status, reviewer_comment, created_at, updated_at, is_deleted <== Row: 825, 9d59e7c5-edfc-4517-9fb5-780b389b66fb, single_choice, 3, <>, 2.00, 1.0, 80, 根据文档内容,谁是住宿登记的第一责任人?, null, <>, <>, 22, 0, 0, null, <>, <>, pending, <>, 2026-06-10 06:24:40, 2026-06-10 06:24:40, 0 <== Total: 1 Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7777103a] 2026-06-11 14:19:33 - 转换题目内容失败 com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "explanation" (class top.tqx.demo_1.dto.ExamGradeRequest$QuestionContent), not marked as ignorable (3 known properties: "stem", "data", "answer"]) at [Source: UNKNOWN; byte offset: #UNKNOWN] (through reference chain: top.tqx.demo_1.dto.ExamGradeRequest$QuestionContent["explanation"]) at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:61) at com.fasterxml.jackson.databind.DeserializationContext.handleUnknownProperty(DeserializationContext.java:1138) at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:2224) at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1719) at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1697) at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:320) at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177) at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323) at com.fasterxml.jackson.databind.ObjectMapper._readValue(ObjectMapper.java:4801) at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2974) at com.fasterxml.jackson.databind.ObjectMapper.treeToValue(ObjectMapper.java:3438) at top.tqx.demo_1.service.impl.ExamServiceImpl.gradeAnswersForRecord(ExamServiceImpl.java:490) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:354) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:392) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720) at top.tqx.demo_1.service.impl.ExamServiceImpl$$SpringCGLIB$$0.gradeAnswersForRecord() at top.tqx.demo_1.controller.ExamController.gradeAnswers(ExamController.java:330) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:354) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:89) at top.tqx.demo_1.aspect.LogAspect.around(LogAspect.java:43) at jdk.internal.reflect.GeneratedMethodAccessor191.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:637) at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:627) at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:71) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:768) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:720) at top.tqx.demo_1.controller.ExamController$$SpringCGLIB$$0.gradeAnswers() at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:175) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150) at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:175) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:175) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:175) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:175) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1736) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) at java.base/java.lang.Thread.run(Unknown Source) 2026-06-11 14:19:33 - 题目内容为空,已设置默认值: questionId=9d59e7c5-edfc-4517-9fb5-780b389b66fb 2026-06-11 14:19:33 - Service层:开始批改题目 2026-06-11 14:19:33 - Service层参数详情: 2026-06-11 14:19:33 - - userId: 1 2026-06-11 14:19:33 - - paperId: ff10df62-4fd4-4bc4-8f8b-4dfb348aae8b 2026-06-11 14:19:33 - - sessionId: null 2026-06-11 14:19:33 - - answerType: formal_exam 2026-06-11 14:19:33 - - 答案数量: 2 2026-06-11 14:19:33 - - AI服务地址: http://localhost:5001/exam/grade 2026-06-11 14:19:33 - Service层:准备发送请求到AI服务 2026-06-11 14:19:33 - 请求体内容: {"request_id":null,"paper_id":"ff10df62-4fd4-4bc4-8f8b-4dfb348aae8b","session_id":null,"record_id":"683de5c4-cce6-47b4-8518-a582dce02ca4","answer_type":"formal_exam","answers":[{"question_id":"ea6a7f44-9077-4f19-b10e-8239a5198f4d","question_type":"single_choice","question_content":{"stem":"","data":null,"answer":""},"student_answer":"B","max_score":2.00},{"question_id":"9d59e7c5-edfc-4517-9fb5-780b389b66fb","question_type":"single_choice","question_content":{"stem":"","data":null,"answer":""},"student_answer":"B","max_score":2.00}]} 2026-06-11 14:19:33 - 请求超时时间: 60000ms (60秒) 2026-06-11 14:19:33 - Service层:收到AI服务响应 2026-06-11 14:19:33 - 响应原始内容: {"data":{"request_id":null,"results":[{"correct":false,"feedback":"\u6b63\u786e\u7b54\u6848: ","max_score":2.0,"question_id":"ea6a7f44-9077-4f19-b10e-8239a5198f4d","score":0},{"correct":false,"feedback":"\u6b63\u786e\u7b54\u6848: ","max_score":2.0,"question_id":"9d59e7c5-edfc-4517-9fb5-780b389b66fb","score":0}],"score_rate":0.0,"success":true,"total_max_score":4.0,"total_score":0},"message":"\u6279\u9605\u5b8c\u6210","status":"success","status_code":2021,"success":true} 2026-06-11 14:19:33 - 开始解析 2 道题 2026-06-11 14:19:33 - 第 1 题 resultNode 内容: {"correct":false,"feedback":"正确答案: ","max_score":2.0,"question_id":"ea6a7f44-9077-4f19-b10e-8239a5198f4d","score":0} 2026-06-11 14:19:33 - resultNode 字段: false, 正确答案: , 2.0, ea6a7f44-9077-4f19-b10e-8239a5198f4d, 0 2026-06-11 14:19:33 - 读取到 question_id: ea6a7f44-9077-4f19-b10e-8239a5198f4d 2026-06-11 14:19:33 - 第 2 题 resultNode 内容: {"correct":false,"feedback":"正确答案: ","max_score":2.0,"question_id":"9d59e7c5-edfc-4517-9fb5-780b389b66fb","score":0} 2026-06-11 14:19:33 - resultNode 字段: false, 正确答案: , 2.0, 9d59e7c5-edfc-4517-9fb5-780b389b66fb, 0 2026-06-11 14:19:33 - 读取到 question_id: 9d59e7c5-edfc-4517-9fb5-780b389b66fb 2026-06-11 14:19:33 - 从请求中补全 question_type: single_choice 2026-06-11 14:19:33 - 从请求中补全 question_type: single_choice 2026-06-11 14:19:33 - 处理第 1 题, 类型: single_choice, grading_status: null 2026-06-11 14:19:33 - 处理第 2 题, 类型: single_choice, grading_status: null 2026-06-11 14:19:33 - Service层:AI服务批改完成 2026-06-11 14:19:33 - 批改结果: success=true, totalScore=0, totalMaxScore=4.0, scoreRate=0.0 2026-06-11 14:19:33 - 各题目批改结果: 2026-06-11 14:19:33 - 题目1(ea6a7f44-9077-4f19-b10e-8239a5198f4d): correct=false, score=0/2.0, feedback=正确答案: 2026-06-11 14:19:33 - 题目2(9d59e7c5-edfc-4517-9fb5-780b389b66fb): correct=false, score=0/2.0, feedback=正确答案: Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7777103a] from current transaction ==> Preparing: UPDATE exam_record SET record_id=?, paper_id=?, answer_type=?, user_id=?, status=?, total_score=?, submit_time=?, graded_time=?, time_spent=?, start_time=?, last_active_time=?, created_at=?, updated_at=? WHERE id=? ==> Parameters: 683de5c4-cce6-47b4-8518-a582dce02ca4(String), ff10df62-4fd4-4bc4-8f8b-4dfb348aae8b(String), formal_exam(String), 1(Long), graded(String), 0(BigDecimal), 2026-06-11T14:19:33.301970170(LocalDateTime), 2026-06-11T14:19:33.301977884(LocalDateTime), 444(Integer), 2026-06-11T14:12:09(LocalDateTime), 2026-06-11T14:12:09(LocalDateTime), 2026-06-11T14:12:04(LocalDateTime), 2026-06-11T14:19:33.302076352(LocalDateTime), 263(Long) <== Updates: 1 Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7777103a] Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7777103a] from current transaction ==> Preparing: INSERT INTO user_answer ( user_id, question_id, question_type, answer_type, paper_id, user_answer, score, max_score, is_correct, grading_type, feedback, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) ==> Parameters: 1(Long), ea6a7f44-9077-4f19-b10e-8239a5198f4d(String), single_choice(String), formal_exam(String), ff10df62-4fd4-4bc4-8f8b-4dfb348aae8b(String), "B"(String), 0(BigDecimal), 2.0(BigDecimal), 0(Integer), ai(String), 正确答案: (String), 2026-06-11T14:19:33.309541700(LocalDateTime), 2026-06-11T14:19:33.309554819(LocalDateTime) <== Updates: 1 Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7777103a] Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7777103a] from current transaction ==> Preparing: INSERT INTO user_answer ( user_id, question_id, question_type, answer_type, paper_id, user_answer, score, max_score, is_correct, grading_type, feedback, created_at, updated_at ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) ==> Parameters: 1(Long), 9d59e7c5-edfc-4517-9fb5-780b389b66fb(String), single_choice(String), formal_exam(String), ff10df62-4fd4-4bc4-8f8b-4dfb348aae8b(String), "B"(String), 0(BigDecimal), 2.0(BigDecimal), 0(Integer), ai(String), 正确答案: (String), 2026-06-11T14:19:33.315830690(LocalDateTime), 2026-06-11T14:19:33.315839473(LocalDateTime) <== Updates: 1 Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7777103a] 2026-06-11 14:19:33 - 保存了2条考试答题记录 2026-06-11 14:19:33 - gradeAnswersForRecord 完成,总分: 0 Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7777103a] Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7777103a] Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7777103a] 2026-06-11 14:19:33 - 正式考试批阅成功: recordId=683de5c4-cce6-47b4-8518-a582dce02ca4 2026-06-11 14:19:33 - 响应 | 耗时: 103ms g.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:255) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:188) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:926) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:831) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:979) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:175) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150) at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:175) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:175) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:175) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:175) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:150) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) at org.apache.catalina.connector.CoyoteAd