派生自 projectDept/qhighschool

Administrator
2022-11-16 83c795e9d040110973df19a9a3d953518d27b35d
src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java
@@ -86,7 +86,7 @@
   @Autowired
   ILectureService lectureService;
   @Autowired
   IClassLectureService clsLectureService;
@@ -104,7 +104,7 @@
   @Autowired
   private ITeacherService teacherService;
   @Autowired
   private IMediaLiveService mediaLiveService;
@@ -127,7 +127,7 @@
      subject.setOrgId(ClientUtils.getOrgId());
      save(subject);
      //初始化创建 根节点
      SubjectChapter chapter = new SubjectChapter();
      TraceUtils.setCreateTrace(chapter);
@@ -157,14 +157,14 @@
      subject.setType(type);
      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(),
                     subject.getContentFileId(),subject.getCoverPageFileId(),subject.getCoverPageUrl(),subject.getSubjectId()} );
      }
      return new Result(true, "success");
   }
@@ -172,13 +172,13 @@
   public Result delete(String[] subjectIds) {
      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",
               + "where r.subjectId = j.subjectId and j.origSubjectId=:origSubjectId and r.deleteFlag is false and j.deleteFlag is false",
               CollectionUtils.newObjectMap("origSubjectId",subjectId));
         if(result!=null && result.size()>0){
            for(Map<String,Object> map : result){
               this.deleteClsSubject((String)map.get("classId"), new String []{(String)map.get("subjectId")});
@@ -191,7 +191,7 @@
   /**
    * 删除单个课程
    *
    *
    * @param chapterId
    *            章节id
    * @return
@@ -219,7 +219,7 @@
         hql.append(" and type=?");
         args.add(type);
      }
      if (!StringUtils.isEmpty(status)) {
         hql.append(" and status=?");
         args.add(status);
@@ -231,14 +231,14 @@
      }
      hql.append(" order by createTime desc");
      List<Subject> result = findList(hql.toString(), new Pager(pageSize, pageNum), args, Subject.class);
      return result;
   }
   /**
    * app教师端课程列表
    *
    *
    * @param text
    * @param status
    * @param type
@@ -252,12 +252,12 @@
      if(StringUtils.isEmpty(teacherId)) {
         return new Result(false, "当前用户无老师角色");
      }
      QSubject qSubject = QSubject.subject;
      QSubjectLecture qSubjectLecture = QSubjectLecture.subjectLecture;
      QProgress qProgress = QProgress.progress;
      QClsClassReSubject qClsClassReSubject = QClsClassReSubject.clsClassReSubject;
      JPAQuery<Tuple> query = this.getQueryFactory()
            .select(qSubject.subjectId, qSubject.name, qSubject.term,qSubject.coverPageUrl, qSubject.schoolYear, qSubject.createTime, qSubject.type)
            .from(qSubject)
@@ -265,9 +265,9 @@
                  .and(qSubject.status.eq(Subject.STATUS_ISSUED)).and(qSubject.type.eq(type))
                  .and(qSubject.createId.eq(ClientUtils.getUserId()))
                  .and(qSubject.name.like("%" + keyword + "%")));
      long count = query.fetchCount();
      List<Map<String, Object>> listData = query.orderBy(qSubject.createTime.desc()).limit(pager.getPageSize())
            .offset(pager.getOffset()).fetch().stream().map(tuple -> {
               Map<String, Object> map = new HashMap<String, Object>(10);
@@ -292,20 +292,20 @@
               return map;
            }).collect(Collectors.toList());
      return new Result(true, "", CollectionUtils.newObjectMap("count", count, "listData", listData));
   }
   @Override
   public int listCount(String text, String teacherId, String status,Integer type) {
      StringBuffer hql = new StringBuffer("from Subject where name like ? and orgId=? and deleteFlag is false and origSubjectId is null ");
      List<Object> args = CollectionUtils.newList(text + "%",ClientUtils.getOrgId());
      List<Object> args = CollectionUtils.newList(text + "%",ClientUtils.getOrgId());
      if(type!=null){
         hql.append(" and type=?");
         args.add(type);
      }
      if (StringUtils.isNotBlank(status)) {
         hql = hql.append(" and status = ?");
         args.add(status);
@@ -329,7 +329,7 @@
   public String readSubjectContent(String subjectId) {
      Subject sub = read(subjectId);
      //读取原课程
      if(StringUtils.isNotBlank(sub.getOrigSubjectId())) {
         sub = read(sub.getOrigSubjectId());
@@ -366,7 +366,7 @@
   /**
    * 发布单个课程
    *
    *
    * @param chapterId
    *            章节id
    * @return
@@ -379,16 +379,16 @@
      subject.setStatus(Subject.STATUS_ISSUED);
      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
    * @return
@@ -401,7 +401,7 @@
      subject.setStatus(Subject.STATUS_OFFLINE);
      save(subject);
      //更新所有关联的课程
      this.bulkUpdate("update Subject set status='" + Subject.STATUS_OFFLINE + "' where origSubjectId=? and deleteFlag is false ",new Object[]{subjectId});
@@ -427,19 +427,18 @@
   public List<Map<String, Object>> listChapterStudyProgress(String subjectId) {
      QSubjectProgressTreeV qSubjectProgressTreeV = QSubjectProgressTreeV.subjectProgressTreeV;
       List<Map<String, Object>> lstResult = this.getQueryFactory().selectFrom(qSubjectProgressTreeV).
             where(qSubjectProgressTreeV.parentId.eq(subjectId).and(qSubjectProgressTreeV.id.userId.eq(ClientUtils.getUserId())))
             where(qSubjectProgressTreeV.id.nodeId.eq(subjectId).and(qSubjectProgressTreeV.id.userId.eq(ClientUtils.getUserId())))
             .fetch().stream().map(objSubjectProgressTreeV ->{
                Map<String, Object> map = new HashMap<>();
                map.put("chapterName", objSubjectProgressTreeV.getNodeName());
                map.put("chapterId", objSubjectProgressTreeV.getId().getNodeId());
                map.put("percent", objSubjectProgressTreeV.getPercent());
                map.put("studyTime", objSubjectProgressTreeV.getProgressValue());
                return map;
             }).collect(Collectors.toList());
      return lstResult;
   }
@@ -474,7 +473,7 @@
      Subject origSubject = this.read(origSubjectId);
      UserTeacher teacher = this.read(UserTeacher.class, teacherId);
      BeanUtils.copyProperties(newSubject,origSubject);
      TraceUtils.setCreateTrace(newSubject);
      newSubject.setSubjectId(null);
      newSubject.setTeacherId(teacherId);
@@ -487,30 +486,30 @@
      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()));
   }
    private void addClassReSubject(String subjectId, String classId) {
        ClsClassReSubject re = new ClsClassReSubject();
        TraceUtils.setCreateTrace(re);
        re.setClassId(classId);
        re.setSubjectId(subjectId);
        save(re);
    }
    }
   @Override
   public Result updateClsSubject(String classId,String subjectId,String origSubjectId, String teacherId, Integer schoolYear,Integer term) {
      Subject origSubject = this.read(origSubjectId);
      Subject subject = this.read(subjectId);
      UserTeacher teacher = this.read(UserTeacher.class, teacherId);
      //如果原课程做出了修改
      if(!origSubjectId.equals(subject.getOrigSubjectId())){
         subject.setContentFileId(origSubject.getCoverPageFileId());
@@ -519,36 +518,36 @@
         subject.setName(origSubject.getName());
         subject.setOrigSubjectId(origSubjectId);
         subject.setOrigCopySubjectId(origSubjectId);
         //清理并复制原课程
         clsLectureService.doClearLecturesToClass(classId,subjectId);
         clsLectureService.doCopyLecturesToClass(origSubjectId, subjectId, classId);
      }
      TraceUtils.setUpdateTrace(subject);
      subject.setTeacherId(teacherId);
      subject.setTeacherName(teacher.getName());
      subject.setSchoolYear(schoolYear);
      subject.setTerm(term);
      save(subject);
      return new Result(true, "success");
   }
   @Override
   public Result deleteClsSubject(String classId,String[] subjectIds) {
      Map<String,Object> paramMap = new HashMap<String,Object>();
      paramMap.put("classId", classId);
      paramMap.put("subjectIds", subjectIds);
      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());
      }
      this.delete(subjectIds);
      return new Result(true, "success");
   }
@@ -624,7 +623,7 @@
      QUser qUser = QUser.user;
      String nodeId = StringUtils.isNotEmpty(subjectId)?subjectId:classId;
      String nodeType = StringUtils.isNotEmpty(subjectId)?Progress.PROGRESS_TYPE_SUBJECT:Progress.PROGRESS_TYPE_CLASS;
      List<Map<String, Object>> lstMap = this.getQueryFactory().select(qSubjectProgressTreeV.progressValue,
            qSubjectProgressTreeV.percent, qUser.name, qUser.userId,qSubjectProgressTreeV.id.nodeId).from(qSubjectProgressTreeV, qUser).
            where(qSubjectProgressTreeV.id.userId.eq(qUser.userId).and(qSubjectProgressTreeV.nodeType.eq(nodeType))
@@ -654,13 +653,13 @@
      .when(qExerciseResultV.completeStatus.eq(ExerciseCompleteInfo.STATUS_CHECKED)
            .or(qExerciseResultV.completeStatus.eq(ExerciseCompleteInfo.STATUS_COMMIT)))
      .then(BigDecimal.ONE).otherwise(BigDecimal.ZERO).sum();
      //case分数
      NumberExpression<BigDecimal> caseScoreSum = new CaseBuilder()
            .when(qExerciseResultV.completeStatus.eq(ExerciseCompleteInfo.STATUS_CHECKED)
                  .or(qExerciseResultV.completeStatus.eq(ExerciseCompleteInfo.STATUS_COMMIT)))
            .then(qExerciseResultV.score).otherwise(BigDecimal.ZERO).sum();
      List<Map<String, Object>> lstMap = this.getQueryFactory().select(qExerciseResultV.userId,qExerciseResultV.studentName,
            caseScoreSum.divide(caseCount), qExerciseResultV.count(), caseCount).from(qExerciseResultV).where(predicate).
            groupBy(qExerciseResultV.userId).
@@ -671,19 +670,19 @@
               map.put("avgScore", tuple.get(2, BigDecimal.class));
               map.put("exerciseCount",tuple.get(3, BigDecimal.class));
               map.put("commitExerciseCount", tuple.get(4, BigDecimal.class));
               return map;
            }).collect(Collectors.toList());
      return lstMap;
   }
   /**
    *
    *
    */
   private List<Map<String, Object>> examInfoDesc(String classId, String subjectId) {
      QExamResultV qExamResultV = QExamResultV.examResultV;
      //查询条件
      Predicate predicate = StringUtils.isEmpty(subjectId)?qExamResultV.id.classId.eq(classId):
@@ -694,7 +693,7 @@
      //case分数
      NumberExpression<BigDecimal> caseScoreSum = new CaseBuilder()
            .when(qExamResultV.status.eq("0")).then(BigDecimal.ZERO).otherwise(qExamResultV.score).sum();
      List<Map<String, Object>> lstMap = this.getQueryFactory().select(qExamResultV.userId,qExamResultV.studentName,
            caseScoreSum.divide(caseCount), qExamResultV.count(), caseCount).from(qExamResultV).where(predicate).
            groupBy(qExamResultV.userId).
@@ -705,7 +704,7 @@
               map.put("avgScore", tuple.get(2, BigDecimal.class));
               map.put("examCount",tuple.get(3, BigDecimal.class));
               map.put("commitExamCount", tuple.get(4, BigDecimal.class));
               return map;
            }).collect(Collectors.toList());
      return lstMap;
@@ -722,11 +721,11 @@
      }
      return new Result(true, "success", map);
   }
   @Override
   public List<Map<String,Object>> queryAvailableSubjectIdAndName(String teacherId,Integer subjectType){
      List<Map<String,Object>> result = null;
      if(subjectType==Subject.TYPE_PUBLIC_SUBJECT){
         result =  this.findListWithMapByHql(
               "select subjectId as subjectId ,name as subjectName from Subject where deleteFlag is false and type=" + Subject.TYPE_PUBLIC_SUBJECT + " and orgId='" + ClientUtils.getOrgId() + "'" , null);
@@ -739,8 +738,8 @@
                     "select subjectId as subjectId ,name as subjectName from Subject where deleteFlag is false and type=" + Subject.TYPE_ORG_SUBJECT + " and orgId='" + ClientUtils.getOrgId() + "'", null);
         }
      }
      return result;
      return result;
   }
   @Override
