hjl
2024-05-21 ffb13ddfb98ddc0f360caa313a93b5dc8d6483f5
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java
@@ -7,19 +7,17 @@
import com.ruoyi.common.core.constant.RedisConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.GlobalException;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.common.redis.service.RedisService;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.goods.api.feignClient.GoodsClient;
import com.ruoyi.goods.api.model.TGoodsVO;
import com.ruoyi.study.domain.*;
import com.ruoyi.study.dto.*;
import com.ruoyi.study.service.*;
import com.ruoyi.study.vo.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
@@ -116,9 +114,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());
@@ -354,14 +351,43 @@
        List<TStudy> count = studyService.list(new QueryWrapper<TStudy>()
                .eq("type", 1));
        studyListVO.setWeeks(count.size());
        // todo 补充开始学习人数
        studyListVO.setCount(0);
        studyListVO.setName("听");
        // 查询听类型有多少周目
        res.add(studyListVO);
        // 后续类型 不在1.0功能中
        for (int i = 1; i <= 6; i++) {
            res.add(new StudyListVO(0, 0));
        }
        StudyListVO studyListVO1 = new StudyListVO();
        studyListVO1.setWeeks(0);
        studyListVO1.setCount(0);
        studyListVO1.setName("说");
        res.add(studyListVO1);
        StudyListVO studyListVO2 = new StudyListVO();
        studyListVO2.setWeeks(0);
        studyListVO2.setCount(0);
        studyListVO2.setName("认读");
        res.add(studyListVO2);
        StudyListVO studyListVO3 = new StudyListVO();
        studyListVO3.setWeeks(0);
        studyListVO3.setCount(0);
        studyListVO3.setName("阅读");
        res.add(studyListVO3);
        StudyListVO studyListVO4 = new StudyListVO();
        studyListVO4.setWeeks(0);
        studyListVO4.setCount(0);
        studyListVO4.setName("练习");
        res.add(studyListVO4);
        StudyListVO studyListVO5 = new StudyListVO();
        studyListVO5.setWeeks(0);
        studyListVO5.setCount(0);
        studyListVO5.setName("智能互动问答");
        res.add(studyListVO5);
        StudyListVO studyListVO6 = new StudyListVO();
        studyListVO6.setWeeks(0);
        studyListVO6.setCount(0);
        studyListVO6.setName("智能识别");
        res.add(studyListVO6);
        return R.ok(res);
    }
