| | |
| | | import com.ruoyi.common.core.exception.GlobalException; |
| | | import com.ruoyi.common.core.utils.bean.BeanUtils; |
| | | import com.ruoyi.study.domain.*; |
| | | import com.ruoyi.study.dto.CompleteGameDTO; |
| | | import com.ruoyi.study.dto.StudyWeekDTO; |
| | | import com.ruoyi.study.mapper.TStudyMapper; |
| | | import com.ruoyi.study.service.*; |
| | |
| | | } |
| | | |
| | | @Override |
| | | public List<StudyWeekDTO> weekList(Integer type, Integer quarter) { |
| | | public List<StudyWeekDTO> weekList(Integer type, Integer quarter, Integer userId) { |
| | | List<StudyWeekDTO> result = new ArrayList<>(); |
| | | // 根据季度和type查询学习配置 |
| | | List<TStudy> study = lambdaQuery().eq(TStudy::getQuarter, quarter).eq(TStudy::getType, type) |
| | |
| | | total += storyListenList.stream().map(TStoryListen::getIntegral).mapToInt(Integer::intValue).sum(); |
| | | // 自主故事 - 看图配音 |
| | | total += storyListenList.stream().map(TStoryListen::getLookIntegral).mapToInt(Integer::intValue).sum(); |
| | | result.add(new StudyWeekDTO(week, type, quarter, title, total)); |
| | | // 判断周目是否可以进入学习 |
| | | Boolean canStudy = checkWeekCanStudy(userId, item); |
| | | result.add(new StudyWeekDTO(week, type, quarter, title, total, canStudy)); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * @param userId 用户id |
| | | * @return 当前周目是否学习 |
| | | */ |
| | | private Boolean checkWeekCanStudy(Integer userId, TStudy study) { |
| | | TUserStudy userStudy = userStudyService.lambdaQuery().eq(TUserStudy::getUserId, userId) |
| | | .eq(TUserStudy::getDisabled, 0).one(); |
| | | if (null == userStudy) { |
| | | userStudy = new TUserStudy(); |
| | | userStudy.setUserId(userId); |
| | | // 学习周目 |
| | | TStudy tStudy = this.lambdaQuery().eq(TStudy::getQuarter, Constants.ONE) |
| | | .orderByAsc(TStudy::getWeek).last("limit 1").one(); |
| | | userStudy.setWeek(tStudy.getWeek()); |
| | | userStudy.setDay(Constants.ONE); |
| | | userStudy.setTotalStudy(Constants.ZERO); |
| | | userStudy.setTodayStudy(Constants.ZERO); |
| | | userStudy.setWeekStudy(Constants.ZERO); |
| | | userStudy.setMonthStudy(Constants.ZERO); |
| | | userStudy.setListen(Constants.BURDEN_ONE); |
| | | userStudy.setLook(Constants.BURDEN_ONE); |
| | | userStudy.setInduction(Constants.BURDEN_ONE); |
| | | userStudy.setAnswer(Constants.BURDEN_ONE); |
| | | userStudy.setPair(Constants.BURDEN_ONE); |
| | | userStudyService.save(userStudy); |
| | | } |
| | | // 学习记录所属周目大于当前学习周目,判断为已学习 |
| | | return userStudy.getWeek() >= study.getWeek(); |
| | | } |
| | | |
| | | @Override |
| | |
| | | // 语音及图片 |
| | | List<List<TSubject>> subjectList = new ArrayList<>(); |
| | | for (TStudyLook studyLook : lookList) { |
| | | List<String> sortList = Arrays.stream(studyLook.getSort().split(",")).collect(Collectors.toList()); |
| | | List<String> subjectIds = Arrays.stream(studyLook.getSubject().split(",")).collect(Collectors.toList()); |
| | | List<TSubject> list = new ArrayList<>(); |
| | | // 图片及语音集合 |
| | | for (String id : subjectIds) { |
| | | TSubject data = subjectService.lambdaQuery().eq(TSubject::getId, id) |
| | | for (int i = 0; i < subjectIds.size(); i++) { |
| | | TSubject data = subjectService.lambdaQuery().eq(TSubject::getId, subjectIds.get(i)) |
| | | .eq(TSubject::getDisabled, 0).one(); |
| | | data.setSort(Integer.parseInt(sortList.get(i))); |
| | | list.add(data); |
| | | } |
| | | // 根据顺序排序 |
| | | list.sort(Comparator.comparingInt(TSubject::getSort)); |
| | | subjectList.add(list); |
| | | } |
| | | return new StudyLookResultVO(learnStudy, subjectList); |
| | |
| | | @Override |
| | | public int computeSchedule(TUserStudy result, Integer week) { |
| | | // 基础学习进度 |
| | | Integer listen = result.getListen(); |
| | | Integer look = result.getLook(); |
| | | Integer induction = result.getInduction(); |
| | | Integer answer = result.getAnswer(); |
| | | Integer pair = result.getPair(); |
| | | Integer day = result.getDay(); |
| | | // 默认进度为 0 |
| | | int defaultSchedule; |
| | |
| | | } else { |
| | | defaultSchedule = 0; |
| | | } |
| | | // 进度学习完成度计算总学习进度 |
| | | // todo 不确定是否需要累计计算 中途退出的进度 |
| | | /*if (!Constants.ZERO.equals(listen) && !Constants.BURDEN_ONE.equals(listen)) { |
| | | defaultSchedule += 4 * (100 / listen); |
| | | } |
| | | if (!Constants.ZERO.equals(look) && !Constants.BURDEN_ONE.equals(look)) { |
| | | defaultSchedule += 4 * (100 / look); |
| | | } |
| | | if (!Constants.ZERO.equals(induction) && !Constants.BURDEN_ONE.equals(induction)) { |
| | | defaultSchedule += 4 * (100 / induction); |
| | | } |
| | | if (!Constants.ZERO.equals(answer) && !Constants.BURDEN_ONE.equals(answer)) { |
| | | defaultSchedule += 4 * (100 / answer); |
| | | } |
| | | if (!Constants.ZERO.equals(pair) && !Constants.BURDEN_ONE.equals(pair)) { |
| | | defaultSchedule += 4 * (100 / pair); |
| | | }*/ |
| | | } |
| | | return defaultSchedule; |
| | | } |
| | |
| | | throw new GlobalException("题目信息异常!"); |
| | | } |
| | | return (int) (sum * ((double) accuracy / 100)); |
| | | } |
| | | |
| | | @Override |
| | | public void checkRate(TGame game, Integer userid, CompleteGameDTO completeStudy) { |
| | | |
| | | } |
| | | |
| | | } |