liujie
2025-11-28 da90bfce855cfe82764d6bad7bccb0af16f33aab
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStudyServiceImpl.java
@@ -450,20 +450,20 @@
        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){
        if (listenSize != 0) {
            // 计算当前通关率
            double listenRate = (double) listenPass /listenSize;
            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)){
            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::getDay, day)
                            .eq(TSubjectRecordDetail::getType
                            ,1));
                                    , 1));
                }
            }
        }
@@ -477,11 +477,11 @@
                List<String> subjectIds = Arrays.stream(studyListen.getSubject().split(",")).collect(Collectors.toList());
                List<TSubject> subs = new ArrayList<>();
                // 图片及语音集合
                int i=0;
                for (String id : studyListen.getSubject().split( ",")) {
                int i = 0;
                for (String id : studyListen.getSubject().split(",")) {
                    TSubject data = subjectService.lambdaQuery().eq(TSubject::getId, id)
                            .eq(TSubject::getDisabled, 0).one();
                    if(studyListen.getType()!=null && studyListen.getType()==2 && i<2){
                    if (studyListen.getType() != null && studyListen.getType() == 2 && i < 2) {
                        data.setStudyType(2);
                    }
@@ -499,14 +499,10 @@
                    data.setTSubjectRecordDetail(tSubjectRecordDetail);
                    subs.add(data);
                }
                if(studyListen.getId()==11220){
                    System.out.println("数据333"+subs);
                }
                System.out.println(studyListen.getId() + "数据3331" + subs);
                subjectList.add(subs);
                if(studyListen.getId()==11220){
                    System.out.println("数据444"+subjectList);
                }
                System.out.println(studyListen.getId() + "数据4441" + subjectList);
            }
//            subjectRecordDetailService.saveBatch(tSubjectRecordDetails);
            studyListenResultVO.setList(tSubjectRecordDetails);
@@ -520,24 +516,22 @@
                List<TSubject> subs = new ArrayList<>();
                List<TSubject> subsTemp = new ArrayList<>();
                // 图片及语音集合
                int temp=0;
                for (String id : studyListen.getSubject().split( ",")) {
                int temp = 0;
                for (String id : studyListen.getSubject().split(",")) {
                    TSubject data = subjectService.lambdaQuery().eq(TSubject::getId, id)
                            .eq(TSubject::getDisabled, 0).one();
                    if(studyListen.getType()!=null && studyListen.getType()==2 && temp<2){
                    if (studyListen.getType() != null && studyListen.getType() == 2 && temp < 2) {
                        data.setStudyType(2);
                    }
                    temp++;
                    subs.add(data);
                }
                if(studyListen.getId()==11220){
                    System.out.println("数据333"+subs);
                }
                System.out.println(studyListen.getId() + "数据3332" + subs);
                List<TSubjectRecordDetail> tSubjectRecordDetail1 = list.stream()
                        .filter(e -> e.getObjectId().equals(studyListen.getId())).collect(Collectors.toList());
                if (tSubjectRecordDetail1.isEmpty()){
                if (tSubjectRecordDetail1.isEmpty()) {
                    for (int i = 0; i < 4; i++) {
                        TSubjectRecordDetail tSubjectRecordDetail = new TSubjectRecordDetail();
                        tSubjectRecordDetail.setUserId(userid);
@@ -553,15 +547,15 @@
                        tSubject.setTSubjectRecordDetail(tSubjectRecordDetail);
                        subsTemp.add(tSubject);
                    }
                }else{
                } else {
                    for (int i = 0; i < 4; i++) {
                        TSubjectRecordDetail tSubjectRecordDetail = tSubjectRecordDetail1.get( i);
                        TSubjectRecordDetail tSubjectRecordDetail = tSubjectRecordDetail1.get(i);
                        Integer subjectId = tSubjectRecordDetail.getSubjectId();
                        TSubject tSubject = subs.stream().filter(e -> e.getId().equals(subjectId)).findFirst().orElse(null);
                        if(tSubject!=null){
                        if (tSubject != null) {
                            tSubject.setTSubjectRecordDetail(tSubjectRecordDetail);
                            subsTemp.add(tSubject);
                        }else {
                        } else {
                            TSubject tSubject1 = subs.get(i);
                            tSubjectRecordDetail.setSubjectId(tSubject1.getId());
@@ -572,8 +566,19 @@
                        tSubjectRecordDetails.add(tSubjectRecordDetail);
                    }
                }
                System.out.println(studyListen.getId() + "数据55552" + subsTemp);
                subjectList.add(subsTemp);
                // 单独处理排序问题
                String subject = studyListen.getSubject();
                String[] split = subject.split(",");
                List<TSubject> subsTempNext = new ArrayList<>();
                for (String s : split) {
                    TSubject tSubject = subsTemp.stream().filter(e -> e.getId().toString().equals(s)).findFirst().orElse(null);
                    subsTempNext.add(tSubject);
                }
                System.out.println(studyListen.getId() + "数据4442" + subsTempNext);
                subjectList.add(subsTempNext);
            }
            studyListenResultVO.setList(tSubjectRecordDetails);
@@ -583,7 +588,7 @@
            studyListenResultVO.setAccuracy(accuracy);
        }
        studyListenResultVO.setSubjectList(subjectList);
        System.out.println("数据!!!"+subjectList);
        System.out.println("数据!!!" + subjectList);
        return studyListenResultVO;
    }
@@ -613,36 +618,36 @@
        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){
        if (listenSize != 0) {
            // 先计算上一天的通关率 设置为两位小数
            double listenRate = (double) listenPass /listenSize;
            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.multiply(new BigDecimal(100))+"%");
            if (one != null) {
                if (listenRate < (Double.parseDouble(one.getRate()) / 100)) {
                    return R.fail("听音选图未达到通关率" + one.getRate() + "%," + "当前通关率:" + divide.multiply(new BigDecimal(100)) + "%");
                }
            }
        }
        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){
        if (lookSize != 0) {
            // 计算当前通关率
            double listenRate = (double) lookPass /lookSize;
            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 (one != null) {
                // 通关率未达标
                if (listenRate<(Double.parseDouble(one.getRate())/100)){
                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::getDay, day)
                            .eq(TSubjectRecordDetail::getType
                                    ,2));
                                    , 2));
                }
            }
        }
