44323
2024-05-22 57145eb45c9b339eecc97a5037c60c2f8da8f8fd
Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/DolphinEnglish
16个文件已修改
2个文件已添加
325 ■■■■■ 已修改文件
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/handler/GlobalExceptionHandler.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/TGoodsController.java 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/ITGoodsService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/TGoodsServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java 74 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java 87 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TStudyAnswer.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStudyServiceImpl.java 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/AnswerVO.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/StudyAnswerResultVO.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/StudyAnswerSubjectVO.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/StudyGamerResultVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/StudyInductionResultVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/StudyListenResultVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/StudyLookResultVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/StudyPairResultVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/StudyRecordResultVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/StudyStoryListenResultVO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/handler/GlobalExceptionHandler.java
@@ -1,6 +1,7 @@
package com.ruoyi.common.security.handler;
import com.ruoyi.common.core.constant.HttpStatus;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.DemoModeException;
import com.ruoyi.common.core.exception.GlobalException;
import com.ruoyi.common.core.exception.InnerAuthException;
@@ -143,8 +144,8 @@
     * 捕获全局自定义异常
     */
    @ExceptionHandler(GlobalException.class)
    public AjaxResult globalExceptionHandler(GlobalException e) {
        return AjaxResult.error(e.getMessage());
    public R<String> globalExceptionHandler(GlobalException e) {
        return R.fail(e.getMessage());
    }
}
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/TGoodsController.java
@@ -3,7 +3,6 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.core.web.page.PageInfo;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.goods.domain.*;
@@ -165,8 +164,8 @@
     */
    @GetMapping("/exchangeRecord")
    @ApiOperation(value = "兑换记录", tags = {"兑换记录"})
    public AjaxResult<List<TOrder>> exchangeRecord() {
        return AjaxResult.success(orderService.lambdaQuery().eq(TOrder::getUserId, tokenService.getLoginUserStudy().getUserid())
    public R<List<TOrder>> exchangeRecord() {
        return R.ok(orderService.lambdaQuery().eq(TOrder::getUserId, tokenService.getLoginUserStudy().getUserid())
                .orderByDesc(TOrder::getCreateTime).list());
    }
@@ -178,10 +177,10 @@
    @ApiImplicitParams({
            @ApiImplicitParam(value = "订单id", name = "id", dataType = "String", required = true)
    })
    public AjaxResult confirm(@RequestParam Integer id) {
    public R<Boolean> confirm(@RequestParam Integer id) {
        TOrder byId = orderService.getById(id);
        byId.setState(3);
        return AjaxResult.success(orderService.updateById(byId));
        return R.ok(orderService.updateById(byId));
    }
    /**
@@ -189,8 +188,8 @@
     */
    @GetMapping("/shopAddress")
    @ApiOperation(value = "获取用户收货地址", tags = {"获取用户收货地址"})
    public AjaxResult<List<Recipient>> shopAddress() {
        return AjaxResult.success(recipientService.lambdaQuery().eq(Recipient::getUserId,
    public R<List<Recipient>> shopAddress() {
        return R.ok(recipientService.lambdaQuery().eq(Recipient::getUserId,
                tokenService.getLoginUserStudy().getUserid()).list());
    }
@@ -199,9 +198,9 @@
     */
    @PostMapping("/addressSaveOrUpdate")
    @ApiOperation(value = "新增收货地址/修改收货地址", tags = {"新增收货地址/修改收货地址"})
    public AjaxResult<String> addressSave(@RequestBody Recipient recipient) {
    public R<String> addressSave(@RequestBody Recipient recipient) {
        recipient.setUserId(tokenService.getLoginUserStudy().getUserid());
        return AjaxResult.success(recipientService.addressSaveOrUpdate(recipient));
        return R.ok(recipientService.addressSaveOrUpdate(recipient));
    }
    /**
@@ -212,8 +211,8 @@
    @ApiImplicitParams({
            @ApiImplicitParam(value = "地址信息id", name = "id", dataType = "String", required = true)
    })
    public AjaxResult<String> addressDelete(@RequestParam String id) {
        return AjaxResult.success(recipientService.removeById(id) ? "删除成功!" : "删除失败!");
    public R<String> addressDelete(@RequestParam String id) {
        return R.ok(recipientService.removeById(id) ? "删除成功!" : "删除失败!");
    }
    /**
@@ -227,9 +226,9 @@
            @ApiImplicitParam(value = "订单id", name = "orderId", dataType = "String", required = true),
            @ApiImplicitParam(value = "完整收货地址", name = "address", dataType = "String", required = true)
    })
    public AjaxResult<Boolean> updateOrderAddress(@RequestParam String orderId,
    public R<Boolean> updateOrderAddress(@RequestParam String orderId,
                                                  @RequestParam String address) {
        return AjaxResult.success(orderService.lambdaUpdate().set(TOrder::getConsigneeAddress, address)
        return R.ok(orderService.lambdaUpdate().set(TOrder::getConsigneeAddress, address)
                .eq(TOrder::getId, orderId).eq(TOrder::getState, 1).update());
    }
@@ -238,8 +237,8 @@
     */
    @GetMapping("/addressTree")
    @ApiOperation(value = "收货地址省市区三级联动", tags = {"收货地址省市区三级联动"})
    public AjaxResult<List<Region>> addressTree() {
        return AjaxResult.success(regionService.addressTree());
    public R<List<Region>> addressTree() {
        return R.ok(regionService.addressTree());
    }
    /**
@@ -262,14 +261,14 @@
    @ApiImplicitParams({
            @ApiImplicitParam(value = "商品id", name = "goodId", dataType = "String", required = true)
    })
    public AjaxResult<GoodDetailVO> goodDetail(@RequestParam String goodId) {
    public R<GoodDetailVO> goodDetail(@RequestParam String goodId) {
        // 商品详情
        TGoods goods = goodsService.lambdaQuery().eq(TGoods::getId, goodId).one();
        // 商品分类详情
        List<TGoodsType> goodsTypes = goodsTypeService.lambdaQuery().in(TGoodsType::getId, Arrays.asList(goods.getTypeIds().split(","))).list();
        // 已兑换人数
        int number = goods.getBasicCount() + orderService.getGoodBuyNumber(goods.getId());
        return AjaxResult.success(new GoodDetailVO(goods, goodsTypes, number));
        return R.ok(new GoodDetailVO(goods, goodsTypes, number));
    }
    /**
@@ -280,11 +279,11 @@
    @ApiImplicitParams({
            @ApiImplicitParam(value = "商品id", name = "goodId", dataType = "String", required = true)
    })
    public AjaxResult<GoodDetailVO> redeemNow(@RequestParam String goodId) {
    public R<GoodDetailVO> redeemNow(@RequestParam String goodId) {
        Recipient recipient = recipientService.lambdaQuery()
                .eq(Recipient::getUserId, tokenService.getLoginUserStudy().getUserid())
                .eq(Recipient::getIsDefault, 1).one();
        return AjaxResult.success(goodsService.redeemNow(goodId, recipient));
        return R.ok(goodsService.redeemNow(goodId, recipient));
    }
    /**
@@ -294,9 +293,9 @@
     */
    @PostMapping("/goodExchange")
    @ApiOperation(value = "商品兑换-确认", tags = {"商品兑换-确认"})
    public AjaxResult<Object> goodExchange(@RequestBody GoodExchangeDTO goodExchange) {
    public R<Boolean> goodExchange(@RequestBody GoodExchangeDTO goodExchange) {
        Recipient recipient = recipientService.getById(goodExchange.getRecipientId());
        return AjaxResult.success(goodsService.goodExchange(goodExchange, recipient));
        return R.ok(goodsService.goodExchange(goodExchange, recipient));
    }
}
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/ITGoodsService.java
@@ -44,5 +44,5 @@
     * @param recipient    收货地址
     * @return 兑换结果
     */
    Object goodExchange(GoodExchangeDTO goodExchange, Recipient recipient);
    Boolean goodExchange(GoodExchangeDTO goodExchange, Recipient recipient);
}
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/TGoodsServiceImpl.java
@@ -64,7 +64,7 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Object goodExchange(GoodExchangeDTO goodExchange, Recipient recipient) {
    public Boolean goodExchange(GoodExchangeDTO goodExchange, Recipient recipient) {
        Integer number = goodExchange.getNumber();
        Integer goodId = goodExchange.getGoodId();
        TGoods good = this.getById(goodId);
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java
@@ -8,7 +8,6 @@
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;
@@ -19,7 +18,10 @@
import com.ruoyi.study.service.*;
import com.ruoyi.study.vo.*;
import com.ruoyi.system.api.model.LoginUserParent;
import io.swagger.annotations.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
@@ -605,9 +607,9 @@
            @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) {
    public R<List<StudyWeekDTO>> weekList(@RequestParam(defaultValue = "1") Integer type, @RequestParam Integer quarter) {
        List<StudyWeekDTO> result = studyService.weekList(type, quarter);
        return AjaxResult.success(result);
        return R.ok(result);
    }
    /**
@@ -622,9 +624,9 @@
            @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 R<TUserStudy> studySchedule(@RequestParam Integer week, @RequestParam Integer day) {
        TUserStudy result = studyService.studySchedule(String.valueOf(tokenService.getLoginUserStudy().getUserid()), week, day);
        return AjaxResult.success(result);
        return R.ok(result);
    }
    /**
@@ -632,8 +634,8 @@
     */
    @GetMapping("/goodRecommend")
    @ApiOperation(value = "可兑换商品推荐", tags = {"可兑换商品推荐"})
    public AjaxResult<List<TGoodsVO>> studySchedule() {
        return AjaxResult.success(goodsClient.goodRecommend());
    public R<List<TGoodsVO>> studySchedule() {
        return R.ok(goodsClient.goodRecommend().getData());
    }
    /**
@@ -641,9 +643,9 @@
     */
    @PostMapping("/exitLearning")
    @ApiOperation(value = "退出学习(记录学习进度等信息)", tags = {"退出学习(记录学习进度等信息)"})
    public AjaxResult<Boolean> exitLearning(@RequestBody TUserStudy userStudy) {
    public R<Boolean> exitLearning(@RequestBody TUserStudy userStudy) {
        // 学习时长处理
        return AjaxResult.success(userStudyService.updateById(userStudy));
        return R.ok(userStudyService.updateById(userStudy));
    }
    /**
@@ -683,7 +685,7 @@
            @ApiImplicitParam(value = "周目", name = "week", dataType = "Integer", required = true),
            @ApiImplicitParam(value = "所属day", name = "day", dataType = "Integer", required = true)
    })
    public AjaxResult<StudyLookResultVO> pictureSelectVoice(@RequestParam Integer week, @RequestParam Integer day) {
    public R<StudyLookResultVO> pictureSelectVoice(@RequestParam Integer week, @RequestParam Integer day) {
        // 判断当前登录用户是否为 会员
        Boolean isVip = userService.isVip();
        LambdaQueryChainWrapper<TStudyLook> wrapper = studyLookService.lambdaQuery().eq(TStudyLook::getWeek, week)
@@ -694,7 +696,7 @@
        }
        List<TStudyLook> lookList = studyLookService.lambdaQuery().eq(TStudyLook::getWeek, week)
                .eq(TStudyLook::getDay, day).eq(TStudyLook::getDisabled, 0).list();
        return AjaxResult.success(studyService.pictureSelectVoice(week, day, lookList));
        return R.ok(studyService.pictureSelectVoice(week, day, lookList));
    }
    /**
@@ -709,7 +711,7 @@
            @ApiImplicitParam(value = "周目", name = "week", dataType = "Integer", required = true),
            @ApiImplicitParam(value = "所属day", name = "day", dataType = "Integer", required = true)
    })
    public AjaxResult<StudyInductionResultVO> induceExclude(@RequestParam Integer week, @RequestParam Integer day) {
    public R<StudyInductionResultVO> induceExclude(@RequestParam Integer week, @RequestParam Integer day) {
        // 判断当前登录用户是否为 会员
        Boolean isVip = userService.isVip();
        LambdaQueryChainWrapper<TStudyInduction> wrapper = studyInductionService.lambdaQuery().eq(TStudyInduction::getWeek, week)
@@ -719,7 +721,7 @@
            wrapper.eq(TStudyInduction::getIsVip, 0);
        }
        List<TStudyInduction> inductionList = wrapper.list();
        return AjaxResult.success(studyService.induceExclude(week, day, inductionList));
        return R.ok(studyService.induceExclude(week, day, inductionList));
    }
    /**
@@ -734,7 +736,7 @@
            @ApiImplicitParam(value = "周目", name = "week", dataType = "Integer", required = true),
            @ApiImplicitParam(value = "所属day", name = "day", dataType = "Integer", required = true)
    })
    public AjaxResult<StudyAnswerResultVO> questionsAndAnswers(@RequestParam Integer week, @RequestParam Integer day) {
    public R<StudyAnswerResultVO> questionsAndAnswers(@RequestParam Integer week, @RequestParam Integer day) {
        // 判断当前登录用户是否为 会员
        Boolean isVip = userService.isVip();
        LambdaQueryChainWrapper<TStudyAnswer> wrapper = studyAnswerService.lambdaQuery().eq(TStudyAnswer::getWeek, week)
@@ -744,7 +746,7 @@
            wrapper.eq(TStudyAnswer::getIsVip, 0);
        }
        List<TStudyAnswer> answerList = wrapper.list();
        return AjaxResult.success(studyService.questionsAndAnswers(week, day, answerList));
        return R.ok(studyService.questionsAndAnswers(week, day, answerList));
    }
    /**
@@ -759,7 +761,7 @@
            @ApiImplicitParam(value = "周目", name = "week", dataType = "Integer", required = true),
            @ApiImplicitParam(value = "所属day", name = "day", dataType = "Integer", required = true)
    })
    public AjaxResult<StudyPairResultVO> pictureMateVoice(@RequestParam Integer week, @RequestParam Integer day) {
    public R<StudyPairResultVO> pictureMateVoice(@RequestParam Integer week, @RequestParam Integer day) {
        // 判断当前登录用户是否为 会员
        Boolean isVip = userService.isVip();
        LambdaQueryChainWrapper<TStudyPair> wrapper = studyPairService.lambdaQuery().eq(TStudyPair::getWeek, week)
@@ -769,7 +771,7 @@
            wrapper.eq(TStudyPair::getIsVip, 0);
        }
        TStudyPair pair = wrapper.one();
        return AjaxResult.success(studyService.pictureMateVoice(week, day, pair));
        return R.ok(studyService.pictureMateVoice(week, day, pair));
    }
    /**
@@ -784,7 +786,7 @@
            @ApiImplicitParam(value = "难度(0入门、1中级、2困难)", name = "difficulty", dataType = "Integer", required = true),
            @ApiImplicitParam(value = "所属周目", name = "week", dataType = "Integer", required = true)
    })
    public AjaxResult<StudyGamerResultVO> gameHearing(@RequestParam Integer difficulty, @RequestParam Integer week) {
    public R<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]);
@@ -808,7 +810,7 @@
            // 获取对应的数据并加入结果列表
            subjectData.add(subjectId.get(randomIndex));
        }
        return AjaxResult.success(new StudyGamerResultVO(game,
        return R.ok(new StudyGamerResultVO(game,
                subjectService.lambdaQuery().in(TSubject::getId, subjectData).eq(TSubject::getState, 1).list()));
    }
@@ -824,7 +826,7 @@
            @ApiImplicitParam(value = "难度(0入门、1中级、2困难)", name = "difficulty", dataType = "Integer", required = true),
            @ApiImplicitParam(value = "所属周目", name = "week", dataType = "Integer", required = true)
    })
    public AjaxResult<StudyGamerResultVO> gameMemory(@RequestParam Integer difficulty, @RequestParam Integer week) {
    public R<StudyGamerResultVO> gameMemory(@RequestParam Integer difficulty, @RequestParam Integer week) {
        TGame game = gameService.lambdaQuery().eq(TGame::getWeek, week).eq(TGame::getDisabled, 0).one();
        // 检验是否完成难度
        studyService.checkDifficulty(difficulty, week, game);
@@ -845,7 +847,7 @@
            // 获取对应的数据并加入结果列表
            subjectData.add(subjectId.get(randomIndex));
        }
        return AjaxResult.success(new StudyGamerResultVO(game,
        return R.ok(new StudyGamerResultVO(game,
                subjectService.lambdaQuery().in(TSubject::getId, subjectData).eq(TSubject::getState, 1).list()));
    }
@@ -857,14 +859,14 @@
     */
    @PostMapping("/gameAchievement")
    @ApiOperation(value = "完成游戏-记录游戏测试成绩", tags = {"完成游戏-记录游戏测试成绩"})
    public AjaxResult<Boolean> gameAchievement(@RequestBody CompleteGameDTO completeStudy) {
    public R<Boolean> gameAchievement(@RequestBody CompleteGameDTO completeStudy) {
        TGame game = gameService.getById(completeStudy.getGameId());
        // 游戏测试记录
        Boolean add = gameRecordService.add(completeStudy);
        // 添加积分明细记录
        add = add && integralRecordService.add(game.getIntegral(), completeStudy.getMethod());
        // 用户账户添加积分
        return AjaxResult.success(add);
        return R.ok(add);
    }
    private List<String> getSubjectId(Integer week) {
@@ -902,12 +904,12 @@
    @ApiImplicitParams({
            @ApiImplicitParam(value = "所属周目", name = "week", dataType = "Integer", required = true)
    })
    public AjaxResult<StudyStoryListenResultVO> lookPictureDbu(@RequestParam Integer week) {
    public R<StudyStoryListenResultVO> lookPictureDbu(@RequestParam Integer week) {
        // 看图配音信息
        TStoryListen listen = storyListenService.lambdaQuery().eq(TStoryListen::getWeek, week).one();
        // 获取对应图片语音
        List<String> list = Arrays.asList(listen.getLookStory().split(","));
        return AjaxResult.success(new StudyStoryListenResultVO(listen,
        return R.ok(new StudyStoryListenResultVO(listen,
                subjectService.lambdaQuery().in(TSubject::getId, list).eq(TSubject::getState, 1).list()));
    }
@@ -921,12 +923,12 @@
    @ApiImplicitParams({
            @ApiImplicitParam(value = "所属周目", name = "week", dataType = "Integer", required = true)
    })
    public AjaxResult<StudyStoryListenResultVO> frameworkMemory(@RequestParam Integer week) {
    public R<StudyStoryListenResultVO> frameworkMemory(@RequestParam Integer week) {
        // 看图配音信息
        TStoryListen listen = storyListenService.lambdaQuery().eq(TStoryListen::getWeek, week).one();
        // 获取对应图片语音
        List<String> list = Arrays.asList(listen.getStory().split(","));
        return AjaxResult.success(new StudyStoryListenResultVO(listen,
        return R.ok(new StudyStoryListenResultVO(listen,
                subjectService.lambdaQuery().in(TSubject::getId, list).eq(TSubject::getState, 1).list()));
    }
@@ -937,7 +939,7 @@
     */
    @PostMapping("/completeLearning")
    @ApiOperation(value = "完成学习", tags = {"完成学习/其他积分来源(分享...)"})
    public AjaxResult<Boolean> completeLearning(@RequestBody CompleteStudyDTO completeStudy) {
    public R<Boolean> completeLearning(@RequestBody CompleteStudyDTO completeStudy) {
        // 登录用户id
        Integer userId = tokenService.getLoginUserStudy().getUserid();
        // 获取user详细信息,改变积分
@@ -949,7 +951,7 @@
        integralRecord.setIntegral(String.valueOf(completeStudy.getIntegral()));
        integralRecord.setMethod(completeStudy.getMethod());
        integralRecord.setUserId(userId);
        return AjaxResult.success(update && integralRecordService.save(integralRecord));
        return R.ok(update && integralRecordService.save(integralRecord));
    }
    /**
@@ -962,7 +964,7 @@
            @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,
    public R<Boolean> completeStory(@RequestParam Integer integral, @RequestParam Integer storyId,
                                             @RequestParam String method) {
        // 添加积分明细记录
        Boolean add = integralRecordService.add(String.valueOf(integral), method);
@@ -971,12 +973,12 @@
        TUser user = userService.lambdaQuery().eq(TUser::getId, userId).one();
        // 返回结果
        user.setIntegral(user.getIntegral() + integral);
        return AjaxResult.success(add && userService.updateById(user));
        return R.ok(add && userService.updateById(user));
    }
    @GetMapping("/studyRecord")
    @ApiOperation(value = "个人中心-学习记录", tags = {"个人中心-学习记录"})
    public AjaxResult<StudyRecordResultVO> studyRecord() {
    public R<StudyRecordResultVO> studyRecord() {
        Integer userId = tokenService.getLoginUserStudy().getUserid();
        // 学习记录
        TUserStudy studyRecord = userStudyService.lambdaQuery().eq(TUserStudy::getUserId, userId)
@@ -984,7 +986,7 @@
        // 游戏测试成绩
        List<TGameRecord> gameRecordList = gameRecordService.lambdaQuery().eq(TGameRecord::getUserId, userId)
                .eq(TGameRecord::getDisabled, 0).list();
        return AjaxResult.success(new StudyRecordResultVO(studyRecord,gameRecordList));
        return R.ok(new StudyRecordResultVO(studyRecord,gameRecordList));
    }
    @GetMapping("/integralDetail")
@@ -994,10 +996,10 @@
            @ApiImplicitParam(value = "页码", name = "pageNum", dataType = "Integer", required = true),
            @ApiImplicitParam(value = "每页显示条数", name = "pageSize", dataType = "Integer", required = true)
    })
    public AjaxResult<IPage<TIntegralRecord>> integralDetail(String time,
    public R<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));
        return R.ok(integralRecordService.integralDetail(new Page<>(pageNum, pageSize), tokenService.getLoginUserStudy().getUserid(), time));
    }
    /**
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java
@@ -5,6 +5,7 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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;
@@ -65,9 +66,9 @@
    @PostMapping("/vipInfo")
    @ApiOperation(value = "会员中心-获取会员说明、当前登录用户是否为会员、会员购买规格", tags = {"家长端-个人中心"})
    public AjaxResult<List<VipInfoVO>> vipInfo() {
    public R<List<VipInfoVO>> vipInfo() {
        if (tokenService.getLoginUser1() == null) {
            return AjaxResult.tokenError("登录失效", new Object());
            throw new GlobalException("登录失效!");
        }
        List<VipInfoVO> vipInfoVOS = new ArrayList<>();
        List<TVipSet> data = managementClient.getVipSet1().getData();
@@ -92,7 +93,7 @@
            vipInfoVO.setAmount(datum.getAmount());
            vipInfoVOS.add(vipInfoVO);
        }
        return AjaxResult.ok(vipInfoVOS);
        return R.ok(vipInfoVOS);
    }
    @Autowired
@@ -308,38 +309,38 @@
    @PostMapping("/getPage")
    @ApiOperation(value = "获取注意事项", tags = {"家长端-注意事项"})
    public AjaxResult<String> getPage() {
    public R<String> getPage() {
        List<TPage> data = managementClient.getPage1().getData();
        for (TPage datum : data) {
            if (datum.getType() == 4) {
                return AjaxResult.success(datum.getImg());
                return R.ok(datum.getImg());
            }
        }
        return AjaxResult.success();
        return R.ok();
    }
    @PostMapping("/parentPage")
    @ApiOperation(value = "平板", tags = {"家长端-启动页"})
    public AjaxResult<String> parentPage() {
    public R<String> parentPage() {
        List<TPage> data = managementClient.getPage1().getData();
        for (TPage datum : data) {
            if (datum.getType() == 3) {
                return AjaxResult.success(datum.getImg());
                return R.ok(datum.getImg());
            }
        }
        return AjaxResult.success();
        return R.ok();
    }
    @PostMapping("/parentPage1")
    @ApiOperation(value = "手机", tags = {"家长端-启动页"})
    public AjaxResult<String> parentPage1() {
    public R<String> parentPage1() {
        List<TPage> data = managementClient.getPage1().getData();
        for (TPage datum : data) {
            if (datum.getType() == 2) {
                return AjaxResult.success(datum.getImg());
                return R.ok(datum.getImg());
            }
        }
        return AjaxResult.success();
        return R.ok();
    }
    @PostMapping("/getProtocol")
@@ -347,28 +348,28 @@
    @ApiImplicitParams({
            @ApiImplicitParam(value = "类型 1用户 2隐私 3注销", name = "type", dataType = "string", required = true),
    })
    public AjaxResult<String> getProtocol(Integer type) {
    public R<String> getProtocol(Integer type) {
        String data = managementClient.agreement1(type).getData();
        return AjaxResult.success(data);
        return R.ok(data);
    }
    @PostMapping("/useGuide")
    @ApiOperation(value = "使用指南", tags = {"家长端-使用指南"})
    public AjaxResult<PageInfo<TUseGuide>> useGuide(@RequestBody UseGuideQuery query) {
    public R<PageInfo<TUseGuide>> useGuide(@RequestBody UseGuideQuery query) {
        PageInfo<TUseGuide> data = managementClient.useGuide1(query).getData();
        return AjaxResult.success(data);
        return R.ok(data);
    }
    @PostMapping("/feedBack")
    @ApiOperation(value = "反馈", tags = {"家长端-意见反馈"})
    public AjaxResult feedBack(@RequestBody TFeedback dto) {
    public R<String> feedBack(@RequestBody TFeedback dto) {
        if (tokenService.getLoginUser1() == null) {
            return AjaxResult.tokenError("登录失效", new Object());
            throw new GlobalException("登录失效!");
        }
        LoginUserParent loginUser1 = tokenService.getLoginUser1();
        dto.setUserId(loginUser1.getUserid());
        managementClient.addFeedBack(dto);
        return AjaxResult.success("反馈成功");
        return R.ok("反馈成功");
    }
    @PostMapping("/parentLogin")
@@ -377,25 +378,25 @@
            @ApiImplicitParam(value = "手机号", name = "phone", dataType = "string", required = true),
            @ApiImplicitParam(value = "验证码", name = "phoneCode", dataType = "string", required = true)
    })
    public AjaxResult login(String phone, String phoneCode) {
    public R<Map<String,Object>> login(String phone, String phoneCode) {
        TUser tUser1 = userService.getOne(new QueryWrapper<TUser>()
                .ne("state", 3)
                .eq("phone", phone));
        if (tUser1 != null) {
            if (tUser1.getState() == 2) {
                return AjaxResult.error("登录失败,您的账号已被冻结!");
                throw new GlobalException("登录失败,您的账号已被冻结!");
            }
        } else {
            // 手机验证码校验
            Object redisPhoneCode = redisService.getCacheObject(RedisConstants.PHONE_CODE + phone);
            if (null == redisPhoneCode) {
                return AjaxResult.error("登录失败,手机验证码已过期!");
                throw new GlobalException("登录失败,手机验证码已过期!");
            } else {
                // redis 验证码的value 为 code:时间戳
                String rCodeAndTime = String.valueOf(redisPhoneCode);
                String rCode = rCodeAndTime.split(":")[0];
                if (!rCode.equalsIgnoreCase(phoneCode)) {
                    return AjaxResult.error("登录失败,手机验证码输入有误!");
                    throw new GlobalException("登录失败,手机验证码输入有误!");
                } else {
                    tUser1 = getUser(phone);
                    userService.save(tUser1);
@@ -410,7 +411,7 @@
        HashMap<String, Object> map = new HashMap<>();
        map.put("token", tokenService.createToken1(loginUserParent));
        // 获取登录token
        return AjaxResult.success(map);
        return R.ok(map);
    }
    /**
@@ -420,7 +421,7 @@
     */
    @PostMapping("/studyLogin")
    @ApiOperation(value = "学习端-登录", tags = {"学习端-登录"})
    public AjaxResult studyLogin(@RequestBody @Validated RegisterPhoneRequest phoneRequest) {
    public R<Map<String,Object>> studyLogin(@RequestBody @Validated RegisterPhoneRequest phoneRequest) {
        String phone = phoneRequest.getPhone();
        String phoneCode = phoneRequest.getPhoneCode();
        TUser user = userService.getOne(new QueryWrapper<TUser>()
@@ -428,19 +429,19 @@
                .eq("phone", phone));
        if (user != null) {
            if (user.getState() == 2) {
                return AjaxResult.error("登录失败,您的账号已被冻结!");
                throw new GlobalException("登录失败,您的账号已被冻结!");
            }
        } else {
            // 手机验证码校验
            Object redisPhoneCode = redisService.getCacheObject(RedisConstants.PHONE_CODE + phone);
            if (null == redisPhoneCode) {
                return AjaxResult.error("登录失败,手机验证码已过期!");
                throw new GlobalException("登录失败,手机验证码已过期!");
            } else {
                // redis 验证码的value 为 code:时间戳
                String rCodeAndTime = String.valueOf(redisPhoneCode);
                String rCode = rCodeAndTime.split(":")[0];
                if (!rCode.equalsIgnoreCase(phoneCode)) {
                    return AjaxResult.error("登录失败,手机验证码输入有误!");
                    throw new GlobalException("登录失败,手机验证码输入有误!");
                } else {
                    user = getUser(phone);
                    userService.save(user);
@@ -456,7 +457,7 @@
        HashMap<String, Object> map = new HashMap<>();
        map.put("token", tokenService.createTokenStudy(loginUserParent));
        // 获取登录token
        return AjaxResult.success(map);
        return R.ok(map);
    }
    private TUser getUser(String phone) {
@@ -481,8 +482,8 @@
    @ApiImplicitParams({
            @ApiImplicitParam(value = "手机号", name = "phone", dataType = "string", required = true),
    })
    public AjaxResult sendPhoneCode(@RequestParam String phone) {
        return userService.phoneCode(phone) ? AjaxResult.success() : AjaxResult.error();
    public R sendPhoneCode(@RequestParam String phone) {
        return userService.phoneCode(phone) ? R.ok() : R.fail();
    }
    /**
@@ -490,7 +491,7 @@
     */
    @GetMapping("/shareInfo")
    @ApiOperation(value = "微信分享信息", tags = {"微信分享信息"})
    public AjaxResult shareInfo() {
    public R<TSysSet> shareInfo() {
        // 分享信息
        TSysSet data = managementClient.shareInfo().getData();
        Integer userid = tokenService.getLoginUserStudy().getUserid();
@@ -508,7 +509,7 @@
            record.setUserId(userid);
            userShareService.save(record);
        }
        return AjaxResult.success();
        return R.ok(data);
    }
    /**
@@ -527,9 +528,9 @@
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
    })
    public AjaxResult deleteUser() {
    public R<String> deleteUser() {
        if (tokenService.getLoginUser1() == null) {
            return AjaxResult.tokenError("登录失效");
            throw new GlobalException("登录失效!");
        }
        Integer userid = tokenService.getLoginUser1().getUserid();
        TUser tUser = userService.getById(userid);
@@ -538,7 +539,7 @@
        userService.updateById(tUser);
        userService.removeById(tUser);
        return AjaxResult.success("注销成功");
        return R.ok("注销成功");
    }
    @PostMapping("/logout")
@@ -546,9 +547,9 @@
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
    })
    public AjaxResult logout(HttpServletRequest request) {
    public R<String> logout(HttpServletRequest request) {
        if (tokenService.getLoginUser1() == null) {
            return AjaxResult.tokenError("登录失效");
            throw new GlobalException("登录失效!");
        }
        String token = SecurityUtils.getToken(request);
        if (com.ruoyi.common.core.utils.StringUtils.isNotEmpty(token)) {
@@ -556,7 +557,7 @@
            AuthUtil.logoutByToken1(token);
        }
        // todo 清除token
        return AjaxResult.success("退出登录成功");
        return R.ok("退出登录成功");
    }
    @PostMapping("/updateUserInfo")
@@ -567,7 +568,7 @@
            @ApiImplicitParam(name = "phone", value = "电话 改什么就只传什么"),
            @ApiImplicitParam(name = "headImg", value = "头像 改什么就只传什么"),
    })
    public AjaxResult updateUserInfo(String name, String phone, String headImg) {
    public R<String> updateUserInfo(String name, String phone, String headImg) {
        // todo 获取用户id
        Integer userid = tokenService.getLoginUser1().getUserid();
        TUser byId = userService.getById(userid);
@@ -582,13 +583,13 @@
//            }
            if (phone.equals(byId.getPhone())) {
                return AjaxResult.error("更换的手机号不能和原手机号相同");
                return R.fail("更换的手机号不能和原手机号相同!");
            }
            List<TUser> list = userService.list(new QueryWrapper<TUser>()
                    .eq("phone", phone)
                    .ne("state", 3));
            if (list.size() > 0) {
                return AjaxResult.error("更换的手机号已被使用", new Object());
                return R.fail("更换的手机号已被使用!");
            }
            byId.setPhone(phone);
        }
@@ -596,7 +597,7 @@
            byId.setHeadImg(headImg);
        }
        userService.saveOrUpdate(byId);
        return AjaxResult.success("修改成功");
        return R.ok("修改成功");
    }
    @ResponseBody
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TStudyAnswer.java
@@ -58,4 +58,5 @@
     * 非会员是否查看 0否1是
     */
    private Integer isVip;
}
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStudyServiceImpl.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.exception.GlobalException;
import com.ruoyi.common.core.utils.bean.BeanUtils;
import com.ruoyi.common.security.service.TokenService;
import com.ruoyi.study.domain.*;
import com.ruoyi.study.dto.StudyWeekDTO;
@@ -102,13 +103,27 @@
        // 随机获取一组题
        Random rand = new Random();
        TStudyAnswer data = answerList.get(rand.nextInt(answerList.size()));
        AnswerVO one = new AnswerVO();
        BeanUtils.copyProperties(data, one);
        answerList.remove(data);
        TStudyAnswer dataTwo = answerList.get(rand.nextInt(answerList.size()));
        AnswerVO two = new AnswerVO();
        BeanUtils.copyProperties(dataTwo, two);
        // 获取问题题目 和 回答题目
        List<String> ids = new ArrayList<>();
        ids.add(String.valueOf(data.getSubject()));
        ids.add(String.valueOf(data.getAnswerSubject()));
        ids.add(String.valueOf(one.getSubject()));
        ids.add(String.valueOf(one.getAnswerSubject()));
        // 有问有答
        List<TSubject> subjects = getSubjects(ids.toArray(ids.toArray(new String[0])));
        return new StudyAnswerResultVO(data, subjects);
        List<TStudyAnswer> answers = new ArrayList<>();
        answers.add(one);
        one.setSubjectList(getSubjects(ids.toArray(new String[0])));
        // 第二题信息
        List<String> twoIds = new ArrayList<>();
        answers.add(two);
        twoIds.add(String.valueOf(two.getSubject()));
        twoIds.add(String.valueOf(two.getAnswerSubject()));
        two.setSubjectList(getSubjects(twoIds.toArray(new String[0])));
        return new StudyAnswerResultVO(answers);
    }
    @Override
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/AnswerVO.java
New file
@@ -0,0 +1,29 @@
package com.ruoyi.study.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.ruoyi.study.domain.TStudyAnswer;
import com.ruoyi.study.domain.TSubject;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
/**
 * @author HJL
 * @version 1.0
 * @since 2024-05-22 14:48
 */
@EqualsAndHashCode(callSuper = true)
@Data
@ApiModel(value = "有问有答VO信息类")
public class AnswerVO extends TStudyAnswer{
    /**
     * 录音及图片信息
     */
    @TableField(exist = false)
    private List<TSubject> subjectList;
}
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/StudyAnswerResultVO.java
@@ -1,11 +1,9 @@
package com.ruoyi.study.vo;
import com.ruoyi.study.domain.TStudyAnswer;
import com.ruoyi.study.domain.TSubject;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
@@ -14,20 +12,17 @@
 * @version 1.0
 * @since 2024-05-22 14:48
 */
@EqualsAndHashCode(callSuper = true)
@Data
@ApiModel("有问有答返回信息类")
public class StudyAnswerResultVO extends StudyModelVO {
@ApiModel(value = "有问有答返回信息类")
public class StudyAnswerResultVO{
    /**
     * 自主学习题目信息
     */
    @ApiModelProperty("自主学习题目信息")
    private TStudyAnswer data;
    private List<TStudyAnswer> data;
    public StudyAnswerResultVO(TStudyAnswer data, List<TSubject> subjectList) {
    public StudyAnswerResultVO(List<TStudyAnswer> data) {
        this.data = data;
        super.setSubjectList(subjectList);
    }
}
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/StudyAnswerSubjectVO.java
New file
@@ -0,0 +1,34 @@
package com.ruoyi.study.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.ruoyi.study.domain.TStudyAnswer;
import com.ruoyi.study.domain.TSubject;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
 * @author HJL
 * @version 1.0
 * @since 2024-05-22 14:48
 */
@Data
@ApiModel(value = "有问有答返回信息类")
public class StudyAnswerSubjectVO {
    /**
     * 自主学习题目信息
     */
    @ApiModelProperty("自主学习题目信息")
    private List<TStudyAnswer> data;
    /**
     * 录音及图片信息
     */
    @TableField(exist = false)
    private List<TSubject> subjectList;
}
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/StudyGamerResultVO.java
@@ -16,7 +16,7 @@
 */
@EqualsAndHashCode(callSuper = true)
@Data
@ApiModel("超级听力&&超级记忆返回信息类")
@ApiModel(value = "超级听力&&超级记忆返回信息类")
public class StudyGamerResultVO extends StudyModelVO {
    /**
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/StudyInductionResultVO.java
@@ -16,7 +16,7 @@
 */
@EqualsAndHashCode(callSuper = true)
@Data
@ApiModel("归纳排除返回信息类")
@ApiModel(value = "归纳排除返回信息类")
public class StudyInductionResultVO extends StudyModelVO {
    /**
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/StudyListenResultVO.java
@@ -16,7 +16,7 @@
 */
@EqualsAndHashCode(callSuper = true)
@Data
@ApiModel("听音选图返回信息类")
@ApiModel(value = "听音选图返回信息类")
public class StudyListenResultVO extends StudyModelVO {
    /**
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/StudyLookResultVO.java
@@ -16,7 +16,7 @@
 */
@EqualsAndHashCode(callSuper = true)
@Data
@ApiModel("看图选音返回信息类")
@ApiModel(value = "看图选音返回信息类")
public class StudyLookResultVO extends StudyModelVO{
    /**
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/StudyPairResultVO.java
@@ -16,7 +16,7 @@
 */
@EqualsAndHashCode(callSuper = true)
@Data
@ApiModel("音图相配返回信息类")
@ApiModel(value = "音图相配返回信息类")
public class StudyPairResultVO extends StudyModelVO {
    /**
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/StudyRecordResultVO.java
@@ -14,7 +14,7 @@
 * @since 2024-05-22 14:39
 */
@Data
@ApiModel("个人中心-学习记录返回信息类")
@ApiModel(value = "个人中心-学习记录返回信息类")
public class StudyRecordResultVO{
    /**
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/StudyStoryListenResultVO.java
@@ -16,7 +16,7 @@
 */
@EqualsAndHashCode(callSuper = true)
@Data
@ApiModel("自主故事-看图配音&&框架记忆返回信息类")
@ApiModel(value = "自主故事-看图配音&&框架记忆返回信息类")
public class StudyStoryListenResultVO extends StudyModelVO {
    /**