فهرست منبع

fix(quiz): 错题重做答题类型修正为4、导出userId防科学计数法、高频错题导出加正确答案列

hechuanqi 2 روز پیش
والد
کامیت
1a5ccd72db

+ 14 - 3
zhijiayun-quiz/src/main/java/com/xuekairui/quiz/service/impl/QuizTrackServiceImpl.java

@@ -204,6 +204,7 @@ public class QuizTrackServiceImpl extends ServiceImpl<QuizTrackLogMapper, QuizTr
         long total = userRecordMapper.selectCount(wrapper);
 
         // 去重汇总统计(同一道题只算一次,与排行榜口径一致)
+        // 注意:不在SQL层排序,避免大JSON字段排序导致MySQL sort memory溢出,改为Java内存排序
         List<QuizUserRecord> allRecordsForSummary = userRecordMapper.selectList(
                 new LambdaQueryWrapper<QuizUserRecord>()
                         .eq(subjectId != null, QuizUserRecord::getSubjectId, subjectId)
@@ -211,8 +212,15 @@ public class QuizTrackServiceImpl extends ServiceImpl<QuizTrackLogMapper, QuizTr
                         .eq(completeStatus != null, QuizUserRecord::getStatus, completeStatus)
                         .ge(QuizUserRecord::getCreateTime, timeRange[0])
                         .le(QuizUserRecord::getCreateTime, timeRange[1])
-                        .orderByDesc(QuizUserRecord::getCreateTime)
         );
+        allRecordsForSummary.sort((a, b) -> {
+            LocalDateTime ta = a.getCreateTime();
+            LocalDateTime tb = b.getCreateTime();
+            if (ta == null && tb == null) return 0;
+            if (ta == null) return 1;
+            if (tb == null) return -1;
+            return tb.compareTo(ta);
+        });
         Map<Long, Integer> summaryLatestMap = QuizDedupUtils.extractLatestAnswerMap(allRecordsForSummary);
         int summaryTotalCount = summaryLatestMap.size();
         int summaryCorrectCount = 0;
@@ -492,6 +500,7 @@ public class QuizTrackServiceImpl extends ServiceImpl<QuizTrackLogMapper, QuizTr
             case 1 -> "章节练习";
             case 2 -> "每日一练";
             case 3 -> "真题模考";
+            case 4 -> "错题重做";
             case 99 -> "收藏";
             default -> "未知(" + answerType + ")";
         };
@@ -521,7 +530,8 @@ public class QuizTrackServiceImpl extends ServiceImpl<QuizTrackLogMapper, QuizTr
         List<List<Object>> data = new ArrayList<>();
         for (Map<String, Object> item : list) {
             List<Object> row = new ArrayList<>();
-            row.add(item.get("userId"));
+            Object userId = item.get("userId");
+            row.add(userId != null ? userId.toString() : "");
             row.add(item.get("nickname"));
             row.add(item.get("phone"));
             row.add(item.get("totalAnswerCount"));
@@ -549,7 +559,8 @@ public class QuizTrackServiceImpl extends ServiceImpl<QuizTrackLogMapper, QuizTr
         List<List<Object>> data = new ArrayList<>();
         for (Map<String, Object> item : list) {
             List<Object> row = new ArrayList<>();
-            row.add(item.get("userId"));
+            Object userId = item.get("userId");
+            row.add(userId != null ? userId.toString() : "");
             row.add(item.get("answerTypeName"));
             row.add(item.get("subjectName"));
             row.add(item.get("totalCount"));

+ 1 - 1
zhijiayun-quiz/src/main/java/com/xuekairui/quiz/service/impl/StudyBookServiceImpl.java

@@ -291,7 +291,7 @@ public class StudyBookServiceImpl implements StudyBookService {
             QuizUserRecord record = QuizUserRecord.builder()
                     .userId(userId)
                     .subjectId(subjectId)
-                    .answerType(3)
+                    .answerType(4)
                     .totalCount(total)
                     .correctCount(correctCount)
                     .wrongCount(wrongCount)