From fafae77d59bc333a11c6b43e8f8606e190341e4a Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期二, 10 六月 2025 16:53:13 +0800 Subject: [PATCH] 部分代码 --- ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStudyServiceImpl.java | 507 +++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 428 insertions(+), 79 deletions(-) diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStudyServiceImpl.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStudyServiceImpl.java index 49ce7df..b418d5c 100644 --- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStudyServiceImpl.java +++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStudyServiceImpl.java @@ -11,6 +11,8 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.*; import java.util.stream.Collectors; @@ -45,6 +47,8 @@ private ITGameService gameService; @Resource private ITStoryListenService storyListenService; + @Resource + private ITSubjectRecordDetailService subjectRecordDetailService; private final static Map<Integer, Integer> GAME_DIFFICULTY_MAP = new HashMap<>(); @@ -418,7 +422,7 @@ } @Override - public StudyListenResultVO listenSelectPicture(Integer week, Integer day, List<TStudyListen> studyListens) { + public StudyListenResultVO listenSelectPicture(Integer week, Integer day, List<TStudyListen> studyListens, Integer userid) { if (studyListens.isEmpty()) { throw new GlobalException("当前学习周目题目数量不足!"); } @@ -436,22 +440,82 @@ learnStudy.setIntegral(total); // 语音及图片 List<List<TSubject>> subjectList = new ArrayList<>(); - for (TStudyListen studyListen : studyListens) { - List<String> subjectIds = Arrays.stream(studyListen.getSubject().split(",")).collect(Collectors.toList()); - List<TSubject> list = new ArrayList<>(); - // 图片及语音集合 - for (String id : subjectIds) { - TSubject data = subjectService.lambdaQuery().eq(TSubject::getId, id) - .eq(TSubject::getDisabled, 0).one(); - list.add(data); + + StudyListenResultVO studyListenResultVO = new StudyListenResultVO(learnStudy, subjectList); + + List<TSubjectRecordDetail> list = subjectRecordDetailService.lambdaQuery().eq(TSubjectRecordDetail::getUserId, userid) + .eq(TSubjectRecordDetail::getWeek, week) + .eq(TSubjectRecordDetail::getDay, day) + .eq(TSubjectRecordDetail::getType, 1).list(); + if (list.isEmpty()) { + List<TSubjectRecordDetail> tSubjectRecordDetails = new ArrayList<>(); + for (TStudyListen studyListen : studyListens) { + List<String> subjectIds = Arrays.stream(studyListen.getSubject().split(",")).collect(Collectors.toList()); + List<TSubject> subs = new ArrayList<>(); + // 图片及语音集合 + for (String id : subjectIds) { + TSubject data = subjectService.lambdaQuery().eq(TSubject::getId, id) + .eq(TSubject::getDisabled, 0).one(); + subs.add(data); + TSubjectRecordDetail tSubjectRecordDetail = new TSubjectRecordDetail(); + tSubjectRecordDetail.setUserId(userid); + tSubjectRecordDetail.setWeek(week); + tSubjectRecordDetail.setDay(day); + tSubjectRecordDetail.setType(1); + tSubjectRecordDetail.setStatus(1); + tSubjectRecordDetail.setObjectId(studyListen.getId()); + tSubjectRecordDetails.add(tSubjectRecordDetail); + } + subjectList.add(subs); } - subjectList.add(list); + subjectRecordDetailService.saveBatch(tSubjectRecordDetails); + studyListenResultVO.setList(tSubjectRecordDetails); + studyListenResultVO.setAccuracy(new BigDecimal("0.00")); + + } else { + + List<TSubjectRecordDetail> tSubjectRecordDetails = new ArrayList<>(); + for (TStudyListen studyListen : studyListens) { + List<String> subjectIds = Arrays.stream(studyListen.getSubject().split(",")).collect(Collectors.toList()); + List<TSubject> subs = new ArrayList<>(); + // 图片及语音集合 + for (String id : subjectIds) { + TSubject data = subjectService.lambdaQuery().eq(TSubject::getId, id) + .eq(TSubject::getDisabled, 0).one(); + subs.add(data); + } + subjectList.add(subs); + List<TSubjectRecordDetail> tSubjectRecordDetail1 = list.stream().filter(e -> e.getObjectId().equals(studyListen.getId())).collect(Collectors.toList()); + + if (tSubjectRecordDetail1.isEmpty()){ + for (int i = 0; i < 4; i++) { + TSubjectRecordDetail tSubjectRecordDetail = new TSubjectRecordDetail(); + tSubjectRecordDetail.setUserId(userid); + tSubjectRecordDetail.setWeek(week); + tSubjectRecordDetail.setDay(day); + tSubjectRecordDetail.setType(1); + tSubjectRecordDetail.setStatus(1); + tSubjectRecordDetail.setObjectId(studyListen.getId()); + tSubjectRecordDetails.add(tSubjectRecordDetail); + } + subjectRecordDetailService.saveBatch(tSubjectRecordDetails); + }else{ + tSubjectRecordDetails.addAll(tSubjectRecordDetail1); + } + } + + studyListenResultVO.setList(tSubjectRecordDetails); + // 计算正确率 + BigDecimal accuracy = new BigDecimal(tSubjectRecordDetails.stream().filter(tSubjectRecordDetail -> tSubjectRecordDetail.getStatus().equals(2)).count()) + .divide(new BigDecimal(tSubjectRecordDetails.size()), 2, RoundingMode.HALF_UP); + studyListenResultVO.setAccuracy(accuracy); } - return new StudyListenResultVO(learnStudy, subjectList); + studyListenResultVO.setSubjectList(subjectList); + return studyListenResultVO; } @Override - public StudyLookResultVO pictureSelectVoice(Integer week, Integer day, List<TStudyLook> lookList) { + public StudyLookResultVO pictureSelectVoice(Integer week, Integer day, List<TStudyLook> lookList, Integer userid) { if (lookList.isEmpty()) { throw new GlobalException("当前学习周目题目数量不足!"); } @@ -469,26 +533,91 @@ learnStudy.setIntegral(total); // 语音及图片 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 (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); + + StudyLookResultVO studyListenResultVO = new StudyLookResultVO(learnStudy, subjectList); + + List<TSubjectRecordDetail> list = subjectRecordDetailService.lambdaQuery().eq(TSubjectRecordDetail::getUserId, userid) + .eq(TSubjectRecordDetail::getWeek, week) + .eq(TSubjectRecordDetail::getDay, day) + .eq(TSubjectRecordDetail::getType, 2).list(); + if (list.isEmpty()) { + List<TSubjectRecordDetail> tSubjectRecordDetails = 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> subjects = new ArrayList<>(); + // 图片及语音集合 + 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))); + subjects.add(data); + } + // 根据顺序排序 + subjects.sort(Comparator.comparingInt(TSubject::getSort)); + subjectList.add(subjects); + TSubjectRecordDetail tSubjectRecordDetail = new TSubjectRecordDetail(); + tSubjectRecordDetail.setUserId(userid); + tSubjectRecordDetail.setWeek(week); + tSubjectRecordDetail.setDay(day); + tSubjectRecordDetail.setType(2); + tSubjectRecordDetail.setStatus(1); + tSubjectRecordDetail.setObjectId(studyLook.getId()); + tSubjectRecordDetails.add(tSubjectRecordDetail); } - // 根据顺序排序 - list.sort(Comparator.comparingInt(TSubject::getSort)); - subjectList.add(list); + + studyListenResultVO.setSubjectList(subjectList); + subjectRecordDetailService.saveBatch(tSubjectRecordDetails); + studyListenResultVO.setList(tSubjectRecordDetails); + studyListenResultVO.setAccuracy(new BigDecimal("0.00")); + + } else { + List<TSubjectRecordDetail> tSubjectRecordDetails = new ArrayList<>(); + List<Integer> collect1 = lookList.stream().map(TStudyLook::getId).collect(Collectors.toList()); + List<TSubjectRecordDetail> collect3 = list.stream().filter(e -> !collect1.contains(e.getObjectId())).collect(Collectors.toList()); + subjectRecordDetailService.removeBatchByIds(collect3); + 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> subjects = new ArrayList<>(); + // 图片及语音集合 + 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))); + subjects.add(data); + } + // 根据顺序排序 + subjects.sort(Comparator.comparingInt(TSubject::getSort)); + subjectList.add(subjects); + List<TSubjectRecordDetail> tSubjectRecordDetail1 = list.stream().filter(e -> e.getObjectId().equals(studyLook.getId())).collect(Collectors.toList()); + if (tSubjectRecordDetail1.isEmpty()){ + TSubjectRecordDetail tSubjectRecordDetail = new TSubjectRecordDetail(); + tSubjectRecordDetail.setUserId(userid); + tSubjectRecordDetail.setWeek(week); + tSubjectRecordDetail.setDay(day); + tSubjectRecordDetail.setType(3); + tSubjectRecordDetail.setStatus(1); + tSubjectRecordDetail.setObjectId(studyLook.getId()); + tSubjectRecordDetails.add(tSubjectRecordDetail); + subjectRecordDetailService.save(tSubjectRecordDetail); + }else{ + tSubjectRecordDetails.addAll(tSubjectRecordDetail1); + } + + + } + + studyListenResultVO.setAccuracy(new BigDecimal(tSubjectRecordDetails.stream().filter(tSubjectRecordDetail -> tSubjectRecordDetail.getStatus().equals(2)).count()) + .divide(new BigDecimal(tSubjectRecordDetails.size()), 2, RoundingMode.HALF_UP)); + studyListenResultVO.setList(tSubjectRecordDetails); + studyListenResultVO.setSubjectList(subjectList); } - return new StudyLookResultVO(learnStudy, subjectList); + return studyListenResultVO; } @Override - public StudyInductionResultVO induceExclude(Integer week, Integer day, List<TStudyInduction> inductionList) { + public StudyInductionResultVO induceExclude(Integer week, Integer day, List<TStudyInduction> inductionList, Integer userid) { if (inductionList.isEmpty()) { throw new GlobalException("当前学习周目题目数量不足!"); } @@ -506,45 +635,128 @@ learnStudy.setIntegral(total); // 语音及图片 List<List<TSubject>> subjectList = new ArrayList<>(); - for (TStudyInduction data : inductionList) { - List<String> subjectIds = Arrays.stream(data.getSubject().split(",")).collect(Collectors.toList()); - List<TSubject> subjectLists = new ArrayList<>(); - // 第一组题 固定下标为0,1,2的题 - for (int i = 0; i < Constants.THREE; i++) { - String id = subjectIds.get(i); - if (!id.startsWith("-")) { - subjectLists.add(subjectService.getById(id)); + + StudyInductionResultVO studyListenResultVO = new StudyInductionResultVO(learnStudy, subjectList); + + List<TSubjectRecordDetail> list = subjectRecordDetailService.lambdaQuery().eq(TSubjectRecordDetail::getUserId, userid) + .eq(TSubjectRecordDetail::getWeek, week) + .eq(TSubjectRecordDetail::getDay, day) + .eq(TSubjectRecordDetail::getType, 3).list(); + if (list.isEmpty()) { + List<TSubjectRecordDetail> tSubjectRecordDetails = new ArrayList<>(); + for (TStudyInduction data : inductionList) { + List<String> subjectIds = Arrays.stream(data.getSubject().split(",")).collect(Collectors.toList()); + List<TSubject> subjectLists = new ArrayList<>(); + // 第一组题 固定下标为0,1,2的题 + for (int i = 0; i < Constants.THREE; i++) { + String id = subjectIds.get(i); + if (!id.startsWith("-")) { + subjectLists.add(subjectService.getById(id)); + } + } + for (int i = 0; i < Constants.THREE; i++) { + String id = subjectIds.get(i); + if (id.startsWith("-")) { + id = id.replace("-", ""); + subjectLists.add(subjectService.getById(id)); + } + } + // 第二组题,固定下标为3,4的题 + for (int i = Constants.THREE; i < Constants.FIVE; i++) { + String id = subjectIds.get(i); + if (!id.startsWith("-")) { + subjectLists.add(subjectService.getById(id)); + } + } + for (int i = Constants.THREE; i < Constants.FIVE; i++) { + String id = subjectIds.get(i); + if (id.startsWith("-")) { + id = id.replace("-", ""); + subjectLists.add(subjectService.getById(id)); + } + } + subjectLists.add(subjectService.getById(subjectIds.get(subjectIds.size() - 1).replace("-", ""))); + subjectList.add(subjectLists); + TSubjectRecordDetail tSubjectRecordDetail = new TSubjectRecordDetail(); + tSubjectRecordDetail.setUserId(userid); + tSubjectRecordDetail.setWeek(week); + tSubjectRecordDetail.setObjectId(data.getId()); + tSubjectRecordDetail.setDay(day); + tSubjectRecordDetail.setType(3); + tSubjectRecordDetail.setStatus(1); + tSubjectRecordDetails.add(tSubjectRecordDetail); + } + studyListenResultVO.setSubjectList(subjectList); + + subjectRecordDetailService.saveBatch(tSubjectRecordDetails); + studyListenResultVO.setList(tSubjectRecordDetails); + studyListenResultVO.setAccuracy(new BigDecimal("0.00")); + + } else { + List<Integer> collect1 = inductionList.stream().map(TStudyInduction::getId).collect(Collectors.toList()); + List<TSubjectRecordDetail> collect3 = list.stream().filter(e -> !collect1.contains(e.getObjectId())).collect(Collectors.toList()); + subjectRecordDetailService.removeBatchByIds(collect3); + List<TSubjectRecordDetail> tSubjectRecordDetails = new ArrayList<>(); + for (TStudyInduction data : inductionList) { + List<String> subjectIds = Arrays.stream(data.getSubject().split(",")).collect(Collectors.toList()); + List<TSubject> subjectLists = new ArrayList<>(); + // 第一组题 固定下标为0,1,2的题 + for (int i = 0; i < Constants.THREE; i++) { + String id = subjectIds.get(i); + if (!id.startsWith("-")) { + subjectLists.add(subjectService.getById(id)); + } + } + for (int i = 0; i < Constants.THREE; i++) { + String id = subjectIds.get(i); + if (id.startsWith("-")) { + id = id.replace("-", ""); + subjectLists.add(subjectService.getById(id)); + } + } + // 第二组题,固定下标为3,4的题 + for (int i = Constants.THREE; i < Constants.FIVE; i++) { + String id = subjectIds.get(i); + if (!id.startsWith("-")) { + subjectLists.add(subjectService.getById(id)); + } + } + for (int i = Constants.THREE; i < Constants.FIVE; i++) { + String id = subjectIds.get(i); + if (id.startsWith("-")) { + id = id.replace("-", ""); + subjectLists.add(subjectService.getById(id)); + } + } + subjectLists.add(subjectService.getById(subjectIds.get(subjectIds.size() - 1).replace("-", ""))); + subjectList.add(subjectLists); + + TSubjectRecordDetail tSubjectRecordDetail1 = list.stream().filter(e -> e.getObjectId().equals(data.getId())).findFirst().orElse(null); + if (tSubjectRecordDetail1==null){ + TSubjectRecordDetail tSubjectRecordDetail = new TSubjectRecordDetail(); + tSubjectRecordDetail.setUserId(userid); + tSubjectRecordDetail.setWeek(week); + tSubjectRecordDetail.setDay(day); + tSubjectRecordDetail.setType(3); + tSubjectRecordDetail.setStatus(1); + tSubjectRecordDetail.setObjectId(data.getId()); + subjectRecordDetailService.save(tSubjectRecordDetail); + + tSubjectRecordDetails.add(tSubjectRecordDetail); + }else{ + tSubjectRecordDetails.add(tSubjectRecordDetail1); } } - for (int i = 0; i < Constants.THREE; i++) { - String id = subjectIds.get(i); - if (id.startsWith("-")) { - id = id.replace("-", ""); - subjectLists.add(subjectService.getById(id)); - } - } - // 第二组题,固定下标为3,4的题 - for (int i = Constants.THREE; i < Constants.FIVE; i++) { - String id = subjectIds.get(i); - if (!id.startsWith("-")) { - subjectLists.add(subjectService.getById(id)); - } - } - for (int i = Constants.THREE; i < Constants.FIVE; i++) { - String id = subjectIds.get(i); - if (id.startsWith("-")) { - id = id.replace("-", ""); - subjectLists.add(subjectService.getById(id)); - } - } - subjectLists.add(subjectService.getById(subjectIds.get(subjectIds.size() - 1).replace("-", ""))); - subjectList.add(subjectLists); + studyListenResultVO.setList(tSubjectRecordDetails); + studyListenResultVO.setAccuracy(new BigDecimal(tSubjectRecordDetails.stream().filter(tSubjectRecordDetail -> tSubjectRecordDetail.getStatus().equals(2)).count()) + .divide(new BigDecimal(tSubjectRecordDetails.size()), 2, RoundingMode.HALF_UP)); } - return new StudyInductionResultVO(learnStudy, subjectList); + studyListenResultVO.setSubjectList(subjectList); + return studyListenResultVO; } @Override - public StudyAnswerResultVO questionsAndAnswers(Integer week, Integer day, List<TStudyAnswer> answerList) { + public StudyAnswerResultVO questionsAndAnswers(Integer week, Integer day, List<TStudyAnswer> answerList, Integer userid) { if (answerList.isEmpty()) { throw new GlobalException("当前学习周目题目数量不足!"); } @@ -562,16 +774,94 @@ learnStudy.setIntegral(total); // 题目语音及图片信息 List<List<QuestionsAnswersSubjectVO>> subjectList = new ArrayList<>(); - for (int i = 0; i < answerList.size(); i += Constants.TWO) { - List<QuestionsAnswersSubjectVO> voList = new ArrayList<>(); - // 一组题目为四道题, - TStudyAnswer one = answerList.get(i); - TStudyAnswer two = answerList.get(i + 1); - voAdd(voList, one); - voAdd(voList, two); - subjectList.add(voList); + + StudyAnswerResultVO studyListenResultVO = new StudyAnswerResultVO(learnStudy, subjectList); + + List<TSubjectRecordDetail> list = subjectRecordDetailService.lambdaQuery().eq(TSubjectRecordDetail::getUserId, userid) + .eq(TSubjectRecordDetail::getWeek, week) + .eq(TSubjectRecordDetail::getDay, day) + .eq(TSubjectRecordDetail::getType, 4).list(); + if (list.isEmpty()) { + List<TSubjectRecordDetail> tSubjectRecordDetails = new ArrayList<>(); + for (int i = 0; i < answerList.size(); i += Constants.TWO) { + List<QuestionsAnswersSubjectVO> voList = new ArrayList<>(); + // 一组题目为四道题, + TStudyAnswer one = answerList.get(i); + TStudyAnswer two = answerList.get(i + 1); + voAdd(voList, one); + voAdd(voList, two); + subjectList.add(voList); + } + for (int i = 0; i < answerList.size(); i += 4) { + // 一组题目为四道题, + TStudyAnswer one = answerList.get(i); + TStudyAnswer two = answerList.get(i + 1); + TStudyAnswer three = answerList.get(i + 2); + TStudyAnswer four = answerList.get(i + 3); + TSubjectRecordDetail tSubjectRecordDetail = new TSubjectRecordDetail(); + tSubjectRecordDetail.setUserId(userid); + tSubjectRecordDetail.setWeek(week); + tSubjectRecordDetail.setDay(day); + tSubjectRecordDetail.setType(4); + tSubjectRecordDetail.setStatus(1); + tSubjectRecordDetail.setOne(one.getId()); + tSubjectRecordDetail.setTwo(two.getId()); + tSubjectRecordDetail.setThree(three.getId()); + tSubjectRecordDetail.setFour(four.getId()); + tSubjectRecordDetails.add(tSubjectRecordDetail); + } + subjectRecordDetailService.saveBatch(tSubjectRecordDetails); + studyListenResultVO.setList(tSubjectRecordDetails); + studyListenResultVO.setAccuracy(new BigDecimal("0.00")); + + } else { + List<TSubjectRecordDetail> tSubjectRecordDetails = new ArrayList<>(); + for (int i = 0; i < answerList.size(); i += Constants.TWO) { + List<QuestionsAnswersSubjectVO> voList = new ArrayList<>(); + // 一组题目为四道题, + TStudyAnswer one = answerList.get(i); + TStudyAnswer two = answerList.get(i + 1); + voAdd(voList, one); + voAdd(voList, two); + subjectList.add(voList); + } + + + List<TSubjectRecordDetail> tSubjectRecordDetails1 = new ArrayList<TSubjectRecordDetail>(); + + for (int i = 0; i < answerList.size(); i += 4) { + TStudyAnswer one = answerList.get(i); + TStudyAnswer two = answerList.get(i + 1); + TStudyAnswer three = answerList.get(i + 2); + TStudyAnswer four = answerList.get(i + 3); + TSubjectRecordDetail tSubjectRecordDetail = new TSubjectRecordDetail(); + tSubjectRecordDetail.setUserId(userid); + tSubjectRecordDetail.setWeek(week); + tSubjectRecordDetail.setDay(day); + tSubjectRecordDetail.setType(4); + int size = list.size(); + if (size-1>=i/4){ + tSubjectRecordDetail.setStatus(list.get(i/4).getStatus()); + }else{ + tSubjectRecordDetail.setStatus(1); + } + tSubjectRecordDetail.setOne(one.getId()); + tSubjectRecordDetail.setTwo(two.getId()); + tSubjectRecordDetail.setThree(three.getId()); + tSubjectRecordDetail.setFour(four.getId()); + tSubjectRecordDetails.add(tSubjectRecordDetail); + tSubjectRecordDetails1.add(tSubjectRecordDetail); + } + List<Long> collect = list.stream().map(TSubjectRecordDetail::getId).collect(Collectors.toList()); + subjectRecordDetailService.removeBatchByIds(collect); + subjectRecordDetailService.saveBatch(tSubjectRecordDetails1); + + studyListenResultVO.setList(tSubjectRecordDetails); + studyListenResultVO.setAccuracy(new BigDecimal(tSubjectRecordDetails.stream().filter(tSubjectRecordDetail -> tSubjectRecordDetail.getStatus().equals(2)).count()) + .divide(new BigDecimal(tSubjectRecordDetails.size()), 2, RoundingMode.HALF_UP)); } - return new StudyAnswerResultVO(learnStudy, subjectList); + studyListenResultVO.setSubjectList(subjectList); + return studyListenResultVO; } private void voAdd(List<QuestionsAnswersSubjectVO> voList, TStudyAnswer one) { @@ -613,7 +903,7 @@ } @Override - public StudyPairResultVO pictureMateVoice(Integer week, Integer day, List<TStudyPair> pair) { + public StudyPairResultVO pictureMateVoice(Integer week, Integer day, List<TStudyPair> pair, Integer userid) { if (pair.isEmpty()) { throw new GlobalException("当前学习周目题目数量不足!"); } @@ -631,18 +921,77 @@ learnStudy.setIntegral(total); // 语音及图片 List<List<TSubject>> subjectList = new ArrayList<>(); - for (TStudyPair data : pair) { - List<String> subjectIds = Arrays.stream(data.getSubject().split(",")).collect(Collectors.toList()); - List<TSubject> subjectLists = new ArrayList<>(); - for (String id : subjectIds) { - if (id.startsWith("-")) { - id = id.replace("-", ""); + + StudyPairResultVO studyListenResultVO = new StudyPairResultVO(learnStudy, subjectList); + + List<TSubjectRecordDetail> list = subjectRecordDetailService.lambdaQuery().eq(TSubjectRecordDetail::getUserId, userid) + .eq(TSubjectRecordDetail::getWeek, week) + .eq(TSubjectRecordDetail::getDay, day) + .eq(TSubjectRecordDetail::getType, 5).list(); + if (list.isEmpty()) { + List<TSubjectRecordDetail> tSubjectRecordDetails = new ArrayList<>(); + for (TStudyPair data : pair) { + TSubjectRecordDetail tSubjectRecordDetail = new TSubjectRecordDetail(); + tSubjectRecordDetail.setUserId(userid); + tSubjectRecordDetail.setWeek(week); + tSubjectRecordDetail.setDay(day); + tSubjectRecordDetail.setType(5); + tSubjectRecordDetail.setStatus(1); + tSubjectRecordDetail.setObjectId(data.getId()); + tSubjectRecordDetails.add(tSubjectRecordDetail); + + List<String> subjectIds = Arrays.stream(data.getSubject().split(",")).collect(Collectors.toList()); + List<TSubject> subjectLists = new ArrayList<>(); + for (String id : subjectIds) { + if (id.startsWith("-")) { + id = id.replace("-", ""); + } + subjectLists.add(subjectService.getById(id)); } - subjectLists.add(subjectService.getById(id)); + subjectList.add(subjectLists); } - subjectList.add(subjectLists); + studyListenResultVO.setSubjectList(subjectList); + subjectRecordDetailService.saveBatch(tSubjectRecordDetails); + studyListenResultVO.setList(tSubjectRecordDetails); + studyListenResultVO.setAccuracy(new BigDecimal("0.00")); + + } else { + List<Integer> collect1 = pair.stream().map(TStudyPair::getId).collect(Collectors.toList()); + List<TSubjectRecordDetail> collect3 = list.stream().filter(e -> !collect1.contains(e.getObjectId())).collect(Collectors.toList()); + subjectRecordDetailService.removeBatchByIds(collect3); + List<TSubjectRecordDetail> tSubjectRecordDetails = new ArrayList<>(); + for (TStudyPair data : pair) { + List<String> subjectIds = Arrays.stream(data.getSubject().split(",")).collect(Collectors.toList()); + List<TSubject> subjectLists = new ArrayList<>(); + for (String id : subjectIds) { + if (id.startsWith("-")) { + id = id.replace("-", ""); + } + subjectLists.add(subjectService.getById(id)); + } + subjectList.add(subjectLists); + List<TSubjectRecordDetail> tSubjectRecordDetail1 = list.stream().filter(e -> e.getObjectId().equals(data.getId())).collect(Collectors.toList()); + + if (tSubjectRecordDetail1.isEmpty()){ + TSubjectRecordDetail tSubjectRecordDetail = new TSubjectRecordDetail(); + tSubjectRecordDetail.setUserId(userid); + tSubjectRecordDetail.setWeek(week); + tSubjectRecordDetail.setDay(day); + tSubjectRecordDetail.setType(5); + tSubjectRecordDetail.setStatus(1); + tSubjectRecordDetail.setObjectId(data.getId()); + tSubjectRecordDetails.add(tSubjectRecordDetail); + subjectRecordDetailService.save(tSubjectRecordDetail); + }else{ + tSubjectRecordDetails.addAll(tSubjectRecordDetail1); + } + } + studyListenResultVO.setList(tSubjectRecordDetails); + studyListenResultVO.setSubjectList(subjectList); + studyListenResultVO.setAccuracy(new BigDecimal(tSubjectRecordDetails.stream().filter(tSubjectRecordDetail -> tSubjectRecordDetail.getStatus().equals(2)).count()) + .divide(new BigDecimal(tSubjectRecordDetails.size()), 2, RoundingMode.HALF_UP)); } - return new StudyPairResultVO(learnStudy, subjectList); + return studyListenResultVO; } @Override -- Gitblit v1.7.1