From b9c9e52187fd8f47218ddefa514987c59d98f72c Mon Sep 17 00:00:00 2001
From: hjl <1657978663@qq.com>
Date: 星期四, 20 六月 2024 11:25:07 +0800
Subject: [PATCH] fix: 学习端bug

---
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStudyServiceImpl.java          |    5 +
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java             |   58 +++++++++++++++---
 ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java |   22 +++---
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/ExitLearnVO.java                          |   15 +++++
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java              |   24 ++++++++
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserServiceImpl.java           |   20 +++---
 6 files changed, 110 insertions(+), 34 deletions(-)

diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
index 661ab20..963d895 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
+++ b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
@@ -220,17 +220,17 @@
             String userkey = JwtUtils.getUserKeyStudy(token);
             user = redisService.getCacheObject(getTokenKeyStudy(userkey));
             // 再次判断登录状态是否已过期
-            if (null == user) {
-                throw new StudyLoginException("登录信息已过期,请重新登录!", 504);
-            }
-            // 优先判断当前账号是否已在其他设备登录
-            if (!user.getIsCanLogin()) {
-                throw new StudyLoginException("当前登录账号在其他设备登录!", 505);
-            }
-            // 再次判断登录状态是否已过期
-            if (System.currentTimeMillis() > user.getExpireTime()) {
-                throw new StudyLoginException("登录信息已过期,请重新登录!", 504);
-            }
+//            if (null == user) {
+//                throw new StudyLoginException("登录信息已过期,请重新登录!", 504);
+//            }
+//            // 优先判断当前账号是否已在其他设备登录
+//            if (!user.getIsCanLogin()) {
+//                throw new StudyLoginException("当前登录账号在其他设备登录!", 505);
+//            }
+//            // 再次判断登录状态是否已过期
+//            if (System.currentTimeMillis() > user.getExpireTime()) {
+//                throw new StudyLoginException("登录信息已过期,请重新登录!", 504);
+//            }
             return user;
         }
         return user;
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 17ba213..3ce58ac 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
@@ -852,26 +852,62 @@
         if (null == userStudy) {
             userStudy = createUserStudy(userid);
         }
+        Integer quarter = exitLearn.getQuarter();
+        Integer week = exitLearn.getWeek();
+        Integer day = exitLearn.getDay();
         if (userStudy.getWeek().equals(exitLearn.getWeek()) && userStudy.getDay().equals(exitLearn.getDay())) {
             // 计算完成率
-            int completionRate = exitLearn.getTopicIds().split(",").length * 5;
+            List<String> teamList = Arrays.stream(exitLearn.getTeamIds().split(",")).collect(Collectors.toList());
             Integer type = exitLearn.getType();
             // 更新用户学习完成率
-            if (Constants.ONE.equals(type) && userStudy.getListen() < completionRate) {
+            if (Constants.ONE.equals(type)) {
                 // 听音选图
-                userStudy.setListen(completionRate);
-            } else if (Constants.TWO.equals(type) && userStudy.getLook() < completionRate) {
+                List<TStudyListen> studyListens = studyListenService.listenSelectPicture(quarter, week, day);
+                int item = 0;
+                for (TStudyListen studyListen : studyListens) {
+                    item += studyListen.getSubject().split(",").length;
+                }
+                int i = exitLearn.getTopicIds().split(",").length / item;
+                if (i > userStudy.getListen()) {
+                    userStudy.setListen(100 - i);
+                }
+            } else if (Constants.TWO.equals(type)) {
                 // 看图选音
-                userStudy.setLook(completionRate);
-            } else if (Constants.THREE.equals(type) && userStudy.getInduction() < completionRate) {
+                List<TStudyLook> lookList = studyLookService.pictureSelectVoice(quarter, week, day);
+                if (!lookList.isEmpty()) {
+                    int item = lookList.size();
+                    int i = exitLearn.getSchedule() / item;
+                    if (i > userStudy.getLook()) {
+                        userStudy.setLook(100 - i);
+                    }
+                }
+            } else if (Constants.THREE.equals(type)) {
                 // 归纳排除
-                userStudy.setInduction(completionRate);
-            } else if (Constants.FOUR.equals(type) && userStudy.getAnswer() < completionRate) {
+                List<TStudyInduction> inductionList = studyInductionService.induceExclude(quarter, week, day);
+                if (!inductionList.isEmpty()) {
+                    int item = inductionList.size();
+                    int i = exitLearn.getSchedule() / item;
+                    if (i > userStudy.getInduction()) {
+                        userStudy.setInduction(100 - i);
+                    }
+                }
+            } else if (Constants.FOUR.equals(type)) {
                 // 有问有答
-                userStudy.setAnswer(completionRate);
-            } else if (Constants.FIVE.equals(type) && userStudy.getPair() < completionRate) {
+                List<TStudyAnswer> answerList = studyAnswerService.questionsAndAnswers(quarter, week, day);
+                if (answerList.size() % Constants.TWO == Constants.ZERO) {
+                    int i = exitLearn.getSchedule() / (answerList.size() / 2);
+                    if (i > userStudy.getAnswer()) {
+                        userStudy.setAnswer(100 - i);
+                    }
+                }
+            } else if (Constants.FIVE.equals(type)) {
                 // 音图相配
-                userStudy.setPair(completionRate);
+                List<TStudyPair> pairList = studyPairService.pictureMateVoice(quarter, week, day);
+                int item = pairList.size();
+                int i = exitLearn.getSchedule() / item;
+                if (i > userStudy.getPair()) {
+                    userStudy.setPair(100 - i);
+                }
             }
         }
         // 学习时长更新
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java
index 127e6a8..7d150a9 100644
--- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java
@@ -691,6 +691,9 @@
         }
         TUser user = userService.lambdaQuery().eq(TUser::getId, loginUserStudy.getUserid()).one();
         TUserStudy userStudy = userStudyService.lambdaQuery().eq(TUserStudy::getUserId, user.getId()).eq(TUserStudy::getDisabled, 0).one();
