From f991c73f56f35665bcbe8ce2252c04ea82032b10 Mon Sep 17 00:00:00 2001 From: hjl <1657978663@qq.com> Date: 星期一, 27 五月 2024 18:06:31 +0800 Subject: [PATCH] feat: 修复登录bug;数据校验规则优化 --- ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java | 174 ++++++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 114 insertions(+), 60 deletions(-) diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java index 9ec5522..43045c2 100644 --- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java +++ b/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; /** @@ -76,6 +77,8 @@ private ITUserService userService; @Resource private TokenService tokenService; + @Resource + private ITSubjectRecordService subjectRecordService; @PostMapping("/storyList") @ApiOperation(value = "配置学习类型选择故事", tags = {"题目管理"}) @@ -342,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()); @@ -429,7 +432,7 @@ List<TStudy> list8 = studyService.list(new QueryWrapper<TStudy>() .eq("type", dto.getType()) .eq("week", dto.getWeek())); - if (!list8.isEmpty()){ + if (!list8.isEmpty()) { res.setQuarter(list8.get(0).getQuarter()); res.setTitle(list8.get(0).getTitle()); } @@ -451,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(","); @@ -475,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(","); @@ -503,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); @@ -525,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); } @@ -565,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(","); @@ -601,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()); @@ -656,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) @@ -693,13 +699,31 @@ } /** + * 进入题组后,获取题组学习进度信息 + * + * @param week 周目 + * @param day 所属day + */ + @GetMapping("/teamSchedule") + @ApiOperation(value = "获取题组学习进度信息", tags = {"获取题组学习进度信息"}) + @ApiImplicitParams({ + @ApiImplicitParam(value = "周目", name = "week", dataType = "Integer", required = true), + @ApiImplicitParam(value = "所属day", name = "day", dataType = "Integer", required = true) + }) + public R<TSubjectRecord> teamSchedule(@RequestParam Integer week, @RequestParam Integer day) { + TSubjectRecord subjectRecord = subjectRecordService.lambdaQuery().eq(TSubjectRecord::getWeek, week).eq(TSubjectRecord::getDay, day) + .eq(TSubjectRecord::getUserId, tokenService.getLoginUserStudy().getUserid()).eq(TSubjectRecord::getDisabled, 0).one(); + return R.ok(subjectRecord); + } + + /** * 退出学习,记录学习进度、当日学习时长... */ @PostMapping("/exitLearning") @ApiOperation(value = "退出学习(记录学习进度等信息)", tags = {"退出学习(记录学习进度等信息)"}) - public R<Boolean> exitLearning(@RequestBody TUserStudy userStudy) { + public R<Boolean> exitLearning(@RequestBody TSubjectRecord subjectRecord) { // 学习时长处理 - return R.ok(userStudyService.updateById(userStudy)); + return R.ok(subjectRecordService.updateById(subjectRecord)); } /** @@ -829,6 +853,31 @@ } /** + * 学习完成,生成学习记录,积分明细记录 + * + * @param completeStudy 完成学习信息 + */ + @PostMapping("/completeLearning") + @ApiOperation(value = "完成学习", tags = {"完成学习"}) + public R<Boolean> completeLearning(@RequestBody CompleteStudyDTO completeStudy) { + // 登录用户id + Integer userId = tokenService.getLoginUserStudy().getUserid(); + // 获取user详细信息,改变积分 + boolean update = true; + if (completeStudy.getIsComplete()) { + TUser user = userService.getById(userId); + user.setIntegral(user.getIntegral() + completeStudy.getIntegral()); + update = userService.updateById(user); + } + // 生成积分明细记录 + TIntegralRecord integralRecord = new TIntegralRecord(); + integralRecord.setIntegral(String.valueOf(completeStudy.getIntegral())); + integralRecord.setMethod(completeStudy.getMethod()); + integralRecord.setUserId(userId); + return R.ok(update && integralRecordService.save(integralRecord)); + } + + /** * 自主游戏1-超级听力 * * @param difficulty 难度(0入门、1中级、2困难) @@ -914,12 +963,27 @@ @PostMapping("/gameAchievement") @ApiOperation(value = "完成游戏-记录游戏测试成绩", tags = {"完成游戏-记录游戏测试成绩"}) public R<Boolean> gameAchievement(@RequestBody CompleteGameDTO completeStudy) { + /* + * 游戏测试需要根据正确率计算本次测试可获得积分 + * 并且需要判断如果该游戏用户已获取一部分积分,再次测试后正确率增长,只能获取高于上次正确率的部分积分 + * 例如:游戏配置的积分是100,他的正确率是50%那么拿50分,下次他再玩这个游戏 正确率是60% 那么他该获得60分 但是上次已经拿了50 所以这次就只给他加10积分 + */ + Integer userid = tokenService.getLoginUserStudy().getUserid(); TGame game = gameService.getById(completeStudy.getGameId()); + // 积分明细 + List<TIntegralRecord> integralRecordList = integralRecordService.lambdaQuery().eq(TIntegralRecord::getUserId, userid) + .eq(TIntegralRecord::getGameId, game.getId()).eq(TIntegralRecord::getDisabled, 0).list(); + Integer availableIntegral = gameService.countIntegral(userid, game, completeStudy, integralRecordList); // 游戏测试记录 Boolean add = gameRecordService.add(completeStudy); - // 添加积分明细记录 - add = add && integralRecordService.add(game.getIntegral(), completeStudy.getMethod()); - // 用户账户添加积分 + // 可获得积分不为null时,才添加积分明细记录 + if (null != availableIntegral) { + add = add && integralRecordService.add(String.valueOf(availableIntegral), completeStudy.getMethod(), completeStudy.getGameId(), null); + // 用户账户添加积分 + TUser user = userService.getById(userid); + user.setIntegral(user.getIntegral() + availableIntegral); + add = add && userService.updateById(user); + } return R.ok(add); } @@ -944,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; } @@ -987,28 +1052,6 @@ } /** - * 学习完成,生成学习记录,积分明细记录 - * - * @param completeStudy 完成学习信息 - */ - @PostMapping("/completeLearning") - @ApiOperation(value = "完成学习", tags = {"完成学习/其他积分来源(分享...)"}) - public R<Boolean> completeLearning(@RequestBody CompleteStudyDTO completeStudy) { - // 登录用户id - Integer userId = tokenService.getLoginUserStudy().getUserid(); - // 获取user详细信息,改变积分 - TUser user = userService.getById(userId); - user.setIntegral(user.getIntegral() + completeStudy.getIntegral()); - boolean update = userService.updateById(user); - // 生成积分明细记录 - TIntegralRecord integralRecord = new TIntegralRecord(); - integralRecord.setIntegral(String.valueOf(completeStudy.getIntegral())); - integralRecord.setMethod(completeStudy.getMethod()); - integralRecord.setUserId(userId); - return R.ok(update && integralRecordService.save(integralRecord)); - } - - /** * 完成故事类型 */ @GetMapping("/completeStory") @@ -1019,15 +1062,26 @@ @ApiImplicitParam(value = "完成答题/完成听故事", name = "method", dataType = "String", required = true) }) public R<Boolean> completeStory(@RequestParam Integer integral, @RequestParam Integer storyId, - @RequestParam String method) { - // 添加积分明细记录 - Boolean add = integralRecordService.add(String.valueOf(integral), method); + @RequestParam String method) { + TStoryListen storyListen = storyListenService.lambdaQuery().eq(TStoryListen::getId, storyId).eq(TStoryListen::getDisabled, 0).one(); + if (null == storyListen) { + throw new GlobalException("当前故事学习失败,故事信息异常,请重试!"); + } // 用户信息 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)); + // 故事只有首次才能获取积分 + TIntegralRecord integralRecord = integralRecordService.lambdaQuery().eq(TIntegralRecord::getUserId, userId) + .eq(TIntegralRecord::getStoryId, storyId).eq(TIntegralRecord::getDisabled, 0).one(); + Boolean result = true; + if (null == integralRecord) { + // 添加积分明细记录 + result = integralRecordService.add(String.valueOf(integral), method, null, storyId); + TUser user = userService.lambdaQuery().eq(TUser::getId, userId).one(); + // 添加积分 + user.setIntegral(user.getIntegral() + integral); + result = result && userService.updateById(user); + } + return R.ok(result); } @GetMapping("/studyRecord") @@ -1040,7 +1094,7 @@ // 游戏测试成绩 List<TGameRecord> gameRecordList = gameRecordService.lambdaQuery().eq(TGameRecord::getUserId, userId) .eq(TGameRecord::getDisabled, 0).list(); - return R.ok(new StudyRecordResultVO(studyRecord,gameRecordList)); + return R.ok(new StudyRecordResultVO(studyRecord, gameRecordList)); } @GetMapping("/integralDetail") @@ -1051,8 +1105,8 @@ @ApiImplicitParam(value = "每页显示条数", name = "pageSize", dataType = "Integer", required = true) }) public R<IPage<TIntegralRecord>> integralDetail(String time, - @RequestParam("pageNum") Integer pageNum, - @RequestParam("pageSize") Integer pageSize) { + @RequestParam("pageNum") Integer pageNum, + @RequestParam("pageSize") Integer pageSize) { return R.ok(integralRecordService.integralDetail(new Page<>(pageNum, pageSize), tokenService.getLoginUserStudy().getUserid(), time)); } -- Gitblit v1.7.1