@@ -764,12 +763,12 @@
      return lstMap;
   }
   @Override
   public List<Map<String,Object>> clsSubjectlist(String classId, Integer schoolYear, Integer term) {
      QSubject qSubject = QSubject.subject;
      QClsClassReSubject qClsClassReSubject = QClsClassReSubject.clsClassReSubject;
      QueryDslOptionBuilder builder = new QueryDslOptionBuilder().
            and(qSubject.deleteFlag::eq, false)
            .and(qClsClassReSubject.classId::eq, classId)
@@ -781,7 +780,7 @@
      if(term != null && term != 0){//学期
         builder = builder.and(qSubject.term::eq, term);
      }
      return this.getQueryFactory().select(qSubject.name,qSubject.origSubjectId,qSubject.subjectId,qSubject.schoolYear, qSubject.term).distinct()
             .from(qSubject, qClsClassReSubject)
             .where(builder.build())
@@ -797,18 +796,18 @@
                return map;
             }).collect(Collectors.toList());
   }
   @Override
   public List<Map<String,Object>> termList(String classId) {
      QSubject qSubject = QSubject.subject;
      QClsClassReSubject qClsClassReSubject = QClsClassReSubject.clsClassReSubject;
      QueryDslOptionBuilder builder = new QueryDslOptionBuilder().
            and(qSubject.deleteFlag::eq, false)
            .and(qClsClassReSubject.classId::eq, classId)
            .and(qClsClassReSubject.subjectId::eq, qSubject.subjectId)
            .and(qClsClassReSubject.deleteFlag::eq, false).and(qSubject.status::eq, Subject.STATUS_ISSUED);
      return this.getQueryFactory().select(qSubject.schoolYear.as("schoolYear"),qSubject.term.as("term"))
             .from(qSubject, qClsClassReSubject)
             .where(builder.build().and(qSubject.schoolYear.isNotNull())
@@ -822,37 +821,37 @@
                return map;
             }).collect(Collectors.toList());
   }
   /**
    * 我的班级信息
    *
    *
    * @param classId
    * @return
    */
   public Map<String,Object> myClassInfo(String classId){
      ClsClass objClsClass = this.read(ClsClass.class, classId);
      QSubjectProgressTreeV qSubjectProgressTreeV = QSubjectProgressTreeV.subjectProgressTreeV;
      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());
      SubjectProgressTreeV objSubjectProgressTreeV = this.getQueryFactory().selectFrom(qSubjectProgressTreeV)
            .where(qSubjectProgressTreeV.id.nodeId.eq(classId).and(qSubjectProgressTreeV.id.userId.eq(ClientUtils.getUserId())).and(qSubjectProgressTreeV.nodeType.eq("class"))).fetchOne();
      if(objSubjectProgressTreeV != null) {
         long allCount = this.getQueryFactory().selectFrom(qSubjectProgressTreeV)
               .where(qSubjectProgressTreeV.id.nodeId.eq(classId)).fetchCount();
         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",
               objSubjectProgressTreeV.getPercent(), "progressValue", objSubjectProgressTreeV.getProgressValue(), "rank", rank, "teacherName", teachers);
      }else {
@@ -860,17 +859,17 @@
               0, "progressValue", 0, "rank", 0, teachers);
      }
   }
   /**
    * 获取我的课程进度
    *
    *
    * @param classId
    * @return
    */
   public List<Map<String,Object>> myClsSubjectlist(String classId, String userId,  Pager pager){
      String teacherId = this.teacherService.getTeacherIdByUserId(ClientUtils.getUserId());
      QMySubjectV qMySubjectV = QMySubjectV.mySubjectV;
      Predicate predicate = null;
      if(StringUtils.isNotEmpty(teacherId)) {
         predicate = qMySubjectV.id.classId.eq(classId).and(qMySubjectV.id.userId.eq(userId)).and(qMySubjectV.teacherId.eq(teacherId).and(qMySubjectV.subjectStatus.eq(Subject.STATUS_ISSUED)));
@@ -897,16 +896,16 @@
                return map;
             }).collect(Collectors.toList());
   }
   /**
    * 获取我的课程数量
    *
    *
    * @param classId
    * @return
    */
   public long myClsSubjectCount(String classId){
      QMySubjectV qMySubjectV = QMySubjectV.mySubjectV;
      return this.getQueryFactory().select(qMySubjectV.id.subjectId,
            qMySubjectV.subjectName,qMySubjectV.term,
            qMySubjectV.schoolYear,qMySubjectV.percent)
@@ -914,17 +913,17 @@
             .where(qMySubjectV.id.classId.eq(classId).and(qMySubjectV.id.userId.eq(ClientUtils.getUserId())).and(qMySubjectV.subjectStatus.eq(Subject.STATUS_ISSUED)))
             .fetchCount();
   }
   /**
    * 获取学员的课程进度
    *
    *
    * @param classId
    * @return
    */
   public List<Map<String,Object>> studentSubjectProgress(String classId, Pager pager){
      String teacherId = this.teacherService.getTeacherIdByUserId(ClientUtils.getUserId());
      QSubjectProgressTreeV qSubjectProgressTreeV = QSubjectProgressTreeV.subjectProgressTreeV;
      QMySubjectV qMySubjectV = QMySubjectV.mySubjectV;
      return this.getQueryFactory().select(qMySubjectV.id.subjectId,
            qMySubjectV.subjectName,qMySubjectV.term,qMySubjectV.coverPageUrl,
@@ -947,21 +946,21 @@
                           .where(qSubjectProgressTreeV.id.nodeId.eq(tuple.get(qMySubjectV.id.subjectId))
                                 .and(qSubjectProgressTreeV.nodeType.eq(Progress.PROGRESS_TYPE_SUBJECT)))
                           .groupBy(qSubjectProgressTreeV.id.nodeId).fetchOne());
                map.put("coverPageUrl",  tuple.get(qMySubjectV.coverPageUrl));
                map.put("lectureCount",  this.getLectureCount(tuple.get(qMySubjectV.id.subjectId)));
                return map;
             }).collect(Collectors.toList());
   }
   /**
    * 获取课件数量
    *
    *
    * @param subjectId
    * @return
    */
   public long getLectureCount(String subjectId) {
      Subject subject = this.read(subjectId);
      if(subject == null) {
         return 0l;
@@ -969,22 +968,22 @@
      if(subject.getType() == Subject.TYPE_CLS_SUBJECT) {//班级课程
         QClsSubjectLecture qSubjectLecture = QClsSubjectLecture.clsSubjectLecture;
         return this.getQueryFactory().selectFrom(qSubjectLecture).where(qSubjectLecture.deleteFlag.isFalse()
                .and(qSubjectLecture.subjectId.eq(subjectId)).and(qSubjectLecture.status.eq(SubjectLecture.STATUS_DRAFT))).fetchCount();
      }else {
         QSubjectLecture qSubjectLecture = QSubjectLecture.subjectLecture;
         return this.getQueryFactory().selectFrom(qSubjectLecture).where(qSubjectLecture.deleteFlag.isFalse()
                .and(qSubjectLecture.subjectId.eq(subjectId)).and(qSubjectLecture.status.eq(SubjectLecture.STATUS_DRAFT))).fetchCount();
      }
   }
   /**
    * 我的公开课列表
    *
    *
    * @param pageNum
    * @param pageSize
    * @param keyword
@@ -994,7 +993,7 @@
      QSubject qSubject = QSubject.subject;
      QProgress qProgress = QProgress.progress;
      QSubjectLecture qSubjectLecture = QSubjectLecture.subjectLecture;
      JPAQuery<Tuple> query = this.getQueryFactory()
            .select(qSubject.subjectId, qSubject.name, qSubject.term,qSubject.coverPageUrl, qSubject.schoolYear,
                  qProgress.progressPercent.avg().as(qProgress.progressPercent), qProgress.progressValue.sum().as(qProgress.progressValue))
@@ -1004,12 +1003,12 @@
                  .and(qProgress.learnerId.eq(ClientUtils.getUserId()))
                  .and(qSubject.name.like("%" + keyword + "%").and(qProgress.deleteFlag.isFalse()))
                  .and(qProgress.type.eq(Progress.PROGRESS_TYPE_LECTURE)).and(qSubject.status.eq(Subject.STATUS_ISSUED))).groupBy(qSubject.subjectId);
      long count = query.fetchCount();
      List<Map<String, Object>> listData = query.orderBy(qProgress.createTime.desc()).limit(pageSize).offset(pageNum).fetch().stream().map(tuple -> {
               Map<String, Object> map = new HashMap<String, Object>(7);
               String subjectId = tuple.get(qSubject.subjectId);
               map.put("name", tuple.get(qSubject.name));
               map.put("subjectId", subjectId);
               map.put("schoolYear", tuple.get(qSubject.schoolYear));
@@ -1019,16 +1018,16 @@
               map.put("progressValue", tuple.get(qProgress.progressValue));
               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"));
               // 已观看完成课件数量
@@ -1036,13 +1035,13 @@
               return map;
            }).collect(Collectors.toList());
      return CollectionUtils.newObjectMap("count", count, "listData", listData);
   }
   /**
    * 课程统计详情
    *
    *
    * @param subjectId
    * @return
    */
@@ -1051,7 +1050,7 @@
      QMediaVideoLive qMediaVideoLive = QMediaVideoLive.mediaVideoLive;
      QSubjectLecture qSubjectLecture = QSubjectLecture.subjectLecture;
      QProgress qProgress = QProgress.progress;
      // 直播数量
      map.put("mediaVideoLiveCount",
            this.getQueryFactory().select(qMediaVideoLive).from(qMediaVideoLive)
@@ -1066,14 +1065,14 @@
                  .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))
                        .and(qProgress.targetId.eq(qSubjectLecture.lectureId)))
                  .fetchCount());
      map.put("content", this.readSubjectContent(subjectId));
      // 已观看完成课件数量
