派生自 projectDept/qhighschool

yn147
2023-11-24 26780c533f2c2af6b9216306f649c1bcede94e4a
src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java
@@ -2,10 +2,7 @@
import java.lang.reflect.InvocationTargetException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
import com.qxueyou.scc.base.model.UserInfoWrapper;
@@ -107,7 +104,7 @@
    @Override
    public Result add(String subjectName, String coverPageFileId, String contentFileId, int type) {
    public Result add(String subjectName, String coverPageFileId, String contentFileId, int type, Date startTime, Date endTime) {
        Subject subject = new Subject();
        if (StringUtils.isNotEmpty(coverPageFileId)) {
@@ -122,14 +119,17 @@
        subject.setStatus(Subject.STATUS_DRAFT);
        subject.setLectureCount(0);
        subject.setType(type);
        //签到时间
        subject.setStartTime(startTime);
        subject.setEndTime(endTime);
        subject.setOrgId(ClientUtils.getOrgId());
        save(subject);
        //初始化创建 根节点
        //初始化创建 根节点
        SubjectChapter chapter = new SubjectChapter();
        TraceUtils.setCreateTrace(chapter);
        chapter.setName("根节点");
        chapter.setName("根节点");
        chapter.setSubjectId(subject.getSubjectId());
        chapter.setParentChapterId(SubjectChapter.ROOT_CHAPTER_ID);
        save(chapter);
@@ -156,7 +156,7 @@
        save(subject);
        //更新所有关联的课程
        //更新所有关联的课程
        if (subject.getType() == Subject.TYPE_ORG_SUBJECT) {
            this.bulkUpdate("update Subject t set t.name=?,t.contentFileId=?,"
                    + "t.coverPageFileId=?,t.coverPageUrl=? where t.deleteFlag is false and t.origSubjectId=? ", new Object[]{subject.getName(),
@@ -171,7 +171,7 @@
        for (String subjectId : subjectIds) {
            deleteSubject(subjectId);
            //删除班级课程
            //删除班级课程
            List<Map<String, Object>> result = this.findListWithMapByHql(
                    "select r.classId as classId,r.subjectId as subjectId from ClsClassReSubject r,Subject j  "
                            + "where r.subjectId = j.subjectId and j.origSubjectId=:origSubjectId and r.deleteFlag is false and j.deleteFlag is false",
@@ -188,9 +188,9 @@
    }
    /**
     * 删除单个课程
     * 删除单个课程
     *
     * @param chapterId 章节id
     * @param chapterId 章节id
     * @return
     */
    private Result deleteSubject(String subjectId) {
@@ -207,8 +207,8 @@
    @Override
    public List<Subject> list(String text, String teacherId, String status, Integer type, Integer pageSize, Integer pageNum) {
        StringBuffer hql = new StringBuffer("from Subject where name like ? and orgId=? and deleteFlag is false and origSubjectId is null ");
        //and origSubjectId is null
        StringBuffer hql = new StringBuffer("from Subject where name like ? and orgId=? and deleteFlag is false  ");
        List<Object> args = CollectionUtils.newList(text + "%", ClientUtils.getOrgId());
@@ -222,8 +222,12 @@
            args.add(status);
        }
//        if (!StringUtils.isEmpty(teacherId)) {
//            hql.append(" and createId=?");
//            args.add(teacherId);
//        }
        if (!StringUtils.isEmpty(teacherId)) {
            hql.append(" and createId=?");
            hql.append(" and teacherId=?");
            args.add(teacherId);
        }
        hql.append(" order by createTime desc");
@@ -234,7 +238,7 @@
    /**
     * app教师端课程列表
     * app教师端课程列表
     *
     * @param text
     * @param status
@@ -247,7 +251,7 @@
    public Result teacherSubjectList(Pager pager, String keyword, String status, Integer type) {
        String teacherId = teacherService.getTeacherIdByUserId(ClientUtils.getUserId());
        if (StringUtils.isEmpty(teacherId)) {
            return new Result(false, "当前用户无老师角色");
            return new Result(false, "当前用户无老师角色");
        }
        QSubject qSubject = QSubject.subject;
@@ -327,7 +331,7 @@
        Subject sub = read(subjectId);
        //读取原课程
        //读取原课程
        if (StringUtils.isNotBlank(sub.getOrigSubjectId())) {
            sub = read(sub.getOrigSubjectId());
        }
@@ -362,9 +366,9 @@
    }
    /**
     * 发布单个课程
     * 发布单个课程
     *
     * @param chapterId 章节id
     * @param chapterId 章节id
     * @return
     */
    private Result releaseSubject(String subjectId) {
@@ -376,16 +380,16 @@
        save(subject);
        //更新所有关联的课程
        //更新所有关联的课程
        this.bulkUpdate("update Subject set status='" + Subject.STATUS_ISSUED + "' where origSubjectId=? and deleteFlag is false ", new Object[]{subjectId});
        return new Result(true, "success");
    }
    /**
     * 发布单个课程
     * 发布单个课程
     *
     * @param chapterId 章节id
     * @param chapterId 章节id
     * @return
     */
    private Result cancelSubject(String subjectId) {
@@ -397,7 +401,7 @@
        save(subject);
        //更新所有关联的课程
        //更新所有关联的课程
        this.bulkUpdate("update Subject set status='" + Subject.STATUS_OFFLINE + "' where origSubjectId=? and deleteFlag is false ", new Object[]{subjectId});
        return new Result(true, "success");
@@ -417,6 +421,19 @@
        return result;
    }
    @Override
    public List<OpenSubjectV> listOpenSubjectV() {
        StringBuffer hql = new StringBuffer("from OpenSubjectV p where 1 = ?");
        int param = 1;
        List<Object> args = CollectionUtils.newList(param);
        List<OpenSubjectV> result = find(hql.toString(), args, OpenSubjectV.class);
        return result;
    }
    @Override
    public List<Map<String, Object>> listChapterStudyProgress(String subjectId) {
@@ -462,29 +479,30 @@
    @Override
    public Result addClsSubject(String classId, String origSubjectId, String teacherId, Integer schoolYear, Integer term) throws IllegalAccessException, InvocationTargetException {
        //新增老师课程
        Subject newSubject = new Subject();
        Subject origSubject = this.read(origSubjectId);
        //新增老师课程
//        Subject newSubject = new Subject();
        Subject newSubject = this.read(origSubjectId);
        UserTeacher teacher = this.read(UserTeacher.class, teacherId);
        BeanUtils.copyProperties(newSubject, origSubject);
//        BeanUtils.copyProperties(newSubject, origSubject);
        TraceUtils.setCreateTrace(newSubject);
        newSubject.setSubjectId(null);
//        newSubject.setSubjectId(null);
        newSubject.setTeacherId(teacherId);
        newSubject.setSchoolYear(schoolYear);
        newSubject.setTerm(term);
        newSubject.setStatus(origSubject.getStatus());
//        newSubject.setStatus(origSubject.getStatus());
        newSubject.setOrigSubjectId(origSubjectId);
        newSubject.setOrigCopySubjectId(origSubjectId);
        newSubject.setType(Subject.TYPE_CLS_SUBJECT);
//        newSubject.setType(Subject.TYPE_CLS_SUBJECT);
        newSubject.setType(Subject.TYPE_ORG_SUBJECT);
        newSubject.setTeacherName(teacher.getName());
        newSubject.setOrgId(ClientUtils.getOrgId());
        save(newSubject);
        //添加班级课程关系
        //添加班级课程关系
        addClassReSubject(newSubject.getSubjectId(), classId);
        //复制课件
        //复制课件
        clsLectureService.doCopyLecturesToClass(origSubjectId, newSubject.getSubjectId(), classId);
        return new Result(true, "success", CollectionUtils.newStringMap("subjectId", newSubject.getSubjectId()));
@@ -504,7 +522,7 @@
        Subject subject = this.read(subjectId);
        UserTeacher teacher = this.read(UserTeacher.class, teacherId);
        //如果原课程做出了修改
        //如果原课程做出了修改
        if (!origSubjectId.equals(subject.getOrigSubjectId())) {
            subject.setContentFileId(origSubject.getCoverPageFileId());
            subject.setCoverPageUrl(origSubject.getCoverPageUrl());
@@ -513,7 +531,7 @@
            subject.setOrigSubjectId(origSubjectId);
            subject.setOrigCopySubjectId(origSubjectId);
            //清理并复制原课程
            //清理并复制原课程
            clsLectureService.doClearLecturesToClass(classId, subjectId);
            clsLectureService.doCopyLecturesToClass(origSubjectId, subjectId, classId);
        } else {
@@ -539,7 +557,7 @@
        List<String> reIdLst = this.findByComplexHql("select r.clsReSubjectId from ClsClassReSubject r where r.deleteFlag is false and r.classId=:classId and r.subjectId in (:subjectIds) ",
                paramMap, String.class);
        //删除关联关系
        //删除关联关系
        if (reIdLst != null && reIdLst.size() > 0) {
            this.bulkUpdateInLoop("update ClsClassReSubject set deleteFlag = true where clsReSubjectId=?", reIdLst.toArray());
        }
@@ -594,7 +612,6 @@
            }
            subject.put("percent", new BigDecimal(percentAvg));
            subject.put("progressValue", new BigDecimal(progressValue));
            subject.put("lectureParentId", map.get("lectureParentId"));
            subject.put("lectureId", map.get("lectureId"));
            subject.put("unCommitExerciseCount", exerciseInfoService.getUnCommitExerciseCount(classId, userId));
@@ -607,6 +624,48 @@
            subject.put("toBeCommitExamCount", examService.getToBeCommitExamCount(classId, userId));
        }
        List<OpenSubjectV> subjects = listOpenSubjectV();
        for(OpenSubjectV subject : subjects){
            Map<String, Object> subjectMap = new HashMap<>();
            String classId = ClientUtils.getClassId();
            String subjectId =  subject.getSubjectId();
            Map<String, Object> map = progressDao.getStudyById(userId, subjectId, null);
            List<MyOpenLectureV> myLectureVList = lectureService.listOpenLectureVBySubjectId(userId, subjectId, "", 1000, 1, null);
            Double percent = 0.0;
            Double progressValue = 0.0;
            Double percentAvg = 0.0;
            if (!myLectureVList.isEmpty()) {
                for (MyOpenLectureV myOpenLectureV : myLectureVList) {
                    if (myOpenLectureV.getPercent() != null && myOpenLectureV.getProgressValue() != null) {
                        percent += myOpenLectureV.getPercent();
                        progressValue += myOpenLectureV.getProgressValue().intValue();
                    }
                }
                percentAvg = percent / myLectureVList.size();
                if (percentAvg.isNaN()) {
                    percentAvg = 0.0;
                }
            }
            String className = "公开课";
            subjectMap.put("subjectName",subject.getSubjectName());
            subjectMap.put("subjectId",subject.getSubjectId());
            subjectMap.put("coverPageUrl",subject.getCoverPageUrl());
            subjectMap.put("percent", new BigDecimal(percentAvg));
            subjectMap.put("progressValue", new BigDecimal(progressValue));
            subjectMap.put("className",className);
            subjectMap.put("lectureParentId", map.get("lectureParentId"));
            subjectMap.put("lectureId", map.get("lectureId"));
            subjectMap.put("unCommitExerciseCount", exerciseInfoService.getUnCommitExerciseCount(classId, userId));
            subjectMap.put("toBeCommitExerciseCount", exerciseInfoService.getToBeCommitExerciseCount(classId, userId));
            subjectMap.put("CommitExerciseCount", exerciseInfoService.getCommitExerciseCount(classId, userId));
            subjectMap.put("exerciseCount", exerciseInfoService.getExerciseCount(classId, userId));
            subjectMap.put("examCount", examService.getExamCount(classId, userId));
            subjectMap.put("unCommitExamCount", examService.getUnCommitExamCount(classId, userId));
            subjectMap.put("commitExamCount", examService.getCommitExamCount(classId, userId));
            subjectMap.put("toBeCommitExamCount", examService.getToBeCommitExamCount(classId, userId));
            subjectLstMap.add(subjectMap);
        }
        return new Result(true, "success", subjectLstMap);
    }
@@ -614,7 +673,7 @@
    @Override
    public Result getDataDesc(String classId, String subjectId) {
        if (StringUtils.isEmpty(classId)) {
            return new Result(false, "班级id参数错误");
            return new Result(false, "班级id参数错误");
        }
        QSubjectProgressTreeV qSubjectProgressTreeV = QSubjectProgressTreeV.subjectProgressTreeV;
@@ -631,7 +690,7 @@
    }
    /**
     * 获取班级对应的学员 按进度进行排序
     * 获取班级对应的学员 按进度进行排序
     */
    private List<Map<String, Object>> percentDesc(String classId, String subjectId, @SuppressWarnings("rawtypes") OrderSpecifier order) {
        QSubjectProgressTreeV qSubjectProgressTreeV = QSubjectProgressTreeV.subjectProgressTreeV;
@@ -645,30 +704,47 @@
                where(qSubjectProgressTreeV.id.userId.eq(qUser.userId).and(qSubjectProgressTreeV.nodeType.eq(nodeType))
                        .and(qSubjectProgressTreeV.id.nodeId.eq(nodeId))).orderBy(order).fetch().stream().map(tuple -> {
                            List<ClsClassReSubject> clsClassReSubjects = find("from ClsClassReSubject where classId = ?",CollectionUtils.newList(nodeId),ClsClassReSubject.class);
                    Double percent = 0.0;
                    Double progressValue = 0.0;
                    Double percentAvg = 0.0;
                    int size = 0;
                            for(ClsClassReSubject c : clsClassReSubjects) {
                                List<MyLectureV> myLectureVList = lectureService.listLectureVBySubjectId(tuple.get(qUser.userId), c.getSubjectId(), "", 1000, 1, null);
                                if (!myLectureVList.isEmpty()) {
                                    for (MyLectureV myLectureV : myLectureVList) {
                                        if (myLectureV.getPercent() != null && myLectureV.getProgressValue() != null) {
                                            percent += myLectureV.getPercent();
                                            progressValue += myLectureV.getProgressValue().intValue();
                                        }
                                    }
                                    size += myLectureVList.size();
                                    if (percentAvg.isNaN()) {
                                        percentAvg += 0.0;
                                    }
                                }
                            }
            List<ClsClassReSubject> clsClassReSubjects = find("from ClsClassReSubject where classId = ?",CollectionUtils.newList(nodeId),ClsClassReSubject.class);
            int type = 3;
            List<Subject> subjects = find("from Subject where type = ?",CollectionUtils.newList(type),Subject.class);
            Double percent = 0.0;
            Double progressValue = 0.0;
            Double percentAvg = 0.0;
            int size = 0;
            for(ClsClassReSubject c : clsClassReSubjects) {
                List<MyLectureV> myLectureVList = lectureService.listLectureVBySubjectId(tuple.get(qUser.userId), c.getSubjectId(), "", 1000, 1, null);
                if (!myLectureVList.isEmpty()) {
                    for (MyLectureV myLectureV : myLectureVList) {
                        if (myLectureV.getPercent() != null && myLectureV.getProgressValue() != null) {
                            percent += myLectureV.getPercent();
                            progressValue += myLectureV.getProgressValue().intValue();
                        }
                    }
                    size += myLectureVList.size();
                    if (percentAvg.isNaN()) {
                        percentAvg += 0.0;
                    }
                }
            }
            for(Subject subject : subjects){
                List<MyOpenLectureV> myOpenLectureVList = lectureService.listOpenLectureVBySubjectId(tuple.get(qUser.userId), subject.getSubjectId(), "", 1000, 1, null);
                if(!myOpenLectureVList.isEmpty()){
                    for(MyOpenLectureV myOpenLecture : myOpenLectureVList){
                        if (myOpenLecture.getPercent() != null && myOpenLecture.getProgressValue() != null) {
                            percent += myOpenLecture.getPercent();
                            progressValue += myOpenLecture.getProgressValue().intValue();
                        }
                    }
                    size += myOpenLectureVList.size();
                    if (percentAvg.isNaN()) {
                        percentAvg += 0.0;
                    }
                }
            }
            percentAvg += percent / size;
                            if(percentAvg.isNaN()){
                                percentAvg = 0.0;
                            }
            if(percentAvg.isNaN()){
                percentAvg = 0.0;
            }
            Map<String, Object> map = new HashMap<>();
            map.put("userName", tuple.get(qUser.name));
            map.put("userId", tuple.get(qUser.userId));
@@ -683,20 +759,20 @@
    }
    /**
     * 通过作业完成个数排序
     * 通过作业完成个数排序
     */
    private List<Map<String, Object>> exerciseInfoDesc(String classId, String subjectId) {
        QExerciseResultV qExerciseResultV = QExerciseResultV.exerciseResultV;
        //查询条件
        //查询条件
        Predicate predicate = StringUtils.isEmpty(subjectId) ? qExerciseResultV.id.classId.eq(classId) :
                qExerciseResultV.id.classId.eq(classId).and(qExerciseResultV.subjectId.eq(subjectId));
        //case数量判断
        //case数量判断
        NumberExpression<BigDecimal> caseCount = new CaseBuilder()
                .when(qExerciseResultV.completeStatus.eq(ExerciseCompleteInfo.STATUS_CHECKED)
                        .or(qExerciseResultV.completeStatus.eq(ExerciseCompleteInfo.STATUS_COMMIT)))
                .then(BigDecimal.ONE).otherwise(BigDecimal.ZERO).sum();
        //case分数
        //case分数
        NumberExpression<BigDecimal> caseScoreSum = new CaseBuilder()
                .when(qExerciseResultV.completeStatus.eq(ExerciseCompleteInfo.STATUS_CHECKED)
                        .or(qExerciseResultV.completeStatus.eq(ExerciseCompleteInfo.STATUS_COMMIT)))
@@ -726,13 +802,13 @@
    private List<Map<String, Object>> examInfoDesc(String classId, String subjectId) {
        QExamResultV qExamResultV = QExamResultV.examResultV;
        //查询条件
        //查询条件
        Predicate predicate = StringUtils.isEmpty(subjectId) ? qExamResultV.id.classId.eq(classId) :
                qExamResultV.id.classId.eq(classId).and(qExamResultV.subjectId.eq(subjectId));
        //case判断
        //case判断
        NumberExpression<BigDecimal> caseCount = new CaseBuilder()
                .when(qExamResultV.status.eq("0")).then(BigDecimal.ZERO).otherwise(BigDecimal.ONE).sum();
        //case分数
        //case分数
        NumberExpression<BigDecimal> caseScoreSum = new CaseBuilder()
                .when(qExamResultV.status.eq("0")).then(BigDecimal.ZERO).otherwise(qExamResultV.score).sum();
@@ -774,7 +850,9 @@
        } else {
            if (StringUtils.isNotEmpty(teacherId)) {
                result = this.findListWithMapByHql(
                        "select distinct origSubjectId as subjectId ,name as subjectName from Subject where deleteFlag is false and type=" + Subject.TYPE_CLS_SUBJECT + " and teacherId='" + teacherId + "'", null);
//                        "select distinct origSubjectId as subjectId ,name as subjectName from Subject where deleteFlag is false and type=" + Subject.TYPE_CLS_SUBJECT + " and teacherId='" + teacherId + "'", null);
                        "select distinct origSubjectId as subjectId ,name as subjectName from Subject where deleteFlag is false and type=" + Subject.TYPE_ORG_SUBJECT + " and teacherId='" + teacherId + "'", null);
            } else {
                result = this.findListWithMapByHql(
                        "select subjectId as subjectId ,name as subjectName from Subject where deleteFlag is false and type=" + Subject.TYPE_ORG_SUBJECT + " and orgId='" + ClientUtils.getOrgId() + "'", null);
@@ -816,10 +894,10 @@
                .and(qClsClassReSubject.classId::eq, classId)
                .and(qClsClassReSubject.subjectId::eq, qSubject.subjectId)
                .and(qClsClassReSubject.deleteFlag::eq, false).and(qSubject.status::eq, Subject.STATUS_ISSUED);
        if (schoolYear != null && schoolYear != 0) {//学年
        if (schoolYear != null && schoolYear != 0) {//学年
            builder = builder.and(qSubject.schoolYear::eq, schoolYear);
        }
        if (term != null && term != 0) {//学期
        if (term != null && term != 0) {//学期
            builder = builder.and(qSubject.term::eq, term);
        }
@@ -865,7 +943,7 @@
    }
    /**
     * 我的班级信息
     * 我的班级信息
     *
     * @param classId
     * @return
@@ -876,7 +954,7 @@
        List<Subject> lstSubject = objClsClass.getSubjects();
        //过滤掉状态为草稿的
        //过滤掉状态为草稿的
        List<String> teachers = lstSubject.stream().filter(u -> u.getStatus().equals(Subject.STATUS_ISSUED)).map(tuple -> {
            return tuple.getTeacherName();
        }).collect(Collectors.toList());
@@ -891,7 +969,7 @@
            long lgCount = this.getQueryFactory().selectFrom(qSubjectProgressTreeV)
                    .where(qSubjectProgressTreeV.id.nodeId.eq(classId).and(qSubjectProgressTreeV.percent.gt(objSubjectProgressTreeV.getPercent()))).fetchCount();
            //排行
            //排行
            float rank = (allCount - lgCount) / allCount;
            return CollectionUtils.newObjectMap("className", objClsClass.getName(), "progressPercent",
@@ -903,7 +981,7 @@
    }
    /**
     * 获取我的课程进度
     * 获取我的课程进度
     *
     * @param classId
     * @return
@@ -940,7 +1018,7 @@
    }
    /**
     * 获取我的课程数量
     * 获取我的课程数量
     *
     * @param classId
     * @return
@@ -957,7 +1035,7 @@
    }
    /**
     * 获取学员的课程进度
     * 获取学员的课程进度
     *
     * @param classId
     * @return
@@ -996,7 +1074,7 @@
    }
    /**
     * 获取课件数量
     * 获取课件数量
     *
     * @param subjectId
     * @return
@@ -1007,7 +1085,7 @@
        if (subject == null) {
            return 0l;
        }
        if (subject.getType() == Subject.TYPE_CLS_SUBJECT) {//班级课程
        if (subject.getType() == Subject.TYPE_CLS_SUBJECT) {//班级课程
            QClsSubjectLecture qSubjectLecture = QClsSubjectLecture.clsSubjectLecture;
@@ -1022,9 +1100,15 @@
        }
    }
    @Override
    public String findSubjectName(String subjectId) {
        Subject subject = findUnique("from Subject where subjectId = ? ",CollectionUtils.newList(subjectId),Subject.class);
        return subject.getName();
    }
    /**
     * 我的公开课列表
     * 我的公开课列表
     *
     * @param pageNum
     * @param pageSize
@@ -1061,18 +1145,18 @@
            Map<String, Object> openSubjectDetail = this.openSubjectDetail(subjectId);
            // 直播数量
            // 直播数量
            map.put("mediaVideoLiveCount", openSubjectDetail.get("mediaVideoLiveCount"));
            // 课件数量
            // 课件数量
            map.put("subjectLectureCount", openSubjectDetail.get("subjectLectureCount"));
            //学习人次
            //学习人次
            map.put("studyCount", openSubjectDetail.get("studyCount"));
            map.put("content", openSubjectDetail.get("content"));
            // 已观看完成课件数量
            // 已观看完成课件数量
            map.put("subjectLectureDoCount", openSubjectDetail.get("subjectLectureDoCount"));
            return map;
@@ -1082,7 +1166,7 @@
    }
    /**
     * 课程统计详情
     * 课程统计详情
     *
     * @param subjectId
     * @return
@@ -1093,7 +1177,7 @@
        QSubjectLecture qSubjectLecture = QSubjectLecture.subjectLecture;
        QProgress qProgress = QProgress.progress;
        // 直播数量
        // 直播数量
        map.put("mediaVideoLiveCount",
                this.getQueryFactory().select(qMediaVideoLive).from(qMediaVideoLive)
                        .where(qMediaVideoLive.deleteFlag.isFalse()
@@ -1101,14 +1185,14 @@
                                .and(qMediaVideoLive.subjectId.eq(subjectId)))
                        .fetchCount());
        // 课件数量
        // 课件数量
        map.put("subjectLectureCount",
                this.getQueryFactory().select(qSubjectLecture).from(qSubjectLecture)
                        .where(qSubjectLecture.deleteFlag.isFalse()
                                .and(qSubjectLecture.subjectId.eq(subjectId)).and(qSubjectLecture.status.eq(SubjectLecture.STATUS_DRAFT)))
                        .fetchCount());
        //学习人次
        //学习人次
        map.put("studyCount",
                this.getQueryFactory().selectDistinct(qProgress.learnerId).from(qProgress, qSubjectLecture)
                        .where(qProgress.deleteFlag.isFalse().and(qSubjectLecture.deleteFlag.isFalse()).and(qSubjectLecture.subjectId.eq(subjectId)).and(qProgress.type.eq(Progress.PROGRESS_TYPE_LECTURE))
@@ -1117,7 +1201,7 @@
        map.put("content", this.readSubjectContent(subjectId));
        // 已观看完成课件数量
        // 已观看完成课件数量
        map.put("subjectLectureDoCount",
                this.getQueryFactory().select(qSubjectLecture).from(qSubjectLecture, qProgress)
                        .where(qSubjectLecture.deleteFlag.isFalse().and(qProgress.deleteFlag.isFalse())
@@ -1130,7 +1214,7 @@
    }
    /**
     * 公开课详情
     * 公开课详情
     *
     * @param subjectId
     * @return
@@ -1161,18 +1245,18 @@
        Map<String, Object> map = new HashMap<String, Object>(7);
        // 直播数量
        // 直播数量
        map.put("mediaVideoLiveCount", openSubjectDetail.get("mediaVideoLiveCount"));
        // 课件数量
        // 课件数量
        map.put("subjectLectureCount", openSubjectDetail.get("subjectLectureCount"));
        //学习人次
        //学习人次
        map.put("studyCount", openSubjectDetail.get("studyCount"));
        subjectInfo.put("content", openSubjectDetail.get("content"));
        // 已观看完成课件数量
        // 已观看完成课件数量
        map.put("subjectLectureDoCount", openSubjectDetail.get("subjectLectureDoCount"));
        map.put("subjectInfo", subjectInfo);
@@ -1192,7 +1276,7 @@
        QMySubjectV qMySubjectV = QMySubjectV.mySubjectV;
        QMyLectureV qMyLectureV = QMyLectureV.myLectureV;
        // 课程
        // 课程
        Tuple tuple = this.getQueryFactory()
                .select(qMySubjectV.id.subjectId, qMySubjectV.subjectName, qMySubjectV.term, qMySubjectV.schoolYear, qMySubjectV.origSubjectId,
                        qMySubjectV.percent, qMySubjectV.coverPageUrl, qMySubjectV.progressValue)
@@ -1222,15 +1306,15 @@
        String origSubjectId = objSubject.getOrigSubjectId();
        // 考试统计
        // 考试统计
        long examsCount = this.examService.listStudentExamCount("", new String[]{classId}, origSubjectId, null);
        // 作业统计
        // 作业统计
        long homeworksCount = exerciseInfoService.queryStuExerciseListCount("", null, ClientUtils.getUserId(), origSubjectId, null);
        // 课件统计
        // 课件统计
        Tuple tupleLecture = this.getQueryFactory().select(qMyLectureV.count(),
                new CaseBuilder().when(qMyLectureV.percent.gt(0.95)).then(1).otherwise(0).sum()).// 大于95%算完成
                new CaseBuilder().when(qMyLectureV.percent.gt(0.95)).then(1).otherwise(0).sum()).// 大于95%算完成
                from(qMyLectureV)
                .where(qMyLectureV.classId.eq(classId).and(qMyLectureV.id.userId.eq(ClientUtils.getUserId()))
                        .and(qMyLectureV.subjectId.eq(subjectId)))
@@ -1245,7 +1329,7 @@
    }
    /**
     * 公开课列表
     * 公开课列表
     *
     * @param pageNum
     * @param pageSize
@@ -1280,7 +1364,7 @@
    }
    /**
     * 班级学员课件总体进度
     * 班级学员课件总体进度
     *
     * @param subjectId
     * @param classId
@@ -1310,7 +1394,7 @@
    }
    /**
     * 学员课程作业进度
     * 学员课程作业进度
     *
     * @param classId
     * @param subjectId
@@ -1356,7 +1440,7 @@
    }
    /**
     * 学员考试作业进度
     * 学员考试作业进度
     *
     * @param classId
     * @param subjectId
@@ -1392,7 +1476,7 @@
    }
    /**
     * 我的课件情况
     * 我的课件情况
     *
     * @param classId
     * @return
@@ -1403,7 +1487,7 @@
        return this.getQueryFactory().select(qMyLectureV.subjectId,
                qMyLectureV.count(),
                new CaseBuilder()
                        .when(qMyLectureV.percent.gt(0.95)).then(1).otherwise(0).sum()).//大于95%算完成
                        .when(qMyLectureV.percent.gt(0.95)).then(1).otherwise(0).sum()).//大于95%算完成
                from(qMyLectureV).
                where(qMyLectureV.classId.eq(classId).and(qMyLectureV.id.userId.eq(ClientUtils.getUserId()))).
                groupBy(qMyLectureV.subjectId).fetch().stream()
@@ -1417,15 +1501,15 @@
    }
    /**
     * 我的课程,按时间排序
     * 我的课程,按时间排序
     *
     * @param classId
     * @return
     */
    public List<Map<String, Object>> mySubjectList(String classId, Pager pager) {
        //课程
        //课程
        List<Map<String, Object>> clsSubjectlist = this.myClsSubjectlist(classId, ClientUtils.getUserId(), pager);
        //课件统计
        //课件统计
        List<Map<String, Object>> lectures = this.myLectureList(classId);
        for (Map<String, Object> clsSubject : clsSubjectlist) {
            String origSubjectId = (String) clsSubject.get("origSubjectId");
@@ -1441,11 +1525,11 @@
    }
    /**
     * 统计课程的数据
     * 统计课程的数据
     *
     * @param type          类型
     * @param clsSubject    课程
     * @param lstStatistics 统计信息
     * @param type          类型
     * @param clsSubject    课程
     * @param lstStatistics 统计信息
     */
    private void setSubjectStatistics(String type, Map<String, Object> clsSubject, List<Map<String, Object>> lstStatistics) {
        if (lstStatistics != null && !lstStatistics.isEmpty()) {
@@ -1459,7 +1543,7 @@
    }
    /**
     * 我的课程详情
     * 我的课程详情
     *
     * @param classId
     * @return
@@ -1469,7 +1553,7 @@
        QMySubjectV qMySubjectV = QMySubjectV.mySubjectV;
        QMyLectureV qMyLectureV = QMyLectureV.myLectureV;
        Object userId = request.getSession().getAttribute("userId");
        // 课程
        // 课程
        Tuple tuple = this.getQueryFactory()
                .select(qMySubjectV.id.subjectId, qMySubjectV.subjectName, qMySubjectV.term, qMySubjectV.schoolYear, qMySubjectV.origSubjectId,
                        qMySubjectV.percent, qMySubjectV.coverPageUrl, qMySubjectV.progressValue)
@@ -1499,15 +1583,15 @@
        String origSubjectId = objSubject.getOrigSubjectId();
        // 考试统计
        // 考试统计
        long examsCount = this.examService.listStudentExamCount("", new String[]{classId}, origSubjectId, null);
        // 作业统计
        // 作业统计
        long homeworksCount = exerciseInfoService.queryStuExerciseListCount("", null, ClientUtils.getUserId(), origSubjectId, null);
        // 课件统计
        // 课件统计
        Tuple tupleLecture = this.getQueryFactory().select(qMyLectureV.count(),
                new CaseBuilder().when(qMyLectureV.percent.gt(0.95)).then(1).otherwise(0).sum()).// 大于95%算完成
                new CaseBuilder().when(qMyLectureV.percent.gt(0.95)).then(1).otherwise(0).sum()).// 大于95%算完成
                from(qMyLectureV)
                .where(qMyLectureV.classId.eq(classId).and(qMyLectureV.id.userId.eq(ClientUtils.getUserId()))
                        .and(qMyLectureV.subjectId.eq(subjectId)))
@@ -1522,14 +1606,14 @@
    }
    /**
     * 我的课程按学期分类
     * 我的课程按学期分类
     *
     * @param classId
     * @return
     */
    @Override
    public List<Map<String, Object>> myTermSubjectList(String classId) {
        //课程
        //课程
        List<Map<String, Object>> clsSubjectlist = this.mySubjectList(classId, new Pager());
        System.out.println("clsSubjectlistaaaaaa" + clsSubjectlist);
        return this.termSubjectList(classId, clsSubjectlist);
@@ -1537,14 +1621,14 @@
    /**
     * 课程按学期分类
     * 课程按学期分类
     *
     * @param classId
     * @return
     */
    @Override
    public List<Map<String, Object>> termSubjectList(String classId, List<Map<String, Object>> clsSubjectlist) {
        //学期
        //学期
        List<Map<String, Object>> termList = this.termList(classId);
        if (termList != null && !termList.isEmpty()) {
@@ -1566,7 +1650,7 @@
    /**
     * 查询课程关联的班级课程信息
     * 查询课程关联的班级课程信息
     *
     * @param classId
     * @return