@@ -701,7 +706,7 @@
                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()){
                if (tSubjectRecordDetail1.isEmpty()) {
                    TSubjectRecordDetail tSubjectRecordDetail = new TSubjectRecordDetail();
                    tSubjectRecordDetail.setUserId(userid);
                    tSubjectRecordDetail.setWeek(week);
@@ -711,7 +716,7 @@
                    tSubjectRecordDetail.setObjectId(studyLook.getId());
                    tSubjectRecordDetails.add(tSubjectRecordDetail);
                    subjectRecordDetailService.save(tSubjectRecordDetail);
                }else{
                } else {
                    tSubjectRecordDetails.addAll(tSubjectRecordDetail1);
                }
@@ -757,36 +762,36 @@
        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){
        if (listenSize != 0) {
            // 先计算上一天的通关率 设置为两位小数
            double listenRate = (double) listenPass /listenSize;
            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.multiply(new BigDecimal(100))+"%");
            if (one != null) {
                if (listenRate < (Double.parseDouble(one.getRate()) / 100)) {
                    return R.fail("看图选音未达到通关率" + one.getRate() + "%," + "当前通关率:" + divide.multiply(new BigDecimal(100)) + "%");
                }
            }
        }
        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){
        if (lookSize != 0) {
            // 计算当前通关率
            double listenRate = (double) lookPass /lookSize;
            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 (one != null) {
                // 通关率未达标
                if (listenRate<(Double.parseDouble(one.getRate())/100)){
                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::getDay, day)
                            .eq(TSubjectRecordDetail::getType
                                    ,3));
                                    , 3));
                }
            }
        }
@@ -880,7 +885,7 @@
                subjectList.add(subjectLists);
                TSubjectRecordDetail tSubjectRecordDetail1 = list.stream().filter(e -> e.getObjectId().equals(data.getId())).findFirst().orElse(null);
                if (tSubjectRecordDetail1==null){
                if (tSubjectRecordDetail1 == null) {
                    TSubjectRecordDetail tSubjectRecordDetail = new TSubjectRecordDetail();
                    tSubjectRecordDetail.setUserId(userid);
                    tSubjectRecordDetail.setWeek(week);
@@ -891,7 +896,7 @@
                    subjectRecordDetailService.save(tSubjectRecordDetail);
                    tSubjectRecordDetails.add(tSubjectRecordDetail);
                }else{
                } else {
                    tSubjectRecordDetails.add(tSubjectRecordDetail1);
                }
            }
@@ -900,7 +905,7 @@
                    .divide(new BigDecimal(tSubjectRecordDetails.size()), 2, RoundingMode.HALF_UP));
        }
        studyListenResultVO.setSubjectList(subjectList);
        System.err.println("归纳排除题目"+subjectList);
        System.err.println("归纳排除题目" + subjectList);
        return R.ok(studyListenResultVO);
    }