@@ -1084,58 +1083,58 @@
                        .and(qProgress.progressPercent.gt(0.95)).and(qProgress.targetId.eq(qSubjectLecture.lectureId))
                        .and(qSubjectLecture.subjectId.eq(subjectId)))
                  .fetchCount());
      return map;
   }
   /**
    * 公开课详情
    *
    *
    * @param subjectId
    * @return
    */
   public Map<String,Object> openSubjectInfo(String subjectId){
      QProgress qProgress = QProgress.progress;
      QSubjectLecture qSubjectLecture = QSubjectLecture.subjectLecture;
      Subject objSubject = this.read(subjectId);
      Tuple progress = this.getQueryFactory()
            .select(qProgress.progressPercent.sum().as(qProgress.progressPercent), qProgress.progressValue.sum().as(qProgress.progressValue)).from(qProgress,qSubjectLecture).where(qProgress.learnerId.eq(ClientUtils.getUserId())
                        .and(qProgress.targetId.eq(qSubjectLecture.lectureId))
                  .and(qProgress.deleteFlag.isFalse()).and(qSubjectLecture.deleteFlag.isFalse()).and(qSubjectLecture.subjectId.eq(subjectId))
                  .and(qProgress.type.eq(Progress.PROGRESS_TYPE_LECTURE))).fetchOne();
      Map<String, Object> subjectInfo = new HashMap<String, Object>(7);
      subjectInfo.put("name", objSubject.getName());
      subjectInfo.put("subjectId", subjectId);
      subjectInfo.put("schoolYear", objSubject.getSchoolYear());
      subjectInfo.put("term", objSubject.getTerm());
      subjectInfo.put("coverPageUrl", objSubject.getCoverPageUrl());
      subjectInfo.put("teacherName", objSubject.getTeacherName());
      Map<String,Object> openSubjectDetail = this.openSubjectDetail(subjectId);
      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);
      if(openSubjectDetail.get("subjectLectureCount") == null || progress == null || progress.get(qProgress.progressPercent) == null) {
         subjectInfo.put("progressPercent", 0);
      }else {
@@ -1205,7 +1204,7 @@
   /**
    * 公开课列表
    *
    *
    * @param pageNum
    * @param pageSize
    * @param keyword
@@ -1213,7 +1212,7 @@
    */
   public Map<String,Object> openSubjectList(Integer pageNum, Integer pageSize, String keyword){
      QOpenSubjectV qOpenSubjectV = QOpenSubjectV.openSubjectV;
      JPAQuery<OpenSubjectV> query = this.getQueryFactory().selectFrom(qOpenSubjectV).where(qOpenSubjectV.subjectName.like("%" + keyword + "%"));
      long count = query.fetchCount();
@@ -1234,13 +1233,13 @@
               return map;
            }).collect(Collectors.toList());
      return CollectionUtils.newObjectMap("count", count, "listData", listData);
   }
   /**
    * 班级学员课件总体进度
    *
    *
    * @param subjectId
    * @param classId
    * @return
@@ -1267,10 +1266,10 @@
               return map;
            }).collect(Collectors.toList());
    }
   /**
    * 学员课程作业进度
    *
    *
    * @param classId
    * @param subjectId
    * @return
@@ -1296,7 +1295,7 @@
                  .and(qHomeworkScoreV.userId.eq(student.getUserId()))
                  .and(qHomeworkScoreV.exerciseStatus.eq(ExerciseInfo.EXERCISE_STATUS_PUBLISHED)))
            .groupBy(qHomeworkScoreV.userId).fetchOne();
      Map<String,Object> map = new HashMap<String,Object>(4);
      if(tuple == null) {
         map.put("subjectId", subjectId);
@@ -1310,13 +1309,13 @@
          map.put("avgScore",  String.valueOf(commitHomeworkCount == 0 || tuple.get(2, BigDecimal.class) == null?BigDecimal.ZERO:tuple.get(2, BigDecimal.class).divide(BigDecimal.valueOf(commitHomeworkCount), 2, BigDecimal.ROUND_HALF_UP)));
          map.put("commitHomeworkCount", commitHomeworkCount);
       }
       return map;
   }
   /**
    * 学员考试作业进度
    *
    *
    * @param classId
    * @param subjectId
    * @return
@@ -1326,7 +1325,7 @@
      StuStudent student = read(StuStudent.class, studentId);
      Subject subject = read(Subject.class, subjectId);
      Tuple tuple = this.getQueryFactory().select(qExamScoreV.subjectId, qExamScoreV.count(), new CaseBuilder()
             .when(qExamScoreV.status.eq("0")).then(BigDecimal.ZERO).otherwise(qExamScoreV.score).sum(), new CaseBuilder()
             .when(qExamScoreV.status.eq("0")).then(0).otherwise(1).sum()).
@@ -1341,18 +1340,18 @@
           map.put("commitExamCount",  0);
       }else {
          int commitExamCount = tuple.get(3, Integer.class) == null?0:tuple.get(3, Integer.class);
          map.put("examCount",  tuple.get(1, Integer.class) == null?0:tuple.get(1, Integer.class));
           map.put("avgScore",  String.valueOf(commitExamCount == 0 || tuple.get(2, BigDecimal.class) == null?BigDecimal.ZERO:tuple.get(2, BigDecimal.class).divide(new BigDecimal(commitExamCount), 2, BigDecimal.ROUND_HALF_UP)));
           map.put("commitExamCount",  tuple.get(3, Integer.class) == null?0:tuple.get(3, Integer.class));
       }
      return map;
   }
   /**
    * 我的课件情况
    *
    *
    * @param classId
    * @return
    */
