ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/RedisConstants.java
@@ -29,5 +29,9 @@ */ public final static String HEARING_TREE = "game_subject"; /** * 过期时间 30 */ public final static Integer THIRTY = 30; } ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/user/StudyLoginException.java
@@ -1,6 +1,8 @@ package com.ruoyi.common.core.exception.user; /** * 学生端登录异常信息 * * @author HJL * @version 1.0 * @since 2024-05-24 11:35 ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
@@ -145,7 +145,7 @@ public LoginUserParent getLoginUserStudy() { LoginUserParent userStudy = getLoginUserStudy(ServletUtils.getRequest()); if (null == userStudy) { throw new StudyLoginException("登录失效,请重新登录!", 505); throw new StudyLoginException("登录失效,请重新登录!", 504); } return userStudy; } @@ -219,6 +219,10 @@ if (StringUtils.isNotEmpty(token)) { String userkey = JwtUtils.getUserKeyStudy(token); user = redisService.getCacheObject(getTokenKeyStudy(userkey)); // 再次判断登录状态是否已过期 if (null == user) { throw new StudyLoginException("登录信息已过期,请重新登录!", 504); } // 优先判断当前账号是否已在其他设备登录 if (!user.getIsCanLogin()) { throw new StudyLoginException("当前登录账号在其他设备登录!", 505); @@ -345,6 +349,10 @@ LoginUserParent redisUserInfo = JSONObject.parseObject(JSONObject.toJSONString(redisCacheUserInfo), LoginUserParent.class); // 单点逻辑,如果当前用户已处于登录状态并再次登录,则清除该用户上一次登录token if (dto.getUserid().equals(redisUserInfo.getUserid())) { // 被挤账户 可登录状态 已经为 false时,跳出循环 if (!redisUserInfo.getIsCanLogin()) { continue; } // 设置能否登录字段为 否,当该token登录时,isCanLogin为false表示账号被挤 redisUserInfo.setIsCanLogin(Boolean.FALSE); redisService.setCacheObject(strKey, redisUserInfo, redisService.getExpire(strKey), TimeUnit.SECONDS); 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.*; @@ -169,7 +168,7 @@ * 兑换记录 */ @GetMapping("/exchangeRecord") @ApiOperation(value = "兑换记录", tags = {"兑换记录"}) @ApiOperation(value = "学习端-兑换记录", tags = {"学习端-兑换记录"}) public R<List<TOrder>> exchangeRecord() { return R.ok(orderService.lambdaQuery().eq(TOrder::getUserId, tokenService.getLoginUserStudy().getUserid()) .orderByDesc(TOrder::getCreateTime).list()); @@ -203,7 +202,7 @@ * 新增收货地址/修改收货地址 */ @PostMapping("/addressSaveOrUpdate") @ApiOperation(value = "新增收货地址/修改收货地址", tags = {"新增收货地址/修改收货地址"}) @ApiOperation(value = "学习端-新增收货地址/修改收货地址", tags = {"新增收货地址/修改收货地址"}) public R<String> addressSave(@RequestBody Recipient recipient) { recipient.setUserId(tokenService.getLoginUserStudy().getUserid()); return R.ok(recipientService.addressSaveOrUpdate(recipient)); @@ -213,7 +212,7 @@ * 删除收货地址 */ @GetMapping("/addressDelete") @ApiOperation(value = "删除收货地址", tags = {"删除收货地址"}) @ApiOperation(value = "学习端-删除收货地址", tags = {"学习端-删除收货地址"}) @ApiImplicitParams({ @ApiImplicitParam(value = "地址信息id", name = "id", dataType = "String", required = true) }) @@ -227,7 +226,7 @@ * @param orderId 订单id */ @GetMapping("/updateOrderAddress") @ApiOperation(value = "修改订单收货地址", tags = {"修改订单收货地址"}) @ApiOperation(value = "学习端-修改订单收货地址", tags = {"学习端-修改订单收货地址"}) @ApiImplicitParams({ @ApiImplicitParam(value = "订单id", name = "orderId", dataType = "String", required = true), @ApiImplicitParam(value = "完整收货地址", name = "address", dataType = "String", required = true) @@ -242,7 +241,7 @@ * 收货地址省市区三级联动 */ @GetMapping("/addressTree") @ApiOperation(value = "收货地址省市区三级联动", tags = {"收货地址省市区三级联动"}) @ApiOperation(value = "学习端-收货地址省市区三级联动", tags = {"学习端-收货地址省市区三级联动"}) public R<List<Region>> addressTree() { return R.ok(regionService.addressTree()); } @@ -252,7 +251,7 @@ * 远程调用 */ @GetMapping("/goodRecommend") @ApiOperation(value = "可兑换商品推荐", tags = {"可兑换商品推荐"}) @ApiOperation(value = "学习端-可兑换商品推荐", tags = {"学习端-可兑换商品推荐"}) public R<List<TGoodsVO>> goodRecommend() { return R.ok(goodsService.goodRecommend(tokenService.getLoginUserStudy().getUserid())); } @@ -263,7 +262,7 @@ * @param goodId 商品id */ @GetMapping("/goodDetail") @ApiOperation(value = "商品详情", tags = {"商品详情"}) @ApiOperation(value = "学习端-商品详情", tags = {"学习端-商品详情"}) @ApiImplicitParams({ @ApiImplicitParam(value = "商品id", name = "goodId", dataType = "String", required = true) }) @@ -281,7 +280,7 @@ * 商城-立即兑换 */ @GetMapping("/redeemNow") @ApiOperation(value = "商城-立即兑换", tags = {"立即兑换"}) @ApiOperation(value = "学习端-商城立即兑换", tags = {"学习端-商城立即兑换"}) @ApiImplicitParams({ @ApiImplicitParam(value = "商品id", name = "goodId", dataType = "String", required = true) }) @@ -299,7 +298,7 @@ * @param goodExchange 商品信息 */ @PostMapping("/goodExchange") @ApiOperation(value = "商品兑换-确认", tags = {"商品兑换-确认"}) @ApiOperation(value = "学习端-商品兑换确认", tags = {"学习端-商品兑换确认"}) public R<Boolean> goodExchange(@RequestBody GoodExchangeDTO goodExchange) { Recipient recipient = recipientService.getById(goodExchange.getRecipientId()); return R.ok(goodsService.goodExchange(goodExchange, recipient)); ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/TGoodsServiceImpl.java
@@ -60,7 +60,7 @@ String key = String.format(RedisConstants.GOOD_STOCK, goods.getId()); RSemaphore semaphore = redissonClient.getSemaphore(key); semaphore.trySetPermits(goods.getSurplus()); return new GoodDetailVO(goods,recipient); return new GoodDetailVO(goods, recipient); } @Override @@ -94,6 +94,8 @@ // redisson分布式锁,防止超卖 String key = String.format(RedisConstants.GOOD_STOCK, good.getId()); RSemaphore semaphore = redissonClient.getSemaphore(key); // 请求超时时间 单位:毫秒 semaphore.trySetPermits(1000); boolean tried = semaphore.tryAcquire(number); // 兑换失败,库存不足 if (!tried) { ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java
@@ -28,6 +28,7 @@ import javax.annotation.Resource; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** @@ -344,13 +345,13 @@ TStudy one = studyService.getOne(new QueryWrapper<TStudy>() .eq("week", dto.getWeek()) .eq("type", dto.getType())); if (one!=null){ if (one != null) { one.setType(dto.getType()); one.setWeek(dto.getWeek()); one.setTitle(dto.getTitle()); one.setQuarter(dto.getQuarter()); studyService.saveOrUpdate(one); }else{ } else { TStudy tStudy = new TStudy(); tStudy.setType(dto.getType()); tStudy.setWeek(dto.getWeek()); @@ -453,7 +454,7 @@ for (TStudyListen tStudyListen : list) { StringBuilder temp = new StringBuilder(); StudyListenVO studyListenVO = new StudyListenVO(); if (StringUtils.hasLength(tStudyListen.getSubject())){ if (StringUtils.hasLength(tStudyListen.getSubject())) { for (String s : tStudyListen.getSubject().split(",")) { TSubject byId = subjectService.getById(s); temp.append(byId.getName()).append(","); @@ -477,7 +478,7 @@ StringBuilder names = new StringBuilder(); StringBuilder sorts = new StringBuilder(); StudyLookVO studyLookVO1 = new StudyLookVO(); if (StringUtils.hasLength(tStudyLook.getSubject())){ if (StringUtils.hasLength(tStudyLook.getSubject())) { for (String s : tStudyLook.getSubject().split(",")) { TSubject byId = subjectService.getById(s); names.append(byId.getName()).append(","); @@ -505,7 +506,7 @@ for (TStudyInduction tStudyInduction : list2) { StringBuilder names = new StringBuilder(); StudyInductionVO studyInductionVO = new StudyInductionVO(); if (StringUtils.hasLength(tStudyInduction.getSubject())){ if (StringUtils.hasLength(tStudyInduction.getSubject())) { for (String s : tStudyInduction.getSubject().split(",")) { String replace = s.replace("-", ""); TSubject byId = subjectService.getById(replace); @@ -527,34 +528,34 @@ for (TStudyAnswer tStudyAnswer : list3) { StringBuilder names = new StringBuilder(); StudyAnswerVO studyAnswerVO = new StudyAnswerVO(); if (tStudyAnswer.getIsAnswer() != null){ if (tStudyAnswer.getIsAnswer() != null) { if (tStudyAnswer.getIsAnswer() == 1) { if (tStudyAnswer.getSubject()!=null){ if (tStudyAnswer.getSubject() != null) { TSubject byId = subjectService.getById(tStudyAnswer.getSubject()); names.append(byId.getName()).append(","); } if (tStudyAnswer.getAnswerSubject()!=null) { if (tStudyAnswer.getAnswerSubject() != null) { TSubject byId1 = subjectService.getById(tStudyAnswer.getAnswerSubject()); names.append(byId1.getName()).append(","); } } else { if (tStudyAnswer.getSubject()!=null) { if (tStudyAnswer.getSubject() != null) { TSubject byId = subjectService.getById(tStudyAnswer.getSubject()); names.append(byId.getName()).append(","); } if (tStudyAnswer.getAnswerSubject()!=null) { if (tStudyAnswer.getAnswerSubject() != null) { TSubject byId1 = subjectService.getById(tStudyAnswer.getAnswerSubject()); names.append(byId1.getName()).append(","); } } } if (StringUtils.hasLength(names)){ if (StringUtils.hasLength(names)) { String string = names.toString(); studyAnswerVO.setName(string.substring(0, string.length() - 1)); studyAnswerVO.setIntegral(tStudyAnswer.getIntegral()); studyAnswerVO.setIsVip(tStudyAnswer.getIsVip()); studyAnswerVO.setIsAnswer(tStudyAnswer.getIsAnswer()); studyAnswerVO.setSubject(tStudyAnswer.getSubject()+","+tStudyAnswer.getAnswerSubject()); studyAnswerVO.setSubject(tStudyAnswer.getSubject() + "," + tStudyAnswer.getAnswerSubject()); answerVOS.add(studyAnswerVO); } @@ -567,7 +568,7 @@ for (TStudyPair tStudyPair : list4) { StringBuilder names = new StringBuilder(); StudyPairVO studyPairVO = new StudyPairVO(); if (StringUtils.hasLength(tStudyPair.getSubject())){ if (StringUtils.hasLength(tStudyPair.getSubject())) { for (String s : tStudyPair.getSubject().split(",")) { TSubject byId = subjectService.getById(s); names.append(byId.getName()).append(","); @@ -603,38 +604,41 @@ StringBuilder names1 = new StringBuilder(); StringBuilder sort = new StringBuilder(); StringBuilder sort1 = new StringBuilder(); if (StringUtils.hasLength(tStory.getStory())){ if (StringUtils.hasLength(tStory.getStory())) { for (String s : tStory.getStory().split(",")) { TStory byId = storyService.getById(s); names.append(byId.getName()).append(","); } } if (StringUtils.hasLength(tStory.getLookStory())){ if (StringUtils.hasLength(tStory.getLookStory())) { for (String s : tStory.getLookStory().split(",")) { TStory byId = storyService.getById(s); names1.append(byId.getName()).append(","); } } if (StringUtils.hasLength(tStory.getSort())){ if (StringUtils.hasLength(tStory.getSort())) { for (String s : tStory.getSort().split(",")) { sort.append(s).append(","); } } if (StringUtils.hasLength(tStory.getLookSort())){ if (StringUtils.hasLength(tStory.getLookSort())) { for (String s : tStory.getLookSort().split(",")) { sort1.append(s).append(","); } } if (StringUtils.hasLength(names)){ if (StringUtils.hasLength(names)) { storyVO.setName(names.substring(0, names.length() - 1)); }if (StringUtils.hasLength(sort)){ } if (StringUtils.hasLength(sort)) { storyVO.setSort(sort.substring(0, sort.length() - 1)); }if (StringUtils.hasLength(names1)){ } if (StringUtils.hasLength(names1)) { storyVO.setLookName(names1.substring(0, names1.length() - 1)); }if (StringUtils.hasLength(sort1)){ } if (StringUtils.hasLength(sort1)) { storyVO.setLookSort(sort1.substring(0, sort1.length() - 1)); } storyVO.setIntegral(tStory.getIntegral()); @@ -658,7 +662,7 @@ * @param quarter 季度 */ @GetMapping("/weekList") @ApiOperation(value = "周目列表", tags = {"周目列表"}) @ApiOperation(value = "根据季度获取周目列表", tags = {"根据季度获取周目列表"}) @ApiImplicitParams({ @ApiImplicitParam(value = "所属类型", name = "type", dataType = "Integer", required = true), @ApiImplicitParam(value = "季度", name = "quarter", dataType = "Integer", required = true) @@ -854,7 +858,7 @@ * @param completeStudy 完成学习信息 */ @PostMapping("/completeLearning") @ApiOperation(value = "完成学习", tags = {"完成学习/其他积分来源(分享...)"}) @ApiOperation(value = "完成学习", tags = {"完成学习"}) public R<Boolean> completeLearning(@RequestBody CompleteStudyDTO completeStudy) { // 登录用户id Integer userId = tokenService.getLoginUserStudy().getUserid(); @@ -1004,6 +1008,7 @@ subjectId.addAll(Arrays.asList(subject.split(","))); } redisService.setCacheList(RedisConstants.HEARING_TREE, subjectId); redisService.expire(RedisConstants.HEARING_TREE, RedisConstants.THIRTY, TimeUnit.MINUTES); } return subjectId; } ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java
@@ -516,7 +516,7 @@ @ApiImplicitParams({ @ApiImplicitParam(value = "手机号", name = "phone", dataType = "string", required = true), }) public R sendPhoneCode(@RequestParam String phone) { public R<?> sendPhoneCode(@RequestParam String phone) { return userService.phoneCode(phone) ? R.ok() : R.fail(); } ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TGame.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.ruoyi.common.core.web.domain.BaseModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** @@ -28,6 +29,7 @@ /** * 所属周目 */ @ApiModelProperty("所属周目") private Integer week; /** * 学习id @@ -37,29 +39,34 @@ /** * 题目数量 */ @ApiModelProperty("题目数量") private Integer count; /** * 积分逗号隔开 第一个对应入门第二个对应中级... */ @ApiModelProperty("对应可获取积分数量(第一个为入门难度;第二个为中级难度;第三个为困难难度)") private String integral; /** * 时间逗号隔开 第一个对应入门第二个对应中级... */ @ApiModelProperty("时间范围(第一个为入门难度;第二个为中级难度;第三个为困难难度)") private String time; /** * 超级记忆存储该字段 答题时间 */ @ApiModelProperty("超级记忆 - 答题时间(第一个为入门难度;第二个为中级难度;第三个为困难难度)") private Integer answerTime; /** * 超级记忆存储该字段 可获积分总数 */ @ApiModelProperty("超级记忆 - 可获积分总数") private Integer answerIntegral; /** * 超级记忆游戏题目数量 */ @ApiModelProperty("超级记忆游戏题目数量") private Integer answerCount; } ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TStoryListen.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.ruoyi.common.core.web.domain.BaseModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** @@ -28,31 +29,38 @@ /** * 看图配音可获积分 */ @ApiModelProperty("看图配音可获积分") private Integer lookIntegral; /** * 框架记忆可获积分 */ @ApiModelProperty("框架记忆可获积分") private Integer integral; /** * 所属周目 */ @ApiModelProperty("所属周目") private Integer week; /** * 框架记忆故事ids 多个逗号隔开 */ @ApiModelProperty("框架记忆故事ids 多个逗号隔开") private String story; /** * 框架记忆排序 多个逗号隔开和故事ids一一对应 */ @ApiModelProperty("框架记忆排序 多个逗号隔开和故事ids一一对应") private String sort; /** * 看图配音故事ids 多个逗号隔开 */ @ApiModelProperty("看图配音故事ids 多个逗号隔开") private String lookStory; /** * 看图配音排序 多个逗号隔开 */ @ApiModelProperty("看图配音排序 多个逗号隔开") private String lookSort; /** * 学习id ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TStudyAnswer.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.ruoyi.common.core.web.domain.BaseModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** @@ -28,10 +29,12 @@ /** * 周目x */ @ApiModelProperty("所属周目") private Integer week; /** * Dayx */ @ApiModelProperty("所属day") private Integer day; /** * 问题题目id @@ -43,20 +46,24 @@ private Integer answerSubject; /** * 完成答题可获积分 */ private Integer integral; /** * 问题题目是否为答案图片 0否1是 为0 那么回答题目是答案图片 */ @ApiModelProperty("问题题目是否为答案图片 0否1是 为0 那么回答题目是答案图片") private Integer isAnswer; /** * 完成答题可获积分 */ @ApiModelProperty("完成答题可获积分") private Integer integral; /** * 学习id */ @ApiModelProperty("学习id") private Integer studyId; /** * 非会员是否查看 0否1是 */ @ApiModelProperty("非会员是否查看 0否1是") private Integer isVip; } ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TStudyInduction.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.ruoyi.common.core.web.domain.BaseModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** @@ -28,10 +29,12 @@ /** * 周目x */ @ApiModelProperty("所属周目") private Integer week; /** * Dayx */ @ApiModelProperty("所属day") private Integer day; /** * 题目 多个题目逗号隔开,带有负号为答题选项 @@ -41,13 +44,16 @@ /** * 完成答题可获积分 */ @ApiModelProperty("完成答题可获积分") private Integer integral; /** * 学习id */ @ApiModelProperty("学习id") private Integer studyId; /** * 非会员是否查看 0否1是 */ @ApiModelProperty("非会员是否查看 0否1是") private Integer isVip; } ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TStudyListen.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.ruoyi.common.core.web.domain.BaseModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** @@ -28,26 +29,32 @@ /** * 周目x */ @ApiModelProperty("所属周目") private Integer week; /** * Dayx */ @ApiModelProperty("所属day") private Integer day; /** * 题目 */ @ApiModelProperty("题目录音及图片id") private String subject; /** * 完成答题可获积分 */ @ApiModelProperty("完成答题可获积分") private Integer integral; /** * 学习id */ @ApiModelProperty("学习id") private Integer studyId; /** * 非会员是否查看 0否1是 */ @ApiModelProperty("非会员是否查看 0否1是") private Integer isVip; } ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TStudyLook.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.ruoyi.common.core.web.domain.BaseModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** @@ -28,10 +29,12 @@ /** * 周目x */ @ApiModelProperty("所属周目") private Integer week; /** * Dayx */ @ApiModelProperty("所属day") private Integer day; /** * 题目 @@ -41,17 +44,21 @@ /** * 排序 */ @ApiModelProperty("排序") private String sort; /** * 完成答题可获积分 */ @ApiModelProperty("完成答题可获积分") private Integer integral; /** * 学习id */ @ApiModelProperty("学习id") private Integer studyId; /** * 非会员是否查看 0否1是 */ @ApiModelProperty("非会员是否查看 0否1是") private Integer isVip; } ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TStudyPair.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.ruoyi.common.core.web.domain.BaseModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** @@ -28,10 +29,12 @@ /** * 周目x */ @ApiModelProperty("所属周目") private Integer week; /** * Dayx */ @ApiModelProperty("所属day") private Integer day; /** * 题目 @@ -41,13 +44,16 @@ /** * 完成答题可获积分 */ @ApiModelProperty("完成答题可获积分") private Integer integral; /** * 学习id */ @ApiModelProperty("学习id") private Integer studyId; /** * 非会员是否查看 0否1是 */ @ApiModelProperty("非会员是否查看 0否1是") private Integer isVip; } ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TSubject.java
@@ -44,18 +44,22 @@ /** * 状态1上架2下架3删除 */ @ApiModelProperty(value = "状态:1上架、2下架、3删除") private Integer state; /** * 图片 */ @ApiModelProperty(value = "图片") private String img; /** * 正确语音 */ @ApiModelProperty(value = "正确语音") private String correct; /** * 错误语音 多个逗号拼接 这里只要填入就必须是两个 可以不填入 */ @ApiModelProperty(value = "错误语音 多个逗号拼接") private String error; } ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TGameServiceImpl.java
@@ -30,7 +30,7 @@ if (integralRecordList.isEmpty()) { return availableIntegral; } else { // 积分明细不为空,计算已获取的积分数量 // 积分明细不为空,根据正确率及已获取积分数量计算本次答题可获取的积分数量 List<Integer> integralList = integralRecordList.stream().map(TIntegralRecord::getIntegral).collect(Collectors.toList()).stream().map(Integer::parseInt).collect(Collectors.toList()); int sumIntegral = integralList.stream().mapToInt(Integer::intValue).sum(); if (availableIntegral > sumIntegral) { ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStudyServiceImpl.java
@@ -67,7 +67,7 @@ List<TGameRecord> list = gameRecordService.lambdaQuery().eq(TGameRecord::getUserId, userId).eq(TGameRecord::getGameId, game.getId()).list(); boolean contains = list.stream().map(TGameRecord::getGameDifficulty).collect(Collectors.toList()).contains(level); if (!contains) { throw new GlobalException("请先完成上一难度再挑战"); throw new GlobalException("请先完成上一难度再挑战当前难度!"); } }