@@ -580,9 +606,13 @@
     */
    @GetMapping("/weekList")
    @ApiOperation(value = "周目列表", tags = {"周目列表"})
    public R<List<StudyWeekDTO>> weekList(@RequestParam(defaultValue = "1") Integer type, @RequestParam Integer quarter) {
    @ApiImplicitParams({
            @ApiImplicitParam(value = "所属类型", name = "type", dataType = "Integer", required = true),
            @ApiImplicitParam(value = "季度", name = "quarter", dataType = "Integer", required = true)
    })
    public AjaxResult<List<StudyWeekDTO>> weekList(@RequestParam(defaultValue = "1") Integer type, @RequestParam Integer quarter) {
        List<StudyWeekDTO> result = studyService.weekList(type, quarter);
        return R.ok(result);
        return AjaxResult.success(result);
    }
    /**
@@ -593,9 +623,13 @@
     */
    @GetMapping("/studySchedule")
    @ApiOperation(value = "获取用户学习进度", tags = {"获取用户学习进度"})
    public R<TUserStudy> studySchedule(Integer week, Integer day) {
        TUserStudy result = studyService.studySchedule(String.valueOf(SecurityUtils.getUserId()), week, day);
        return R.ok(result);
    @ApiImplicitParams({
            @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) {
        TUserStudy result = studyService.studySchedule(String.valueOf(tokenService.getLoginUserStudy().getUserid()), week, day);
        return AjaxResult.success(result);
    }
    /**
@@ -604,7 +638,7 @@
    @GetMapping("/goodRecommend")
    @ApiOperation(value = "可兑换商品推荐", tags = {"可兑换商品推荐"})
    public R<List<TGoodsVO>> studySchedule() {
        return goodsClient.goodRecommend(String.valueOf(SecurityUtils.getUserId()));
        return goodsClient.goodRecommend(String.valueOf(tokenService.getLoginUserStudy().getUserid()));
    }
    /**
@@ -612,9 +646,9 @@
     */
    @PostMapping("/exitLearning")
    @ApiOperation(value = "退出学习(记录学习进度等信息)", tags = {"退出学习(记录学习进度等信息)"})
    public R<Boolean> exitLearning(@RequestBody TUserStudy userStudy) {
    public AjaxResult<Boolean> exitLearning(@RequestBody TUserStudy userStudy) {
        // 学习时长处理
        return R.ok(userStudyService.updateById(userStudy));
        return AjaxResult.success(userStudyService.updateById(userStudy));
    }
    /**
@@ -625,12 +659,16 @@
     */
    @GetMapping("/listenSelectPicture")
    @ApiOperation(value = "自主学习1-听音选图", tags = {"自主学习1-听音选图"})
    public R<Map<String, Object>> listenSelectPicture(@RequestParam Integer week, @RequestParam Integer day) {
    @ApiImplicitParams({
            @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) {
        // 判断当前登录用户是否为 会员
        Boolean isVip = userService.isVip();
        List<TStudyListen> studyListens = studyListenService.lambdaQuery().eq(TStudyListen::getWeek, week)
                .eq(TStudyListen::getDay, day).eq(TStudyListen::getDisabled, 0).list();
        return R.ok(studyService.listenSelectPicture(week, day, studyListens));
        return AjaxResult.success(studyService.listenSelectPicture(week, day, studyListens));
    }
    /**
@@ -641,7 +679,11 @@
     */
    @GetMapping("/pictureSelectVoice")
    @ApiOperation(value = "自主学习2-看图选音", tags = {"自主学习2-看图选音"})
    public R<Map<String, Object>> pictureSelectVoice(@RequestParam Integer week, @RequestParam Integer day) {
    @ApiImplicitParams({
            @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) {
        // 判断当前登录用户是否为 会员
        Boolean isVip = userService.isVip();
        LambdaQueryChainWrapper<TStudyLook> wrapper = studyLookService.lambdaQuery().eq(TStudyLook::getWeek, week)
@@ -652,7 +694,7 @@
        }
        List<TStudyLook> lookList = studyLookService.lambdaQuery().eq(TStudyLook::getWeek, week)
                .eq(TStudyLook::getDay, day).eq(TStudyLook::getDisabled, 0).list();
        return R.ok(studyService.pictureSelectVoice(week, day, lookList));
        return AjaxResult.success(studyService.pictureSelectVoice(week, day, lookList));
    }
    /**
@@ -663,7 +705,11 @@
     */
    @GetMapping("/induceExclude")
    @ApiOperation(value = "自主学习3-归纳排除", tags = {"自主学习3-归纳排除"})
    public R<Map<String, Object>> induceExclude(@RequestParam Integer week, @RequestParam Integer day) {
    @ApiImplicitParams({
            @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) {
        // 判断当前登录用户是否为 会员
        Boolean isVip = userService.isVip();
        LambdaQueryChainWrapper<TStudyInduction> wrapper = studyInductionService.lambdaQuery().eq(TStudyInduction::getWeek, week)
@@ -673,7 +719,7 @@
            wrapper.eq(TStudyInduction::getIsVip, 0);
        }
        List<TStudyInduction> inductionList = wrapper.list();
        return R.ok(studyService.induceExclude(week, day, inductionList));
        return AjaxResult.success(studyService.induceExclude(week, day, inductionList));
    }
    /**
@@ -684,7 +730,11 @@
     */
    @GetMapping("/questionsAndAnswers")
    @ApiOperation(value = "自主学习4-有问有答", tags = {"自主学习4-有问有答"})
    public R<Map<String, Object>> questionsAndAnswers(@RequestParam Integer week, @RequestParam Integer day) {
    @ApiImplicitParams({
            @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) {
        // 判断当前登录用户是否为 会员
        Boolean isVip = userService.isVip();
        LambdaQueryChainWrapper<TStudyAnswer> wrapper = studyAnswerService.lambdaQuery().eq(TStudyAnswer::getWeek, week)
@@ -694,7 +744,7 @@
            wrapper.eq(TStudyAnswer::getIsVip, 0);
        }
        List<TStudyAnswer> answerList = wrapper.list();
        return R.ok(studyService.questionsAndAnswers(week, day, answerList));
        return AjaxResult.success(studyService.questionsAndAnswers(week, day, answerList));
    }
    /**
@@ -705,11 +755,15 @@
     */
    @GetMapping("/pictureMateVoice")
    @ApiOperation(value = "自主学习5-音图相配", tags = {"自主学习5-音图相配"})
    public R<Map<String, Object>> pictureMateVoice(@RequestParam Integer week, @RequestParam Integer day) {
    @ApiImplicitParams({
            @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();
        return R.ok(studyService.pictureMateVoice(week, day, pair));
        return AjaxResult.success(studyService.pictureMateVoice(week, day, pair));
    }
    /**
@@ -720,7 +774,11 @@
     */
    @GetMapping("/gameHearing")
    @ApiOperation(value = "自主游戏1-超级听力", tags = {"自主游戏1-超级听力(difficulty: 0入门、1中级、2高级)"})
    public R<Map<String, Object>> gameHearing(@RequestParam Integer difficulty, @RequestParam Integer week) {
    @ApiImplicitParams({
            @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);
        TGame game = gameService.lambdaQuery().eq(TGame::getWeek, week)
                .eq(TGame::getDisabled, 0).one();
@@ -747,7 +805,7 @@
            subjectData.add(subjectId.get(randomIndex));
        }
        result.put("subject", subjectService.lambdaQuery().in(TSubject::getId, subjectData).eq(TSubject::getState, 1).list());
        return R.ok(result);
        return AjaxResult.success(result);
    }
    /**
@@ -758,7 +816,11 @@
     */
    @GetMapping("/gameMemory")
    @ApiOperation(value = "自主游戏2-超级记忆", tags = {"自主游戏2-超级记忆(difficulty: 0入门、1中级、2高级)"})
    public R<Map<String, Object>> gameMemory(@RequestParam Integer difficulty, @RequestParam Integer week) {
    @ApiImplicitParams({
            @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);
        TGame game = gameService.lambdaQuery().eq(TGame::getWeek, week).eq(TGame::getDisabled, 0).one();
        result.put("game", game);
@@ -782,7 +844,7 @@
            subjectData.add(subjectId.get(randomIndex));
        }
        result.put("subject", subjectService.lambdaQuery().in(TSubject::getId, subjectData).eq(TSubject::getState, 1).list());
        return R.ok(result);
        return AjaxResult.success(result);
    }
    /**
@@ -793,14 +855,14 @@
     */
    @PostMapping("/gameAchievement")
    @ApiOperation(value = "完成游戏-记录游戏测试成绩", tags = {"完成游戏-记录游戏测试成绩"})
    public R<?> gameAchievement(@RequestBody CompleteGameDTO completeStudy) {
    public AjaxResult<?> gameAchievement(@RequestBody CompleteGameDTO completeStudy) {
        TGame game = gameService.getById(completeStudy.getGameId());
        // 游戏测试记录
        Boolean add = gameRecordService.add(completeStudy);
        // 添加积分明细记录
        add = add && integralRecordService.add(game.getIntegral(), completeStudy.getMethod());
        // 用户账户添加积分
        return R.ok(add);
        return AjaxResult.success(add);
    }
    private List<String> getSubjectId(Integer week) {
@@ -835,7 +897,10 @@
     */
    @GetMapping("/lookPictureDbu")
    @ApiOperation(value = "自主故事1-看图配音", tags = {"自主故事1-看图配音"})
    public R<Map<String, Object>> lookPictureDbu(@RequestParam Integer week) {
    @ApiImplicitParams({
            @ApiImplicitParam(value = "所属周目", name = "week", dataType = "Integer", required = true)
    })
    public AjaxResult<Map<String, Object>> lookPictureDbu(@RequestParam Integer week) {
        // 看图配音信息
        TStoryListen listen = storyListenService.lambdaQuery().eq(TStoryListen::getWeek, week).one();
        // 获取对应图片语音
@@ -843,7 +908,7 @@
        Map<String, Object> result = new HashMap<>(8);
        result.put("listen", listen);
        result.put("info", subjectService.lambdaQuery().in(TSubject::getId, list).list());
        return R.ok(result);
        return AjaxResult.success(result);
    }
    /**
@@ -853,7 +918,10 @@
     */
    @GetMapping("/frameworkMemory")
    @ApiOperation(value = "自主故事2-框架记忆", tags = {"自主故事2-框架记忆"})
    public R<Map<String, Object>> frameworkMemory(@RequestParam Integer week) {
    @ApiImplicitParams({
            @ApiImplicitParam(value = "所属周目", name = "week", dataType = "Integer", required = true)
    })
    public AjaxResult<Map<String, Object>> frameworkMemory(@RequestParam Integer week) {
        // 看图配音信息
        TStoryListen listen = storyListenService.lambdaQuery().eq(TStoryListen::getWeek, week).one();
        // 获取对应图片语音
@@ -861,7 +929,7 @@
        Map<String, Object> result = new HashMap<>(8);
        result.put("listen", listen);
        result.put("info", subjectService.lambdaQuery().in(TSubject::getId, list).list());
        return R.ok(result);
        return AjaxResult.success(result);
    }
    /**
@@ -871,9 +939,9 @@
     */
    @PostMapping("/completeLearning")
    @ApiOperation(value = "完成学习", tags = {"完成学习"})
    public R<Boolean> completeLearning(@RequestBody CompleteStudyDTO completeStudy) {
    public AjaxResult<Boolean> completeLearning(@RequestBody CompleteStudyDTO completeStudy) {
        // 登录用户id
        Long userId = SecurityUtils.getUserId();
        Integer userId = tokenService.getLoginUserStudy().getUserid();
        // 获取user详细信息,改变积分
        TUser user = userService.getById(userId);
        user.setIntegral(user.getIntegral() + completeStudy.getIntegral());
@@ -882,8 +950,8 @@
        TIntegralRecord integralRecord = new TIntegralRecord();
        integralRecord.setIntegral(String.valueOf(completeStudy.getIntegral()));
        integralRecord.setMethod(completeStudy.getMethod());
        integralRecord.setUserId(SecurityUtils.getUserId().intValue());
        return R.ok(update && integralRecordService.save(integralRecord));
        integralRecord.setUserId(tokenService.getLoginUserStudy().getUserid());
        return AjaxResult.success(update && integralRecordService.save(integralRecord));
    }
    /**
@@ -891,22 +959,27 @@
     */
    @GetMapping("/completeStory")
    @ApiOperation(value = "完成故事学习", tags = {"完成故事学习"})
    public R<?> completeStory(@RequestParam Integer integral, @RequestParam Integer storyId,
                              @RequestParam @ApiParam("完成答题/完成听故事") String method) {
    @ApiImplicitParams({
            @ApiImplicitParam(value = "积分数量", name = "integral", dataType = "Integer", required = true),
            @ApiImplicitParam(value = "故事id", name = "storyId", dataType = "Integer", required = true),
            @ApiImplicitParam(value = "完成答题/完成听故事", name = "method", dataType = "String", required = true)
    })
    public AjaxResult<Boolean> completeStory(@RequestParam Integer integral, @RequestParam Integer storyId,
                              @RequestParam String method) {
        // 添加积分明细记录
        Boolean add = integralRecordService.add(String.valueOf(integral), method);
        // 用户信息
        Long userId = SecurityUtils.getUserId();
        Integer userId = tokenService.getLoginUserStudy().getUserid();
        TUser user = userService.lambdaQuery().eq(TUser::getId, userId).one();
        // 返回结果
        user.setIntegral(user.getIntegral() + integral);
        return R.ok(add && userService.updateById(user));
        return AjaxResult.success(add && userService.updateById(user));
    }
    @GetMapping("/studyRecord")
    @ApiOperation(value = "个人中心-学习记录", tags = {"个人中心-学习记录"})
    public R<Map<String, Object>> studyRecord() {
        Long userId = SecurityUtils.getUserId();
    public AjaxResult<Map<String, Object>> studyRecord() {
        Integer userId = tokenService.getLoginUserStudy().getUserid();
        Map<String, Object> result = new HashMap<>(8);
        // 学习记录
        result.put("record", userStudyService.lambdaQuery().eq(TUserStudy::getUserId, userId)
@@ -914,15 +987,20 @@
        // 游戏测试成绩
        result.put("gameAchievement", gameRecordService.lambdaQuery().eq(TGameRecord::getUserId, userId)
                .eq(TGameRecord::getDisabled, 0).list());
        return R.ok(result);
        return AjaxResult.success(result);
    }
    @GetMapping("/integralDetail")
    @ApiOperation(value = "个人中心-积分明细", tags = {"个人中心-积分明细"})
    public R<IPage<TIntegralRecord>> integralDetail(String time,
                                                    @RequestParam("pageNum") Integer pageNum,
                                                    @RequestParam("pageSize") Integer pageSize) {
        return R.ok(integralRecordService.integralDetail(new Page<>(pageNum, pageSize), SecurityUtils.getUserId(), time));
    @ApiImplicitParams({
            @ApiImplicitParam(value = "查询时间", name = "time", dataType = "Integer"),
            @ApiImplicitParam(value = "页码", name = "pageNum", dataType = "Integer", required = true),
            @ApiImplicitParam(value = "每页显示条数", name = "pageSize", dataType = "Integer", required = true)
    })
    public AjaxResult<IPage<TIntegralRecord>> integralDetail(String time,
                                                             @RequestParam("pageNum") Integer pageNum,
                                                             @RequestParam("pageSize") Integer pageSize) {
        return AjaxResult.success(integralRecordService.integralDetail(new Page<>(pageNum, pageSize), tokenService.getLoginUserStudy().getUserid(), time));
    }
    /**
@@ -933,11 +1011,15 @@
     */
    @GetMapping("/addIntegralDetail")
    @ApiOperation(value = "添加-积分明细", tags = {"添加-积分明细"})
    @ApiImplicitParams({
            @ApiImplicitParam(value = "积分数量", name = "integral", dataType = "Integer", required = true),
            @ApiImplicitParam(value = "变动源(完成学习、完成游戏...)", name = "method", dataType = "String", required = true)
    })
    public R<Boolean> addIntegralDetail(@RequestParam("integral") String integral, @RequestParam("method") String method) {
        TIntegralRecord integralRecord = new TIntegralRecord();
        integralRecord.setIntegral(integral);
        integralRecord.setMethod(method);
        integralRecord.setUserId(SecurityUtils.getUserId().intValue());
        integralRecord.setUserId(tokenService.getLoginUserStudy().getUserid());
        integralRecord.setDisabled(Boolean.FALSE);
        return R.ok(integralRecordService.save(integralRecord));
    }