fix: handle exam query collation differences

bugfix/ai-assessment-evidence-rescore
chenyuan 2 weeks ago
parent 3af6320739
commit b658fabc79

@ -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"),

Loading…
Cancel
Save