From 0287a322e16580901ddb8e781df9da616f4751f9 Mon Sep 17 00:00:00 2001
From: hjl <1657978663@qq.com>
Date: 星期一, 08 七月 2024 09:00:34 +0800
Subject: [PATCH] fix: 学习端bug

---
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java |  158 ++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 114 insertions(+), 44 deletions(-)

diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java
index b2385ee..6993cdb 100644
--- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java
@@ -740,6 +740,27 @@
             Integer totalStudy = studyRecord.getTotalStudy();
             studyRecord.setTotalStudy(Math.round((float) (totalStudy + sum) / 3600));
             studyRecord = studyService.studySchedule(studyRecord, week);
+            // 数据库保存的是已完成的学习进度,返回前端时需要转换为剩余学习进度
+            Integer look = studyRecord.getLook();
+            if (look != 100 && look != -1) {
+                studyRecord.setLook(100 - look);
+            }
+            Integer pair = studyRecord.getPair();
+            if (pair != 100 && pair != -1) {
+                studyRecord.setPair(100 - pair);
+            }
+            Integer answer = studyRecord.getAnswer();
+            if (answer != 100 && answer != -1) {
+                studyRecord.setAnswer(100 - answer);
+            }
+            Integer induction = studyRecord.getInduction();
+            if (induction != 100 && induction != -1) {
+                studyRecord.setInduction(100 - induction);
+            }
+            Integer listen = studyRecord.getListen();
+            if (listen != 100 && listen != -1) {
+                studyRecord.setListen(100 - listen);
+            }
         }
         return R.ok(studyRecord);
     }
@@ -862,15 +883,13 @@
         // 返回结果
         SubjectRecordResultVO result;
         if (null != subjectRecord) {
-            subjectRecordService.lambdaUpdate().set(TSubjectRecord::getDisabled, 1)
-                    .eq(TSubjectRecord::getId, subjectRecord.getId()).update();
-            // 题组id
+            /*// 题组id
             List<Integer> teamIds = Arrays.stream(subjectRecord.getBeforeSubject().split(",")).map(Integer::parseInt)
                     .collect(Collectors.toList());
             // 题目id
             List<Integer> topicIds = Arrays.stream(subjectRecord.getCompleteSubject().split(",")).map(Integer::parseInt)
-                    .collect(Collectors.toList());
-            result = new SubjectRecordResultVO(teamIds, topicIds, subjectRecord.getAnswerNumber(), subjectRecord.getCorrectNumber());
+                    .collect(Collectors.toList());*/
+            result = new SubjectRecordResultVO(null, null, subjectRecord.getAnswerNumber(), subjectRecord.getCorrectNumber(), subjectRecord.getSchedule());
         } else {
             result = null;
         }
@@ -887,7 +906,18 @@
         if (null == loginStudy) {
             return R.tokenError("登录失效!");
         }
+        // 退出学习如果已经存在中途学习记录,则删除记录,保存新学习记录
         Integer userid = loginStudy.getUserid();
+        TSubjectRecord subjectRecord = subjectRecordService.lambdaQuery()
+                .eq(TSubjectRecord::getUserId, userid)
+                .eq(TSubjectRecord::getWeek, exitLearn.getWeek())
+                .eq(TSubjectRecord::getDay, exitLearn.getDay())
+                .eq(TSubjectRecord::getType, exitLearn.getType())
+                .eq(TSubjectRecord::getDisabled, 0)
+                .one();
+        if (null != subjectRecord) {
+            subjectRecordService.removeById(subjectRecord);
+        }
         // 判断当前week和day是否已完成学习
         TUserStudy userStudy = userStudyService.lambdaQuery().eq(TUserStudy::getUserId, userid)
                 .eq(TUserStudy::getDisabled, 0).one();
@@ -897,60 +927,82 @@
         Integer quarter = exitLearn.getQuarter();
         Integer week = exitLearn.getWeek();
         Integer day = exitLearn.getDay();
