From 43141e97d3303dbc1dafc1dc4e6f6f6555fe9610 Mon Sep 17 00:00:00 2001
From: hjl <1657978663@qq.com>
Date: 星期三, 17 七月 2024 16:49:42 +0800
Subject: [PATCH] fix: 学习端bug

---
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStudyServiceImpl.java |  130 +++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 125 insertions(+), 5 deletions(-)

diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStudyServiceImpl.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStudyServiceImpl.java
index 80945a6..24caf4c 100644
--- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStudyServiceImpl.java
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStudyServiceImpl.java
@@ -158,7 +158,7 @@
             // 自主故事 - 看图配音
             total += storyListenList.stream().map(TStoryListen::getLookIntegral).mapToInt(Integer::intValue).sum();
             // 判断周目是否可以进入学习
-            Boolean canStudy = checkWeekCanStudy(userId, item);
+            Boolean canStudy = checkWeekCanStudy(userId, item, week);
             result.add(new StudyWeekDTO(week, type, quarter, title, total, canStudy));
         }
         return result;
@@ -248,10 +248,16 @@
 
     /**
      * @param userId 用户id
+     * @param week   该季度下的周目
      * @return 当前周目是否学习
      */
-    private Boolean checkWeekCanStudy(Integer userId, TStudy study) {
-        TUserStudy userStudy = userStudyService.lambdaQuery().eq(TUserStudy::getUserId, userId)
+    private Boolean checkWeekCanStudyNew(Integer userId, TStudy study, Integer week) {
+        // 剩余周目
+        List<TStudy> studyList = this.lambdaQuery().eq(TStudy::getDisabled, 0)
+                .eq(TStudy::getType, Constants.ONE)
+                .orderByAsc(TStudy::getWeek).list();
+        TUserStudy userStudy = userStudyService.lambdaQuery()
+                .eq(TUserStudy::getUserId, userId)
                 .eq(TUserStudy::getDisabled, 0).one();
         if (null == userStudy) {
             userStudy = new TUserStudy();
@@ -272,8 +278,122 @@
             userStudy.setPair(Constants.BURDEN_ONE);
             userStudyService.save(userStudy);
         }
-        // 学习记录所属周目大于当前学习周目,判断为已学习
-        return userStudy.getWeek() >= study.getWeek();
+        // 获取当前学习周目为哪一个季度
+        TStudy studyQuarterVo = this.lambdaQuery()
+                .eq(TStudy::getWeek, userStudy.getWeek())
+                .eq(TStudy::getDisabled, 0).one();
+        // 已学习到的周目
+        Integer studyWeek = userStudy.getWeek();
+        // 学习到的季度
+        Integer studyQuarter = studyQuarterVo.getQuarter();
+        // 当前所点击进入的周目所属季度
+        Integer currentQuarter = 1;
+        // 根据季度分组封装
+        Map<Integer, List<TStudy>> integerListMap = getIntegerListMap(studyList);
+        for (Map.Entry<Integer, List<TStudy>> map : integerListMap.entrySet()) {
+            List<TStudy> list = map.getValue();
+//            for (TStudy data : list) {
+//                Integer itemWeek = data.getWeek();
+//                if (studyWeek.equals(itemWeek)) {
+//                    studyQuarter = map.getKey();
+//                    break;
+//                }
+//            }
+            for (TStudy data : list) {
+                Integer itemWeek = data.getWeek();
+                if (week.equals(itemWeek)) {
+                    currentQuarter = map.getKey();
+                    break;
+                }
+            }
+        }
+        // 已学习季度 大于当前周目所属季度,所有学习均已完成
+        if (studyQuarter > currentQuarter) {
+            return Boolean.TRUE;
+        } else if (studyQuarter < currentQuarter) {
+            return Boolean.FALSE;
+        } else {
+            List<TStudy> tStudies = integerListMap.get(studyQuarter);
+            List<Integer> weekList = tStudies.stream().map(TStudy::getWeek).collect(Collectors.toList());
+            int i = weekList.indexOf(studyWeek);
+            int i1 = weekList.indexOf(week);
+            if (i >= i1) {
+                return Boolean.TRUE;
+            } else {
+                return Boolean.FALSE;
+            }
+        }
+    }
+
+    /**
+     * @param userId 用户id
+     * @return 当前周目是否学习
+     */
+    private Boolean checkWeekCanStudy(Integer userId, TStudy study, Integer week) {
+        // 剩余周目
+        List<TStudy> studyList = this.lambdaQuery().eq(TStudy::getDisabled, 0)
+                .eq(TStudy::getType, Constants.ONE)
+                .orderByAsc(TStudy::getWeek).list();
+        TUserStudy userStudy = userStudyService.lambdaQuery()
+                .eq(TUserStudy::getUserId, userId)
+                .eq(TUserStudy::getDisabled, 0).one();
+        if (null == userStudy) {
+            userStudy = new TUserStudy();
+            userStudy.setUserId(userId);
+            // 学习周目
+            TStudy tStudy = this.lambdaQuery().eq(TStudy::getQuarter, Constants.ONE)
+                    .orderByAsc(TStudy::getWeek).last("limit 1").one();
+            userStudy.setWeek(tStudy.getWeek());
+            userStudy.setDay(Constants.ONE);
+            userStudy.setTotalStudy(Constants.ZERO);
+            userStudy.setTodayStudy(Constants.ZERO);
+            userStudy.setWeekStudy(Constants.ZERO);
+            userStudy.setMonthStudy(Constants.ZERO);
+            userStudy.setListen(Constants.BURDEN_ONE);
+            userStudy.setLook(Constants.BURDEN_ONE);
+            userStudy.setInduction(Constants.BURDEN_ONE);
+            userStudy.setAnswer(Constants.BURDEN_ONE);
+            userStudy.setPair(Constants.BURDEN_ONE);
+            userStudyService.save(userStudy);
+        }
+        // 获取当前学习周目为哪一个季度
+        TStudy studyQuarterVo = this.lambdaQuery()
+                .eq(TStudy::getWeek, userStudy.getWeek())
+                .eq(TStudy::getDisabled, 0).one();
+        // 已学习到的周目
+        Integer studyWeek = userStudy.getWeek();
+        // 学习到的季度
+        Integer studyQuarter = studyQuarterVo.getQuarter();
+        // 当前所点击进入的周目所属季度
+        Integer currentQuarter = 1;
+        // 根据季度分组封装
+        Map<Integer, List<TStudy>> integerListMap = getIntegerListMap(studyList);
+        for (Map.Entry<Integer, List<TStudy>> map : integerListMap.entrySet()) {
+            List<TStudy> list = map.getValue();
+            for (TStudy data : list) {
+                Integer itemWeek = data.getWeek();
+                if (week.equals(itemWeek)) {
+                    currentQuarter = map.getKey();
+                    break;
+                }
+            }
+        }
+        // 已学习季度 大于当前周目所属季度,所有学习均已完成
+        if (studyQuarter > currentQuarter) {
+            return Boolean.TRUE;
+        } else if (studyQuarter < currentQuarter) {
+            return Boolean.FALSE;
+        } else {
+            List<TStudy> tStudies = integerListMap.get(studyQuarter);
+            List<Integer> weekList = tStudies.stream().map(TStudy::getWeek).collect(Collectors.toList());
+            int i = weekList.indexOf(studyWeek);
+            int i1 = weekList.indexOf(week);
+            if (i >= i1) {
+                return Boolean.TRUE;
+            } else {
+                return Boolean.FALSE;
+            }
+        }
     }
 
     @Override

--
Gitblit v1.7.1