From 5cc3053e346a848b5b329b53fa14e60f927847aa Mon Sep 17 00:00:00 2001 From: hjl <1657978663@qq.com> Date: 星期四, 23 五月 2024 18:01:17 +0800 Subject: [PATCH] feat: 完成学习时积分获取规则 --- ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java | 153 +++++++++++++++++++++++++++++++++++---------------- 1 files changed, 105 insertions(+), 48 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 701219b..705c657 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 @@ -76,6 +76,8 @@ private ITUserService userService; @Resource private TokenService tokenService; + @Resource + private ITSubjectRecordService subjectRecordService; @PostMapping("/storyList") @ApiOperation(value = "配置学习类型选择故事", tags = {"题目管理"}) @@ -270,6 +272,7 @@ TStudyLook tStudyLook = new TStudyLook(); tStudyLook.setStudyId(one.getId()); tStudyLook.setDay(day); + tStudyLook.setSort(studyLookDTO.getSort()); tStudyLook.setSubject(studyLookDTO.getSubject()); tStudyLook.setIntegral(studyLookDTO.getIntegral()); tStudyLook.setWeek(week); @@ -289,6 +292,7 @@ tStudyInduction.setIntegral(studyInductionDTO.getIntegral()); tStudyInduction.setWeek(week); tStudyInduction.setIsVip(studyInductionDTO.getIsVip()); + studyInductionService.save(tStudyInduction); } studyAnswerService.remove(new QueryWrapper<TStudyAnswer>() .eq("studyId", one.getId()) @@ -413,7 +417,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()); } @@ -442,6 +446,8 @@ String string = temp.toString(); studyListenVO.setName(string.substring(0, string.length() - 1)); studyListenVO.setIntegral(tStudyListen.getIntegral()); + studyListenVO.setSubject(tStudyListen.getSubject()); + studyListenVO.setIsVip(tStudyListen.getIsVip()); listenVOS.add(studyListenVO); } // 看音选图 @@ -467,6 +473,8 @@ studyLookVO1.setName(string.substring(0, string.length() - 1)); studyLookVO1.setSort(string1.substring(0, string1.length() - 1)); studyLookVO1.setIntegral(tStudyLook.getIntegral()); + studyLookVO1.setSubject(tStudyLook.getSubject()); + studyLookVO1.setIsVip(tStudyLook.getIsVip()); lookVOS.add(studyLookVO1); } // 归纳排除 @@ -479,17 +487,14 @@ StudyInductionVO studyInductionVO = new StudyInductionVO(); for (String s : tStudyInduction.getSubject().split(",")) { String replace = s.replace("-", ""); - if (s.contains("-")) { - TSubject byId = subjectService.getById(replace); - names.append("-").append(byId.getName()).append(","); - } else { - TSubject byId = subjectService.getById(s); - names.append(byId.getName()).append(","); - } + TSubject byId = subjectService.getById(replace); + names.append(byId.getName()).append(","); } String string = names.toString(); studyInductionVO.setName(string.substring(0, string.length() - 1)); studyInductionVO.setIntegral(tStudyInduction.getIntegral()); + studyInductionVO.setSubject(tStudyInduction.getSubject()); + studyInductionVO.setIsVip(tStudyInduction.getIsVip()); inductionVOS.add(studyInductionVO); } // 有问有答 @@ -501,18 +506,21 @@ StudyAnswerVO studyAnswerVO = new StudyAnswerVO(); if (tStudyAnswer.getIsAnswer() == 1) { TSubject byId = subjectService.getById(tStudyAnswer.getSubject()); - names.append("-").append(byId.getName()).append(","); + names.append(byId.getName()).append(","); TSubject byId1 = subjectService.getById(tStudyAnswer.getAnswerSubject()); - names.append("-").append(byId1.getName()).append(","); + names.append(byId1.getName()).append(","); } else { TSubject byId = subjectService.getById(tStudyAnswer.getSubject()); names.append(byId.getName()).append(","); TSubject byId1 = subjectService.getById(tStudyAnswer.getAnswerSubject()); - names.append("-").append(byId1.getName()).append(","); + names.append(byId1.getName()).append(","); } 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()); answerVOS.add(studyAnswerVO); } // 音图相配 @@ -530,6 +538,8 @@ String string = names.toString(); studyPairVO.setName(string.substring(0, string.length() - 1)); studyPairVO.setIntegral(tStudyPair.getIntegral()); + studyPairVO.setSubject(tStudyPair.getSubject()); + studyPairVO.setIsVip(tStudyPair.getIsVip()); pairVOS.add(studyPairVO); } List<TGame> list5 = gameService.list(new QueryWrapper<TGame>() @@ -631,13 +641,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)); } /** @@ -767,6 +795,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困难) @@ -852,12 +905,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); } @@ -925,28 +993,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") @@ -957,15 +1003,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") @@ -978,7 +1035,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") @@ -989,8 +1046,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