hjl
2024-05-22 ddee28676ae16b682651eea38f0c1071cf1565b8
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.constant.Constants;
import com.ruoyi.common.core.constant.RedisConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.GlobalException;
@@ -17,6 +18,7 @@
import com.ruoyi.study.dto.*;
import com.ruoyi.study.service.*;
import com.ruoyi.study.vo.*;
import com.ruoyi.system.api.model.LoginUserParent;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
@@ -114,8 +116,8 @@
    public R<PageInfo<TSubject>> subjectList(@RequestBody ChoiceSubject query) {
        PageInfo<TSubject> res = new PageInfo<>(query.getPageNumber(), query.getPageSize());
        QueryWrapper<TSubject> wrapper = new QueryWrapper<>();
        if (StringUtils.hasLength(query.getName())){
            wrapper.like("name",query.getName());
        if (StringUtils.hasLength(query.getName())) {
            wrapper.like("name", query.getName());
        }
        if (StringUtils.hasLength(query.getEnglish())) {
            wrapper.like("english", query.getEnglish());
@@ -627,7 +629,7 @@
            @ApiImplicitParam(value = "周目", name = "week", dataType = "Integer", required = true),
            @ApiImplicitParam(value = "所属day", name = "day", dataType = "Integer", required = true)
    })
    public AjaxResult<TUserStudy> studySchedule(@RequestParam Integer week,@RequestParam Integer day) {
    public AjaxResult<TUserStudy> studySchedule(@RequestParam Integer week, @RequestParam Integer day) {
        TUserStudy result = studyService.studySchedule(String.valueOf(tokenService.getLoginUserStudy().getUserid()), week, day);
        return AjaxResult.success(result);
    }
@@ -637,8 +639,8 @@
     */
    @GetMapping("/goodRecommend")
    @ApiOperation(value = "可兑换商品推荐", tags = {"可兑换商品推荐"})
    public R<List<TGoodsVO>> studySchedule() {
        return goodsClient.goodRecommend(String.valueOf(tokenService.getLoginUserStudy().getUserid()));
    public AjaxResult<List<TGoodsVO>> studySchedule() {
        return AjaxResult.success(goodsClient.goodRecommend());
    }
    /**
@@ -663,7 +665,7 @@
            @ApiImplicitParam(value = "周目", name = "week", dataType = "Integer", required = true),
            @ApiImplicitParam(value = "所属day", name = "day", dataType = "Integer", required = true)
    })
    public AjaxResult<Map<String, Object>> listenSelectPicture(@RequestParam Integer week, @RequestParam Integer day) {
    public AjaxResult<StudyListenResultVO> listenSelectPicture(@RequestParam Integer week, @RequestParam Integer day) {
        // 判断当前登录用户是否为 会员
        Boolean isVip = userService.isVip();
        LambdaQueryChainWrapper<TStudyListen> wrapper = studyListenService.lambdaQuery().eq(TStudyListen::getWeek, week)
@@ -688,7 +690,7 @@
            @ApiImplicitParam(value = "周目", name = "week", dataType = "Integer", required = true),
            @ApiImplicitParam(value = "所属day", name = "day", dataType = "Integer", required = true)
    })
    public AjaxResult<Map<String, Object>> pictureSelectVoice(@RequestParam Integer week, @RequestParam Integer day) {
    public AjaxResult<StudyLookResultVO> pictureSelectVoice(@RequestParam Integer week, @RequestParam Integer day) {
        // 判断当前登录用户是否为 会员
        Boolean isVip = userService.isVip();
        LambdaQueryChainWrapper<TStudyLook> wrapper = studyLookService.lambdaQuery().eq(TStudyLook::getWeek, week)
@@ -714,7 +716,7 @@
            @ApiImplicitParam(value = "周目", name = "week", dataType = "Integer", required = true),
            @ApiImplicitParam(value = "所属day", name = "day", dataType = "Integer", required = true)
    })
    public AjaxResult<Map<String, Object>> induceExclude(@RequestParam Integer week, @RequestParam Integer day) {
    public AjaxResult<StudyInductionResultVO> induceExclude(@RequestParam Integer week, @RequestParam Integer day) {
        // 判断当前登录用户是否为 会员
        Boolean isVip = userService.isVip();
        LambdaQueryChainWrapper<TStudyInduction> wrapper = studyInductionService.lambdaQuery().eq(TStudyInduction::getWeek, week)
@@ -739,7 +741,7 @@
            @ApiImplicitParam(value = "周目", name = "week", dataType = "Integer", required = true),
            @ApiImplicitParam(value = "所属day", name = "day", dataType = "Integer", required = true)
    })
    public AjaxResult<Map<String, Object>> questionsAndAnswers(@RequestParam Integer week, @RequestParam Integer day) {
    public AjaxResult<StudyAnswerResultVO> questionsAndAnswers(@RequestParam Integer week, @RequestParam Integer day) {
        // 判断当前登录用户是否为 会员
        Boolean isVip = userService.isVip();
        LambdaQueryChainWrapper<TStudyAnswer> wrapper = studyAnswerService.lambdaQuery().eq(TStudyAnswer::getWeek, week)
@@ -764,10 +766,16 @@
            @ApiImplicitParam(value = "周目", name = "week", dataType = "Integer", required = true),
            @ApiImplicitParam(value = "所属day", name = "day", dataType = "Integer", required = true)
    })
    public AjaxResult<Map<String, Object>> pictureMateVoice(@RequestParam Integer week, @RequestParam Integer day) {
        // 判断当前登录用户是否为 会员 todo
        TStudyPair pair = studyPairService.lambdaQuery().eq(TStudyPair::getWeek, week)
                .eq(TStudyPair::getDay, day).eq(TStudyPair::getDisabled, 0).one();
    public AjaxResult<StudyPairResultVO> pictureMateVoice(@RequestParam Integer week, @RequestParam Integer day) {
        // 判断当前登录用户是否为 会员
        Boolean isVip = userService.isVip();
        LambdaQueryChainWrapper<TStudyPair> wrapper = studyPairService.lambdaQuery().eq(TStudyPair::getWeek, week)
                .eq(TStudyPair::getDay, day).eq(TStudyPair::getDisabled, 0);
        // 非会员只能查看非会员题目,会员可以查看所有题目
        if (!isVip) {
            wrapper.eq(TStudyPair::getIsVip, 0);
        }
        TStudyPair pair = wrapper.one();
        return AjaxResult.success(studyService.pictureMateVoice(week, day, pair));
    }
@@ -783,13 +791,11 @@
            @ApiImplicitParam(value = "难度(0入门、1中级、2困难)", name = "difficulty", dataType = "Integer", required = true),
            @ApiImplicitParam(value = "所属周目", name = "week", dataType = "Integer", required = true)
    })
    public AjaxResult<Map<String, Object>> gameHearing(@RequestParam Integer difficulty, @RequestParam Integer week) {
        Map<String, Object> result = new HashMap<>(8);
    public AjaxResult<StudyGamerResultVO> gameHearing(@RequestParam Integer difficulty, @RequestParam Integer week) {
        TGame game = gameService.lambdaQuery().eq(TGame::getWeek, week)
                .eq(TGame::getDisabled, 0).one();
        game.setIntegral(game.getIntegral().split(",")[difficulty]);
        game.setTime(game.getTime().split(",")[difficulty]);
        result.put("game", game);
        // 检验是否完成难度
        studyService.checkDifficulty(difficulty, week, game);
        List<String> subjectId = getSubjectId(week);
@@ -809,8 +815,8 @@
            // 获取对应的数据并加入结果列表
            subjectData.add(subjectId.get(randomIndex));
        }
        result.put("subject", subjectService.lambdaQuery().in(TSubject::getId, subjectData).eq(TSubject::getState, 1).list());
        return AjaxResult.success(result);
        return AjaxResult.success(new StudyGamerResultVO(game,
                subjectService.lambdaQuery().in(TSubject::getId, subjectData).eq(TSubject::getState, 1).list()));
    }
    /**
@@ -825,10 +831,8 @@
            @ApiImplicitParam(value = "难度(0入门、1中级、2困难)", name = "difficulty", dataType = "Integer", required = true),
            @ApiImplicitParam(value = "所属周目", name = "week", dataType = "Integer", required = true)
    })
    public AjaxResult<Map<String, Object>> gameMemory(@RequestParam Integer difficulty, @RequestParam Integer week) {
        Map<String, Object> result = new HashMap<>(8);
    public AjaxResult<StudyGamerResultVO> gameMemory(@RequestParam Integer difficulty, @RequestParam Integer week) {
        TGame game = gameService.lambdaQuery().eq(TGame::getWeek, week).eq(TGame::getDisabled, 0).one();
        result.put("game", game);
        // 检验是否完成难度
        studyService.checkDifficulty(difficulty, week, game);
        List<String> subjectId = getSubjectId(week);
@@ -848,8 +852,8 @@
            // 获取对应的数据并加入结果列表
            subjectData.add(subjectId.get(randomIndex));
        }
        result.put("subject", subjectService.lambdaQuery().in(TSubject::getId, subjectData).eq(TSubject::getState, 1).list());
        return AjaxResult.success(result);
        return AjaxResult.success(new StudyGamerResultVO(game,
                subjectService.lambdaQuery().in(TSubject::getId, subjectData).eq(TSubject::getState, 1).list()));
    }
    /**
@@ -860,7 +864,7 @@
     */
    @PostMapping("/gameAchievement")
    @ApiOperation(value = "完成游戏-记录游戏测试成绩", tags = {"完成游戏-记录游戏测试成绩"})
    public AjaxResult<?> gameAchievement(@RequestBody CompleteGameDTO completeStudy) {
    public AjaxResult<Boolean> gameAchievement(@RequestBody CompleteGameDTO completeStudy) {
        TGame game = gameService.getById(completeStudy.getGameId());
        // 游戏测试记录
        Boolean add = gameRecordService.add(completeStudy);
@@ -905,15 +909,13 @@
    @ApiImplicitParams({
            @ApiImplicitParam(value = "所属周目", name = "week", dataType = "Integer", required = true)
    })
    public AjaxResult<Map<String, Object>> lookPictureDbu(@RequestParam Integer week) {
    public AjaxResult<StudyStoryListenResultVO> lookPictureDbu(@RequestParam Integer week) {
        // 看图配音信息
        TStoryListen listen = storyListenService.lambdaQuery().eq(TStoryListen::getWeek, week).one();
        // 获取对应图片语音
        List<String> list = Arrays.asList(listen.getLookStory().split(","));
        Map<String, Object> result = new HashMap<>(8);
        result.put("listen", listen);
        result.put("info", subjectService.lambdaQuery().in(TSubject::getId, list).list());
        return AjaxResult.success(result);
        return AjaxResult.success(new StudyStoryListenResultVO(listen,
                subjectService.lambdaQuery().in(TSubject::getId, list).eq(TSubject::getState, 1).list()));
    }
    /**
@@ -926,15 +928,13 @@
    @ApiImplicitParams({
            @ApiImplicitParam(value = "所属周目", name = "week", dataType = "Integer", required = true)
    })
    public AjaxResult<Map<String, Object>> frameworkMemory(@RequestParam Integer week) {
    public AjaxResult<StudyStoryListenResultVO> frameworkMemory(@RequestParam Integer week) {
        // 看图配音信息
        TStoryListen listen = storyListenService.lambdaQuery().eq(TStoryListen::getWeek, week).one();
        // 获取对应图片语音
        List<String> list = Arrays.asList(listen.getStory().split(","));
        Map<String, Object> result = new HashMap<>(8);
        result.put("listen", listen);
        result.put("info", subjectService.lambdaQuery().in(TSubject::getId, list).list());
        return AjaxResult.success(result);
        return AjaxResult.success(new StudyStoryListenResultVO(listen,
                subjectService.lambdaQuery().in(TSubject::getId, list).eq(TSubject::getState, 1).list()));
    }
    /**
@@ -970,7 +970,7 @@
            @ApiImplicitParam(value = "完成答题/完成听故事", name = "method", dataType = "String", required = true)
    })
    public AjaxResult<Boolean> completeStory(@RequestParam Integer integral, @RequestParam Integer storyId,
                              @RequestParam String method) {
                                             @RequestParam String method) {
        // 添加积分明细记录
        Boolean add = integralRecordService.add(String.valueOf(integral), method);
        // 用户信息
@@ -983,16 +983,15 @@
    @GetMapping("/studyRecord")
    @ApiOperation(value = "个人中心-学习记录", tags = {"个人中心-学习记录"})
    public AjaxResult<Map<String, Object>> studyRecord() {
    public AjaxResult<StudyRecordResultVO> studyRecord() {
        Integer userId = tokenService.getLoginUserStudy().getUserid();
        Map<String, Object> result = new HashMap<>(8);
        // 学习记录
        result.put("record", userStudyService.lambdaQuery().eq(TUserStudy::getUserId, userId)
                .eq(TUserStudy::getDisabled, 0).one());
        TUserStudy studyRecord = userStudyService.lambdaQuery().eq(TUserStudy::getUserId, userId)
                .eq(TUserStudy::getDisabled, 0).one();
        // 游戏测试成绩
        result.put("gameAchievement", gameRecordService.lambdaQuery().eq(TGameRecord::getUserId, userId)
                .eq(TGameRecord::getDisabled, 0).list());
        return AjaxResult.success(result);
        List<TGameRecord> gameRecordList = gameRecordService.lambdaQuery().eq(TGameRecord::getUserId, userId)
                .eq(TGameRecord::getDisabled, 0).list();
        return AjaxResult.success(new StudyRecordResultVO(studyRecord,gameRecordList));
    }
    @GetMapping("/integralDetail")
@@ -1021,13 +1020,38 @@
            @ApiImplicitParam(value = "变动源(完成学习、完成游戏...)", name = "method", dataType = "String", required = true)
    })
    public R<Boolean> addIntegralDetail(@RequestParam("integral") String integral, @RequestParam("method") String method) {
        // 当前登录用户
        LoginUserParent userStudy = tokenService.getLoginUserStudy();
        // 生成积分明细信息
        TIntegralRecord integralRecord = new TIntegralRecord();
        integralRecord.setIntegral(integral);
        integralRecord.setMethod(method);
        integralRecord.setUserId(tokenService.getLoginUserStudy().getUserid());
        integralRecord.setUserId(userStudy.getUserid());
        integralRecord.setDisabled(Boolean.FALSE);
        integralRecord.setCreateBy(userStudy.getPhone());
        integralRecord.setCreateTime(new Date());
        integralRecord.setUpdateBy(userStudy.getPhone());
        integralRecord.setUpdateTime(new Date());
        return R.ok(integralRecordService.save(integralRecord));
    }
    /**
     * 用户积分变动(增加或减少)-用于远程调用
     *
     * @param integral 积分变动信息
     * @param method   变动源
     */
    @GetMapping("/exchangeIntegral")
    @ApiOperation(value = "用户积分变动", tags = {"用户积分变动"})
    public R<Boolean> exchangeIntegral(@RequestParam("integral") Integer integral, @RequestParam("method") String method) {
        TUser user = userService.getById(tokenService.getLoginUserStudy().getUserid());
        if (Constants.BURDEN.equals(method)) {
            user.setIntegral(user.getIntegral() - integral);
        } else {
            user.setIntegral(user.getIntegral() + integral);
        }
        return R.ok(userService.updateById(user));
    }
}