From 770de42c8bbb10676663f33e2748c733c993d27b Mon Sep 17 00:00:00 2001
From: hjl <1657978663@qq.com>
Date: 星期四, 20 六月 2024 15:28:42 +0800
Subject: [PATCH] fix: 学习端bug

---
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserStudyServiceImpl.java |  112 ++++++++++++++++++++++++++++++++------------------------
 1 files changed, 64 insertions(+), 48 deletions(-)

diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserStudyServiceImpl.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserStudyServiceImpl.java
index 24cfed5..0170754 100644
--- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserStudyServiceImpl.java
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserStudyServiceImpl.java
@@ -13,6 +13,7 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -88,43 +89,39 @@
     }
 
     @Override
-    public Boolean exchangeStudyRecord(List<TStudy> studyList, Integer userId, CompleteStudyDTO completeStudy) {
+    public Boolean exchangeStudyRecord(TUserStudy userStudyRecord, Integer userId, CompleteStudyDTO completeStudy) {
         Integer studyTime = completeStudy.getStudyTime();
         // 学习记录
-        TUserStudy userStudyRecord = lambdaQuery().eq(TUserStudy::getUserId, userId)
-                .eq(TUserStudy::getDisabled, 0).one();
-        Integer type = completeStudy.getType();
-        if (Constants.ONE.equals(type)) {
-            userStudyRecord.setListen(Constants.ONE_HUNDRED);
-            userStudyRecord.setLook(Constants.BURDEN_ONE);
-            userStudyRecord.setInduction(Constants.BURDEN_ONE);
-            userStudyRecord.setAnswer(Constants.BURDEN_ONE);
-            userStudyRecord.setPair(Constants.BURDEN_ONE);
-        } else if (Constants.TWO.equals(type)) {
-            userStudyRecord.setLook(Constants.ONE_HUNDRED);
-            userStudyRecord.setInduction(Constants.BURDEN_ONE);
-            userStudyRecord.setAnswer(Constants.BURDEN_ONE);
-            userStudyRecord.setPair(Constants.BURDEN_ONE);
-        } else if (Constants.THREE.equals(type)) {
-            userStudyRecord.setInduction(Constants.ONE_HUNDRED);
-            userStudyRecord.setAnswer(Constants.BURDEN_ONE);
-            userStudyRecord.setPair(Constants.BURDEN_ONE);
-        } else if (Constants.FOUR.equals(type)) {
-            userStudyRecord.setAnswer(Constants.ONE_HUNDRED);
-        } else if (Constants.FIVE.equals(type)) {
-            userStudyRecord.setPair(Constants.ONE_HUNDRED);
-            // type为5并且day为5应该进入游戏日
-            Integer nextDay = DAY_MAP.get(String.valueOf(userStudyRecord.getDay()));
-            userStudyRecord.setDay(nextDay);
-            // 游戏难度初始化 0(入门难度)
-            userStudyRecord.setGameDifficulty(Constants.ZERO);
-            // 学习day已切换更新学习进度及学习时长
-//            userStudyRecord.setListen(Constants.BURDEN_ONE);
-//            userStudyRecord.setLook(Constants.BURDEN_ONE);
-//            userStudyRecord.setInduction(Constants.BURDEN_ONE);
-//            userStudyRecord.setAnswer(Constants.BURDEN_ONE);
-//            userStudyRecord.setPair(Constants.BURDEN_ONE);
-            // 下一day为 1说明该周目已完成,应更改为下一周目
+        Integer week = userStudyRecord.getWeek();
+        Integer day = userStudyRecord.getDay();
+        if (week.equals(completeStudy.getWeek()) && day.equals(completeStudy.getDay())) {
+            Integer type = completeStudy.getType();
+            if (Constants.ONE.equals(type)) {
+                userStudyRecord.setListen(Constants.ONE_HUNDRED);
+                userStudyRecord.setLook(Constants.BURDEN_ONE);
+                userStudyRecord.setInduction(Constants.BURDEN_ONE);
+                userStudyRecord.setAnswer(Constants.BURDEN_ONE);
+                userStudyRecord.setPair(Constants.BURDEN_ONE);
+            } else if (Constants.TWO.equals(type)) {
+                userStudyRecord.setLook(Constants.ONE_HUNDRED);
+                userStudyRecord.setInduction(Constants.BURDEN_ONE);
+                userStudyRecord.setAnswer(Constants.BURDEN_ONE);
+                userStudyRecord.setPair(Constants.BURDEN_ONE);
+            } else if (Constants.THREE.equals(type)) {
+                userStudyRecord.setInduction(Constants.ONE_HUNDRED);
+                userStudyRecord.setAnswer(Constants.BURDEN_ONE);
+                userStudyRecord.setPair(Constants.BURDEN_ONE);
+            } else if (Constants.FOUR.equals(type)) {
+                userStudyRecord.setAnswer(Constants.ONE_HUNDRED);
+                userStudyRecord.setPair(Constants.BURDEN_ONE);
+            } else if (Constants.FIVE.equals(type)) {
+                userStudyRecord.setPair(Constants.ONE_HUNDRED);
+                // type为5并且day为5应该进入游戏日
+                Integer nextDay = DAY_MAP.get(String.valueOf(userStudyRecord.getDay()));
+                userStudyRecord.setDay(nextDay);
+                // 游戏难度初始化 0(入门难度)
+                userStudyRecord.setGameDifficulty(Constants.ZERO);
+            }
         }
         // 更新学习时长
         userStudyRecord.setTotalStudy(userStudyRecord.getTotalStudy() + studyTime);
@@ -138,25 +135,44 @@
     @Override
     public void checkRate(TGame game, Integer userid, CompleteGameDTO completeStudy, List<TStudy> studyList) {
         String answerRate = game.getAnswerRate();
+        // 下一周目逻辑
+        int quarterItem = 1;
+        Map<Integer, List<TStudy>> studyMap = new HashMap<>(8);
+        for (TStudy study : studyList) {
+            Integer quarter = study.getQuarter();
+            List<TStudy> itemList = studyMap.get(quarter);
+            if (null == itemList) {
+                itemList = new ArrayList<>();
+            }
+            itemList.add(study);
+            studyMap.put(quarter, itemList);
+            // 记录学习季度
+            if (study.getId().equals(game.getStudyId())) {
+                quarterItem = quarter;
+            }
+        }
+        // 获取当前季度所有周目
+        List<TStudy> studyList1 = studyMap.get(quarterItem);
         // 正确率达到通关率
         if (completeStudy.getAccuracy() >= Integer.parseInt(answerRate)) {
             // 获取用户超级记忆游戏记录
             TUserStudy userStudy = this.lambdaQuery().eq(TUserStudy::getUserId, userid).one();
-            Integer nextDay = DAY_MAP.get(String.valueOf(userStudy.getDay()));
-            userStudy.setDay(nextDay);
-            if (Constants.ONE.equals(nextDay)) {
-                // 获取下一周目信息
-                int index = -1;
-                for (int i = 0; i < studyList.size(); i++) {
-                    if (studyList.get(i).getWeek().equals(userStudy.getWeek())) {
-                        index = i;
-                        break;
+            for (int i = 0; i < studyList1.size(); i++) {
+                TStudy tStudy = studyList1.get(i);
+                if (tStudy.getWeek().equals(userStudy.getWeek())) {
+                    // 是否为当前季度最后一周目
+                    if (i + 1 == studyList1.size() - 1) {
+                        List<TStudy> studyList2 = studyMap.get(quarterItem + 1);
+                        // 下一季度数据为空
+                        if (null != studyList2 && !studyList2.isEmpty()) {
+                            TStudy tStudy1 = studyList2.get(Constants.ZERO);
+                            tStudy.setWeek(tStudy1.getWeek());
+                        }
+                    } else {
+                        TStudy tStudy1 = studyList1.get(i + 1);
+                        userStudy.setWeek(tStudy1.getWeek());
                     }
                 }
-                int nextIndex = (index + 1) % studyList.size();
-                TStudy nextStudy = studyList.get(nextIndex);
-                // 更新学习进度及学习时长
-                userStudy.setWeek(nextStudy.getWeek());
             }
             this.updateById(userStudy);
         }

--
Gitblit v1.7.1