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