@@ -1374,10 +1373,10 @@
                return map;
             }).collect(Collectors.toList());
   }
   /**
    * 我的课程,按时间排序
    *
    *
    * @param classId
    * @return
    */
@@ -1392,16 +1391,16 @@
         clsSubject.put("homework", CollectionUtils.newObjectMap("homeworkCount", exerciseInfoService.queryStuExerciseListCount("", null, ClientUtils.getUserId(), origSubjectId, null)));
         clsSubject.put("lecture", CollectionUtils.newObjectMap("lectureCount", 0, "completeLectureCount", 0));
         clsSubject.put("mediaVideoLive", CollectionUtils.newObjectMap("mediaVideoLiveCount", this.mediaLiveService.listCount("", new String[] {classId}, origSubjectId, null)));
         this.setSubjectStatistics("lecture", clsSubject, lectures);
      }
      return clsSubjectlist;
   }
   /**
    * 统计课程的数据
    *
    *
    * @param type 类型
    * @param clsSubject 课程
    * @param lstStatistics 统计信息
@@ -1414,17 +1413,17 @@
            }
         }
      }
   }
   /**
    * 我的课程详情
    *
    *
    * @param classId
    * @return
    */
   public Map<String,Object> mySubjectInfo(String subjectId, String classId,HttpServletRequest request) {
      QMySubjectV qMySubjectV = QMySubjectV.mySubjectV;
      QMyLectureV qMyLectureV = QMyLectureV.myLectureV;
      Object userId = request.getSession().getAttribute("userId");
@@ -1436,7 +1435,7 @@
            .where(qMySubjectV.id.classId.eq(classId).and(qMySubjectV.id.userId.eq(ClientUtils.getUserId()))
                  .and(qMySubjectV.id.subjectId.eq(subjectId)))
            .fetchOne();
      Subject objSubject = this.read(subjectId);
      Map<String, Object> subject = new HashMap<String, Object>(5);
@@ -1457,7 +1456,7 @@
      }
      String origSubjectId = objSubject.getOrigSubjectId();
      // 考试统计
      long examsCount = this.examService.listStudentExamCount("", new String[] {classId}, origSubjectId, null);
