From b05715c83c4e04165a6682f2049e68ca606f656c Mon Sep 17 00:00:00 2001 From: hjl <1657978663@qq.com> Date: 星期三, 26 六月 2024 10:38:53 +0800 Subject: [PATCH] fix: 学习端bug --- ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java | 82 ++++++++++++++++++++++++++++------------ 1 files changed, 57 insertions(+), 25 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 a78c8cb..ab871ee 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 @@ -1240,6 +1240,10 @@ @ApiImplicitParam(value = "所属周目", name = "week", dataType = "Integer", required = true) }) public R<StudyGameMemoryVO> gameMemory(@RequestParam Integer quarter, @RequestParam Integer week) { + LoginUserParent userStudy = tokenService.getLoginUserStudy(); + if (null == userStudy) { + return R.tokenError("登录失效!"); + } TGame game = gameService.gameHearing(quarter, week); if (null == game) { throw new GlobalException("当前季度该周目暂无配置游戏数据!"); @@ -1254,6 +1258,8 @@ photoList.add(new GameMemoryPhotoVO(tSubject.getId(), tSubject.getImg())); voiceList.add(new GameMemoryVoiceVO(tSubject.getId(), tSubject.getCorrect())); } + // 校验超级听力是否通过 + // studyService.checkClearance(game,userStudy.getUserid()); // 框架记忆数量翻倍,前端需要根据数量画格子 game.setAnswerCount(game.getAnswerCount() * 2); return R.ok(new StudyGameMemoryVO(game, photoList, voiceList)); @@ -1334,14 +1340,23 @@ throw new GlobalException("游戏信息异常!"); } // 积分明细 - List<TIntegralRecord> integralRecordList = integralRecordService.lambdaQuery().eq(TIntegralRecord::getUserId, userid) - .eq(TIntegralRecord::getGameId, game.getId()).eq(TIntegralRecord::getDisabled, 0).list(); + Integer difficulty = completeStudy.getDifficulty(); + List<TIntegralRecord> integralRecordList = integralRecordService.lambdaQuery() + .eq(TIntegralRecord::getUserId, userid) + .eq(TIntegralRecord::getGameId, game.getId()) + .eq(TIntegralRecord::getDisabled, 0) + .eq(TIntegralRecord::getGameDifficulty, difficulty).list(); // 本次游戏总共能获取的积分数量 Integer integral; if (completeStudy.getGameName().equals(Constants.HEARING)) { // 本次游戏总积分 - integral = Integer.parseInt(game.getIntegral().split(",")[completeStudy.getDifficulty()]); + integral = Integer.parseInt(game.getIntegral().split(",")[difficulty]); } else if (completeStudy.getGameName().equals(Constants.MEMORY)) { + integralRecordList = integralRecordService.lambdaQuery() + .eq(TIntegralRecord::getUserId, userid) + .eq(TIntegralRecord::getGameId, game.getId()) + .eq(TIntegralRecord::getDisabled, 0) + .eq(TIntegralRecord::getGameDifficulty, null).list(); integral = game.getAnswerIntegral(); } else { throw new GlobalException("该次游戏积分计算异常!"); @@ -1351,8 +1366,9 @@ // 游戏测试记录 Boolean add = gameRecordService.add(completeStudy); // 可获得积分不为null时,才添加积分明细记录 - if (null != availableIntegral) { - add = add && integralRecordService.add(String.valueOf(availableIntegral), Constants.COMPLETE_GAME, completeStudy.getGameId(), null); + if (null != availableIntegral && !Constants.ZERO.equals(availableIntegral)) { + add = add && integralRecordService.add(String.valueOf(availableIntegral), + Constants.COMPLETE_GAME, completeStudy.getGameId(), null, difficulty, null); // 用户账户添加积分 TUser user = userService.getById(userid); user.setIntegral(user.getIntegral() + availableIntegral); @@ -1370,22 +1386,20 @@ userStudy.setWeekStudy(userStudy.getWeekStudy() + completeStudy.getUseTime()); userStudy.setMonthStudy(userStudy.getMonthStudy() + completeStudy.getUseTime()); userStudyService.updateById(userStudy); + // 学习配置列表 + List<TStudy> studyList = studyService.lambdaQuery().eq(TStudy::getDisabled, 0) + .orderByAsc(TStudy::getWeek).list(); + if (studyList.isEmpty()) { + throw new GlobalException("学习配置列表未配置或数据失效!"); + } // 超级记忆逻辑 if (Constants.MEMORY.equals(completeStudy.getGameName())) { - // 学习配置列表 - List<TStudy> studyList = studyService.lambdaQuery().eq(TStudy::getDisabled, 0) - .orderByAsc(TStudy::getWeek).list(); - if (studyList.isEmpty()) { - throw new GlobalException("学习配置列表未配置或数据失效!"); - } // 超级记忆正确率达到通关率标准,才能进入下一周目学习 + // 校验是否通关超级听力与超级记忆,通关则学习记录更新为下一周目 userStudyService.checkRate(game, userid, completeStudy, studyList); - add = add && completeStudy.getAccuracy() >= Integer.parseInt(game.getAnswerRate()); } else { // 超级听力需根据正确率判断是否允许进入下一难度 - userStudyService.gameHearing(game, userid, completeStudy); - String rate = game.getRate().split(",")[completeStudy.getDifficulty()]; - add = add && completeStudy.getAccuracy() >= Integer.parseInt(rate); + userStudyService.gameHearing(game, userid, completeStudy, studyList); } return R.ok(availableIntegral); } @@ -1513,15 +1527,17 @@ Integer userId = loginUserStudy.getUserid(); Boolean result = true; // 学习时长更新 + TStudy study = studyService.lambdaQuery().eq(TStudy::getId, storyListen.getStudyId()) + .eq(TStudy::getDisabled, 0).one(); TUserStudy userStudy = userStudyService.lambdaQuery().eq(TUserStudy::getUserId, userId) .eq(TUserStudy::getDisabled, 0).one(); if (null == userStudy) { userStudy = createUserStudy(userId); - userStudy.setTotalStudy(userStudy.getTotalStudy() + studyTime); - userStudy.setTodayStudy(userStudy.getTodayStudy() + studyTime); - userStudy.setWeekStudy(userStudy.getWeekStudy() + studyTime); - userStudy.setMonthStudy(userStudy.getMonthStudy() + studyTime); } + userStudy.setTotalStudy(userStudy.getTotalStudy() + studyTime); + userStudy.setTodayStudy(userStudy.getTodayStudy() + studyTime); + userStudy.setWeekStudy(userStudy.getWeekStudy() + studyTime); + userStudy.setMonthStudy(userStudy.getMonthStudy() + studyTime); boolean update = userStudyService.updateById(userStudy); if (!update) { throw new GlobalException("学习时长更新失败!"); @@ -1533,11 +1549,15 @@ throw new GlobalException("自主故事-看图配音正确率异常!"); } // 看图配音模式,也需要根据游戏正确率计算积分 - int integral = storyListen.getLookIntegral() * (accuracy / 100); + double d = (double) accuracy / 100; + int integral = (int) (storyListen.getLookIntegral() * d); int obtainedIntegral; + // 看图配音已获取积分数量 List<TUserStudyRecord> list = studyRecordService.lambdaQuery() .eq(TUserStudyRecord::getStoryId, storyId) .eq(TUserStudyRecord::getType, 1) + .eq(TUserStudyRecord::getQuarter, study.getQuarter()) + .eq(TUserStudyRecord::getWeek, storyListen.getWeek()) .eq(TUserStudyRecord::getUserId, userId).list(); if (list.isEmpty()) { obtainedIntegral = 0; @@ -1546,25 +1566,37 @@ .mapToInt(Integer::intValue).sum(); } // 可获得积分计算 - if (integral > obtainedIntegral) { + int i = integral - obtainedIntegral; + if (i > 0) { TUserStudyRecord data = new TUserStudyRecord(); data.setUserId(userId); - data.setObtainedIntegral(integral - obtainedIntegral); + data.setObtainedIntegral(i); data.setType(Constants.ONE); data.setStoryId(storyId); + data.setQuarter(study.getQuarter()); + data.setWeek(storyListen.getWeek()); result = studyRecordService.save(data); - sum = integral - obtainedIntegral; + sum = i; + // 添加积分明细记录 + result = integralRecordService.add(String.valueOf(sum), + Constants.COMPLETE_STORY, null, storyId, null, Constants.ZERO); + TUser user = userService.lambdaQuery().eq(TUser::getId, userId).one(); + // 添加积分 + user.setIntegral(user.getIntegral() + sum); + result = result && userService.updateById(user); } } else { // 超级记忆只有首次才能获取积分 TIntegralRecord integralRecord = integralRecordService.lambdaQuery() .eq(TIntegralRecord::getUserId, userId) .eq(TIntegralRecord::getStoryId, storyId) - .eq(TIntegralRecord::getDisabled, 0).one(); + .eq(TIntegralRecord::getDisabled, 0) + .eq(TIntegralRecord::getStoryType, Constants.ONE) + .one(); if (null == integralRecord) { // 添加积分明细记录 result = integralRecordService.add(String.valueOf(storyListen.getIntegral()), - Constants.COMPLETE_STORY, null, storyId); + Constants.COMPLETE_STORY, null, storyId, null, Constants.ONE); TUser user = userService.lambdaQuery().eq(TUser::getId, userId).one(); // 添加积分 user.setIntegral(user.getIntegral() + storyListen.getIntegral()); -- Gitblit v1.7.1