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; 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); } } } // 学习时长更新 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() { 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; } 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(); } } 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; }