@@ -1476,13 +1475,13 @@
      return CollectionUtils.newObjectMap("mediaVideoLivesCount", mediaVideoLivesCount, "examsCount", examsCount,
            "homeworksCount", homeworksCount, "subjectInfo", subject, "lectureCount",
            tupleLecture == null?0:tupleLecture.get(0, Long.class),
            tupleLecture == null?0:tupleLecture.get(0, Long.class),
                  "completeLectureCount", tupleLecture == null?0:tupleLecture.get(1,Integer.class));
   }
   /**
    * 我的课程按学期分类
    *
    *
    * @param classId
    * @return
    */
@@ -1499,7 +1498,7 @@
   /**
    * 课程按学期分类
    *
    *
    * @param classId
    * @return
    */
@@ -1507,7 +1506,7 @@
   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()) {
         for(Map<String,Object> term : termList) {
            if(termList != null && !termList.isEmpty()) {
@@ -1524,11 +1523,11 @@
      }
      return termList;
   }
   /**
    * 查询课程关联的班级课程信息
    *
    *
    * @param classId
    * @return
    */
@@ -1538,8 +1537,8 @@
              + " s.schoolYear as schoolYear,s.term as term,c.classId as classId,c.name as className"
              + " from Subject s ,ClsClassReSubject r ,ClsClass c where s.subjectId = r.subjectId "
              + " and r.classId = c.classId and s.origSubjectId =:origSubjectId and s.deleteFlag is false";
      return this.findListWithMapByHql(hql,CollectionUtils.newObjectMap("origSubjectId",origSubjectId));
   }
};
      return this.findListWithMapByHql(hql,CollectionUtils.newObjectMap("origSubjectId",origSubjectId));
   }
};