| | |
| | | package com.ruoyi.study.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.common.core.constant.Constants; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.exception.GlobalException; |
| | | import com.ruoyi.common.core.web.domain.BaseModel; |
| | | import com.ruoyi.study.domain.*; |
| | | import com.ruoyi.study.dto.StudyWeekDTO; |
| | | import com.ruoyi.study.mapper.TStudyMapper; |
| | |
| | | List<List<TSubject>> subjectList = new ArrayList<>(); |
| | | |
| | | StudyListenResultVO studyListenResultVO = new StudyListenResultVO(learnStudy, subjectList); |
| | | |
| | | List<TSubjectRecordDetail> subjectRecordDetails = subjectRecordDetailService.lambdaQuery().eq(TSubjectRecordDetail::getUserId, userid) |
| | | .eq(TSubjectRecordDetail::getWeek, week).ne(BaseModel::getDisabled, 0).list(); |
| | | List<TSubjectRecordDetail> listenList = subjectRecordDetails.stream().filter(e -> e.getType() == 1).collect(Collectors.toList()); |
| | | int listenPass = (int) listenList.stream().filter(e -> e.getStatus() == 2).count(); |
| | | int listenSize = listenList.size(); |
| | | if (listenSize!=0){ |
| | | // 计算当前通关率 |
| | | double listenRate = (double) listenPass /listenSize; |
| | | TStudyListen one = studyListenService.lambdaQuery().eq(TStudyListen::getWeek, week) |
| | | .eq(TStudyListen::getDay, 1).last("limit 1").one(); |
| | | if (one!=null){ |
| | | if (listenRate<(Double.parseDouble(one.getRate())/100)){ |
| | | // 清空答题记录 |
| | | subjectRecordDetailService.remove(new LambdaQueryWrapper<TSubjectRecordDetail>() |
| | | .eq(TSubjectRecordDetail::getUserId, userid) |
| | | .eq(TSubjectRecordDetail::getWeek, week) |
| | | .eq(TSubjectRecordDetail::getDay,day) |
| | | .eq(TSubjectRecordDetail::getType |
| | | ,1)); |
| | | } |
| | | } |
| | | } |
| | | List<TSubjectRecordDetail> list = subjectRecordDetailService.lambdaQuery().eq(TSubjectRecordDetail::getUserId, userid) |
| | | .eq(TSubjectRecordDetail::getWeek, week) |
| | | .eq(TSubjectRecordDetail::getDay, day) |
| | |
| | | } |
| | | |
| | | @Override |
| | | public StudyLookResultVO pictureSelectVoice(Integer week, Integer day, List<TStudyLook> lookList, Integer userid) { |
| | | public R<StudyLookResultVO> pictureSelectVoice(Integer week, Integer day, List<TStudyLook> lookList, Integer userid) { |
| | | if (lookList.isEmpty()) { |
| | | throw new GlobalException("当前学习周目题目数量不足!"); |
| | | } |
| | |
| | | List<List<TSubject>> subjectList = new ArrayList<>(); |
| | | |
| | | StudyLookResultVO studyListenResultVO = new StudyLookResultVO(learnStudy, subjectList); |
| | | |
| | | List<TSubjectRecordDetail> subjectRecordDetails = subjectRecordDetailService.lambdaQuery().eq(TSubjectRecordDetail::getUserId, userid) |
| | | .eq(TSubjectRecordDetail::getWeek, week).ne(BaseModel::getDisabled, 0).list(); |
| | | List<TSubjectRecordDetail> listenList = subjectRecordDetails.stream().filter(e -> e.getType() == 1).collect(Collectors.toList()); |
| | | int listenPass = (int) listenList.stream().filter(e -> e.getStatus() == 2).count(); |
| | | int listenSize = listenList.size(); |
| | | if (listenSize!=0){ |
| | | // 先计算上一天的通关率 设置为两位小数 |
| | | double listenRate = (double) listenPass /listenSize; |
| | | BigDecimal divide = new BigDecimal(listenPass).divide(new BigDecimal(listenSize), 2, RoundingMode.HALF_UP); |
| | | TStudyListen one = studyListenService.lambdaQuery().eq(TStudyListen::getWeek, week) |
| | | .eq(TStudyListen::getDay, 1).last("limit 1").one(); |
| | | if (one!=null){ |
| | | if (listenRate<(Double.parseDouble(one.getRate())/100)){ |
| | | return R.fail("听音选图未达到通关率"+one.getRate()+"%,"+"当前通关率:"+divide+"%"); |
| | | } |
| | | } |
| | | } |
| | | List<TSubjectRecordDetail> lookList1 = subjectRecordDetails.stream().filter(e -> e.getType() == 2).collect(Collectors.toList()); |
| | | int lookPass = (int) lookList1.stream().filter(e -> e.getStatus() == 2).count(); |
| | | int lookSize = lookList1.size(); |
| | | if (lookSize!=0){ |
| | | // 计算当前通关率 |
| | | double listenRate = (double) lookPass /lookSize; |
| | | TStudyLook one = studyLookService.lambdaQuery().eq(TStudyLook::getWeek, week) |
| | | .eq(TStudyLook::getDay, 2).last("limit 1").one(); |
| | | if (one!=null){ |
| | | // 通关率未达标 |
| | | if (listenRate<(Double.parseDouble(one.getRate())/100)){ |
| | | // 清空答题记录 |
| | | subjectRecordDetailService.remove(new LambdaQueryWrapper<TSubjectRecordDetail>() |
| | | .eq(TSubjectRecordDetail::getUserId, userid) |
| | | .eq(TSubjectRecordDetail::getWeek, week) |
| | | .eq(TSubjectRecordDetail::getDay,day) |
| | | .eq(TSubjectRecordDetail::getType |
| | | ,2)); |
| | | } |
| | | } |
| | | } |
| | | List<TSubjectRecordDetail> list = subjectRecordDetailService.lambdaQuery().eq(TSubjectRecordDetail::getUserId, userid) |
| | | .eq(TSubjectRecordDetail::getWeek, week) |
| | | .eq(TSubjectRecordDetail::getDay, day) |
| | |
| | | studyListenResultVO.setList(tSubjectRecordDetails); |
| | | studyListenResultVO.setSubjectList(subjectList); |
| | | } |
| | | return studyListenResultVO; |
| | | return R.ok(studyListenResultVO); |
| | | } |
| | | |
| | | @Override |
| | | public StudyInductionResultVO induceExclude(Integer week, Integer day, List<TStudyInduction> inductionList, Integer userid) { |
| | | public R<StudyInductionResultVO> induceExclude(Integer week, Integer day, List<TStudyInduction> inductionList, Integer userid) { |
| | | if (inductionList.isEmpty()) { |
| | | throw new GlobalException("当前学习周目题目数量不足!"); |
| | | } |
| | |
| | | .eq(TSubjectRecordDetail::getWeek, week) |
| | | .eq(TSubjectRecordDetail::getDay, day) |
| | | .eq(TSubjectRecordDetail::getType, 3).list(); |
| | | List<TSubjectRecordDetail> subjectRecordDetails = subjectRecordDetailService.lambdaQuery().eq(TSubjectRecordDetail::getUserId, userid) |
| | | .eq(TSubjectRecordDetail::getWeek, week).ne(BaseModel::getDisabled, 0).list(); |
| | | List<TSubjectRecordDetail> listenList = subjectRecordDetails.stream().filter(e -> e.getType() == 2).collect(Collectors.toList()); |
| | | int listenPass = (int) listenList.stream().filter(e -> e.getStatus() == 2).count(); |
| | | int listenSize = listenList.size(); |
| | | if (listenSize!=0){ |
| | | // 先计算上一天的通关率 设置为两位小数 |
| | | double listenRate = (double) listenPass /listenSize; |
| | | BigDecimal divide = new BigDecimal(listenPass).divide(new BigDecimal(listenSize), 2, RoundingMode.HALF_UP); |
| | | TStudyLook one = studyLookService.lambdaQuery().eq(TStudyLook::getWeek, week) |
| | | .eq(TStudyLook::getDay, 2).last("limit 1").one(); |
| | | if (one!=null){ |
| | | if (listenRate<(Double.parseDouble(one.getRate())/100)){ |
| | | return R.fail("看图选音未达到通关率"+one.getRate()+"%,"+"当前通关率:"+divide+"%"); |
| | | } |
| | | } |
| | | } |
| | | List<TSubjectRecordDetail> lookList1 = subjectRecordDetails.stream().filter(e -> e.getType() == 3).collect(Collectors.toList()); |
| | | int lookPass = (int) lookList1.stream().filter(e -> e.getStatus() == 2).count(); |
| | | int lookSize = lookList1.size(); |
| | | if (lookSize!=0){ |
| | | // 计算当前通关率 |
| | | double listenRate = (double) lookPass /lookSize; |
| | | TStudyInduction one = studyInductionService.lambdaQuery().eq(TStudyInduction::getWeek, week) |
| | | .eq(TStudyInduction::getDay, 3).last("limit 1").one(); |
| | | if (one!=null){ |
| | | // 通关率未达标 |
| | | if (listenRate<(Double.parseDouble(one.getRate())/100)){ |
| | | // 清空答题记录 |
| | | subjectRecordDetailService.remove(new LambdaQueryWrapper<TSubjectRecordDetail>() |
| | | .eq(TSubjectRecordDetail::getUserId, userid) |
| | | .eq(TSubjectRecordDetail::getWeek, week) |
| | | .eq(TSubjectRecordDetail::getDay,day) |
| | | .eq(TSubjectRecordDetail::getType |
| | | ,3)); |
| | | } |
| | | } |
| | | } |
| | | if (list.isEmpty()) { |
| | | List<TSubjectRecordDetail> tSubjectRecordDetails = new ArrayList<>(); |
| | | for (TStudyInduction data : inductionList) { |
| | |
| | | .divide(new BigDecimal(tSubjectRecordDetails.size()), 2, RoundingMode.HALF_UP)); |
| | | } |
| | | studyListenResultVO.setSubjectList(subjectList); |
| | | return studyListenResultVO; |
| | | return R.ok(studyListenResultVO); |
| | | } |
| | | |
| | | @Override |
| | | public StudyAnswerResultVO questionsAndAnswers(Integer week, Integer day, List<TStudyAnswer> answerList, Integer userid) { |
| | | public R<StudyAnswerResultVO> questionsAndAnswers(Integer week, Integer day, List<TStudyAnswer> answerList, Integer userid) { |
| | | if (answerList.isEmpty()) { |
| | | throw new GlobalException("当前学习周目题目数量不足!"); |
| | | } |
| | |
| | | .eq(TSubjectRecordDetail::getWeek, week) |
| | | .eq(TSubjectRecordDetail::getDay, day) |
| | | .eq(TSubjectRecordDetail::getType, 4).list(); |
| | | List<TSubjectRecordDetail> subjectRecordDetails = subjectRecordDetailService.lambdaQuery().eq(TSubjectRecordDetail::getUserId, userid) |
| | | .eq(TSubjectRecordDetail::getWeek, week).ne(BaseModel::getDisabled, 0).list(); |
| | | List<TSubjectRecordDetail> listenList = subjectRecordDetails.stream().filter(e -> e.getType() == 3).collect(Collectors.toList()); |
| | | int listenPass = (int) listenList.stream().filter(e -> e.getStatus() == 2).count(); |
| | | int listenSize = listenList.size(); |
| | | if (listenSize!=0){ |
| | | // 先计算上一天的通关率 设置为两位小数 |
| | | double listenRate = (double) listenPass /listenSize; |
| | | BigDecimal divide = new BigDecimal(listenPass).divide(new BigDecimal(listenSize), 2, RoundingMode.HALF_UP); |
| | | TStudyInduction one = studyInductionService.lambdaQuery().eq(TStudyInduction::getWeek, week) |
| | | .eq(TStudyInduction::getDay, 3).last("limit 1").one(); |
| | | if (one!=null){ |
| | | if (listenRate<(Double.parseDouble(one.getRate())/100)){ |
| | | return R.fail("归纳排除未达到通关率"+one.getRate()+"%,"+"当前通关率:"+divide+"%"); |
| | | } |
| | | } |
| | | } |
| | | List<TSubjectRecordDetail> lookList1 = subjectRecordDetails.stream().filter(e -> e.getType() == 4).collect(Collectors.toList()); |
| | | int lookPass = (int) lookList1.stream().filter(e -> e.getStatus() == 2).count(); |
| | | int lookSize = lookList1.size(); |
| | | if (lookSize!=0){ |
| | | // 计算当前通关率 |
| | | double listenRate = (double) lookPass /lookSize; |
| | | TStudyAnswer one = studyAnswerService.lambdaQuery().eq(TStudyAnswer::getWeek, week) |
| | | .eq(TStudyAnswer::getDay, 4).last("limit 1").one(); |
| | | if (one!=null){ |
| | | // 通关率未达标 |
| | | if (listenRate<(Double.parseDouble(one.getRate())/100)){ |
| | | // 清空答题记录 |
| | | subjectRecordDetailService.remove(new LambdaQueryWrapper<TSubjectRecordDetail>() |
| | | .eq(TSubjectRecordDetail::getUserId, userid) |
| | | .eq(TSubjectRecordDetail::getWeek, week) |
| | | .eq(TSubjectRecordDetail::getDay,day) |
| | | .eq(TSubjectRecordDetail::getType |
| | | ,4)); |
| | | } |
| | | } |
| | | } |
| | | if (list.isEmpty()) { |
| | | List<TSubjectRecordDetail> tSubjectRecordDetails = new ArrayList<>(); |
| | | for (int i = 0; i < answerList.size(); i += Constants.TWO) { |
| | |
| | | .divide(new BigDecimal(tSubjectRecordDetails.size()), 2, RoundingMode.HALF_UP)); |
| | | } |
| | | studyListenResultVO.setSubjectList(subjectList); |
| | | return studyListenResultVO; |
| | | return R.ok(studyListenResultVO); |
| | | } |
| | | |
| | | private void voAdd(List<QuestionsAnswersSubjectVO> voList, TStudyAnswer one) { |
| | |
| | | } |
| | | |
| | | @Override |
| | | public StudyPairResultVO pictureMateVoice(Integer week, Integer day, List<TStudyPair> pair, Integer userid) { |
| | | public R<StudyPairResultVO> pictureMateVoice(Integer week, Integer day, List<TStudyPair> pair, Integer userid) { |
| | | if (pair.isEmpty()) { |
| | | throw new GlobalException("当前学习周目题目数量不足!"); |
| | | } |
| | |
| | | .eq(TSubjectRecordDetail::getWeek, week) |
| | | .eq(TSubjectRecordDetail::getDay, day) |
| | | .eq(TSubjectRecordDetail::getType, 5).list(); |
| | | List<TSubjectRecordDetail> subjectRecordDetails = subjectRecordDetailService.lambdaQuery().eq(TSubjectRecordDetail::getUserId, userid) |
| | | .eq(TSubjectRecordDetail::getWeek, week).ne(BaseModel::getDisabled, 0).list(); |
| | | List<TSubjectRecordDetail> listenList = subjectRecordDetails.stream().filter(e -> e.getType() == 4).collect(Collectors.toList()); |
| | | int listenPass = (int) listenList.stream().filter(e -> e.getStatus() == 2).count(); |
| | | int listenSize = listenList.size(); |
| | | if (listenSize!=0){ |
| | | // 先计算上一天的通关率 设置为两位小数 |
| | | double listenRate = (double) listenPass /listenSize; |
| | | BigDecimal divide = new BigDecimal(listenPass).divide(new BigDecimal(listenSize), 2, RoundingMode.HALF_UP); |
| | | TStudyAnswer one = studyAnswerService.lambdaQuery().eq(TStudyAnswer::getWeek, week) |
| | | .eq(TStudyAnswer::getDay, 4).last("limit 1").one(); |
| | | if (one!=null){ |
| | | if (listenRate<(Double.parseDouble(one.getRate())/100)){ |
| | | return R.fail("归纳排除未达到通关率"+one.getRate()+"%,"+"当前通关率:"+divide+"%"); |
| | | } |
| | | } |
| | | } |
| | | List<TSubjectRecordDetail> lookList1 = subjectRecordDetails.stream().filter(e -> e.getType() == 5).collect(Collectors.toList()); |
| | | int lookPass = (int) lookList1.stream().filter(e -> e.getStatus() == 2).count(); |
| | | int lookSize = lookList1.size(); |
| | | if (lookSize!=0){ |
| | | // 计算当前通关率 |
| | | double listenRate = (double) lookPass /lookSize; |
| | | TStudyPair one = studyPairService.lambdaQuery().eq(TStudyPair::getWeek, week) |
| | | .eq(TStudyPair::getDay, 5).last("limit 1").one(); |
| | | if (one!=null){ |
| | | // 通关率未达标 |
| | | if (listenRate<(Double.parseDouble(one.getRate())/100)){ |
| | | // 清空答题记录 |
| | | subjectRecordDetailService.remove(new LambdaQueryWrapper<TSubjectRecordDetail>() |
| | | .eq(TSubjectRecordDetail::getUserId, userid) |
| | | .eq(TSubjectRecordDetail::getWeek, week) |
| | | .eq(TSubjectRecordDetail::getDay,day) |
| | | .eq(TSubjectRecordDetail::getType |
| | | ,5)); |
| | | } |
| | | } |
| | | } |
| | | if (list.isEmpty()) { |
| | | List<TSubjectRecordDetail> tSubjectRecordDetails = new ArrayList<>(); |
| | | for (TStudyPair data : pair) { |
| | |
| | | studyListenResultVO.setAccuracy(new BigDecimal(tSubjectRecordDetails.stream().filter(tSubjectRecordDetail -> tSubjectRecordDetail.getStatus().equals(2)).count()) |
| | | .divide(new BigDecimal(tSubjectRecordDetails.size()), 2, RoundingMode.HALF_UP)); |
| | | } |
| | | return studyListenResultVO; |
| | | return R.ok(studyListenResultVO); |
| | | } |
| | | |
| | | @Override |