From 9ee310626ef0f52dfb0f333783de679180092251 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期五, 19 七月 2024 11:11:41 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/DolphinEnglish

---
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStudyServiceImpl.java |  186 +++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 181 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..49ce7df 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
@@ -813,4 +933,60 @@
         }
     }
 
+    @Override
+    public Integer userGameDifficulty(TUserStudy studyRecord, Integer week) {
+        List<TStudy> studyList = this.lambdaQuery().eq(TStudy::getDisabled, 0)
+                .eq(TStudy::getType, 1)
+                .orderByAsc(TStudy::getWeek).list();
+        // 基础学习进度
+        Integer day = studyRecord.getDay();
+        Integer studyWeek = studyRecord.getWeek();
+        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);
+        }
+        // 学习进度所属季度
+        int studyQuarter = 1;
+        // 当前进入周目所属季度
+        int thisQuarter = 1;
+        for (Map.Entry<Integer, List<TStudy>> map : studyMap.entrySet()) {
+            Integer key = map.getKey();
+            List<TStudy> list = map.getValue();
+            List<Integer> collect = list.stream().map(TStudy::getWeek).collect(Collectors.toList());
+            if (collect.contains(studyWeek)) {
+                studyQuarter = key;
+            }
+            if (collect.contains(week)) {
+                thisQuarter = key;
+            }
+        }
+        // 默认进度为 0
+        int defaultSchedule;
+        // 季度判断
+        if (studyQuarter > thisQuarter) {
+            defaultSchedule = 2;
+        } else if (studyQuarter < thisQuarter) {
+            defaultSchedule = 0;
+        } else {
+            List<TStudy> tStudies = studyMap.get(studyQuarter);
+            List<Integer> weekList = tStudies.stream().map(TStudy::getWeek).collect(Collectors.toList());
+            int studyIndex = weekList.indexOf(studyWeek);
+            int weekIndex = weekList.indexOf(week);
+            if (studyIndex > weekIndex) {
+                defaultSchedule = 2;
+            } else if (studyIndex < weekIndex) {
+                defaultSchedule = 0;
+            } else {
+                defaultSchedule = studyRecord.getGameDifficulty();
+            }
+        }
+        return defaultSchedule;
+    }
+
 }

--
Gitblit v1.7.1