ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java
@@ -1368,7 +1368,7 @@ // 可获得积分不为null时,才添加积分明细记录 if (null != availableIntegral && !Constants.ZERO.equals(availableIntegral)) { add = add && integralRecordService.add(String.valueOf(availableIntegral), Constants.COMPLETE_GAME, completeStudy.getGameId(), null, difficulty); Constants.COMPLETE_GAME, completeStudy.getGameId(), null, difficulty, null); // 用户账户添加积分 TUser user = userService.getById(userid); user.setIntegral(user.getIntegral() + availableIntegral); @@ -1527,15 +1527,17 @@ Integer userId = loginUserStudy.getUserid(); Boolean result = true; // 学习时长更新 TStudy study = studyService.lambdaQuery().eq(TStudy::getId, storyListen.getStudyId()) .eq(TStudy::getDisabled, 0).one(); TUserStudy userStudy = userStudyService.lambdaQuery().eq(TUserStudy::getUserId, userId) .eq(TUserStudy::getDisabled, 0).one(); if (null == userStudy) { userStudy = createUserStudy(userId); userStudy.setTotalStudy(userStudy.getTotalStudy() + studyTime); userStudy.setTodayStudy(userStudy.getTodayStudy() + studyTime); userStudy.setWeekStudy(userStudy.getWeekStudy() + studyTime); userStudy.setMonthStudy(userStudy.getMonthStudy() + studyTime); } userStudy.setTotalStudy(userStudy.getTotalStudy() + studyTime); userStudy.setTodayStudy(userStudy.getTodayStudy() + studyTime); userStudy.setWeekStudy(userStudy.getWeekStudy() + studyTime); userStudy.setMonthStudy(userStudy.getMonthStudy() + studyTime); boolean update = userStudyService.updateById(userStudy); if (!update) { throw new GlobalException("学习时长更新失败!"); @@ -1547,11 +1549,15 @@ throw new GlobalException("自主故事-看图配音正确率异常!"); } // 看图配音模式,也需要根据游戏正确率计算积分 int integral = storyListen.getLookIntegral() * (accuracy / 100); double d = (double) accuracy / 100; int integral = (int) (storyListen.getLookIntegral() * d); int obtainedIntegral; // 看图配音已获取积分数量 List<TUserStudyRecord> list = studyRecordService.lambdaQuery() .eq(TUserStudyRecord::getStoryId, storyId) .eq(TUserStudyRecord::getType, 1) .eq(TUserStudyRecord::getQuarter, study.getQuarter()) .eq(TUserStudyRecord::getWeek, storyListen.getWeek()) .eq(TUserStudyRecord::getUserId, userId).list(); if (list.isEmpty()) { obtainedIntegral = 0; @@ -1560,25 +1566,37 @@ .mapToInt(Integer::intValue).sum(); } // 可获得积分计算 if (integral > obtainedIntegral) { int i = integral - obtainedIntegral; if (i > 0) { TUserStudyRecord data = new TUserStudyRecord(); data.setUserId(userId); data.setObtainedIntegral(integral - obtainedIntegral); data.setObtainedIntegral(i); data.setType(Constants.ONE); data.setStoryId(storyId); data.setQuarter(study.getQuarter()); data.setWeek(storyListen.getWeek()); result = studyRecordService.save(data); sum = integral - obtainedIntegral; sum = i; // 添加积分明细记录 result = integralRecordService.add(String.valueOf(sum), Constants.COMPLETE_STORY, null, storyId, null, Constants.ZERO); TUser user = userService.lambdaQuery().eq(TUser::getId, userId).one(); // 添加积分 user.setIntegral(user.getIntegral() + sum); result = result && userService.updateById(user); } } else { // 超级记忆只有首次才能获取积分 TIntegralRecord integralRecord = integralRecordService.lambdaQuery() .eq(TIntegralRecord::getUserId, userId) .eq(TIntegralRecord::getStoryId, storyId) .eq(TIntegralRecord::getDisabled, 0).one(); .eq(TIntegralRecord::getDisabled, 0) .eq(TIntegralRecord::getStoryType, Constants.ONE) .one(); if (null == integralRecord) { // 添加积分明细记录 result = integralRecordService.add(String.valueOf(storyListen.getIntegral()), Constants.COMPLETE_STORY, null, storyId, null); Constants.COMPLETE_STORY, null, storyId, null, Constants.ONE); TUser user = userService.lambdaQuery().eq(TUser::getId, userId).one(); // 添加积分 user.setIntegral(user.getIntegral() + storyListen.getIntegral()); ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TIntegralRecord.java
@@ -64,6 +64,12 @@ @ApiModelProperty("故事id 对应t_story_listen") private Integer storyId; /** * 故事id */ @ApiModelProperty("故事类型(0:看图配音;1:框架记忆)") private Integer storyType; @ApiModelProperty("积分变动时间") @TableField(exist = false) @JsonFormat(pattern = "yyyy-MM-dd HH:mm") ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITIntegralRecordService.java
@@ -33,7 +33,8 @@ * @param gameId 游戏id * @param storyId 故事id * @param difficulty 游戏难度 * @param storyType 故事类型(0:看图配音;1:框架记忆) * @return 操作结果 */ Boolean add(String integral, String method, Integer gameId, Integer storyId, Integer difficulty); Boolean add(String integral, String method, Integer gameId, Integer storyId, Integer difficulty,Integer storyType); } ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TIntegralRecordServiceImpl.java
@@ -33,7 +33,7 @@ @Override @Transactional(rollbackFor = Exception.class) public Boolean add(String integral, String method, Integer gameId, Integer storyId, Integer difficulty) { public Boolean add(String integral, String method, Integer gameId, Integer storyId, Integer difficulty, Integer storyType) { TIntegralRecord integralRecord = new TIntegralRecord(); integralRecord.setIntegral(integral); integralRecord.setMethod(method); @@ -41,6 +41,7 @@ integralRecord.setGameId(gameId); integralRecord.setStoryId(storyId); integralRecord.setGameDifficulty(difficulty); integralRecord.setStoryType(storyType); return this.save(integralRecord); } } ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStudyServiceImpl.java
@@ -434,21 +434,77 @@ } // 临时判断参数 boolean itemBool = false; // 学习进度所属季度 int studyQuarter = 1; // 当前进入周目所属季度 int thisQuarter = 1; for (Map.Entry<Integer, List<TStudy>> map : studyMap.entrySet()) { Integer key = map.getKey(); List<TStudy> list = map.getValue(); List<Integer> collect = list.stream().map(TStudy::getWeek).collect(Collectors.toList()); if (collect.contains(studyWeek)) { int i = collect.indexOf(studyWeek); if (collect.contains(week)) { int x = collect.indexOf(week); itemBool = i > x; } studyQuarter = key; } if (collect.contains(week)) { thisQuarter = key; } } // 默认进度为 0 int defaultSchedule; // 季度判断 if (studyQuarter > thisQuarter) { defaultSchedule = 100; } else if (studyQuarter < thisQuarter) { defaultSchedule = 0; } else { List<TStudy> tStudies = studyMap.get(studyQuarter); List<Integer> weekList = tStudies.stream().map(TStudy::getWeek).collect(Collectors.toList()); int studyIndex = weekList.indexOf(studyWeek); int weekIndex = weekList.indexOf(week); if (studyIndex > weekIndex) { defaultSchedule = 100; } else if (studyIndex < weekIndex) { defaultSchedule = 0; }else { // 根据day初始化学习进度 if (Constants.ONE.equals(day)) { defaultSchedule = 0; } else if (Constants.TWO.equals(day)) { defaultSchedule = 20; } else if (Constants.THREE.equals(day)) { defaultSchedule = 40; } else if (Constants.FOUR.equals(day)) { defaultSchedule = 60; } else if (Constants.FIVE.equals(day)) { defaultSchedule = 80; } else { defaultSchedule = 0; } // 根据五种学习计算进度 Integer listen = result.getListen(); if (!Constants.BURDEN_ONE.equals(listen)) { defaultSchedule += (int) (((double) listen / 100) * 4); } Integer look = result.getLook(); if (!Constants.BURDEN_ONE.equals(look)) { defaultSchedule += (int) (((double) look / 100) * 4); } Integer induction = result.getInduction(); if (!Constants.BURDEN_ONE.equals(induction)) { defaultSchedule += (int) (((double) induction / 100) * 4); } Integer answer = result.getAnswer(); if (!Constants.BURDEN_ONE.equals(answer)) { defaultSchedule += (int) (((double) answer / 100) * 4); } Integer pair = result.getPair(); if (!Constants.BURDEN_ONE.equals(pair)) { defaultSchedule += (int) (((double) pair / 100) * 4); } } } // week以超过当前week,进度为 100% if (itemBool) { /*if (itemBool) { defaultSchedule = 100; } else { // 根据day初始化学习进度 @@ -486,8 +542,7 @@ if (!Constants.BURDEN_ONE.equals(pair)) { defaultSchedule += (int) (((double) pair / 100) * 4); } } }*/ return defaultSchedule; }