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