From 233ab439e38d3040d556f3f6d04492be2a3a6c8d Mon Sep 17 00:00:00 2001 From: hjl <1657978663@qq.com> Date: 星期三, 19 六月 2024 18:17:14 +0800 Subject: [PATCH] fix: 学习端bug --- ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserStudyServiceImpl.java | 155 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 153 insertions(+), 2 deletions(-) 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 f6019c3..7a0beef 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 @@ -1,13 +1,21 @@ package com.ruoyi.study.service.impl; +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.constant.Constants; import com.ruoyi.study.domain.TGame; +import com.ruoyi.study.domain.TStudy; import com.ruoyi.study.domain.TUserStudy; -import com.ruoyi.study.mapper.TGameMapper; +import com.ruoyi.study.dto.CompleteGameDTO; +import com.ruoyi.study.dto.CompleteStudyDTO; import com.ruoyi.study.mapper.TUserStudyMapper; -import com.ruoyi.study.service.ITGameService; import com.ruoyi.study.service.ITUserStudyService; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * <p> @@ -20,4 +28,147 @@ @Service public class TUserStudyServiceImpl extends ServiceImpl<TUserStudyMapper, TUserStudy> implements ITUserStudyService { + /** + * 所属day map + */ + private static final Map<String, Integer> DAY_MAP = new HashMap<>(12); + + /** + * 所属day map + */ + private static final Map<Integer, Integer> GAME_DIFFICULTY_MAP = new HashMap<>(12); + + static { + // 所属day + DAY_MAP.put(Constants.ONE_STR, Constants.TWO); + DAY_MAP.put(Constants.TWO_STR, Constants.THREE); + DAY_MAP.put(Constants.THREE_STR, Constants.FOUR); + DAY_MAP.put(Constants.FOUR_STR, Constants.FIVE); + DAY_MAP.put(Constants.FIVE_STR, Constants.SIX); + DAY_MAP.put(Constants.SIX_STR, Constants.ONE); + // 游戏难度 + GAME_DIFFICULTY_MAP.put(Constants.ZERO, Constants.ONE); + GAME_DIFFICULTY_MAP.put(Constants.ONE, Constants.TWO); + GAME_DIFFICULTY_MAP.put(Constants.TWO, Constants.ZERO); + + } + + @Override + public TUserStudy studySchedule(String userId) { + LambdaQueryChainWrapper<TUserStudy> wrapper = lambdaQuery().eq(TUserStudy::getUserId, userId); + return wrapper.eq(TUserStudy::getDisabled, 0).one(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void resettingStudyRecord(String time) { + List<TUserStudy> list = lambdaQuery().eq(TUserStudy::getDisabled, 0).list(); + switch (time) { + case Constants.DAY: + list.forEach(data -> data.setTodayStudy(0)); + break; + case Constants.WEEK: + list.forEach(data -> data.setWeekStudy(0)); + break; + case Constants.MONTH: + list.forEach(data -> data.setMonthStudy(0)); + break; + default: + } + // 自旋重试 + int number = 0; + boolean update = this.updateBatchById(list); + while (!update) { + if (number >= 3) { + break; + } + update = this.updateBatchById(list); + number++; + } + } + + @Override + public Boolean exchangeStudyRecord(TUserStudy userStudyRecord, Integer userId, CompleteStudyDTO completeStudy) { + Integer studyTime = completeStudy.getStudyTime(); + // 学习记录 + Integer week = userStudyRecord.getWeek(); + Integer day = userStudyRecord.getDay(); + if (week.equals(completeStudy.getWeek()) && day.equals(completeStudy.getDay())) { + Integer type = completeStudy.getType(); + if (Constants.ONE.equals(type)) { + userStudyRecord.setListen(Constants.ONE_HUNDRED); + userStudyRecord.setLook(Constants.BURDEN_ONE); + userStudyRecord.setInduction(Constants.BURDEN_ONE); + userStudyRecord.setAnswer(Constants.BURDEN_ONE); + userStudyRecord.setPair(Constants.BURDEN_ONE); + } else if (Constants.TWO.equals(type)) { + userStudyRecord.setLook(Constants.ONE_HUNDRED); + userStudyRecord.setInduction(Constants.BURDEN_ONE); + userStudyRecord.setAnswer(Constants.BURDEN_ONE); + userStudyRecord.setPair(Constants.BURDEN_ONE); + } else if (Constants.THREE.equals(type)) { + userStudyRecord.setInduction(Constants.ONE_HUNDRED); + userStudyRecord.setAnswer(Constants.BURDEN_ONE); + userStudyRecord.setPair(Constants.BURDEN_ONE); + } else if (Constants.FOUR.equals(type)) { + userStudyRecord.setAnswer(Constants.ONE_HUNDRED); + userStudyRecord.setPair(Constants.BURDEN_ONE); + } else if (Constants.FIVE.equals(type)) { + userStudyRecord.setPair(Constants.ONE_HUNDRED); + // type为5并且day为5应该进入游戏日 + Integer nextDay = DAY_MAP.get(String.valueOf(userStudyRecord.getDay())); + userStudyRecord.setDay(nextDay); + // 游戏难度初始化 0(入门难度) + userStudyRecord.setGameDifficulty(Constants.ZERO); + } + } + // 更新学习时长 + userStudyRecord.setTotalStudy(userStudyRecord.getTotalStudy() + studyTime); + userStudyRecord.setTodayStudy(userStudyRecord.getTodayStudy() + studyTime); + userStudyRecord.setWeekStudy(userStudyRecord.getWeekStudy() + studyTime); + userStudyRecord.setMonthStudy(userStudyRecord.getMonthStudy() + studyTime); + // 更新学习进度及学习时长 + return this.updateById(userStudyRecord); + } + + @Override + public void checkRate(TGame game, Integer userid, CompleteGameDTO completeStudy, List<TStudy> studyList) { + String answerRate = game.getAnswerRate(); + // 正确率达到通关率 + if (completeStudy.getAccuracy() >= Integer.parseInt(answerRate)) { + // 获取用户超级记忆游戏记录 + TUserStudy userStudy = this.lambdaQuery().eq(TUserStudy::getUserId, userid).one(); + Integer nextDay = DAY_MAP.get(String.valueOf(userStudy.getDay())); + userStudy.setDay(nextDay); + if (Constants.ONE.equals(nextDay)) { + // 获取下一周目信息 + int index = -1; + for (int i = 0; i < studyList.size(); i++) { + if (studyList.get(i).getWeek().equals(userStudy.getWeek())) { + index = i; + break; + } + } + int nextIndex = (index + 1) % studyList.size(); + TStudy nextStudy = studyList.get(nextIndex); + // 更新学习进度及学习时长 + userStudy.setWeek(nextStudy.getWeek()); + } + this.updateById(userStudy); + } + } + + @Override + public void gameHearing(TGame game, Integer userid, CompleteGameDTO completeStudy) { + // 超级听力通关率 + String answerRate = game.getRate().split(",")[completeStudy.getDifficulty()]; + if (completeStudy.getAccuracy() >= Integer.parseInt(answerRate)) { + // 获取用户超级记忆游戏记录 + TUserStudy userStudy = this.lambdaQuery().eq(TUserStudy::getUserId, userid).one(); + // 更新游戏难度学习记录 + userStudy.setGameDifficulty(GAME_DIFFICULTY_MAP.get(completeStudy.getDifficulty())); + this.updateById(userStudy); + } + } + } -- Gitblit v1.7.1