@ -143,7 +143,8 @@ public class ExamService {
public Map < String , Object > teacherExam ( JwtUser teacher , long id ) {
public Map < String , Object > teacherExam ( JwtUser teacher , long id ) {
requireTeacher ( teacher ) ; autoSubmitExpired ( ) ;
requireTeacher ( teacher ) ; autoSubmitExpired ( ) ;
Map < String , Object > result = ownedExam ( teacher , id ) ;
Map < String , Object > result = ownedExam ( teacher , id ) ;
result . put ( "classes" , jdbc . query ( "select c.teaching_class_id id,s.class_name name from exam_assessment_class c join school_class s on s.school_class_id=c.teaching_class_id where c.exam_id=?" ,
// exam_* 表为 utf8mb4_unicode_ci, 遗留表 school_class/userinfo 沿用各自建表时的排序规则,列对列比较必须显式 COLLATE, 否则报 1267。
result . put ( "classes" , jdbc . query ( "select c.teaching_class_id id,s.class_name name from exam_assessment_class c join school_class s on s.school_class_id=c.teaching_class_id collate utf8mb4_0900_ai_ci where c.exam_id=?" ,
( rs , n ) - > map ( "id" , rs . getString ( "id" ) , "name" , rs . getString ( "name" ) ) , id ) ) ;
( rs , n ) - > map ( "id" , rs . getString ( "id" ) , "name" , rs . getString ( "name" ) ) , id ) ) ;
result . put ( "questions" , examQuestions ( id , true ) ) ;
result . put ( "questions" , examQuestions ( id , true ) ) ;
return result ;
return result ;
@ -237,7 +238,8 @@ public class ExamService {
Map < String , Object > exam = ownedExam ( teacher , examId ) ; autoSubmitExpired ( ) ;
Map < String , Object > exam = ownedExam ( teacher , examId ) ; autoSubmitExpired ( ) ;
boolean running = "IN_PROGRESS" . equals ( exam . get ( "status" ) ) ;
boolean running = "IN_PROGRESS" . equals ( exam . get ( "status" ) ) ;
return jdbc . query ( "select a.id attempt_id,a.student_id,a.teaching_class_id,c.class_name,u.name,u.username,a.attempt_status,a.objective_score,a.subjective_score,a.total_score,a.submitted_at " +
return jdbc . query ( "select a.id attempt_id,a.student_id,a.teaching_class_id,c.class_name,u.name,u.username,a.attempt_status,a.objective_score,a.subjective_score,a.total_score,a.submitted_at " +
"from exam_attempt a join userinfo u on u.user_id=a.student_id join school_class c on c.school_class_id=a.teaching_class_id " +
"from exam_attempt a join userinfo u on u.user_id=a.student_id collate utf8mb4_general_ci " +
"join school_class c on c.school_class_id=a.teaching_class_id collate utf8mb4_0900_ai_ci " +
"where a.exam_id=?" + ( running ? "" : " and a.attempt_status='SUBMITTED'" ) +
"where a.exam_id=?" + ( running ? "" : " and a.attempt_status='SUBMITTED'" ) +
" order by case when a.attempt_status='SUBMITTED' then 0 else 1 end,a.submitted_at,u.username" ,
" order by case when a.attempt_status='SUBMITTED' then 0 else 1 end,a.submitted_at,u.username" ,
( rs , n ) - > map ( "attemptId" , rs . getLong ( "attempt_id" ) , "studentId" , rs . getString ( "student_id" ) , "classId" , rs . getString ( "teaching_class_id" ) ,
( rs , n ) - > map ( "attemptId" , rs . getLong ( "attempt_id" ) , "studentId" , rs . getString ( "student_id" ) , "classId" , rs . getString ( "teaching_class_id" ) ,