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