-        int schedule = exitLearn.getSchedule() == null ? 0 : exitLearn.getSchedule();
+        int schedule = exitLearn.getSchedule() - 1;
         if (userStudy.getWeek().equals(exitLearn.getWeek()) && userStudy.getDay().equals(exitLearn.getDay())) {
             // 计算完成率
             Integer type = exitLearn.getType();
             // 更新用户学习完成率
             if (Constants.ONE.equals(type)) {
-                // 听音选图
-                List<TStudyListen> studyListens = studyListenService.listenSelectPicture(quarter, week, day);
-                int item = 0;
-                for (TStudyListen studyListen : studyListens) {
-                    item += studyListen.getSubject().split(",").length;
-                }
-                int i = (int) (((double) schedule / item) * 100);
-                if (i > userStudy.getListen()) {
-                    userStudy.setListen(i);
+                if (1 == exitLearn.getSchedule()) {
+                    userStudy.setListen(Constants.BURDEN_ONE);
+                } else {
+                    // 听音选图
+                    List<TStudyListen> studyListens = studyListenService.listenSelectPicture(quarter, week, day);
+                    int item = 0;
+                    for (TStudyListen studyListen : studyListens) {
+                        item += studyListen.getSubject().split(",").length;
+                    }
+                    int i = (int) (((double) schedule / item) * 100);
+                    if (i > userStudy.getListen()) {
+                        userStudy.setListen(i);
+                    }
                 }
             } else if (Constants.TWO.equals(type)) {
-                // 看图选音
-                List<TStudyLook> lookList = studyLookService.pictureSelectVoice(quarter, week, day);
-                int item = 0;
-                for (TStudyLook studyLook : lookList) {
-                    item += studyLook.getSubject().split(",").length;
-                }
-                int i = (int) (((double) schedule / item) * 100);
-                if (i > userStudy.getLook()) {
-                    userStudy.setLook(i);
+                if (1 == exitLearn.getSchedule()) {
+                    userStudy.setLook(Constants.BURDEN_ONE);
+                } else {
+                    // 看图选音
+                    List<TStudyLook> lookList = studyLookService.pictureSelectVoice(quarter, week, day);
+                    if (!lookList.isEmpty()) {
+                        int item = lookList.size();
+                        int i = (int) (((double) schedule / item) * 100);
+                        if (i > userStudy.getLook()) {
+                            userStudy.setLook(i);
+                        }
+                    }
                 }
             } else if (Constants.THREE.equals(type)) {
-                // 归纳排除
-                List<TStudyInduction> inductionList = studyInductionService.induceExclude(quarter, week, day);
-                if (!inductionList.isEmpty()) {
-                    int item = inductionList.size();
-                    int i = (int) (((double) schedule / item) * 100);
-                    if (i > userStudy.getInduction()) {
-                        userStudy.setInduction(i);
+                if (1 == exitLearn.getSchedule()) {
+                    userStudy.setInduction(Constants.BURDEN_ONE);
+                } else {
+                    // 归纳排除
+                    List<TStudyInduction> inductionList = studyInductionService.induceExclude(quarter, week, day);
+                    if (!inductionList.isEmpty()) {
+                        int item = inductionList.size();
+                        int i = (int) (((double) schedule / item) * 100);
+                        if (i > userStudy.getInduction()) {
+                            userStudy.setInduction(i);
+                        }
                     }
                 }
             } else if (Constants.FOUR.equals(type)) {
-                // 有问有答
-                List<TStudyAnswer> answerList = studyAnswerService.questionsAndAnswers(quarter, week, day);
-                if (answerList.size() % Constants.TWO == Constants.ZERO) {
-                    int i = (int) (((double) schedule / (answerList.size() / 2)) * 100);
-                    if (i > userStudy.getAnswer()) {
-                        userStudy.setAnswer(i);
+                if (1 == exitLearn.getSchedule()) {
+                    userStudy.setAnswer(Constants.BURDEN_ONE);
+                } else {
+                    // 有问有答
+                    List<TStudyAnswer> answerList = studyAnswerService.questionsAndAnswers(quarter, week, day);
+                    if (answerList.size() % Constants.TWO == Constants.ZERO) {
+                        int i = (int) (((double) schedule / (answerList.size() / 2)) * 100);
+                        if (i > userStudy.getAnswer()) {
+                            userStudy.setAnswer(i);
+                        }
                     }
                 }
             } else if (Constants.FIVE.equals(type)) {
-                // 音图相配
-                List<TStudyPair> pairList = studyPairService.pictureMateVoice(quarter, week, day);
-                int item = pairList.size();
-                int i = (int) (((double) schedule / item) * 100);
-                if (i > userStudy.getPair()) {
-                    userStudy.setPair(i);
+                if (1 == exitLearn.getSchedule()) {
+                    userStudy.setPair(Constants.BURDEN_ONE);
+                } else {
+                    // 音图相配
+                    List<TStudyPair> pairList = studyPairService.pictureMateVoice(quarter, week, day);
+                    if (!pairList.isEmpty()) {
+                        int item = pairList.size();
+                        int i = (int) (((double) schedule / item) * 100);
+                        if (i > userStudy.getPair()) {
+                            userStudy.setPair(i);
+                        }
+                    }
                 }
+
             }
         }
         // 学习时长更新
@@ -1157,7 +1209,18 @@
         // 登录用户id
         Integer userId = userStudy.getUserid();
         // 判断是否已完成该题组
-        boolean update = true;
+        boolean update;
+        // 清除中途退出记录
+        TSubjectRecord subjectRecord = subjectRecordService.lambdaQuery()
+                .eq(TSubjectRecord::getUserId, userId)
+                .eq(TSubjectRecord::getWeek, completeStudy.getWeek())
+                .eq(TSubjectRecord::getDay, completeStudy.getDay())
+                .eq(TSubjectRecord::getType, completeStudy.getType())
+                .eq(TSubjectRecord::getDisabled, 0)
+                .one();
+        if (null != subjectRecord) {
+            subjectRecordService.removeById(subjectRecord);
+        }
         List<String> studyIds = Arrays.stream(completeStudy.getStudyIds().split(","))
                 .collect(Collectors.toList());
         Integer type = completeStudy.getType();
@@ -1398,6 +1461,10 @@
         } else {
             throw new GlobalException("该次游戏积分计算异常!");
         }
+        Integer accuracy = completeStudy.getAccuracy();
+        if (accuracy >= 100) {
+            accuracy = 100;
+        }
         int gameAvailableIntegral = (int) (integral * ((double) completeStudy.getAccuracy() / 100));
         Integer availableIntegral = gameService.countIntegral(userid, game, completeStudy, gameAvailableIntegral, integralRecordList);
         // 游戏测试记录
@@ -1585,6 +1652,9 @@
             if (null == accuracy) {
                 throw new GlobalException("自主故事-看图配音正确率异常!");
             }
+            if (accuracy >= 100) {
+                accuracy = 100;
+            }
             // 看图配音模式,也需要根据游戏正确率计算积分
             double d = (double) accuracy / 100;
             int integral = (int) (storyListen.getLookIntegral() * d);

--
Gitblit v1.7.1