From 253ee614523ba4baa756cf209333d4528a4386b1 Mon Sep 17 00:00:00 2001 From: hjl <1657978663@qq.com> Date: 星期一, 24 六月 2024 17:56:14 +0800 Subject: [PATCH] fix: 学习端bug --- ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java | 136 ++++++++++++++++++++++++++++++++------------- 1 files changed, 96 insertions(+), 40 deletions(-) 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 3ce58ac..a78c8cb 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 @@ -79,6 +79,8 @@ private IUserStudyRecordService studyRecordService; @Resource private ManagementClient managementClient; + @Resource + private ITUserPresentRecordService userPresentRecordService; @PostMapping("/storyList") // @ApiOperation(value = "配置学习类型选择故事", tags = {"题目管理"}) @@ -751,7 +753,11 @@ @ApiImplicitParam(value = "季度 首次进入季度quarter默认传1", name = "quarter", dataType = "Integer", required = true) }) public R<List<StudyWeekDTO>> weekList(@RequestParam(defaultValue = "1") Integer type, @RequestParam Integer quarter) { - List<StudyWeekDTO> result = studyService.weekList(type, quarter); + LoginUserParent loginUserStudy = tokenService.getLoginUserStudy(); + if (null == loginUserStudy) { + return R.tokenError("登录失效!"); + } + List<StudyWeekDTO> result = studyService.weekList(type, quarter, loginUserStudy.getUserid()); return R.ok(result); } @@ -784,11 +790,39 @@ throw new GlobalException("获取在线时间赠送积分信息失败!"); } String integral = sysSet.getIntegral(); + // 计算时间间隔 + TUserPresentRecord record = userPresentRecordService.lambdaQuery() + .eq(TUserPresentRecord::getUserId, loginStudy.getUserid()) + .orderByDesc(TUserPresentRecord::getPresentTime) + .eq(TUserPresentRecord::getIsDelete, 0).last("limit 1").one(); + boolean result = true; TUser user = userService.lambdaQuery().eq(TUser::getId, loginStudy.getUserid()) .eq(TUser::getDisabled, 0).one(); - boolean update = userService.lambdaUpdate().set(TUser::getIntegral, user.getIntegral() + Integer.parseInt(integral)) - .eq(TUser::getId, loginStudy.getUserid()).update(); - return R.ok(update); + if (null == record) { + // 赠送积分 + result = userService.lambdaUpdate().set(TUser::getIntegral, user.getIntegral() + Integer.parseInt(integral)) + .eq(TUser::getId, loginStudy.getUserid()).update(); + // 添加赠送积分记录 + TUserPresentRecord data = new TUserPresentRecord(); + data.setUserId(loginStudy.getUserid()); + data.setPresentTime(new Date()); + data.setIsDelete(0); + result = result && userPresentRecordService.save(data); + } else { + if (System.currentTimeMillis() - record.getPresentTime().getTime() >= 10 * 60 * 1000) { + // 赠送积分 + result = userService.lambdaUpdate() + .set(TUser::getIntegral, user.getIntegral() + Integer.parseInt(integral)) + .eq(TUser::getId, loginStudy.getUserid()).update(); + // 添加赠送积分记录 + TUserPresentRecord data = new TUserPresentRecord(); + data.setUserId(loginStudy.getUserid()); + data.setPresentTime(new Date()); + data.setIsDelete(0); + result = result && userPresentRecordService.save(data); + } + } + return R.ok(result); } /** @@ -855,9 +889,9 @@ Integer quarter = exitLearn.getQuarter(); Integer week = exitLearn.getWeek(); Integer day = exitLearn.getDay(); + int schedule = exitLearn.getSchedule() == null ? 0 : exitLearn.getSchedule(); if (userStudy.getWeek().equals(exitLearn.getWeek()) && userStudy.getDay().equals(exitLearn.getDay())) { // 计算完成率 - List<String> teamList = Arrays.stream(exitLearn.getTeamIds().split(",")).collect(Collectors.toList()); Integer type = exitLearn.getType(); // 更新用户学习完成率 if (Constants.ONE.equals(type)) { @@ -867,7 +901,7 @@ for (TStudyListen studyListen : studyListens) { item += studyListen.getSubject().split(",").length; } - int i = exitLearn.getTopicIds().split(",").length / item; + int i = (int) ((double) (exitLearn.getTopicIds().split(",").length / item) * 100); if (i > userStudy.getListen()) { userStudy.setListen(100 - i); } @@ -876,7 +910,7 @@ List<TStudyLook> lookList = studyLookService.pictureSelectVoice(quarter, week, day); if (!lookList.isEmpty()) { int item = lookList.size(); - int i = exitLearn.getSchedule() / item; + int i = (int) ((double) (schedule / item)) * 100; if (i > userStudy.getLook()) { userStudy.setLook(100 - i); } @@ -886,7 +920,7 @@ List<TStudyInduction> inductionList = studyInductionService.induceExclude(quarter, week, day); if (!inductionList.isEmpty()) { int item = inductionList.size(); - int i = exitLearn.getSchedule() / item; + int i = (int) ((double) (schedule / item)) * 100; if (i > userStudy.getInduction()) { userStudy.setInduction(100 - i); } @@ -895,7 +929,7 @@ // 有问有答 List<TStudyAnswer> answerList = studyAnswerService.questionsAndAnswers(quarter, week, day); if (answerList.size() % Constants.TWO == Constants.ZERO) { - int i = exitLearn.getSchedule() / (answerList.size() / 2); + int i = (int) ((double) (schedule / (answerList.size() / 2))) * 100; if (i > userStudy.getAnswer()) { userStudy.setAnswer(100 - i); } @@ -904,7 +938,7 @@ // 音图相配 List<TStudyPair> pairList = studyPairService.pictureMateVoice(quarter, week, day); int item = pairList.size(); - int i = exitLearn.getSchedule() / item; + int i = (int) ((double) (schedule / item)) * 100; if (i > userStudy.getPair()) { userStudy.setPair(100 - i); } @@ -939,7 +973,7 @@ // 非会员只能查看非会员题目,会员可以查看所有题目 List<TStudyListen> studyListens = studyListenService.listenSelectPicture(quarter, week, day); for (TStudyListen studyListen : studyListens) { - if (studyListen.getIsVip() == 1) { + if (studyListen.getIsVip() == 0) { // 需要会员查看 if (!isVip) { // 不是会员 @@ -970,7 +1004,7 @@ // 非会员只能查看非会员题目,会员可以查看所有题目 List<TStudyLook> lookList = studyLookService.pictureSelectVoice(quarter, week, day); for (TStudyLook studyListen : lookList) { - if (studyListen.getIsVip() == 1) { + if (studyListen.getIsVip() == 0) { // 需要会员查看 if (!isVip) { // 不是会员 @@ -1001,7 +1035,7 @@ // 非会员只能查看非会员题目,会员可以查看所有题目 List<TStudyInduction> inductionList = studyInductionService.induceExclude(quarter, week, day); for (TStudyInduction studyListen : inductionList) { - if (studyListen.getIsVip() == 1) { + if (studyListen.getIsVip() == 0) { // 需要会员查看 if (!isVip) { // 不是会员 @@ -1032,7 +1066,7 @@ // 非会员只能查看非会员题目,会员可以查看所有题目 List<TStudyAnswer> answerList = studyAnswerService.questionsAndAnswers(quarter, week, day); for (TStudyAnswer studyListen : answerList) { - if (studyListen.getIsVip() == 1) { + if (studyListen.getIsVip() == 0) { // 需要会员查看 if (!isVip) { // 不是会员 @@ -1063,7 +1097,7 @@ // 非会员只能查看非会员题目,会员可以查看所有题目 List<TStudyPair> pairList = studyPairService.pictureMateVoice(quarter, week, day); for (TStudyPair pair : pairList) { - if (pair.getIsVip() == 1) { + if (pair.getIsVip() == 0) { // 需要会员查看 if (!isVip) { // 不是会员 @@ -1081,7 +1115,7 @@ */ @PostMapping("/completeLearning") @ApiOperation(value = "完成学习", tags = {"学习端-听-自主学习"}) - public R<Boolean> completeLearning(@RequestBody CompleteStudyDTO completeStudy) { + public R<Integer> completeLearning(@RequestBody CompleteStudyDTO completeStudy) { LoginUserParent userStudy = tokenService.getLoginUserStudy(); if (null == userStudy) { return R.tokenError("登录失效!"); @@ -1102,6 +1136,7 @@ .eq(TUserStudyRecord::getWeek, completeStudy.getWeek()) .eq(TUserStudyRecord::getDay, completeStudy.getDay()) .eq(TUserStudyRecord::getType, 0) + .eq(TUserStudyRecord::getStudyType, completeStudy.getType()) .eq(TUserStudyRecord::getUserId, userId).list(); if (list.isEmpty()) { obtainedIntegral = 0; @@ -1128,6 +1163,8 @@ record.setQuarter(completeStudy.getQuarter()); record.setWeek(completeStudy.getWeek()); record.setDay(completeStudy.getDay()); + // 学习类型 + record.setStudyType(completeStudy.getType()); record.setObtainedIntegral(integral); record.setType(Constants.ZERO); update = update && studyRecordService.save(record); @@ -1139,7 +1176,7 @@ userStudyRecord = createUserStudy(userId); } Boolean updateStudyRecord = userStudyService.exchangeStudyRecord(userStudyRecord, userId, completeStudy); - return R.ok(update && updateStudyRecord); + return R.ok(sum > obtainedIntegral ? sum - obtainedIntegral : 0); } /** @@ -1185,7 +1222,7 @@ throw new GlobalException("当前周目下day1 - day5题目不足!"); } // 根据游戏设置数量获取图片及语音 - List<String> subjectData = getData(game, newSubjectId); + List<String> subjectData = getData(game, newSubjectId, 1); List<TSubject> subjectList = getSubjectList(subjectData); return R.ok(new StudyGameResultVO(game, subjectList)); } @@ -1234,16 +1271,22 @@ throw new GlobalException("当前周目下day1 - day5题目不足!"); } // 根据游戏设置数量获取图片及语音 - return getData(game, newSubjectId); + return getData(game, newSubjectId, 2); } - private List<String> getData(TGame game, List<String> newSubjectId) { + private List<String> getData(TGame game, List<String> newSubjectId, int num) { List<String> subjectData = new ArrayList<>(); Random random = new Random(); // 获取列表大小 int dataSize = newSubjectId.size(); // 生成随机索引并获取数据 - for (int i = 0; i < game.getCount(); i++) { + int index; + if (1 == num) { + index = game.getCount(); + } else { + index = game.getAnswerCount(); + } + for (int i = 0; i < index; i++) { // 生成随机索引 int randomIndex = random.nextInt(dataSize); // 获取对应的数据并加入结果列表 @@ -1275,7 +1318,7 @@ */ @PostMapping("/gameAchievement") @ApiOperation(value = "完成游戏-记录游戏测试成绩", tags = {"学习端-听-自主游戏"}) - public R<Boolean> gameAchievement(@RequestBody CompleteGameDTO completeStudy) { + public R<Integer> gameAchievement(@RequestBody CompleteGameDTO completeStudy) { LoginUserParent loginUserStudy = tokenService.getLoginUserStudy(); if (null == loginUserStudy) { return R.tokenError("登录失效!"); @@ -1315,6 +1358,18 @@ user.setIntegral(user.getIntegral() + availableIntegral); add = add && userService.updateById(user); } + // 学习时长更新 + TUserStudy userStudy = userStudyService.lambdaQuery().eq(TUserStudy::getUserId, userid) + .eq(TUserStudy::getDisabled, 0).one(); + if (null == userStudy) { + userStudy = createUserStudy(userid); + } + // 学习时长 + userStudy.setTotalStudy(userStudy.getTotalStudy() + completeStudy.getUseTime()); + userStudy.setTodayStudy(userStudy.getTodayStudy() + completeStudy.getUseTime()); + userStudy.setWeekStudy(userStudy.getWeekStudy() + completeStudy.getUseTime()); + userStudy.setMonthStudy(userStudy.getMonthStudy() + completeStudy.getUseTime()); + userStudyService.updateById(userStudy); // 超级记忆逻辑 if (Constants.MEMORY.equals(completeStudy.getGameName())) { // 学习配置列表 @@ -1332,18 +1387,7 @@ String rate = game.getRate().split(",")[completeStudy.getDifficulty()]; add = add && completeStudy.getAccuracy() >= Integer.parseInt(rate); } - // 学习时长更新 - TUserStudy userStudy = userStudyService.lambdaQuery().eq(TUserStudy::getUserId, userid) - .eq(TUserStudy::getDisabled, 0).one(); - if (null == userStudy) { - userStudy = createUserStudy(userid); - userStudy.setTotalStudy(userStudy.getTotalStudy() + completeStudy.getUseTime()); - userStudy.setTodayStudy(userStudy.getTodayStudy() + completeStudy.getUseTime()); - userStudy.setWeekStudy(userStudy.getWeekStudy() + completeStudy.getUseTime()); - userStudy.setMonthStudy(userStudy.getMonthStudy() + completeStudy.getUseTime()); - } - boolean update = userStudyService.updateById(userStudy); - return R.ok(add && update); + return R.ok(availableIntegral); } private TUserStudy createUserStudy(Integer userid) { @@ -1454,7 +1498,7 @@ @ApiImplicitParam(value = "正确率", name = "accuracy", dataType = "Integer"), @ApiImplicitParam(value = "学习时长(秒)", name = "studyTime", dataType = "Integer", required = true) }) - public R<Boolean> completeStory(@RequestParam Integer storyId, @RequestParam Integer type, + public R<Integer> completeStory(@RequestParam Integer storyId, @RequestParam Integer type, Integer accuracy, @RequestParam Integer studyTime) { TStoryListen storyListen = storyListenService.lambdaQuery().eq(TStoryListen::getId, storyId) .eq(TStoryListen::getDisabled, 0).one(); @@ -1483,6 +1527,7 @@ throw new GlobalException("学习时长更新失败!"); } // 根据故事类型不同,逻辑处理 + int sum = 0; if (Constants.ONE.equals(type)) { if (null == accuracy) { throw new GlobalException("自主故事-看图配音正确率异常!"); @@ -1508,6 +1553,7 @@ data.setType(Constants.ONE); data.setStoryId(storyId); result = studyRecordService.save(data); + sum = integral - obtainedIntegral; } } else { // 超级记忆只有首次才能获取积分 @@ -1523,9 +1569,10 @@ // 添加积分 user.setIntegral(user.getIntegral() + storyListen.getIntegral()); result = result && userService.updateById(user); + sum = storyListen.getIntegral(); } } - return R.ok(result); + return R.ok(sum); } @GetMapping("/studyRecord") @@ -1555,9 +1602,11 @@ Integer totalStudy = studyRecord.getTotalStudy(); studyRecord.setTotalStudy(Math.round((float) (totalStudy + sum) / 3600)); // 剩余周目 - int size = studyService.list(new QueryWrapper<TStudy>() - .eq("type", 1)).size(); - studyRecord.setSurplus(size - studyRecord.getWeek()); + List<TStudy> studyList = studyService.lambdaQuery().eq(TStudy::getDisabled, 0) + .eq(TStudy::getType, Constants.ONE) + .orderByAsc(TStudy::getWeek).list(); + int size = studyService.residueWeek(studyRecord, studyList); + studyRecord.setSurplus(size); } return R.ok(new StudyRecordResultVO(studyRecord, gameRecordList)); } @@ -1633,7 +1682,14 @@ if (tokenService.getLoginUserStudy() == null) { return R.tokenError("登录失效"); } - return R.ok(integralRecordService.integralDetail(new Page<>(pageNum, pageSize), tokenService.getLoginUserStudy().getUserid(), time)); + IPage<TIntegralRecord> page = integralRecordService.integralDetail(new Page<>(pageNum, pageSize), + tokenService.getLoginUserStudy().getUserid(), time); + for (TIntegralRecord record : page.getRecords()) { + if (!record.getIntegral().startsWith("-")) { + record.setIntegral("+" + record.getIntegral()); + } + } + return R.ok(page); } @GetMapping("/integralDetailParent") -- Gitblit v1.7.1