@@ -909,10 +914,10 @@
        if (answerList.isEmpty()) {
            throw new GlobalException("当前学习周目题目数量不足!");
        }
        if (answerList.size()<4){
        if (answerList.size() < 4) {
            throw new GlobalException("当前学习周目题目数量不足!");
        }
        if (answerList.size()%4!=0){
        if (answerList.size() % 4 != 0) {
            throw new GlobalException("当前学习周目题目数量不足");
        }
        // 题组信息
@@ -941,36 +946,36 @@
        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){
        if (listenSize != 0) {
            // 先计算上一天的通关率 设置为两位小数
            double listenRate = (double) listenPass /listenSize;
            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.multiply(new BigDecimal(100))+"%");
            if (one != null) {
                if (listenRate < (Double.parseDouble(one.getRate()) / 100)) {
                    return R.fail("归纳排除未达到通关率" + one.getRate() + "%," + "当前通关率:" + divide.multiply(new BigDecimal(100)) + "%");
                }
            }
        }
        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){
        if (lookSize != 0) {
            // 计算当前通关率
            double listenRate = (double) lookPass /lookSize;
            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 (one != null) {
                // 通关率未达标
                if (listenRate<(Double.parseDouble(one.getRate())/100)){
                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::getDay, day)
                            .eq(TSubjectRecordDetail::getType
                                    ,4));
                                    , 4));
                }
            }
        }
@@ -1102,36 +1107,36 @@
        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){
        if (listenSize != 0) {
            // 先计算上一天的通关率 设置为两位小数
            double listenRate = (double) listenPass /listenSize;
            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.multiply(new BigDecimal(100))+"%");
            if (one != null) {
                if (listenRate < (Double.parseDouble(one.getRate()) / 100)) {
                    return R.fail("归纳排除未达到通关率" + one.getRate() + "%," + "当前通关率:" + divide.multiply(new BigDecimal(100)) + "%");
                }
            }
        }
        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){
        if (lookSize != 0) {
            // 计算当前通关率
            double listenRate = (double) lookPass /lookSize;
            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 (one != null) {
                // 通关率未达标
                if (listenRate<(Double.parseDouble(one.getRate())/100)){
                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::getDay, day)
                            .eq(TSubjectRecordDetail::getType
                                    ,5));
                                    , 5));
                }
            }
        }
@@ -1149,7 +1154,7 @@
                List<String> subjectIds = Arrays.stream(data.getSubject().split(",")).collect(Collectors.toList());
                List<TSubject> subjectLists = new ArrayList<>();
                for (String id : data.getSubject().split( ",")) {
                for (String id : data.getSubject().split(",")) {
                    if (id.startsWith("-")) {
                        id = id.replace("-", "");
                    }
@@ -1179,7 +1184,7 @@
                subjectList.add(subjectLists);
                List<TSubjectRecordDetail> tSubjectRecordDetail1 = list.stream().filter(e -> e.getObjectId().equals(data.getId())).collect(Collectors.toList());
                if (tSubjectRecordDetail1.isEmpty()){
                if (tSubjectRecordDetail1.isEmpty()) {
                    TSubjectRecordDetail tSubjectRecordDetail = new TSubjectRecordDetail();
                    tSubjectRecordDetail.setUserId(userid);
                    tSubjectRecordDetail.setWeek(week);
@@ -1189,7 +1194,7 @@
                    tSubjectRecordDetail.setObjectId(data.getId());
                    subjectRecordDetailService.save(tSubjectRecordDetail);
                    tSubjectRecordDetails.add(tSubjectRecordDetail);
                }else{
                } else {
                    tSubjectRecordDetails.addAll(tSubjectRecordDetail1);
                }
            }
@@ -1198,13 +1203,13 @@
            studyListenResultVO.setAccuracy(new BigDecimal(tSubjectRecordDetails.stream().filter(tSubjectRecordDetail -> tSubjectRecordDetail.getStatus().equals(2)).count())
                    .divide(new BigDecimal(tSubjectRecordDetails.size()), 2, RoundingMode.HALF_UP));
        }
        System.err.println("音图相配返回VO"+studyListenResultVO.getList());
        System.err.println("音图相配返回VO" + studyListenResultVO.getList());
        return R.ok(studyListenResultVO);
    }
    @Override
    public int computeSchedule(TUserStudy result, Integer week) {
        System.err.println("用户学习进度"+result);
        System.err.println("用户学习进度" + result);
        List<TStudy> studyList = this.lambdaQuery().eq(TStudy::getDisabled, 0)
                .orderByAsc(TStudy::getWeek).list();
        // 基础学习进度
@@ -1235,8 +1240,8 @@
                thisQuarter = key;
            }
        }
        System.err.println("当前进入周目所属季度"+studyQuarter);
        System.err.println("进入周目所属季度"+thisQuarter);
        System.err.println("当前进入周目所属季度" + studyQuarter);
        System.err.println("进入周目所属季度" + thisQuarter);
        // 默认进度为 0
        int defaultSchedule;
        // 季度判断
@@ -1254,7 +1259,7 @@
            } else if (studyIndex < weekIndex) {
                defaultSchedule = 0;
            } else {
                System.err.println("学习到Day"+day);
                System.err.println("学习到Day" + day);
                // 根据day初始化学习进度
                if (Constants.ONE.equals(day)) {
                    defaultSchedule = 0;