+        if (null == userStudy) {
+            userStudy = createUserStudy(loginUserStudy.getUserid());
+        }
         // 学习时长格式转换
         Integer todayStudy = userStudy.getTodayStudy();
         userStudy.setTodayStudy(Math.round((float) todayStudy / 3600));
@@ -708,6 +711,27 @@
         return R.ok(new UserPersonalCenterVO(user, userStudy));
     }
 
+    private TUserStudy createUserStudy(Integer userid) {
+        TUserStudy userStudy = new TUserStudy();
+        userStudy.setUserId(userid);
+        // 学习周目
+        TStudy tStudy = studyService.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);
+        return userStudy;
+    }
+
     @GetMapping("/userInfoParent")
     @ApiOperation(value = "用户详情", tags = {"家长端-用户详情"})
     public R<TUser> userInfoParent() {
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 69e982b..1f7d72f 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
@@ -375,7 +375,8 @@
                 defaultSchedule = 0;
             }
             // 进度学习完成度计算总学习进度
-            if (!Constants.ZERO.equals(listen) && !Constants.BURDEN_ONE.equals(listen)) {
+            // todo 不确定是否需要累计计算 中途退出的进度
+            /*if (!Constants.ZERO.equals(listen) && !Constants.BURDEN_ONE.equals(listen)) {
                 defaultSchedule += 4 * (100 / listen);
             }
             if (!Constants.ZERO.equals(look) && !Constants.BURDEN_ONE.equals(look)) {
@@ -389,7 +390,7 @@
             }
             if (!Constants.ZERO.equals(pair) && !Constants.BURDEN_ONE.equals(pair)) {
                 defaultSchedule += 4 * (100 / pair);
-            }
+            }*/
         }
         return defaultSchedule;
     }
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserServiceImpl.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserServiceImpl.java
index 100363e..d27f0d8 100644
--- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserServiceImpl.java
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserServiceImpl.java
@@ -17,6 +17,7 @@
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.Date;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 import java.util.regex.Matcher;
@@ -89,16 +90,15 @@
 
     @Override
     public Boolean isVip() {
-//        TUser user = lambdaQuery().eq(TUser::getId, tokenService.getLoginUserStudy().getUserid())
-//                .eq(TUser::getDisabled, 0).eq(TUser::getState,1).one();
-//        // 是否为vip 逻辑
-//        if (null == user) {
-//            return false;
-//        }
-//        // vip过期时间,字段为空也表示 当前用户不是vip
-//        Date vipEndTime = user.getVipEndTime();
-//        return null != vipEndTime && System.currentTimeMillis() <= vipEndTime.getTime();
-        return true;
+        TUser user = lambdaQuery().eq(TUser::getId, tokenService.getLoginUserStudy().getUserid())
+                .eq(TUser::getDisabled, 0).eq(TUser::getState,1).one();
+        // 是否为vip 逻辑
+        if (null == user) {
+            return false;
+        }
+        // vip过期时间,字段为空也表示 当前用户不是vip
+        Date vipEndTime = user.getVipEndTime();
+        return null != vipEndTime && System.currentTimeMillis() <= vipEndTime.getTime();
     }
 
 }
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/ExitLearnVO.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/ExitLearnVO.java
index df6dcd3..dc94a17 100644
--- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/ExitLearnVO.java
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/ExitLearnVO.java
@@ -3,6 +3,8 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import javax.validation.constraints.NotNull;
+
 /**
  * @author HJL
  * @version 1.0
@@ -10,6 +12,12 @@
  */
 @Data
 public class ExitLearnVO {
+
+    /**
+     * 所属季度
+     */
+    @ApiModelProperty("所属季度")
+    private Integer quarter;
 
     /**
      * 所属week
@@ -59,4 +67,11 @@
     @ApiModelProperty("完成学习所用时长(秒)")
     private Integer studyTime;
 
+    /**
+     * 答题进度
+     */
+    @ApiModelProperty("答题进度")
+    @NotNull(message = "答题进度不能为空!")
+    private Integer schedule;
+
 }

--
Gitblit v1.7.1