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