From 6c6d875de1d0537acfa5edf4eb976e87625bd859 Mon Sep 17 00:00:00 2001 From: hjl <1657978663@qq.com> Date: 星期二, 25 六月 2024 18:05:49 +0800 Subject: [PATCH] fix: 学习端bug --- ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TGameServiceImpl.java | 10 +-- ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java | 42 ++++++++----- ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TIntegralRecordServiceImpl.java | 3 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TGameRecordServiceImpl.java | 5 + ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITIntegralRecordService.java | 11 ++- ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITUserStudyService.java | 3 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserStudyServiceImpl.java | 65 ++++++++++++++++++++- ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TIntegralRecord.java | 8 ++ ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TGameRecord.java | 15 ++++- 9 files changed, 123 insertions(+), 39 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 bee62b5..b21c323 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 @@ -1259,7 +1259,7 @@ voiceList.add(new GameMemoryVoiceVO(tSubject.getId(), tSubject.getCorrect())); } // 校验超级听力是否通过 - studyService.checkClearance(game,userStudy.getUserid()); + // studyService.checkClearance(game,userStudy.getUserid()); // 框架记忆数量翻倍,前端需要根据数量画格子 game.setAnswerCount(game.getAnswerCount() * 2); return R.ok(new StudyGameMemoryVO(game, photoList, voiceList)); @@ -1340,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("该次游戏积分计算异常!"); @@ -1357,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); // 用户账户添加积分 TUser user = userService.getById(userid); user.setIntegral(user.getIntegral() + availableIntegral); @@ -1376,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); } @@ -1570,7 +1578,7 @@ if (null == integralRecord) { // 添加积分明细记录 result = integralRecordService.add(String.valueOf(storyListen.getIntegral()), - Constants.COMPLETE_STORY, null, storyId); + Constants.COMPLETE_STORY, null, storyId, null); TUser user = userService.lambdaQuery().eq(TUser::getId, userId).one(); // 添加积分 user.setIntegral(user.getIntegral() + storyListen.getIntegral()); diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TGameRecord.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TGameRecord.java index 4b8493d..9060f51 100644 --- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TGameRecord.java +++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TGameRecord.java @@ -1,12 +1,13 @@ package com.ruoyi.study.domain; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.core.web.domain.BaseModel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; + +import java.util.Date; /** * <p> @@ -60,5 +61,13 @@ @ApiModelProperty(value = "游戏难度(0入门、1中级、2高级)") private Integer gameDifficulty; + /** + * 创建时间 + */ + @ApiModelProperty(value = "记录创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm") + @TableField(value = "createTime", fill = FieldFill.INSERT) + private Date createTime; + } diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TIntegralRecord.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TIntegralRecord.java index 92f08f5..5342736 100644 --- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TIntegralRecord.java +++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TIntegralRecord.java @@ -53,6 +53,12 @@ private Integer gameId; /** + * 游戏难度 + */ + @ApiModelProperty("游戏难度") + private Integer gameDifficulty; + + /** * 故事id */ @ApiModelProperty("故事id 对应t_story_listen") @@ -63,6 +69,8 @@ @JsonFormat(pattern = "yyyy-MM-dd HH:mm") private Date time; + + /** * 前端用,返回积分变动类型 * diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITIntegralRecordService.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITIntegralRecordService.java index cc51dbe..468ab38 100644 --- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITIntegralRecordService.java +++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITIntegralRecordService.java @@ -28,11 +28,12 @@ /** * 生成积分明细 * - * @param integral 积分 (增加积分+ 、减少积分-) - * @param method 积分来源 - * @param gameId 游戏id - * @param storyId 故事id + * @param integral 积分 (增加积分+ 、减少积分-) + * @param method 积分来源 + * @param gameId 游戏id + * @param storyId 故事id + * @param difficulty 游戏难度 * @return 操作结果 */ - Boolean add(String integral, String method, Integer gameId, Integer storyId); + Boolean add(String integral, String method, Integer gameId, Integer storyId, Integer difficulty); } diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITUserStudyService.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITUserStudyService.java index 0af3259..8672e3f 100644 --- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITUserStudyService.java +++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITUserStudyService.java @@ -60,6 +60,7 @@ * @param game 游戏信息 * @param userid 用户id * @param completeStudy 游戏完成信息 + * @param studyList 学习列表 */ - void gameHearing(TGame game, Integer userid, CompleteGameDTO completeStudy); + void gameHearing(TGame game, Integer userid, CompleteGameDTO completeStudy, List<TStudy> studyList); } diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TGameRecordServiceImpl.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TGameRecordServiceImpl.java index eb9a99b..a347b01 100644 --- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TGameRecordServiceImpl.java +++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TGameRecordServiceImpl.java @@ -1,6 +1,7 @@ package com.ruoyi.study.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.constant.Constants; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.study.domain.TGameRecord; import com.ruoyi.study.dto.CompleteGameDTO; @@ -33,8 +34,10 @@ data.setAccuracy(gameAchievement.getAccuracy()); data.setGameName(gameAchievement.getGameName()); data.setUseTime(gameAchievement.getUseTime()); + if (Constants.HEARING.equals(gameAchievement.getGameName())) { + data.setGameDifficulty(gameAchievement.getDifficulty()); + } data.setGameId(gameAchievement.getGameId()); - data.setGameDifficulty(gameAchievement.getDifficulty()); return this.save(data); } } diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TGameServiceImpl.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TGameServiceImpl.java index bb19bac..98051c5 100644 --- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TGameServiceImpl.java +++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TGameServiceImpl.java @@ -2,19 +2,14 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.constant.Constants; -import com.ruoyi.common.core.exception.GlobalException; import com.ruoyi.study.domain.TGame; import com.ruoyi.study.domain.TIntegralRecord; -import com.ruoyi.study.domain.TSubject; import com.ruoyi.study.dto.CompleteGameDTO; import com.ruoyi.study.mapper.TGameMapper; import com.ruoyi.study.service.ITGameService; -import com.ruoyi.study.vo.StudyGameMemoryVO; import org.springframework.stereotype.Service; -import java.util.ArrayList; import java.util.List; -import java.util.Random; import java.util.stream.Collectors; /** @@ -36,13 +31,14 @@ return gameAvailableIntegral; } else { // 积分明细不为空,根据正确率及已获取积分数量计算本次答题可获取的积分数量 - List<Integer> integralList = integralRecordList.stream().map(TIntegralRecord::getIntegral).collect(Collectors.toList()) + List<Integer> integralList = integralRecordList.stream() + .map(TIntegralRecord::getIntegral).collect(Collectors.toList()) .stream().map(Integer::parseInt).collect(Collectors.toList()); int sumIntegral = integralList.stream().mapToInt(Integer::intValue).sum(); if (gameAvailableIntegral > sumIntegral) { return gameAvailableIntegral - sumIntegral; } else { - return null; + return Constants.ZERO; } } } diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TIntegralRecordServiceImpl.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TIntegralRecordServiceImpl.java index 6d0047f..f220658 100644 --- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TIntegralRecordServiceImpl.java +++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TIntegralRecordServiceImpl.java @@ -33,13 +33,14 @@ @Override @Transactional(rollbackFor = Exception.class) - public Boolean add(String integral, String method, Integer gameId, Integer storyId) { + public Boolean add(String integral, String method, Integer gameId, Integer storyId, Integer difficulty) { TIntegralRecord integralRecord = new TIntegralRecord(); integralRecord.setIntegral(integral); integralRecord.setMethod(method); integralRecord.setUserId(tokenService.getLoginUserStudy().getUserid()); integralRecord.setGameId(gameId); integralRecord.setStoryId(storyId); + integralRecord.setGameDifficulty(difficulty); return this.save(integralRecord); } } diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserStudyServiceImpl.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserStudyServiceImpl.java index 5a69d7e..45aab11 100644 --- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserStudyServiceImpl.java +++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserStudyServiceImpl.java @@ -147,6 +147,11 @@ @Override public void checkRate(TGame game, Integer userid, CompleteGameDTO completeStudy, List<TStudy> studyList) { String answerRate = game.getAnswerRate(); + String rate = game.getRate().split(",")[Constants.TWO]; + // 校验是否完成超级听力 + List<TGameRecord> gameRecordList = gameRecordService.lambdaQuery().eq(TGameRecord::getGameId, game.getId()) + .eq(TGameRecord::getGameDifficulty, Constants.TWO) + .ge(TGameRecord::getAccuracy, rate).list(); // 下一周目逻辑 int quarterItem = 1; Map<Integer, List<TStudy>> studyMap = new HashMap<>(8); @@ -166,13 +171,14 @@ // 获取当前季度所有周目 List<TStudy> studyList1 = studyMap.get(quarterItem); // 正确率达到通关率 - if (completeStudy.getAccuracy() >= Integer.parseInt(answerRate)) { + if (completeStudy.getAccuracy() >= Integer.parseInt(answerRate) + && !gameRecordList.isEmpty()) { // 获取用户超级记忆游戏记录 TUserStudy userStudy = this.lambdaQuery().eq(TUserStudy::getUserId, userid).one(); for (int i = 0; i < studyList1.size(); i++) { TStudy tStudy = studyList1.get(i); if (tStudy.getWeek().equals(userStudy.getWeek())) { - if (studyList1.size() == 1 || i + 1 == studyList1.size() - 1) { + if (studyList1.size() == 1 || i + 1 == studyList1.size()) { // 是否为当前季度最后一周目 List<TStudy> studyList2 = studyMap.get(quarterItem + 1); // 下一季度数据为空 @@ -198,7 +204,7 @@ } @Override - public void gameHearing(TGame game, Integer userid, CompleteGameDTO completeStudy) { + public void gameHearing(TGame game, Integer userid, CompleteGameDTO completeStudy, List<TStudy> studyList) { // 超级听力通关率 String answerRate = game.getRate().split(",")[completeStudy.getDifficulty()]; if (completeStudy.getAccuracy() >= Integer.parseInt(answerRate)) { @@ -212,7 +218,58 @@ .ge(TGameRecord::getAccuracy, answerRate) .eq(TGameRecord::getGameDifficulty, completeStudy.getDifficulty()).list(); if (!list.isEmpty()) { - userStudy.setGameDifficulty(GAME_DIFFICULTY_MAP.get(completeStudy.getDifficulty())); + Integer integer = GAME_DIFFICULTY_MAP.get(completeStudy.getDifficulty()); + userStudy.setGameDifficulty(integer); + } + } else { + // 游戏难度为2,进入下一周目学习 + List<TGameRecord> gameRecordList = gameRecordService.lambdaQuery().eq(TGameRecord::getGameId, game.getId()) + .eq(TGameRecord::getGameName, Constants.MEMORY) + .ge(TGameRecord::getAccuracy, game.getAnswerRate()).list(); + // 判断是否完成超级记忆 + if (!gameRecordList.isEmpty()) { + int quarterItem = 1; + Map<Integer, List<TStudy>> studyMap = new HashMap<>(8); + for (TStudy study : studyList) { + Integer quarter = study.getQuarter(); + List<TStudy> itemList = studyMap.get(quarter); + if (null == itemList) { + itemList = new ArrayList<>(); + } + itemList.add(study); + studyMap.put(quarter, itemList); + // 记录学习季度 + if (study.getId().equals(game.getStudyId())) { + quarterItem = quarter; + } + } + // 获取当前季度所有周目 + List<TStudy> studyList1 = studyMap.get(quarterItem); + // 获取用户超级记忆游戏记录 + for (int i = 0; i < studyList1.size(); i++) { + TStudy tStudy = studyList1.get(i); + if (tStudy.getWeek().equals(userStudy.getWeek())) { + if (studyList1.size() == 1 || i + 1 == studyList1.size()) { + // 是否为当前季度最后一周目 + List<TStudy> studyList2 = studyMap.get(quarterItem + 1); + // 下一季度数据为空 + if (null != studyList2 && !studyList2.isEmpty()) { + TStudy tStudy1 = studyList2.get(Constants.ZERO); + userStudy.setWeek(tStudy1.getWeek()); + } + } else { + TStudy tStudy1 = studyList1.get(i + 1); + userStudy.setWeek(tStudy1.getWeek()); + } + } + } + userStudy.setDay(DAY_MAP.get(String.valueOf(userStudy.getDay()))); + userStudy.setLook(Constants.BURDEN_ONE); + userStudy.setPair(Constants.BURDEN_ONE); + userStudy.setInduction(Constants.BURDEN_ONE); + userStudy.setListen(Constants.BURDEN_ONE); + userStudy.setAnswer(Constants.BURDEN_ONE); + userStudy.setGameDifficulty(Constants.ZERO); } } this.updateById(userStudy); -- Gitblit v1.7.1