无关风月
2024-06-18 610604ea8fbdc1f2b0f54e90a689b9ff449f092c
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java
@@ -710,7 +710,7 @@
        if (null == loginStudy) {
            return R.tokenError("登录失效!");
        }
        TUserStudy result = studyService.studySchedule(String.valueOf(loginStudy.getUserid()), week);
        TUserStudy result = studyService.studySchedule(String.valueOf(loginStudy.getUserid()));
        if (null != result) {
            // 计算当前周 day 1-5的总进度
            int computeSchedule = studyService.computeSchedule(result, week);
@@ -734,6 +734,42 @@
    public R<List<StudyWeekDTO>> weekList(@RequestParam(defaultValue = "1") Integer type, @RequestParam Integer quarter) {
        List<StudyWeekDTO> result = studyService.weekList(type, quarter);
        return R.ok(result);
    }
    /**
     * 获取在线时间赠送积分信息
     */
    @GetMapping("/onlineDuration")
    @ApiOperation(value = "获取在线时间赠送积分信息(单位分钟)", tags = {"学习端-首页"})
    public R<String> onlineDuration() {
        TSysSet sysSet = managementClient.promptVoice().getData();
        if (null == sysSet) {
            throw new GlobalException("获取在线时间赠送积分信息失败!");
        }
        // 返回在线时长
        return R.ok(sysSet.getTime());
    }
    /**
     * 根据在线时间赠送积分(定时任务)
     */
    @GetMapping("/giveIntegral")
    @ApiOperation(value = "根据在线时间赠送积分(定时任务)", tags = {"学习端-首页"})
    public R<Boolean> giveIntegral() {
        LoginUserParent loginStudy = tokenService.getLoginUserStudy();
        if (null == loginStudy) {
            return R.tokenError("登录失效!");
        }
        TSysSet sysSet = managementClient.promptVoice().getData();
        if (null == sysSet) {
            throw new GlobalException("获取在线时间赠送积分信息失败!");
        }
        String integral = sysSet.getIntegral();
        TUser user = userService.lambdaQuery().eq(TUser::getId, loginStudy.getUserid())
                .eq(TUser::getDisabled, 0).one();
        boolean update = userService.lambdaUpdate().set(TUser::getIntegral, user.getIntegral() + Integer.parseInt(integral))
                .eq(TUser::getId, loginStudy.getUserid()).update();
        return R.ok(update);
    }
    /**
@@ -762,7 +798,6 @@
                .eq(TSubjectRecord::getDisabled, 0).one();
        // 返回结果
        SubjectRecordResultVO result;
        SubjectRecordResultVO data = subjectRecordService.recordResult(subjectRecord, loginStudy.getUserid());
        if (null != subjectRecord) {
            subjectRecordService.lambdaUpdate().set(TSubjectRecord::getDisabled, 1)
                    .eq(TSubjectRecord::getId, subjectRecord.getId()).update();
@@ -1064,6 +1099,10 @@
    })
    public R<StudyGameResultVO> gameHearing(@RequestParam Integer quarter, @RequestParam Integer difficulty,
                                            @RequestParam Integer week) {
        LoginUserParent userStudy = tokenService.getLoginUserStudy();
        if (null == userStudy) {
            return R.tokenError("登录失效!");
        }
        Integer[] array = {0, 1, 2};
        if (!Arrays.stream(array).collect(Collectors.toList()).contains(difficulty)) {
            throw new GlobalException("请选择符合规则的游戏难度!");
@@ -1075,7 +1114,7 @@
        game.setIntegral(game.getIntegral().split(",")[difficulty]);
        game.setTime(game.getTime().split(",")[difficulty]);
        // 检验是否完成难度
        studyService.checkDifficulty(difficulty, week, game);
        studyService.checkDifficulty(difficulty, week, game, userStudy.getUserid());
        List<String> subjectId = getSubjectId(week);
        List<String> newSubjectId = subjectId.stream().map(data -> {
            if (data.startsWith(Constants.REDUCE)) {
@@ -1218,7 +1257,23 @@
            user.setIntegral(user.getIntegral() + availableIntegral);
            add = add && userService.updateById(user);
        }
        return R.ok(add);
        // 超级记忆逻辑
        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);
            return R.ok(add && completeStudy.getAccuracy() >= Integer.parseInt(game.getAnswerRate()));
        } else {
            // 超级听力需根据正确率判断是否允许进入下一难度
            userStudyService.gameHearing(game, userid, completeStudy);
            String rate = game.getRate().split(",")[completeStudy.getDifficulty()];
            return R.ok(add && completeStudy.getAccuracy() >= Integer.parseInt(rate));
        }
    }
    private List<String> getSubjectId(Integer week) {