From 8c99e2d8b6c1e0d9cde6abbe80b4df75be19f6d1 Mon Sep 17 00:00:00 2001
From: Administrator <2863138610@qq.com>
Date: 星期二, 29 十一月 2022 16:31:18 +0800
Subject: [PATCH] 课程与课件bug修复
---
src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureDocProgressService.java | 18
src/main/java/com/qxueyou/scc/admin/classes/service/impl/ClsClassService.java | 33
src/main/java/com/qxueyou/scc/admin/progress/model/SubjectLectureProgressDetail.java | 12
pom.xml | 13
src/main/java/com/qxueyou/scc/stucontroller/StuSubjectController.java | 789 +++++----
src/main/java/com/qxueyou/scc/base/util/ClientUtils.java | 20
src/main/java/com/qxueyou/scc/controller/CoursewareController.java | 7
target/generated-sources/java/com/qxueyou/scc/teach/student/model/QStuStudent.java | 4
src/main/java/com/qxueyou/scc/admin/classes/service/impl/ClassLectureService.java | 15
src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/ChapterProgressService.java | 10
src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemAudioService.java | 33
src/main/java/com/qxueyou/scc/sys/utils/VideoUtil.java | 86 +
src/main/java/com/qxueyou/scc/teach/subject/service/ISubjectService.java | 121
src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java | 2687 +++++++++++++++++-----------------
src/main/java/com/qxueyou/scc/admin/progress/dao/ProgressDAO.java | 10
src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/ClassProgressService.java | 10
src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureVideoProgressService.java | 14
src/main/java/com/qxueyou/scc/admin/progress/service/IDetailProgressService.java | 2
src/main/java/com/qxueyou/scc/teach/subject/model/view/MyLectureV.java | 2
src/main/java/com/qxueyou/scc/sys/utils/AudioUtil.java | 103 +
src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemVideoService.java | 234 +-
src/main/java/com/qxueyou/scc/admin/progress/service/IProgressService.java | 2
target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMyLectureV.java | 5
src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/LectureProgressService.java | 2
src/main/java/com/qxueyou/scc/admin/progress/service/impl/StudyProgressUtils.java | 26
src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectLectureService.java | 62
src/main/java/com/qxueyou/scc/teach/subject/model/view/MySubjectV.java | 22
src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/SubjectProgressService.java | 10
src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureCommonProgressService.java | 40
src/main/java/com/qxueyou/scc/teach/subject/service/ILectureService.java | 62
src/main/java/com/qxueyou/scc/admin/progress/service/impl/ProgressService.java | 4
src/main/java/com/qxueyou/scc/base/service/impl/RedisCacheBean.java | 12
src/main/java/com/qxueyou/scc/teach/subject/model/SubjectUtils.java | 46
33 files changed, 2,507 insertions(+), 2,009 deletions(-)
diff --git a/pom.xml b/pom.xml
index 1afc976..8df21a0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -78,6 +78,19 @@
<version>4.0.5.Final</version>
</dependency>
+ <!-- mp3鏂囦欢鏀寔(濡傝闊虫椂闀�)-->
+ <dependency>
+ <groupId>org</groupId>
+ <artifactId>jaudiotagger</artifactId>
+ <version>2.0.1</version>
+ </dependency>
+
+ <!-- mp4鏂囦欢鏀寔(濡傝闊虫椂闀�)-->
+ <dependency>
+ <groupId>com.googlecode.mp4parser</groupId>
+ <artifactId>isoparser</artifactId>
+ <version>1.1.22</version>
+ </dependency>
<!-- hibernate-core-4.3.7.Final.jar -->
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
diff --git a/src/main/java/com/qxueyou/scc/admin/classes/service/impl/ClassLectureService.java b/src/main/java/com/qxueyou/scc/admin/classes/service/impl/ClassLectureService.java
index 09a8854..ce622f0 100644
--- a/src/main/java/com/qxueyou/scc/admin/classes/service/impl/ClassLectureService.java
+++ b/src/main/java/com/qxueyou/scc/admin/classes/service/impl/ClassLectureService.java
@@ -270,6 +270,19 @@
}
}
+ public Result updateLecturetime(String targetId) {
+
+ ClsSubjectLecture lecture = read(ClsSubjectLecture.class, targetId);
+
+
+ TraceUtils.setUpdateTrace(lecture);
+
+ lecture.setUpdateTime(new Date());
+ lecture.setUpdator(ClientUtils.getUserId());
+ save(lecture);
+
+ return new Result(true, "success");
+ }
@Override
public Result updateLecture(String lectureId, String resId) {
@@ -567,7 +580,7 @@
@Override
public Result doStudy(String clsLectureId, Double from, Double to) {
- return progressService.addProgress(Progress.PROGRESS_TYPE_LECTURE, clsLectureId, from.doubleValue(), to.doubleValue(),
+ return progressService.addProgress(Progress.PROGRESS_TYPE_LECTURE, clsLectureId, from.intValue(), to.intValue(),
ClientUtils.getUserId());
}
diff --git a/src/main/java/com/qxueyou/scc/admin/classes/service/impl/ClsClassService.java b/src/main/java/com/qxueyou/scc/admin/classes/service/impl/ClsClassService.java
index e8f3de2..2b9e1a3 100644
--- a/src/main/java/com/qxueyou/scc/admin/classes/service/impl/ClsClassService.java
+++ b/src/main/java/com/qxueyou/scc/admin/classes/service/impl/ClsClassService.java
@@ -1,12 +1,11 @@
package com.qxueyou.scc.admin.classes.service.impl;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.stream.Collectors;
+import com.qxueyou.scc.teach.subject.model.view.MyLectureV;
+import com.qxueyou.scc.teach.subject.model.view.MySubjectV;
+import com.qxueyou.scc.teach.subject.service.ILectureService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
@@ -53,6 +52,9 @@
@Autowired
ITeacherService teacherService;
+
+ @Autowired
+ ILectureService lectureService;
/**
* 添加班级
@@ -242,6 +244,27 @@
@Override
public List<Map<String, Object>> getSubjectLstByClsId(String classId) {
+ String hql = "from MySubjectV where classId = ?";
+ List<MySubjectV> mySubjectVList = find(hql,CollectionUtils.newList(classId),MySubjectV.class);
+ List<Map<String,Object>> maps = new ArrayList<>();
+ for(MySubjectV mySubjectV : mySubjectVList){
+ List<MyLectureV> myLectureVList = lectureService.listLectureVBySubjectId(mySubjectV.getId().getUserId(),mySubjectV.getId().getSubjectId(), "", 1000, 1, null);
+ Double percent = 0.0;
+ Double progressValue = 0.0;
+ Double percentAvg = 0.0;
+ if(!myLectureVList.isEmpty()) {
+ for (MyLectureV myLectureV : myLectureVList) {
+ if (myLectureV.getPercent() != null && myLectureV.getProgressValue() != null) {
+ percent += myLectureV.getPercent();
+ progressValue += myLectureV.getProgressValue().intValue();
+ }
+ }
+ percentAvg = percent / myLectureVList.size();
+ if (percentAvg.isNaN()) {
+ percentAvg = 0.0;
+ }
+ }
+ }
return null;
}
diff --git a/src/main/java/com/qxueyou/scc/admin/progress/dao/ProgressDAO.java b/src/main/java/com/qxueyou/scc/admin/progress/dao/ProgressDAO.java
index e51010d..8bca560 100644
--- a/src/main/java/com/qxueyou/scc/admin/progress/dao/ProgressDAO.java
+++ b/src/main/java/com/qxueyou/scc/admin/progress/dao/ProgressDAO.java
@@ -38,15 +38,15 @@
* @return
*/
@Cacheable(value = "progress", key = "#targetId+#learnerId")
- public Double[][] getProgress(String targetId, String learnerId) {
+ public int[][] getProgress(String targetId, String learnerId) {
List<SubjectLectureProgressDetail> lstDetail = this.find("from SubjectLectureProgressDetail where targetId = ? and learnerId = ? and deleteFlag is false", CollectionUtils.newList(targetId, learnerId), SubjectLectureProgressDetail.class);
if(lstDetail == null || lstDetail.isEmpty()) {
- return new Double[][] {};
+ return new int[][] {};
}else {
- Double[][] progress = new Double[lstDetail.size()][2];
+ int[][] progress = new int[lstDetail.size()][2];
int i = 0;
for(SubjectLectureProgressDetail objDetail : lstDetail) {
- progress[i++] = new Double[] {objDetail.getStart(), objDetail.getEnd()};
+ progress[i++] = new int[] {objDetail.getStart(), objDetail.getEnd()};
}
return progress;
@@ -54,7 +54,7 @@
}
@CachePut(value = "progress", key = "#targetId+#learnerId")
- public Double[][] mergeProgress(String targetId, String learnerId, Double start, Double end, Double[][] origProgress) {
+ public int[][] mergeProgress(String targetId, String learnerId, int start, int end, int[][] origProgress) {
return StudyProgressUtils.merge(origProgress, start, end);
}
diff --git a/src/main/java/com/qxueyou/scc/admin/progress/model/SubjectLectureProgressDetail.java b/src/main/java/com/qxueyou/scc/admin/progress/model/SubjectLectureProgressDetail.java
index ea48602..ee7e535 100644
--- a/src/main/java/com/qxueyou/scc/admin/progress/model/SubjectLectureProgressDetail.java
+++ b/src/main/java/com/qxueyou/scc/admin/progress/model/SubjectLectureProgressDetail.java
@@ -30,8 +30,8 @@
private static final long serialVersionUID = -1565188126862586738L;
private String detailId;
private String progressId;
- private Double start;
- private Double end;
+ private int start;
+ private int end;
private String learnerId;
private String targetId;
private Date createTime;
@@ -55,25 +55,25 @@
this.progressId = progressId;
}
- public Double getStart() {
+ public int getStart() {
return start;
}
- public void setStart(Double start) {
+ public void setStart(int start) {
this.start = start;
}
- public Double getEnd() {
+ public int getEnd() {
return end;
}
- public void setEnd(Double end) {
+ public void setEnd(int end) {
this.end = end;
}
diff --git a/src/main/java/com/qxueyou/scc/admin/progress/service/IDetailProgressService.java b/src/main/java/com/qxueyou/scc/admin/progress/service/IDetailProgressService.java
index 41ac6b4..9ca8835 100644
--- a/src/main/java/com/qxueyou/scc/admin/progress/service/IDetailProgressService.java
+++ b/src/main/java/com/qxueyou/scc/admin/progress/service/IDetailProgressService.java
@@ -13,7 +13,7 @@
* @param end 学习结束位置
* @return
*/
- Result addProgress(String targetId,String learnerId,Double start,Double end);
+ Result addProgress(String targetId,String learnerId,int start,int end);
/**
* 返回进度类型
diff --git a/src/main/java/com/qxueyou/scc/admin/progress/service/IProgressService.java b/src/main/java/com/qxueyou/scc/admin/progress/service/IProgressService.java
index 1dd400f..fca52f1 100644
--- a/src/main/java/com/qxueyou/scc/admin/progress/service/IProgressService.java
+++ b/src/main/java/com/qxueyou/scc/admin/progress/service/IProgressService.java
@@ -48,7 +48,7 @@
* 学习结束位置
* @return
*/
- Result addProgress(String type, String targetId, Double start, Double end, String userId);
+ Result addProgress(String type, String targetId, int start, int end, String userId);
List<SubjectProgressTreeV> getSubjectChapterTreeVList(String parentId,String userId);
diff --git a/src/main/java/com/qxueyou/scc/admin/progress/service/impl/ProgressService.java b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/ProgressService.java
index d3a44a8..3089db1 100644
--- a/src/main/java/com/qxueyou/scc/admin/progress/service/impl/ProgressService.java
+++ b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/ProgressService.java
@@ -84,7 +84,7 @@
}
@Override
- public Result addProgress(String type, String targetId, Double start, Double end, String userId) {
+ public Result addProgress(String type, String targetId, int start, int end, String userId) {
String userId_ = StringUtils.isBlank(userId) ? ClientUtils.getUserId() : userId;
return resItemServiceMap.get(type).addProgress(targetId, userId_, start, end);
}
@@ -109,7 +109,7 @@
BigDecimal progressValue = new BigDecimal(itemProgress.get("progressValue").toString());
if (progress == null) {
String nodeType = subjectProgressTreeV.getNodeType();
- this.addProgress(nodeType, nodeId, 0.0, 0.0, userId);
+ this.addProgress(nodeType, nodeId, 0, 0, userId);
cacheService.lstRightPush(SUBJECT_PROGRESS_STATISTIC, nodeIdOrUserId);
return;
}
diff --git a/src/main/java/com/qxueyou/scc/admin/progress/service/impl/StudyProgressUtils.java b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/StudyProgressUtils.java
index 90e5d02..4b42449 100644
--- a/src/main/java/com/qxueyou/scc/admin/progress/service/impl/StudyProgressUtils.java
+++ b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/StudyProgressUtils.java
@@ -41,10 +41,10 @@
* 结束位置
* @return
*/
- public static Double[][] merge(Double[][] orig, Double start, Double end) {
+ public static int[][] merge(int[][] orig, int start, int end) {
// 中间合并结果
- Double[][] result = new Double[orig.length + 1][2];
+ int[][] result = new int[orig.length + 1][2];
int j = 0;
int i = 0;
@@ -57,13 +57,13 @@
switch (action) {
case ACTION_INSERT: {
- result[j++] = new Double[] { start, end };
+ result[j++] = new int[] { start, end };
result[j++] = orig[i];
breakFlag = true;
break;
}
case ACTION_MERGE_01: {
- result[j++] = new Double[] { start, orig[i][1] };
+ result[j++] = new int[] { start, orig[i][1] };
breakFlag = true;
break;
}
@@ -95,14 +95,12 @@
}
// 如果本次学习终止位置超出以往所有学习进度,则添加到最后
- if (orig.length == 0 ) {
- result[j++] = new Double[] { start, end };
- }else if(pos(end, orig[orig.length - 1]) == POS_AFTER){
- result[j++] = new Double[] { start, end };
+ if (orig.length == 0 || pos(end, orig[orig.length - 1]) == POS_AFTER) {
+ result[j++] = new int[] { start, end };
}
// 最终合并结果,去掉中间合并结果的多出为空的元素
- Double[][] finalResult = new Double[j][2];
+ int[][] finalResult = new int[j][2];
for (int k = 0; k < result.length; k++) {
if (result[k][0] == 0 && result[k][1] == 0 && k>0) {
@@ -122,18 +120,18 @@
* 全部学习进度
* @return
*/
- public static Double sum(Double[][] orig) {
+ public static int sum(int[][] orig) {
- Double sum = 0.0;
+ int sum = 0;
- for (Double[] item : orig) {
+ for (int[] item : orig) {
sum += (item[1] - item[0] + 1);
}
return sum;
}
- private static int action(Double[] segment, Double start, Double end) {
+ private static int action(int[] segment, int start, int end) {
int startPos = pos(start, segment);
int endPos = pos(end, segment);
@@ -165,7 +163,7 @@
}
- private static int pos(Double index, Double[] range) {
+ private static int pos(int index, int[] range) {
if (index < range[0]) {
return POS_BEFORE;
}
diff --git a/src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/ChapterProgressService.java b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/ChapterProgressService.java
index 5ca3a11..9460a4f 100644
--- a/src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/ChapterProgressService.java
+++ b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/ChapterProgressService.java
@@ -1,6 +1,7 @@
package com.qxueyou.scc.admin.progress.service.impl.item;
import java.math.BigDecimal;
+import java.util.Date;
import org.springframework.stereotype.Service;
@@ -15,7 +16,7 @@
public class ChapterProgressService extends CommonAppService implements IDetailProgressService {
@Override
- public Result addProgress(String targetId, String learnerId, Double start, Double end) {
+ public Result addProgress(String targetId, String learnerId, int start, int end) {
Progress p = new Progress();
TraceUtils.setCreateTrace(p);
p.setLearnerId(learnerId);
@@ -25,6 +26,13 @@
p.setTargetId(targetId);
p.setType(Progress.PROGRESS_TYPE_CHAPTER);
p.setProgressPercent(0d);
+ p.setDeleteFlag(false);
+ p.setCreator(ClientUtils.getUserName());
+ p.setCreateId(ClientUtils.getUserId());
+ p.setCreateTime(new Date());
+ p.setUpdator(ClientUtils.getUserName());
+ p.setUpdateId(ClientUtils.getUserId());
+ p.setUpdateTime(new Date());
save(p);
return new Result(true);
}
diff --git a/src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/ClassProgressService.java b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/ClassProgressService.java
index 0b53d63..35786d8 100644
--- a/src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/ClassProgressService.java
+++ b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/ClassProgressService.java
@@ -1,6 +1,7 @@
package com.qxueyou.scc.admin.progress.service.impl.item;
import java.math.BigDecimal;
+import java.util.Date;
import org.springframework.stereotype.Service;
@@ -15,7 +16,7 @@
public class ClassProgressService extends CommonAppService implements IDetailProgressService {
@Override
- public Result addProgress(String targetId, String learnerId, Double start, Double end) {
+ public Result addProgress(String targetId, String learnerId, int start, int end) {
Progress p = new Progress();
TraceUtils.setCreateTrace(p);
p.setLearnerId(learnerId);
@@ -25,6 +26,13 @@
p.setTargetId(targetId);
p.setType(Progress.PROGRESS_TYPE_CLASS);
p.setProgressPercent(0d);
+ p.setDeleteFlag(false);
+ p.setCreator(ClientUtils.getUserName());
+ p.setCreateId(ClientUtils.getUserId());
+ p.setCreateTime(new Date());
+ p.setUpdator(ClientUtils.getUserName());
+ p.setUpdateId(ClientUtils.getUserId());
+ p.setUpdateTime(new Date());
save(p);
return new Result(true);
}
diff --git a/src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/LectureProgressService.java b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/LectureProgressService.java
index 5e41983..5714161 100644
--- a/src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/LectureProgressService.java
+++ b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/LectureProgressService.java
@@ -44,7 +44,7 @@
@Override
- public Result addProgress(String targetId,String learnerId, Double start, Double end) {
+ public Result addProgress(String targetId,String learnerId, int start, int end) {
ClsSubjectLecture lecture = lectureService.readClsLecture(targetId);
String lectureType = null;
diff --git a/src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/SubjectProgressService.java b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/SubjectProgressService.java
index 0263098..6057831 100644
--- a/src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/SubjectProgressService.java
+++ b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/item/SubjectProgressService.java
@@ -1,6 +1,7 @@
package com.qxueyou.scc.admin.progress.service.impl.item;
import java.math.BigDecimal;
+import java.util.Date;
import org.springframework.stereotype.Service;
@@ -15,7 +16,7 @@
public class SubjectProgressService extends CommonAppService implements IDetailProgressService {
@Override
- public Result addProgress(String targetId, String learnerId, Double start, Double end) {
+ public Result addProgress(String targetId, String learnerId, int start, int end) {
Progress p = new Progress();
TraceUtils.setCreateTrace(p);
p.setLearnerId(learnerId);
@@ -25,6 +26,13 @@
p.setTargetId(targetId);
p.setType(Progress.PROGRESS_TYPE_SUBJECT);
p.setProgressPercent(0d);
+ p.setDeleteFlag(false);
+ p.setCreator(ClientUtils.getUserName());
+ p.setCreateId(ClientUtils.getUserId());
+ p.setCreateTime(new Date());
+ p.setUpdator(ClientUtils.getUserName());
+ p.setUpdateId(ClientUtils.getUserId());
+ p.setUpdateTime(new Date());
save(p);
return new Result(true);
}
diff --git a/src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureCommonProgressService.java b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureCommonProgressService.java
index 6257600..cc53f58 100644
--- a/src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureCommonProgressService.java
+++ b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureCommonProgressService.java
@@ -1,7 +1,10 @@
package com.qxueyou.scc.admin.progress.service.impl.lecture;
import java.math.BigDecimal;
+import java.util.Date;
+import com.qxueyou.scc.admin.classes.model.ClsSubjectLecture;
+import com.qxueyou.scc.admin.classes.service.impl.ClassLectureService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -28,20 +31,23 @@
@Autowired
ProgressDAO dao;
+ @Autowired
+ ClassLectureService classLectureService;
+
@Override
- public Result addProgress(String targetId, String learnerId, Double start, Double end) {
+ public Result addProgress(String targetId, String learnerId, int start, int end) {
if (start > end || start < 0 || end < 0) {
return new Result(false, "invalid arguments");
}
- Double[][] progress = dao.mergeProgress(targetId, learnerId, start, end , dao.getProgress(targetId, learnerId));
+ int[][] progress = dao.mergeProgress(targetId, learnerId, start, end , dao.getProgress(targetId, learnerId));
if (!checkLecture(targetId).isSuccess()) {
return checkLecture(targetId);
}
- Double sum = StudyProgressUtils.sum(progress);
+ int sum = StudyProgressUtils.sum(progress);
Progress p = dao.getProgress(Progress.PROGRESS_TYPE_LECTURE, targetId, learnerId);
@@ -53,6 +59,8 @@
//保存学习记录明细
this.saveProgressDetail(start, end, targetId, p.getProgressId(), learnerId);
+
+ classLectureService.updateLecturetime(targetId);
SubjectProgressTreeV subjectProgressTreeV = dao.getSubjectProgressTreeV(targetId, learnerId);
@@ -77,7 +85,7 @@
* @param progressId
* @param learnerId
*/
- private void saveProgressDetail(Double start, Double end, String targetId, String progressId, String learnerId) {
+ private void saveProgressDetail(int start, int end, String targetId, String progressId, String learnerId) {
SubjectLectureProgressDetail detail = new SubjectLectureProgressDetail();
detail.setDeleteFlag(false);
detail.setEnd(end);
@@ -85,10 +93,14 @@
detail.setTargetId(targetId);
detail.setProgressId(progressId);
detail.setLearnerId(learnerId);
+ detail.setCreator(ClientUtils.getUserName());
+ detail.setCreateId(ClientUtils.getUserId());
+ detail.setCreateTime(new Date());
+ detail.setUpdateTime(new Date());
TraceUtils.setCreateTrace(detail);
- this.save(detail);
+ save(detail);
}
/**
@@ -98,7 +110,8 @@
* @param sum
* @return
*/
- protected double getProgressPercent(String targetId, Double sum) {
+ protected double getProgressPercent(String targetId, int sum) {
+
return 1.00d;
}
@@ -107,17 +120,17 @@
return Progress.PROGRESS_TYPE_LECTURE;
}
- protected void updateProgress(String targetId, Progress p, Double sum) {
+ protected void updateProgress(String targetId, Progress p, int sum) {
TraceUtils.setUpdateTrace(p);
- p.setProgressValue(BigDecimal.valueOf(Double.valueOf(sum)));
+ p.setProgressValue(BigDecimal.valueOf(Long.valueOf(sum)));
p.setProgressPercent(1d);
save(p);
}
- protected Progress newProgress(String targetId, String learnerId, Double sum) {
+ protected Progress newProgress(String targetId, String learnerId, int sum) {
Progress p = new Progress();
TraceUtils.setCreateTrace(p);
@@ -125,10 +138,17 @@
p.setLearnerId(learnerId);
p.setLearnerName(ClientUtils.getUserName());
p.setProgressUnit("s");
- p.setProgressValue(BigDecimal.valueOf(Double.valueOf(sum)));
+ p.setProgressValue(BigDecimal.valueOf(Long.valueOf(sum)));
p.setTargetId(targetId);
p.setType(Progress.PROGRESS_TYPE_LECTURE);
p.setProgressPercent(1d);
+ p.setDeleteFlag(false);
+ p.setCreator(ClientUtils.getUserName());
+ p.setCreateId(ClientUtils.getUserId());
+ p.setCreateTime(new Date());
+ p.setUpdator(ClientUtils.getUserName());
+ p.setUpdateId(ClientUtils.getUserId());
+ p.setUpdateTime(new Date());
save(p);
return p;
diff --git a/src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureDocProgressService.java b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureDocProgressService.java
index bc19ac7..bce7df5 100644
--- a/src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureDocProgressService.java
+++ b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureDocProgressService.java
@@ -1,6 +1,7 @@
package com.qxueyou.scc.admin.progress.service.impl.lecture;
import java.math.BigDecimal;
+import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -31,7 +32,7 @@
* @return
*/
@Override
- public double getProgressPercent(String targetId, Double sum) {
+ public double getProgressPercent(String targetId, int sum) {
LectureDocV LectureDoc = lectureService.readDocLecture(targetId);
@@ -39,7 +40,7 @@
}
@Override
- public Progress newProgress(String targetId, String learnerId, Double sum) {
+ public Progress newProgress(String targetId, String learnerId, int sum) {
Progress p = new Progress();
TraceUtils.setCreateTrace(p);
@@ -47,10 +48,17 @@
p.setLearnerId(learnerId);
p.setLearnerName(ClientUtils.getUserName());
p.setProgressUnit("s");
- p.setProgressValue(BigDecimal.valueOf(Double.valueOf(sum)));
+ p.setProgressValue(BigDecimal.valueOf(Long.valueOf(sum)));
p.setTargetId(targetId);
p.setType(Progress.PROGRESS_TYPE_LECTURE);
p.setProgressPercent(getProgressPercent(targetId, sum));
+ p.setDeleteFlag(false);
+ p.setCreator(ClientUtils.getUserName());
+ p.setCreateId(ClientUtils.getUserId());
+ p.setCreateTime(new Date());
+ p.setUpdator(ClientUtils.getUserName());
+ p.setUpdateId(ClientUtils.getUserId());
+ p.setUpdateTime(new Date());
save(p);
@@ -58,10 +66,10 @@
}
@Override
- public void updateProgress(String targetId, Progress p, Double sum) {
+ public void updateProgress(String targetId, Progress p, int sum) {
TraceUtils.setUpdateTrace(p);
- p.setProgressValue(BigDecimal.valueOf(Double.valueOf(sum)));
+ p.setProgressValue(BigDecimal.valueOf(Long.valueOf(sum)));
if(p.getProgressPercent() == null || getProgressPercent(targetId, sum)>p.getProgressPercent()) {
p.setProgressPercent(getProgressPercent(targetId, sum));
}
diff --git a/src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureVideoProgressService.java b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureVideoProgressService.java
index d3a7745..2eb8d2d 100644
--- a/src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureVideoProgressService.java
+++ b/src/main/java/com/qxueyou/scc/admin/progress/service/impl/lecture/LectureVideoProgressService.java
@@ -1,6 +1,7 @@
package com.qxueyou.scc.admin.progress.service.impl.lecture;
import java.math.BigDecimal;
+import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -38,7 +39,7 @@
}
@Override
- public Progress newProgress(String targetId, String learnerId, Double sum) {
+ public Progress newProgress(String targetId, String learnerId, int sum) {
Progress p = new Progress();
TraceUtils.setCreateTrace(p);
@@ -46,10 +47,17 @@
p.setLearnerId(learnerId);
p.setLearnerName(ClientUtils.getUserName());
p.setProgressUnit("s");
- p.setProgressValue(BigDecimal.valueOf(Double.valueOf(sum)));
+ p.setProgressValue(BigDecimal.valueOf(Long.valueOf(sum)));
p.setTargetId(targetId);
p.setType(Progress.PROGRESS_TYPE_LECTURE);
p.setProgressPercent(getProgressPercent(targetId, sum));
+ p.setDeleteFlag(false);
+ p.setCreator(ClientUtils.getUserName());
+ p.setCreateId(ClientUtils.getUserId());
+ p.setCreateTime(new Date());
+ p.setUpdator(ClientUtils.getUserName());
+ p.setUpdateId(ClientUtils.getUserId());
+ p.setUpdateTime(new Date());
save(p);
@@ -57,7 +65,7 @@
}
@Override
- public void updateProgress(String targetId, Progress p, Double sum) {
+ public void updateProgress(String targetId, Progress p, int sum) {
TraceUtils.setUpdateTrace(p);
p.setProgressValue(BigDecimal.valueOf(Double.valueOf(sum)));
diff --git a/src/main/java/com/qxueyou/scc/base/service/impl/RedisCacheBean.java b/src/main/java/com/qxueyou/scc/base/service/impl/RedisCacheBean.java
index 41086c4..eaec772 100644
--- a/src/main/java/com/qxueyou/scc/base/service/impl/RedisCacheBean.java
+++ b/src/main/java/com/qxueyou/scc/base/service/impl/RedisCacheBean.java
@@ -19,9 +19,11 @@
import com.qxueyou.scc.base.service.ICacheService;
import com.qxueyou.scc.base.util.CollectionUtils;
+import javax.annotation.Resource;
+
/**
* 阿里云OCS缓存服务
- *
+ *
* @author 德虎
*
*/
@@ -32,7 +34,7 @@
private static final Logger log = LogManager.getLogger("RedisCacheService");
@SuppressWarnings("rawtypes")
- @Autowired
+ @Resource
private RedisTemplate redisTemplate;
@SuppressWarnings("unchecked")
@@ -78,7 +80,7 @@
ValueOperations<String, Object> ops = redisTemplate.opsForValue();
ops.set(key, obj);
}
-
+
@SuppressWarnings("unchecked")
@Override
public boolean setIfAbsent(String key, Object obj) {
@@ -129,8 +131,8 @@
public void lstRightPush(String key, Object value) {
redisTemplate.opsForList().rightPush(key, value);
}
-
-
+
+
@SuppressWarnings("unchecked")
@Override
public void expire(String key,long timeout,TimeUnit unit) {
diff --git a/src/main/java/com/qxueyou/scc/base/util/ClientUtils.java b/src/main/java/com/qxueyou/scc/base/util/ClientUtils.java
index 98c5c0e..b633fbf 100644
--- a/src/main/java/com/qxueyou/scc/base/util/ClientUtils.java
+++ b/src/main/java/com/qxueyou/scc/base/util/ClientUtils.java
@@ -50,16 +50,16 @@
public static UserInfoWrapper getUserInfo() {
// UserInfoWrapper wrapper = threadLocalUserInfo.get();
// if(wrapper == null) {
- wrapper = (UserInfoWrapper)redisTemplate.opsForValue().get(UserInfoWrapper.SESSION_USER_INFO_KEY);
- if (wrapper == null) {
- wrapper = new UserInfoWrapper();
- User user = new User();
- //默认值,上传可以作为默认上传者
- user.setUserId(Constants.VISITOR_USER_ID);
- user.setName(Constants.VISITOR_USER_ID);
- wrapper.setUser(user);
- setUserInfo(wrapper);
- }
+ wrapper = (UserInfoWrapper)redisTemplate.opsForValue().get(UserInfoWrapper.SESSION_USER_INFO_KEY);
+ if (wrapper == null) {
+ wrapper = new UserInfoWrapper();
+ User user = new User();
+ //默认值,上传可以作为默认上传者
+ user.setUserId(Constants.VISITOR_USER_ID);
+ user.setName(Constants.VISITOR_USER_ID);
+ wrapper.setUser(user);
+ setUserInfo(wrapper);
+ }
// }
// else{
// redisTemplate.opsForValue().set(UserInfoWrapper.SESSION_USER_INFO_KEY,wrapper);
diff --git a/src/main/java/com/qxueyou/scc/controller/CoursewareController.java b/src/main/java/com/qxueyou/scc/controller/CoursewareController.java
index 0e80ceb..85d8290 100644
--- a/src/main/java/com/qxueyou/scc/controller/CoursewareController.java
+++ b/src/main/java/com/qxueyou/scc/controller/CoursewareController.java
@@ -4,7 +4,9 @@
import java.util.List;
import java.util.Map;
+import com.qxueyou.scc.admin.classes.model.ClsClassReSubject;
import com.qxueyou.scc.admin.classes.service.IClassLectureService;
+import com.qxueyou.scc.teach.subject.model.Subject;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@@ -133,7 +135,9 @@
@GetMapping(value = "deleteCourseware")
public Result deleteCourseware(String id) {
- return lectureService.deleteLecture(id.split(","));
+ Result result = lectureService.deleteLecture(id.split(","));
+ lectureService.deleteLectureLoad(id.split(","));
+ return result;
}
@@ -319,6 +323,7 @@
result = lectureService.addLecture(sectionId, resId_);
successCount = result.isSuccess() ? 1 : 0;
}
+ lectureService.addLectureLoad(sectionId);
return new Result(true, null, successCount);
}
diff --git a/src/main/java/com/qxueyou/scc/stucontroller/StuSubjectController.java b/src/main/java/com/qxueyou/scc/stucontroller/StuSubjectController.java
index fe85608..9610399 100644
--- a/src/main/java/com/qxueyou/scc/stucontroller/StuSubjectController.java
+++ b/src/main/java/com/qxueyou/scc/stucontroller/StuSubjectController.java
@@ -1,12 +1,21 @@
package com.qxueyou.scc.stucontroller;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import com.querydsl.jpa.hibernate.HibernateQueryFactory;
+import com.qxueyou.scc.base.dao.BaseDAO;
import com.qxueyou.scc.base.model.UserInfoWrapper;
+import com.qxueyou.scc.teach.subject.model.SubjectUtils;
import com.qxueyou.scc.user.model.User;
+import org.hibernate.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.orm.hibernate4.HibernateTemplate;
+import org.springframework.orm.jpa.vendor.HibernateJpaSessionFactoryBean;
import org.springframework.web.bind.annotation.*;
import com.alibaba.druid.util.StringUtils;
@@ -34,6 +43,7 @@
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
+import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -41,429 +51,450 @@
* 学习端 课程前端控制器
*
* @author chenjunliang
- *
*/
-@Api(tags= "课程管理-学员端")
+@Api(tags = "课程管理-学员端")
@RestController
-@CrossOrigin(origins="*",maxAge=3600)
+@CrossOrigin(origins = "*", maxAge = 3600)
@RequestMapping(value = "stu/subject")
public class StuSubjectController {
- @Autowired
- ISubjectService subjectService;
+ @Autowired
+ ISubjectService subjectService;
- @Autowired
- ILectureService lectureService;
+ @Autowired
+ ILectureService lectureService;
- @Autowired
- IClassLectureService clsLectureService;
+ @Autowired
+ IClassLectureService clsLectureService;
- @Autowired
- IResAudioService audioService;
+ @Autowired
+ IResAudioService audioService;
- @Autowired
- ProgressDAO progressDao;
+ @Autowired
+ ProgressDAO progressDao;
- @Autowired
- ITopicService topicService;
+ @Autowired
+ ITopicService topicService;
- @Autowired
- IEvaluateService evaluateService;
+ @Autowired
+ IEvaluateService evaluateService;
- //--------------------------------------------------------------app端接口---------------------------------------------------------------------------------------------------
- /**
- * 学习端获取 所有课件
- *
- * @param classId
- * @return 状态说明(0,视频。1,音频。2,文档。3,练习。)
- */
- @ApiOperation(value = "获取班级所有课件-学习端", notes = "状态说明(0,视频。1,音频。2,文档。3,练习。)")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType="query", dataType = "String"),
- @ApiImplicitParam(name = "sort", value = "排序方式(desc从大到小,asc从小到大)", required = false, paramType="query", dataType = "String"),
- })
- @GetMapping(value = "/app/getCoursewareLstByClassId")
- public Result appCoursewareLst(String classId, @RequestParam(defaultValue="desc")String sort, Pager pager) {
- System.out.println(classId);
- return clsLectureService.listSubjectLecture(CommonUtils.getClassId(classId), sort, pager);
- }
+ //--------------------------------------------------------------app端接口---------------------------------------------------------------------------------------------------
- /**
- *
- * 学习端获取课程列表
- *
- */
- @ApiOperation(value = "学习端获取课程学年列表")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType="query", dataType = "String"),
- })
- @GetMapping(value = "/app/termList")
- public Result termList(String classId) {
- classId = CommonUtils.getClassId(classId);
- if(StringUtils.isEmpty(classId)) {
- return new Result(false, "班级id不能为空");
- }
- //课程
- List<Map<String, Object>> lstSubject = subjectService.clsSubjectlist(classId, null, null);
- //组装的学期和课程
- List<Map<String, Object>> lstTerm = subjectService.termSubjectList(classId, lstSubject);
-
- return new Result(true, "success",CollectionUtils.newObjectMap("termList", lstTerm, "allSubject", lstSubject));
- }
-
- /**
- *
- * 学习端获取课程列表
- *
- */
- @ApiOperation(value = "我的课程按学期分类")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType="query", dataType = "String"),
- })
- @GetMapping(value = "/app/myTermSubjectList")
- public Result myTermSubjectList(String classId) {
- classId = CommonUtils.getClassId(classId);
- System.out.println("vvvvvvvvv"+classId);
- if(StringUtils.isEmpty(classId)) {
- return new Result(false, "班级id不能为空");
- }
- return new Result(true, "success",subjectService.myTermSubjectList(classId));
- }
-
- /**
- *
- * 学习端获取课程列表
- *
- */
- @ApiOperation(value = "我的课程按时间排序")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType="query", dataType = "String"),
- })
- @GetMapping(value = "/app/mySubjectList")
- public Result mySubjectList(String classId, Pager pager ) {
-// System.out.println("0.0.0.0"+classId);
- classId = CommonUtils.getClassId(classId);
- long count = subjectService.myClsSubjectCount(classId);
- return new Result(true, "success",
- CollectionUtils.newObjectMap("count", count, "listData", subjectService.mySubjectList(classId, pager)));
- }
-
- /**
- * 我的课程详情
- *
- * @param subjectId
- * @param classId
- * @return
- */
- @ApiOperation(value = "我的课程详情")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "subjectId", value = "课程id", required = true, paramType="query", dataType = "String"),
- @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType="query", dataType = "String"),
- })
- @GetMapping(value = "/app/mySubjectInfo")
- public Result mySubjectInfo(String subjectId, String classId) {
- classId = CommonUtils.getClassId(classId);
- if(StringUtils.isEmpty(classId)) {
- return new Result(false, "班级id不能为空");
- }
- if(StringUtils.isEmpty(subjectId)) {
- return new Result(false, "课程id不能为空");
- }
- return new Result(true, "success", subjectService.mySubjectInfo(subjectId, classId));
- }
-
- /**
- *
- * 学习端获取课程列表
- *
- */
- @ApiOperation(value = "我的班级信息")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType="query", dataType = "String"),
- })
- @GetMapping(value = "/app/myClassInfo")
- public Result myClassInfo(String classId) {
- classId = ClientUtils.getClassId();
- if(StringUtils.isEmpty(classId)) {
- return new Result(false, "班级id不能为空");
- }
- return new Result(true, "success",subjectService.myClassInfo(classId));
- }
-
- /**
- *
- * 学习端获取课程列表
- *
- */
- @ApiOperation(value = "学习端获取课程列表")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType="query", dataType = "String"),
- @ApiImplicitParam(name = "schoolYear", value = "学年", required = true, paramType="query", dataType = "String"),
- @ApiImplicitParam(name = "term", value = "学期", required = true, paramType="query", dataType = "String")
- })
- @GetMapping(value = "/app/subjectList")
- public Result subjectList(String classId, Integer schoolYear, Integer term) {
- return new Result(true, "success",subjectService.clsSubjectlist(CommonUtils.getClassId(classId), schoolYear, term));
- }
-
- /**
- *
- * 学习端获取课程列表
- *
- */
- @ApiOperation(value = "学习端获取课程下课件,按创建时间排序")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "subjectId", value = "课程id", required = true, paramType="query", dataType = "String"),
- @ApiImplicitParam(name = "sort", value = "排序方式(desc从大到小,asc从小到大)", required = false, paramType="query", dataType = "String"),
- })
- @GetMapping(value = "/app/listLectureBySubject")
- public Result listLectureBySubject(String subjectId, String classId, @RequestParam(defaultValue="desc")String sort, Pager pager) {
- return new Result(true, "success",clsLectureService.listLectureBySubjectOrderCreateTime(subjectId, CommonUtils.getClassId(classId), sort, pager));
- }
-
- /**
- *
- * 学习端获取其他课件统计
- *
- */
- @ApiOperation(value = "学习端获取其他课件统计")
- @GetMapping(value = "/app/otherLectureCount")
- public Result otherLectureCount() {
- return new Result(true, "success", CollectionUtils.newObjectMap("topicCount",
- topicService.getClassTopicCount(ClientUtils.getClassId()), "evaluate", this.evaluateService.queryStuEvaluateCount()));
- }
-
- /**
- *
- * 学习端获取课程列表
- *
- */
- @ApiOperation(value = "学习端获取课程下课件,按目录分类", notes = "")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType="query", dataType = "String"),
- @ApiImplicitParam(name = "subjectId", value = "课程id", required = true, paramType="query", dataType = "String"),
- @ApiImplicitParam(name = "type", value = "课件类型", required = false, paramType="query", dataType = "String")
- })
- @GetMapping(value = "/app/coursewareList")
- public Result coursewareList(String classId,String subjectId, String type) {
- classId = CommonUtils.getClassId(classId);
-
- if(StringUtils.isEmpty(subjectId)) {
- return new Result(false, "课程id不能为空");
- }
-
- return this.clsLectureService.coursewareChapterList(classId, subjectId, type);
-
- }
-
- /**
- * 我的公开课列表
+ /**
+ * 学习端获取 所有课件
*
- */
+ * @param classId
+ * @return 状态说明(0, 视频 。 1, 音频 。 2, 文档 。 3, 练习 。)
+ */
+ @ApiOperation(value = "获取班级所有课件-学习端", notes = "状态说明(0,视频。1,音频。2,文档。3,练习。)")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType = "query", dataType = "String"),
+ @ApiImplicitParam(name = "sort", value = "排序方式(desc从大到小,asc从小到大)", required = false, paramType = "query", dataType = "String"),
+ })
+ @GetMapping(value = "/app/getCoursewareLstByClassId")
+ public Result appCoursewareLst(String classId, @RequestParam(defaultValue = "desc") String sort, Pager pager) {
+ System.out.println(classId);
+ return clsLectureService.listSubjectLecture(CommonUtils.getClassId(classId), sort, pager);
+ }
+
+ /**
+ * 学习端获取课程列表
+ */
+ @ApiOperation(value = "学习端获取课程学年列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType = "query", dataType = "String"),
+ })
+ @GetMapping(value = "/app/termList")
+ public Result termList(String classId) {
+ classId = CommonUtils.getClassId(classId);
+ if (StringUtils.isEmpty(classId)) {
+ return new Result(false, "班级id不能为空");
+ }
+ //课程
+ List<Map<String, Object>> lstSubject = subjectService.clsSubjectlist(classId, null, null);
+ //组装的学期和课程
+ List<Map<String, Object>> lstTerm = subjectService.termSubjectList(classId, lstSubject);
+
+ return new Result(true, "success", CollectionUtils.newObjectMap("termList", lstTerm, "allSubject", lstSubject));
+ }
+
+ /**
+ * 学习端获取课程列表
+ */
+ @ApiOperation(value = "我的课程按学期分类")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType = "query", dataType = "String"),
+ })
+ @GetMapping(value = "/app/myTermSubjectList")
+ public Result myTermSubjectList(String classId) {
+ classId = CommonUtils.getClassId(classId);
+ System.out.println("vvvvvvvvv" + classId);
+ if (StringUtils.isEmpty(classId)) {
+ return new Result(false, "班级id不能为空");
+ }
+ return new Result(true, "success", subjectService.myTermSubjectList(classId));
+ }
+
+ /**
+ * 学习端获取课程列表
+ */
+ @ApiOperation(value = "我的课程按时间排序")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType = "query", dataType = "String"),
+ })
+ @GetMapping(value = "/app/mySubjectList")
+ public Result mySubjectList(String classId, Pager pager) {
+// System.out.println("0.0.0.0"+classId);
+ classId = CommonUtils.getClassId(classId);
+ long count = subjectService.myClsSubjectCount(classId);
+ return new Result(true, "success",
+ CollectionUtils.newObjectMap("count", count, "listData", subjectService.mySubjectList(classId, pager)));
+ }
+
+ /**
+ * 我的课程详情
+ *
+ * @param subjectId
+ * @param classId
+ * @return
+ */
+ @ApiOperation(value = "我的课程详情")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "subjectId", value = "课程id", required = true, paramType = "query", dataType = "String"),
+ @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType = "query", dataType = "String"),
+ })
+ @GetMapping(value = "/app/mySubjectInfo")
+ public Result mySubjectInfo(String subjectId, String classId) {
+ classId = CommonUtils.getClassId(classId);
+ if (StringUtils.isEmpty(classId)) {
+ return new Result(false, "班级id不能为空");
+ }
+ if (StringUtils.isEmpty(subjectId)) {
+ return new Result(false, "课程id不能为空");
+ }
+ return new Result(true, "success", subjectService.mySubjectInfo(subjectId, classId));
+ }
+
+ /**
+ * 学习端获取课程列表
+ */
+ @ApiOperation(value = "我的班级信息")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType = "query", dataType = "String"),
+ })
+ @GetMapping(value = "/app/myClassInfo")
+ public Result myClassInfo(String classId) {
+ classId = ClientUtils.getClassId();
+ if (StringUtils.isEmpty(classId)) {
+ return new Result(false, "班级id不能为空");
+ }
+ return new Result(true, "success", subjectService.myClassInfo(classId));
+ }
+
+ /**
+ * 学习端获取课程列表
+ */
+ @ApiOperation(value = "学习端获取课程列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType = "query", dataType = "String"),
+ @ApiImplicitParam(name = "schoolYear", value = "学年", required = true, paramType = "query", dataType = "String"),
+ @ApiImplicitParam(name = "term", value = "学期", required = true, paramType = "query", dataType = "String")
+ })
+ @GetMapping(value = "/app/subjectList")
+ public Result subjectList(String classId, Integer schoolYear, Integer term) {
+ return new Result(true, "success", subjectService.clsSubjectlist(CommonUtils.getClassId(classId), schoolYear, term));
+ }
+
+ /**
+ * 学习端获取课程列表
+ */
+ @ApiOperation(value = "学习端获取课程下课件,按创建时间排序")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "subjectId", value = "课程id", required = true, paramType = "query", dataType = "String"),
+ @ApiImplicitParam(name = "sort", value = "排序方式(desc从大到小,asc从小到大)", required = false, paramType = "query", dataType = "String"),
+ })
+ @GetMapping(value = "/app/listLectureBySubject")
+ public Result listLectureBySubject(String subjectId, String classId, @RequestParam(defaultValue = "desc") String sort, Pager pager) {
+ return new Result(true, "success", clsLectureService.listLectureBySubjectOrderCreateTime(subjectId, CommonUtils.getClassId(classId), sort, pager));
+ }
+
+ /**
+ * 学习端获取其他课件统计
+ */
+ @ApiOperation(value = "学习端获取其他课件统计")
+ @GetMapping(value = "/app/otherLectureCount")
+ public Result otherLectureCount() {
+ return new Result(true, "success", CollectionUtils.newObjectMap("topicCount",
+ topicService.getClassTopicCount(ClientUtils.getClassId()), "evaluate", this.evaluateService.queryStuEvaluateCount()));
+ }
+
+ /**
+ * 学习端获取课程列表
+ */
+ @ApiOperation(value = "学习端获取课程下课件,按目录分类", notes = "")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType = "query", dataType = "String"),
+ @ApiImplicitParam(name = "subjectId", value = "课程id", required = true, paramType = "query", dataType = "String"),
+ @ApiImplicitParam(name = "type", value = "课件类型", required = false, paramType = "query", dataType = "String")
+ })
+ @GetMapping(value = "/app/coursewareList")
+ public Result coursewareList(String classId, String subjectId, String type) {
+ classId = CommonUtils.getClassId(classId);
+
+ if (StringUtils.isEmpty(subjectId)) {
+ return new Result(false, "课程id不能为空");
+ }
+
+ return this.clsLectureService.coursewareChapterList(classId, subjectId, type);
+
+ }
+
+ /**
+ * 我的公开课列表
+ */
@ApiOperation(value = "我的公开课列表", notes = "")
- @GetMapping(value = "/app/myOpenSubjectList")
- public Result myOpenSubjectList(Pager pager, @RequestParam(defaultValue = "")String keyword) {
- return new Result(true, "success", this.subjectService.myOpenSubjectList(pager.getOffset(), pager.getPageSize(), keyword));
- }
+ @GetMapping(value = "/app/myOpenSubjectList")
+ public Result myOpenSubjectList(Pager pager, @RequestParam(defaultValue = "") String keyword) {
+ return new Result(true, "success", this.subjectService.myOpenSubjectList(pager.getOffset(), pager.getPageSize(), keyword));
+ }
/**
* 公开课列表
- *
- */
+ */
@ApiOperation(value = "公开课列表", notes = "")
- @GetMapping(value = "/app/openSubjectList")
- public Result openSubjectList(Pager pager, @RequestParam(defaultValue = "")String keyword) {
- return new Result(true, "success", this.subjectService.openSubjectList(pager.getOffset(), pager.getPageSize(), keyword));
- }
+ @GetMapping(value = "/app/openSubjectList")
+ public Result openSubjectList(Pager pager, @RequestParam(defaultValue = "") String keyword) {
+ return new Result(true, "success", this.subjectService.openSubjectList(pager.getOffset(), pager.getPageSize(), keyword));
+ }
/**
* 公开课详情
- *
*/
@ApiOperation(value = "公开课详情", notes = "")
- @GetMapping(value = "/app/openSubjectInfo")
- public Result openSubjectInfo(@RequestParam(defaultValue = "")String subjectId) {
- return new Result(true, "success", this.subjectService.openSubjectInfo(subjectId));
- }
+ @GetMapping(value = "/app/openSubjectInfo")
+ public Result openSubjectInfo(@RequestParam(defaultValue = "") String subjectId) {
+ return new Result(true, "success", this.subjectService.openSubjectInfo(subjectId));
+ }
- //--------------------------------------------------------后台端接口---------------------------------------------------------------------------------------------------
+ //--------------------------------------------------------后台端接口---------------------------------------------------------------------------------------------------
- /**
- * 加载课件tree
- */
- @ApiOperation(value = "加载课件tree", notes = "")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "subjectId", value = "班级id", required = false, paramType="query", dataType = "String")
- })
- @GetMapping(value = "categoryTree")
- public Result categoryTree(String subjectId, String parentId) {
+ /**
+ * 加载课件tree
+ */
+ @ApiOperation(value = "加载课件tree", notes = "")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "subjectId", value = "班级id", required = false, paramType = "query", dataType = "String")
+ })
+ @GetMapping(value = "categoryTree")
+ public Result categoryTree(String subjectId, String parentId) {
// classId = StringUtils.isEmpty(classId)?ClientUtils.getClassId():classId;
- List<SubjectProgressTreeV> chapterLst = clsLectureService.getChapterTreeVList(subjectId, parentId);
+ List<SubjectProgressTreeV> chapterLst = clsLectureService.getChapterTreeVList(subjectId, parentId);
- for (SubjectProgressTreeV v : chapterLst) {
- v.setNodeName(v.getNodeName() + "(" + String.format("%.2f", v.getPercent()*100) + "%)"); //保留两位小数
- }
+ for (SubjectProgressTreeV v : chapterLst) {
+ v.setNodeName(v.getNodeName() + "(" + String.format("%.2f", v.getPercent() * 100) + "%)"); //保留两位小数
+ }
- return new Result(true, "success", QBeanUtils.listBean2ListMap(chapterLst, CollectionUtils
- .newStringMap("nodeName", "name", "id.nodeId", "id", "parentId", "parentId", "percent", "percent")));
- }
+ return new Result(true, "success", QBeanUtils.listBean2ListMap(chapterLst, CollectionUtils
+ .newStringMap("nodeName", "name", "id.nodeId", "id", "parentId", "parentId", "percent", "percent")));
+ }
- /**
- * 学习端获取 所有课件
- *
- * @param classId
- * @return 状态说明(0,视频。1,音频。2,文档。3,练习。)
- */
- @ApiOperation(value = "学习端获取 所有课件", notes = "状态说明(0,视频。1,音频。2,文档。3,练习。)")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "subjectId", value = "班级id", required = false, paramType="query", dataType = "String")
- })
- @GetMapping(value = "getCoursewareLstByClassId")
- public Result getCoursewareLst(String subjectId) {
- List<ClsSubjectLecture> lectureLst = clsLectureService.listLecture(subjectId);
+ /**
+ * 学习端获取 所有课件
+ *
+ * @param classId
+ * @return 状态说明(0, 视频 。 1, 音频 。 2, 文档 。 3, 练习 。)
+ */
+ @ApiOperation(value = "学习端获取 所有课件", notes = "状态说明(0,视频。1,音频。2,文档。3,练习。)")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "subjectId", value = "班级id", required = false, paramType = "query", dataType = "String")
+ })
+ @GetMapping(value = "getCoursewareLstByClassId")
+ public Result getCoursewareLst(String subjectId) {
+ List<ClsSubjectLecture> lectureLst = clsLectureService.listLecture(subjectId);
- // id为小节id //返回的数据按照tree的小节排序
- return new Result(true, "success",
+ // id为小节id //返回的数据按照tree的小节排序
+ return new Result(true, "success",
- QBeanUtils.listBean2ListMap(lectureLst, CollectionUtils.newStringMap("name", "name", "lectureId", "id",
- "lectureType", "type", "chapterId", "chapterId")));
- }
+ QBeanUtils.listBean2ListMap(lectureLst, CollectionUtils.newStringMap("name", "name", "lectureId", "id",
+ "lectureType", "type", "chapterId", "chapterId")));
+ }
- /**
- * 获取课件列表
- *
- * @param chapterId
- * 章节id
- * @param type
- * 课件类型
- * @param keyword
- * 搜索关键字
- * @param limit
- * 每页显示几条
- * @param pageNum
- * 页码
- * @return 状态说明(0,视频。1,音频。2,文档。3,练习。)
- */
- @ApiOperation(value = "根据章节获取课件列表", notes = "状态说明(0,视频。1,音频。2,文档。3,练习。)")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "chapterId", value = "章节id", required = true, paramType="query", dataType = "String"),
- @ApiImplicitParam(name = "type", value = "课件类型", required = false, paramType="query", dataType = "String")
- })
- @GetMapping(value = "coursewareListByChapterId")
- public Result coursewareList(String chapterId, String type, String keyword, Integer limit, @RequestParam(defaultValue="1")Integer pageNum) {
+ /**
+ * 获取课件列表
+ *
+ * @param chapterId 章节id
+ * @param type 课件类型
+ * @param keyword 搜索关键字
+ * @param limit 每页显示几条
+ * @param pageNum 页码
+ * @return 状态说明(0, 视频 。 1, 音频 。 2, 文档 。 3, 练习 。)
+ */
+ @ApiOperation(value = "根据章节获取课件列表", notes = "状态说明(0,视频。1,音频。2,文档。3,练习。)")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "chapterId", value = "章节id", required = true, paramType = "query", dataType = "String"),
+ @ApiImplicitParam(name = "type", value = "课件类型", required = false, paramType = "query", dataType = "String")
+ })
+ @GetMapping(value = "coursewareListByChapterId")
+ public Result coursewareList(String chapterId, String type, String keyword, Integer limit, @RequestParam(defaultValue = "1") Integer pageNum) {
- List<MyLectureV> lectures = clsLectureService.listLectureV(ClientUtils.getUserId(), chapterId, keyword, limit,
- pageNum, type);
+ List<MyLectureV> lectures = clsLectureService.listLectureV(ClientUtils.getUserId(), chapterId, keyword, limit,
+ pageNum, type);
- return new Result(true, "success",
- CollectionUtils.newObjectMap("coursewareLst",
- QBeanUtils.listBean2ListMap(lectures,
- CollectionUtils.newStringMap("lectureName", "name", "id.lectureId", "id", "lectureType",
- "type", "lectureUpdateTime", "endUpdateTime", "percent", "percent"))));
+ return new Result(true, "success",
+ CollectionUtils.newObjectMap("coursewareLst",
+ QBeanUtils.listBean2ListMap(lectures,
+ CollectionUtils.newStringMap("lectureName", "name", "id.lectureId", "id", "lectureType",
+ "type", "lectureUpdateTime", "endUpdateTime", "percent", "percent"))));
- }
+ }
- /**
- * 课件学习进度提交 stu/subject/study
- *
- * @param lectureId
- * 课件id
- * @param from
- * 开始学习位置 ,如视频,则为时分秒(00:10:12),如文档,则无需提交该参数
- * @param to
- * 结束学习位置,同to
- */
- @ApiOperation(value = "提交学习进度")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "lectureId", value = "课件id", required = true, paramType="query", dataType = "String"),
- @ApiImplicitParam(name = "from", value = "开始学习位置 ,如视频,则为时分秒(00:10:12),如文档,则无需提交该参数", required = true, paramType="query", dataType = "Double"),
- @ApiImplicitParam(name = "to", value = "结束学习位置,同to", required = true, paramType="query", dataType = "Double"),
- @ApiImplicitParam(name = "subjectId", value = "课程id", required = true, paramType="query", dataType = "String"),
- @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType="query", dataType = "String"),
- @ApiImplicitParam(name = "lectureParentId", value = "父课件id", required = false, paramType="query", dataType = "String"),
- })
- @GetMapping(value = "study")
- public Result study(String lectureId, @RequestParam(defaultValue = "1") Double from,
- @RequestParam(defaultValue = "0") Double to, String subjectId, String classId, String lectureParentId) {
- String userId = ClientUtils.getUserId();
- classId = CommonUtils.getClassId(classId);
- progressDao.putStudyById(userId, subjectId, lectureId, lectureParentId, classId);// 记录学员每个课程的学习位置;
- progressDao.putStudyByUserId(userId, subjectId, lectureId, lectureParentId, classId);// 记录学员上次学习的位置;
- return clsLectureService.doStudy(lectureId, from, to);
- }
+ /**
+ * 课件学习进度提交 stu/subject/study
+ *
+ * @param lectureId 课件id
+ * @param from 开始学习位置 ,如视频,则为时分秒(00:10:12),如文档,则无需提交该参数
+ * @param to 结束学习位置,同to
+ */
+ @ApiOperation(value = "提交学习进度")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "lectureId", value = "课件id", required = true, paramType = "query", dataType = "String"),
+ @ApiImplicitParam(name = "from", value = "开始学习位置 ,如视频,则为时分秒(00:10:12),如文档,则无需提交该参数", required = true, paramType = "query", dataType = "Double"),
+ @ApiImplicitParam(name = "to", value = "结束学习位置,同to", required = true, paramType = "query", dataType = "Double"),
+ @ApiImplicitParam(name = "subjectId", value = "课程id", required = true, paramType = "query", dataType = "String"),
+ @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType = "query", dataType = "String"),
+ @ApiImplicitParam(name = "lectureParentId", value = "父课件id", required = false, paramType = "query", dataType = "String"),
+ })
+ @GetMapping(value = "study")
+ public Result study(String lectureId, @RequestParam(defaultValue = "1") Double from,
+ @RequestParam(defaultValue = "0") Double to, String subjectId, String classId, String lectureParentId) {
+ String userId = ClientUtils.getUserId();
+ classId = CommonUtils.getClassId(classId);
+ progressDao.putStudyById(userId, subjectId, lectureId, lectureParentId, classId);// 记录学员每个课程的学习位置;
+ progressDao.putStudyByUserId(userId, subjectId, lectureId, lectureParentId, classId);// 记录学员上次学习的位置;
+ return clsLectureService.doStudy(lectureId, from, to);
+ }
- /**
- * 音频时长提交 stu/subject/submitAudioDuration
- *
- * @param lectureId
- * 课件id
- * @param seconds
- * 时长
- */
- @ApiOperation(value = "音频时长提交")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "lectureId", value = "课件id", required = true, paramType="query", dataType = "String"),
- @ApiImplicitParam(name = "seconds", value = "时长", required = true, paramType="query", dataType = "Double")
- })
- @CacheEvict(value = "LectureAudioV", key = "#lectureId")
- @GetMapping(value = "submitAudioDuration")
- public Result submitAudioDuration(String lectureId, double seconds) {
+ /**
+ * 音频时长提交 stu/subject/submitAudioDuration
+ *
+ * @param lectureId 课件id
+ * @param seconds 时长
+ */
+ @ApiOperation(value = "音频时长提交")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "lectureId", value = "课件id", required = true, paramType = "query", dataType = "String"),
+ @ApiImplicitParam(name = "seconds", value = "时长", required = true, paramType = "query", dataType = "Double")
+ })
+ @CacheEvict(value = "LectureAudioV", key = "#lectureId")
+ @GetMapping(value = "submitAudioDuration")
+ public Result submitAudioDuration(String lectureId, double seconds) {
- LectureAudioV audio = lectureService.readAudioLecture(lectureId);
+ LectureAudioV audio = lectureService.readAudioLecture(lectureId);
- return audioService.updateDuration(audio.getAudioId(), (int) seconds);
+ return audioService.updateDuration(audio.getAudioId(), (int) seconds);
- }
+ }
- /**
- * 课程列表
- *
- * @param clssId
- * 班级id
- * @param startTime
- * 开班时间
- */
- @ApiOperation(value = "课程列表")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType="query", dataType = "String"),
- @ApiImplicitParam(name = "startTime", value = "开班时间", required = false, paramType="query", dataType = "String")
- })
- @GetMapping(value = "getSubjectLst")
- public Result getList(String userId,String classId, String startTime, Integer limit, @RequestParam(defaultValue="1")Integer pageNum, HttpServletRequest request) {
- userId = StringUtils.isEmpty(userId)?ClientUtils.getUserId():userId;
- if(userId == null || userId == ""){
- userId = ClientUtils.getUserId();
- }
- classId = StringUtils.isEmpty(classId)?ClientUtils.getClassId():classId;
- List<MySubjectV> result = subjectService.listMySubjectV(classId,userId);
- return new Result(true, "success",
- QBeanUtils.listBean2ListMap(result,
- CollectionUtils.newStringMap("id.subjectId", "subjectId", "id.classId", "classId",
- "subjectName", "subjectName,coursewareName", "percent", "percent", "progressValue",
- "studyTime", "coverPageUrl", "coverPageUrl")));
- }
+ /**
+ * 课程列表
+ *
+ * @param clssId 班级id
+ * @param startTime 开班时间
+ */
+ @ApiOperation(value = "课程列表")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType = "query", dataType = "String"),
+ @ApiImplicitParam(name = "startTime", value = "开班时间", required = false, paramType = "query", dataType = "String")
+ })
+ @GetMapping(value = "getSubjectLst")
+ public Result getList(String userId, String classId, String startTime, Integer limit, @RequestParam(defaultValue = "1") Integer pageNum, HttpServletRequest request) {
+ userId = StringUtils.isEmpty(userId) ? ClientUtils.getUserId() : userId;
+ classId = StringUtils.isEmpty(classId) ? ClientUtils.getClassId() : classId;
+ List<MySubjectV> resultMs = subjectService.listMySubjectV(classId, userId);
+ List<MySubjectV> result = new ArrayList<>();
+ List<Object> lecurelist = new ArrayList<>();
+ int i = 0;
+ for(MySubjectV ms : resultMs){
+ SubjectUtils subjectUtils = new SubjectUtils();
+ List<MyLectureV> myLectureVList = lectureService.listLectureVBySubjectId(userId, ms.getId().getSubjectId(), "", 1000, 1, null);
+ Double percent = 0.0;
+ Double progressValue = 0.0;
+ Double percentAvg = 0.0;
+ if(!myLectureVList.isEmpty()) {
+ for (MyLectureV myLectureV : myLectureVList) {
+ if (myLectureV.getPercent() != null && myLectureV.getProgressValue() != null) {
+ percent += myLectureV.getPercent();
+ progressValue += myLectureV.getProgressValue().intValue();
+ }
+ }
+ percentAvg = percent / myLectureVList.size();
+ if (percentAvg.isNaN()) {
+ percentAvg = 0.0;
+ }
+ subjectUtils.setCoursewareName(myLectureVList.get(0).getLectureName());
+ subjectUtils.setSubjectId(myLectureVList.get(0).getSubjectId());
+ subjectUtils.setPercent(new BigDecimal(percentAvg));
+ subjectUtils.setStudyTime(new BigDecimal(progressValue));
+ }else {
+ subjectUtils.setCoursewareName(null);
+ subjectUtils.setSubjectId(ms.getId().getSubjectId());
+ subjectUtils.setPercent(new BigDecimal(percentAvg));
+ subjectUtils.setStudyTime(new BigDecimal(progressValue));
+ }
+ result.add(ms);
+ lecurelist.add(subjectUtils);
+ }
+ return new Result(true, "success",
+ CollectionUtils.newObjectMap("subjectList",
+ QBeanUtils.listBean2ListMap(result,
+ CollectionUtils.newStringMap("id.subjectId", "subjectId", "id.classId", "classId",
+ "subjectName", "subjectName", "percent", "percent", "progressValue",
+ "studyTime", "coverPageUrl", "coverPageUrl")),"lecurelist",lecurelist));
+ }
- /**
- * 进入课程
- *
- * @param subjectId
- * 课程id
- */
- @ApiOperation(value = "课程详情")
- @ApiImplicitParams({
- @ApiImplicitParam(name = "subjectId", value = "课程id", required = false, paramType="query", dataType = "String")
- })
- @GetMapping(value = "getSubjectDetail")
- public Result getSubjectDetail(String subjectId) {
- MySubjectV subject = subjectService.getMy1stSubjectVById(subjectId);
+ /**
+ * 进入课程
+ *
+ * @param subjectId 课程id
+ */
+ @ApiOperation(value = "课程详情")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "subjectId", value = "课程id", required = false, paramType = "query", dataType = "String")
+ })
+ @GetMapping(value = "getSubjectDetail")
+ public Result getSubjectDetail(String subjectId) {
+ MySubjectV subject = subjectService.getMy1stSubjectVById(subjectId);
- List<Map<String, Object>> progressLst = subjectService.listChapterStudyProgress(subjectId);
+ List<Map<String, Object>> progressLst = subjectService.listChapterStudyProgress(subjectId);
+ List<MyLectureV> myLectureVList = lectureService.listLectureVBySubjectId(ClientUtils.getUserId(), subjectId, "", 1000, 1, null);
+ Double percent = 0.0;
+ Double progressValue = 0.0;
+ String coursewareName = null;
+ if(!myLectureVList.isEmpty()) {
+ for (MyLectureV myLectureV : myLectureVList) {
+ if (myLectureV.getPercent() != null && myLectureV.getProgressValue() != null) {
+ percent += myLectureV.getPercent();
+ progressValue += myLectureV.getProgressValue().intValue();
+ }
+ }
+ Double percentAvg = percent / myLectureVList.size();
+ if (percentAvg.isNaN()) {
+ percentAvg = 0.0;
+ }
+ subject.setPercent(percentAvg);
+ subject.setProgressValue(new BigDecimal(progressValue));
+ progressLst.get(0).put("percent", subject.getPercent());
+ progressLst.get(0).put("studyTime", subject.getProgressValue());
+ coursewareName = myLectureVList.get(0).getLectureName();
+ }else {
- return new Result(true, "success",
- CollectionUtils.newObjectMap("subject", QBeanUtils.bean2Map(subject,
- CollectionUtils.newStringMap("subjectName", "subjectName", "id.subjectId", "subjectId",
- "progressValue", "studyTime", "percent", "percent", "coverPageUrl", "coverPageUrl")),
- "chapterLst",progressLst));
- }
+ }
+ return new Result(true, "success",
+ CollectionUtils.newObjectMap("subject", QBeanUtils.bean2Map(subject,
+ CollectionUtils.newStringMap("subjectName", "subjectName", "id.subjectId", "subjectId",
+ "progressValue", "studyTime", "percent", "percent", "coverPageUrl", "coverPageUrl")),
+ "chapterLst", progressLst,"coursewareName",coursewareName));
+ }
}
diff --git a/src/main/java/com/qxueyou/scc/sys/utils/AudioUtil.java b/src/main/java/com/qxueyou/scc/sys/utils/AudioUtil.java
new file mode 100644
index 0000000..2f293bc
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/utils/AudioUtil.java
@@ -0,0 +1,103 @@
+package com.qxueyou.scc.sys.utils;
+
+import org.jaudiotagger.audio.AudioFileIO;
+import org.jaudiotagger.audio.mp3.MP3AudioHeader;
+import org.jaudiotagger.audio.mp3.MP3File;
+
+
+import javax.sound.sampled.AudioFormat;
+import javax.sound.sampled.AudioInputStream;
+import javax.sound.sampled.AudioSystem;
+import java.io.File;
+
+public class AudioUtil {
+
+
+
+ /**
+ * 获取语音文件播放时长(秒) 支持wav 格式
+ * @param filePath
+ * @return
+ */
+ public static Float getDuration(String filePath){
+ try{
+
+ File destFile = new File(filePath);
+ AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(destFile);
+ AudioFormat format = audioInputStream.getFormat();
+ long audioFileLength = destFile.length();
+ int frameSize = format.getFrameSize();
+ float frameRate = format.getFrameRate();
+ float durationInSeconds = (audioFileLength / (frameSize * frameRate));
+ return durationInSeconds;
+
+ }catch (Exception e){
+ e.printStackTrace();
+ return 0f;
+ }
+
+ }
+
+ /**
+ * 获取mp3语音文件播放时长(秒) mp3
+ * @param filePath
+ * @return
+ */
+ public static Float getMp3Duration(String filePath){
+
+ try {
+ File mp3File = new File(filePath);
+ MP3File f = (MP3File) AudioFileIO.read(mp3File);
+ MP3AudioHeader audioHeader = (MP3AudioHeader)f.getAudioHeader();
+ return Float.parseFloat(audioHeader.getTrackLength()+"");
+ } catch(Exception e) {
+ e.printStackTrace();
+ return 0f;
+ }
+ }
+
+
+ /**
+ * 获取mp3语音文件播放时长(秒)
+ * @param mp3File
+ * @return
+ */
+ public static Float getMp3Duration(File mp3File){
+
+ try {
+ //File mp3File = new File(filePath);
+ MP3File f = (MP3File) AudioFileIO.read(mp3File);
+ MP3AudioHeader audioHeader = (MP3AudioHeader)f.getAudioHeader();
+ return Float.parseFloat(audioHeader.getTrackLength()+"");
+ } catch(Exception e) {
+ e.printStackTrace();
+ return 0f;
+ }
+ }
+
+
+ /**
+ * 得到pcm文件的毫秒数
+ *
+ * pcm文件音频时长计算
+ * 同图像bmp文件一样,pcm文件保存的是未压缩的音频信息。 16bits 编码是指,每次采样的音频信息用2个字节保存。可以对比下bmp文件用分别用2个字节保存RGB颜色的信息。 16000采样率 是指 1秒钟采样 16000次。常见的音频是44100HZ,即一秒采样44100次。 单声道: 只有一个声道。
+ *
+ * 根据这些信息,我们可以计算: 1秒的16000采样率音频文件大小是 2*16000 = 32000字节 ,约为32K 1秒的8000采样率音频文件大小是 2*8000 = 16000字节 ,约为 16K
+ *
+ * 如果已知录音时长,可以根据文件的大小计算采样率是否正常。
+ * @param filePath
+ * @return
+ */
+ public static long getPCMDurationMilliSecond(String filePath) {
+ File file = new File(filePath);
+
+ //得到多少秒
+ long second = file.length() / 32000 ;
+
+ long milliSecond = Math.round((file.length() % 32000) / 32000.0 * 1000 ) ;
+
+ return second * 1000 + milliSecond;
+ }
+}
+
+
diff --git a/src/main/java/com/qxueyou/scc/sys/utils/VideoUtil.java b/src/main/java/com/qxueyou/scc/sys/utils/VideoUtil.java
new file mode 100644
index 0000000..2bfd73d
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/sys/utils/VideoUtil.java
@@ -0,0 +1,86 @@
+package com.qxueyou.scc.sys.utils;
+
+import com.coremedia.iso.IsoFile;
+
+import java.io.IOException;
+
+
+public class VideoUtil {
+
+
+
+ /**
+ * 获取视频文件的播放长度(mp4、mov格式)
+ * @param videoPath
+ * @return 单位为毫秒
+ */
+ public static long getMp4Duration(String videoPath) throws IOException {
+ IsoFile isoFile = new IsoFile(videoPath);
+ long lengthInSeconds =
+ isoFile.getMovieBox().getMovieHeaderBox().getDuration() /
+ isoFile.getMovieBox().getMovieHeaderBox().getTimescale();
+ return lengthInSeconds;
+ }
+
+
+ /**
+ * 得到语音或视频文件时长,单位秒
+ * @param filePath
+ * @return
+ * @throws IOException
+ */
+ public static long getDuration(String filePath) throws IOException {
+ String format = getVideoFormat(filePath);
+ long result = 0;
+ if("wav".equals(format)){
+ result = AudioUtil.getDuration(filePath).intValue();
+ }else if("mp3".equals(format)){
+ result = AudioUtil.getMp3Duration(filePath).intValue();
+ }else if("m4a".equals(format)) {
+ result = VideoUtil.getMp4Duration(filePath);
+ }else if("mov".equals(format)){
+ result = VideoUtil.getMp4Duration(filePath);
+ }else if("mp4".equals(format)){
+ result = VideoUtil.getMp4Duration(filePath);
+ }
+
+ return result;
+ }
+
+ /**
+ * 得到语音或视频文件时长,单位秒
+ * @param filePath
+ * @return
+ * @throws IOException
+ */
+ public static long getDuration(String filePath,String format) throws IOException {
+ long result = 0;
+ if("wav".equals(format)){
+ result = AudioUtil.getDuration(filePath).intValue();
+ }else if("mp3".equals(format)){
+ result = AudioUtil.getMp3Duration(filePath).intValue();
+ }else if("m4a".equals(format)) {
+ result = VideoUtil.getMp4Duration(filePath);
+ }else if("mov".equals(format)){
+ result = VideoUtil.getMp4Duration(filePath);
+ }else if("mp4".equals(format)){
+ result = VideoUtil.getMp4Duration(filePath);
+ }
+
+ return result;
+ }
+
+
+ /**
+ * 得到文件格式
+ * @param path
+ * @return
+ */
+ public static String getVideoFormat(String path){
+ return path.toLowerCase().substring(path.toLowerCase().lastIndexOf(".") + 1);
+ }
+
+
+}
+
+
diff --git a/src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemAudioService.java b/src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemAudioService.java
index 3f4bcca..01ae2a2 100644
--- a/src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemAudioService.java
+++ b/src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemAudioService.java
@@ -2,9 +2,12 @@
import java.util.Date;
+import com.qxueyou.scc.sys.utils.AudioUtil;
+import com.qxueyou.scc.sys.utils.VideoUtil;
import com.qxueyou.scc.teach.res.model.ResItemVideo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import com.qxueyou.scc.base.model.Result;
@@ -28,16 +31,24 @@
@Autowired
ICacheService cacheService;
+ @Value("${scc.resRootPath}")
+ String resRootPath;
+
@Override
public String add(String fileId, String name) {
ResFile file = fileService.read(fileId);
String mediaVideoId = addVideoConverTask(file);
ResItemAudio audio = new ResItemAudio();
TraceUtils.setCreateTrace(audio);
- audio.setStatus(ResItemAudio.STATUS_LINEUP);
- audio.setFileId(fileId);
- audio.setName(name);
- audio.setMediaVideoId(mediaVideoId);
+ try {
+ audio.setStatus(ResItemAudio.STATUS_LINEUP);
+ audio.setPlayTime(AudioUtil.getMp3Duration(resRootPath+"/"+file.getPath()).intValue());
+ audio.setFileId(fileId);
+ audio.setName(name);
+ audio.setMediaVideoId(mediaVideoId);
+ }catch (Exception e){
+ e.printStackTrace();
+ }
// 将mediaVideoId放进缓存
cacheService.lstRightPush(ResItemVideoService.RES_VIDEO_CONVER_LST, mediaVideoId);
save(audio);
@@ -61,10 +72,16 @@
TraceUtils.setCreateTrace(video);
video.setDeleteFlag(false);
- video.setName(file.getFileName());
- video.setOrigUrl(file.getPath());
- video.setStatus(MediaVideo.STATUS_LINEUP);
- video.setType(MediaVideo.MEDIA_AUDIO);
+ try {
+ video.setDeleteFlag(false);
+ video.setPlayTime((int) VideoUtil.getMp4Duration(resRootPath +"/"+ file.getPath()));
+ video.setName(file.getFileName());
+ video.setOrigUrl(file.getPath());
+ video.setStatus(MediaVideo.STATUS_LINEUP);
+ video.setType(MediaVideo.MEDIA_AUDIO);
+ }catch (Exception e){
+ e.printStackTrace();
+ }
save(video);
diff --git a/src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemVideoService.java b/src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemVideoService.java
index 61b7c15..51f6744 100644
--- a/src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemVideoService.java
+++ b/src/main/java/com/qxueyou/scc/teach/res/service/impl/resitem/ResItemVideoService.java
@@ -1,10 +1,14 @@
package com.qxueyou.scc.teach.res.service.impl.resitem;
+import java.io.File;
import java.util.Date;
+import com.qxueyou.scc.sys.utils.VideoUtil;
+import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
@@ -27,159 +31,169 @@
@Service(value = "ResItemVideoService")
public class ResItemVideoService extends CommonAppService implements IResItemService {
- public static final String RES_VIDEO_CONVER_LST = "RES_VIDEO_CONVER_LST";
+ public static final String RES_VIDEO_CONVER_LST = "RES_VIDEO_CONVER_LST";
- @Autowired
- IFileService fileService;
+ @Autowired
+ IFileService fileService;
- @Autowired
- ICacheService cacheService;
+ @Autowired
+ ICacheService cacheService;
- @Override
- public String add(String fileId, String name) {
+ @Value("${scc.resRootPath}")
+ String resRootPath;
- ResFile file = fileService.read(fileId);
- String mediaVideoId = addVideoConverTask(file);
+ @Override
+ public String add(String fileId, String name) {
+ ResFile file = fileService.read(fileId);
+ String mediaVideoId = addVideoConverTask(file);
- ResItemVideo resVideo = new ResItemVideo();
+ ResItemVideo resVideo = new ResItemVideo();
- TraceUtils.setCreateTrace(resVideo);
+ TraceUtils.setCreateTrace(resVideo);
+ try {
+ resVideo.setFileId(fileId);
+ resVideo.setPlayTime((int) VideoUtil.getMp4Duration(resRootPath +"/"+ file.getPath()));
+ resVideo.setName(name);
+ resVideo.setMediaVideoId(mediaVideoId);
+ resVideo.setStatus(ResItemVideo.STATUS_LINEUP);
+ save(resVideo);
- resVideo.setFileId(fileId);
- resVideo.setName(name);
- resVideo.setMediaVideoId(mediaVideoId);
- resVideo.setStatus(ResItemVideo.STATUS_LINEUP);
- save(resVideo);
+ // 将mediaVideoId放进缓存
+ cacheService.lstRightPush(RES_VIDEO_CONVER_LST, mediaVideoId);
+ }catch (Exception e){
+ e.printStackTrace();
+ }
+ return resVideo.getVideoId();
+ }
- // 将mediaVideoId放进缓存
- cacheService.lstRightPush(RES_VIDEO_CONVER_LST, mediaVideoId);
+ private String addVideoConverTask(ResFile file) {
- return resVideo.getVideoId();
- }
+ MediaVideo video = insertMediaVideo(file);
+ insertMediaVideoConverTask(video);
- private String addVideoConverTask(ResFile file) {
+ return video.getVideoId();
- MediaVideo video = insertMediaVideo(file);
- insertMediaVideoConverTask(video);
+ }
- return video.getVideoId();
+ private MediaVideo insertMediaVideo(ResFile file) {
- }
+ MediaVideo video = new MediaVideo();
- private MediaVideo insertMediaVideo(ResFile file) {
+ TraceUtils.setCreateTrace(video);
- MediaVideo video = new MediaVideo();
+ try {
+ video.setDeleteFlag(false);
+ video.setPlayTime((int) VideoUtil.getMp4Duration(resRootPath +"/"+ file.getPath()));
+ video.setName(file.getFileName());
+ video.setOrigUrl(file.getPath());
+ video.setStatus(MediaVideo.STATUS_LINEUP);
+ video.setType(MediaVideo.MEDIA_VIDEO);
+ }catch (Exception e){
+ e.printStackTrace();
+ }
- TraceUtils.setCreateTrace(video);
+ save(video);
- video.setDeleteFlag(false);
- video.setName(file.getFileName());
- video.setOrigUrl(file.getPath());
- video.setStatus(MediaVideo.STATUS_LINEUP);
- video.setType(MediaVideo.MEDIA_VIDEO);
+ return video;
+ }
- save(video);
+ private Result insertMediaVideoConverTask(MediaVideo resVideo) {
- return video;
- }
+ VideoConverTask task = new VideoConverTask();
- private Result insertMediaVideoConverTask(MediaVideo resVideo) {
+ task.setCreateTime(new Date());
+ task.setDeleteFlag(false);
+ task.setVideoId(resVideo.getVideoId());
+ task.setVideoUrl(resVideo.getOrigUrl());
+ task.setType(MediaVideo.MEDIA_VIDEO);
+ task.setPriority(5);
- VideoConverTask task = new VideoConverTask();
+ save(task);
- task.setCreateTime(new Date());
- task.setDeleteFlag(false);
- task.setVideoId(resVideo.getVideoId());
- task.setVideoUrl(resVideo.getOrigUrl());
- task.setType(MediaVideo.MEDIA_VIDEO);
- task.setPriority(5);
+ return new Result(true);
+ }
- save(task);
+ @Override
+ public Result update(String id, String name) {
- return new Result(true);
- }
+ ResItemVideo video = read(ResItemVideo.class, id);
- @Override
- public Result update(String id, String name) {
+ TraceUtils.setUpdateTrace(video);
- ResItemVideo video = read(ResItemVideo.class, id);
+ video.setName(name);
- TraceUtils.setUpdateTrace(video);
+ save(video);
- video.setName(name);
+ return new Result(true, "success");
+ }
- save(video);
+ @Override
+ public String readAccessPath(String resId, String attribute) {
- return new Result(true, "success");
- }
+ ResItemVideo resItemVideo = read(ResItemVideo.class, resId);
- @Override
- public String readAccessPath(String resId, String attribute) {
-
- ResItemVideo resItemVideo = read(ResItemVideo.class, resId);
-
- if (resItemVideo != null && resItemVideo.getStatus() != ResItemVideo.STATUS_DRAFT) {
- ResFile resFile = read(ResFile.class,resItemVideo.getFileId());
- return resFile.getPath();
+ if (resItemVideo != null && resItemVideo.getStatus() != ResItemVideo.STATUS_DRAFT) {
+ ResFile resFile = read(ResFile.class, resItemVideo.getFileId());
+ return resFile.getPath();
// return null;
- }
+ }
- MediaVideo video = read(MediaVideo.class, resItemVideo.getMediaVideoId());
+ MediaVideo video = read(MediaVideo.class, resItemVideo.getMediaVideoId());
- if (video == null) {
- return null;
- }
+ if (video == null) {
+ return null;
+ }
- return JSONObject.toJSONString(CollectionUtils.newObjectMap("hd",video.getAndroidHD(), "sd", video.getAndroidSD(), "ld", video.getAndroidLD(), "path",StringUtils.isNotEmpty(video.getAndroidHD()) ? video.getAndroidHD()
- : StringUtils.isNotEmpty(video.getAndroidSD()) ? video.getAndroidSD() : video.getAndroidLD()));
+ return JSONObject.toJSONString(CollectionUtils.newObjectMap("hd", video.getAndroidHD(), "sd", video.getAndroidSD(), "ld", video.getAndroidLD(), "path", StringUtils.isNotEmpty(video.getAndroidHD()) ? video.getAndroidHD()
+ : StringUtils.isNotEmpty(video.getAndroidSD()) ? video.getAndroidSD() : video.getAndroidLD()));
- }
+ }
- @Override
- public String getResItemType() {
- return Res.FILE_TYPE_VIDEO;
- }
+ @Override
+ public String getResItemType() {
+ return Res.FILE_TYPE_VIDEO;
+ }
- /**
- * 定时器转码成功后 同步更新ResItemVideo的状态
- */
- @Scheduled(cron = "0/2 * * * * ?") // 每2秒执行一次
- public void doTimer() {
+ /**
+ * 定时器转码成功后 同步更新ResItemVideo的状态
+ */
+ @Scheduled(cron = "0/2 * * * * ?") // 每2秒执行一次
+ public void doTimer() {
- String mediaVideoId = cacheService.lstLeftPop(RES_VIDEO_CONVER_LST);
+ String mediaVideoId = cacheService.lstLeftPop(RES_VIDEO_CONVER_LST);
- if (StringUtils.isBlank(mediaVideoId)) {
- return;
- }
+ if (StringUtils.isBlank(mediaVideoId)) {
+ return;
+ }
- MediaVideo mediaVideo = read(MediaVideo.class, mediaVideoId);
- if (mediaVideo.getStatus() == MediaVideo.STATUS_DRAFT) {
- if (mediaVideo.getType().equals("video")) {
- ResItemVideo resItemVideo = findUnique(
- "from ResItemVideo where deleteFlag is false and mediaVideoId = ?",
- CollectionUtils.newList(mediaVideoId), ResItemVideo.class);
- resItemVideo.setStatus(ResItemVideo.STATUS_DRAFT);
- TraceUtils.setUpdateTrace(resItemVideo);
- resItemVideo.setVideoSeconds(mediaVideo.getPlayTime());
- save(resItemVideo);
+ MediaVideo mediaVideo = read(MediaVideo.class, mediaVideoId);
+ if (mediaVideo.getStatus() == MediaVideo.STATUS_DRAFT) {
+ if (mediaVideo.getType().equals("video")) {
+ ResItemVideo resItemVideo = findUnique(
+ "from ResItemVideo where deleteFlag is false and mediaVideoId = ?",
+ CollectionUtils.newList(mediaVideoId), ResItemVideo.class);
+ resItemVideo.setStatus(ResItemVideo.STATUS_DRAFT);
+ TraceUtils.setUpdateTrace(resItemVideo);
+ resItemVideo.setVideoSeconds(mediaVideo.getPlayTime());
+ save(resItemVideo);
- cacheService.lstRightPush(ResService.RES_TOUPDATE_CONVER_STATUS_LST, resItemVideo.getVideoId());// 将转码完成后的文件id放入缓存。
- return;
- } else if (mediaVideo.getType().equals("audio")) {
- ResItemAudio resItemAudio = findUnique(
- "from ResItemAudio where deleteFlag is false and mediaVideoId = ?",
- CollectionUtils.newList(mediaVideoId), ResItemAudio.class);
- resItemAudio.setStatus(ResItemVideo.STATUS_DRAFT);
- TraceUtils.setUpdateTrace(resItemAudio);
- resItemAudio.setSeconds(mediaVideo.getPlayTime());
- save(resItemAudio);
+ cacheService.lstRightPush(ResService.RES_TOUPDATE_CONVER_STATUS_LST, resItemVideo.getVideoId());// 将转码完成后的文件id放入缓存。
+ return;
+ } else if (mediaVideo.getType().equals("audio")) {
+ ResItemAudio resItemAudio = findUnique(
+ "from ResItemAudio where deleteFlag is false and mediaVideoId = ?",
+ CollectionUtils.newList(mediaVideoId), ResItemAudio.class);
+ resItemAudio.setStatus(ResItemVideo.STATUS_DRAFT);
+ TraceUtils.setUpdateTrace(resItemAudio);
+ resItemAudio.setSeconds(mediaVideo.getPlayTime());
+ save(resItemAudio);
- cacheService.lstRightPush(ResService.RES_TOUPDATE_CONVER_STATUS_LST, resItemAudio.getAudioId());// 将转码完成后的文件id放入缓存。
- return;
- }
+ cacheService.lstRightPush(ResService.RES_TOUPDATE_CONVER_STATUS_LST, resItemAudio.getAudioId());// 将转码完成后的文件id放入缓存。
+ return;
+ }
- }
- cacheService.lstRightPush(RES_VIDEO_CONVER_LST, mediaVideoId);
+ }
+ cacheService.lstRightPush(RES_VIDEO_CONVER_LST, mediaVideoId);
- }
+ }
}
diff --git a/src/main/java/com/qxueyou/scc/teach/subject/model/SubjectUtils.java b/src/main/java/com/qxueyou/scc/teach/subject/model/SubjectUtils.java
new file mode 100644
index 0000000..d217b42
--- /dev/null
+++ b/src/main/java/com/qxueyou/scc/teach/subject/model/SubjectUtils.java
@@ -0,0 +1,46 @@
+package com.qxueyou.scc.teach.subject.model;
+
+import javax.persistence.Entity;
+import java.math.BigDecimal;
+
+/**
+ * 工具类 用来缓存课程信息
+ */
+public class SubjectUtils implements java.io.Serializable {
+ private String subjectId;
+ private BigDecimal percent;
+ private BigDecimal studyTime;
+ private String coursewareName;
+
+ public String getSubjectId() {
+ return subjectId;
+ }
+
+ public void setSubjectId(String subjectId) {
+ this.subjectId = subjectId;
+ }
+
+ public BigDecimal getPercent() {
+ return percent;
+ }
+
+ public void setPercent(BigDecimal percent) {
+ this.percent = percent;
+ }
+
+ public BigDecimal getStudyTime() {
+ return studyTime;
+ }
+
+ public void setStudyTime(BigDecimal studyTime) {
+ this.studyTime = studyTime;
+ }
+
+ public String getCoursewareName() {
+ return coursewareName;
+ }
+
+ public void setCoursewareName(String coursewareName) {
+ this.coursewareName = coursewareName;
+ }
+}
diff --git a/src/main/java/com/qxueyou/scc/teach/subject/model/view/MyLectureV.java b/src/main/java/com/qxueyou/scc/teach/subject/model/view/MyLectureV.java
index 095d320..57880e8 100644
--- a/src/main/java/com/qxueyou/scc/teach/subject/model/view/MyLectureV.java
+++ b/src/main/java/com/qxueyou/scc/teach/subject/model/view/MyLectureV.java
@@ -16,12 +16,14 @@
import org.springframework.format.annotation.DateTimeFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.springframework.transaction.annotation.Transactional;
/**
* MySubjectV generated by hbm2java
*/
@Entity
@Table(name = "my_lecture_v")
+@Transactional(readOnly = true)
public class MyLectureV implements java.io.Serializable {
private static final long serialVersionUID = -332455459706490649L;
diff --git a/src/main/java/com/qxueyou/scc/teach/subject/model/view/MySubjectV.java b/src/main/java/com/qxueyou/scc/teach/subject/model/view/MySubjectV.java
index bce521d..10fd610 100644
--- a/src/main/java/com/qxueyou/scc/teach/subject/model/view/MySubjectV.java
+++ b/src/main/java/com/qxueyou/scc/teach/subject/model/view/MySubjectV.java
@@ -19,7 +19,7 @@
private static final long serialVersionUID = -1272201343379309257L;
private MySubjectVId id;
-
+
private BigDecimal progressValue;
private Double percent;
@@ -29,11 +29,11 @@
private String className;
private String origSubjectId;
private String teacherId;
-
+
private String subjectStatus;
-
+
private Integer schoolYear;
-
+
private Integer term;
private Integer lectureCount;
@@ -67,7 +67,7 @@
public void setId(MySubjectVId id) {
this.id = id;
}
-
+
@Column(name="LECTURE_COUNT")
public Integer getLectureCount() {
return lectureCount;
@@ -103,7 +103,7 @@
public void setProgressValue(BigDecimal progressValue) {
this.progressValue = progressValue;
}
-
+
@Column(name = "PERCENT", nullable = false)
public Double getPercent() {
return this.percent;
@@ -112,7 +112,7 @@
public void setPercent(Double percent) {
this.percent = percent;
}
-
+
@Column(name = "COVER_PAGE_URL", length = 256)
public String getCoverPageUrl() {
return this.coverPageUrl;
@@ -130,7 +130,7 @@
public void setUserName(String userName) {
this.userName = userName;
}
-
+
@Column(name = "SUBJECT_NAME", length = 150)
public String getSubjectName() {
return this.subjectName;
@@ -139,7 +139,7 @@
public void setSubjectName(String subjectName) {
this.subjectName = subjectName;
}
-
+
@Column(name = "CLASS_NAME")
public String getClassName() {
return this.className;
@@ -163,9 +163,9 @@
return subjectStatus;
}
-
+
public void setSubjectStatus(String subjectStatus) {
this.subjectStatus = subjectStatus;
}
-
+
}
diff --git a/src/main/java/com/qxueyou/scc/teach/subject/service/ILectureService.java b/src/main/java/com/qxueyou/scc/teach/subject/service/ILectureService.java
index 7f60922..28dba90 100644
--- a/src/main/java/com/qxueyou/scc/teach/subject/service/ILectureService.java
+++ b/src/main/java/com/qxueyou/scc/teach/subject/service/ILectureService.java
@@ -15,7 +15,7 @@
/**
* 新增章节文件夹
- *
+ *
* @param subjectId
* 课程id
* @param parentChapterId
@@ -28,7 +28,7 @@
/**
* 读取课件目录
- *
+ *
* @param chapterId
* @return
*/
@@ -36,7 +36,7 @@
/**
* 修改章节文件夹
- *
+ *
* @param chapterId
* 文件夹id
* @param name
@@ -47,7 +47,7 @@
/**
* 删除章节文件夹
- *
+ *
* @param chapterIds
* 章节文件夹id数组
* @return 上传结果:{"success":true,msg:"success",attrs:{}}
@@ -56,7 +56,7 @@
/**
* 返回下级章节文件夹列表,如果
- *
+ *
* @param subjectId
* 课程id
* @param parentChapterId
@@ -67,7 +67,7 @@
/**
* 返回下级章节文件夹列表,如果
- *
+ *
* @param subjectId
* 课程id
* @param parentChapterId
@@ -78,7 +78,7 @@
/**
* 返回下级章节文件夹列表
- *
+ *
* @param subjectId
* 课程id
* @param parentChapterId
@@ -89,7 +89,7 @@
/**
* 返回所有章节列表,按createTime排序
- *
+ *
* @param subjectId
* 课程id
* @return 返回章节列表
@@ -98,7 +98,7 @@
/**
* 新增课件
- *
+ *
* @param chapterId
* 章节id
* @param resId
@@ -107,9 +107,14 @@
*/
Result addLecture(String chapterId, String resId);
+
+ /**
+ * 新增后刷新课件
+ */
+ Result addLectureLoad(String sectionId);
/**
* 读取课件
- *
+ *
* @param lectureId
* 课件id
* @return SubjectLecture
@@ -118,7 +123,7 @@
/**
* 读取视频课件
- *
+ *
* @param lectureId
* 课件id
* @return SubjectLecture
@@ -127,7 +132,7 @@
/**
* 读取音频课件
- *
+ *
* @param lectureId
* 课件id
* @return LectureAudioV
@@ -136,7 +141,7 @@
/**
* 修改课件
- *
+ *
* @param lectureId
* 课件id
* @param resId
@@ -147,16 +152,18 @@
/**
* 删除课件
- *
+ *
* @param lectureIds
* 课件id数组
* @return 上传结果:{"success":true,msg:"success",attrs:{}}
*/
Result deleteLecture(String[] lectureIds);
+ Result deleteLectureLoad(String[] lectureIds);
+
/**
* 复制课件
- *
+ *
* @param lectureId
* 课件id
* @param destChapterId
@@ -169,7 +176,7 @@
/**
* 移动课件
- *
+ *
* @param lectureId
* 课件id
* @param destChapterId
@@ -182,7 +189,7 @@
/**
* 课件列表搜索
- *
+ *
* @param chapterId
* 章节id
* @param keyword
@@ -199,7 +206,7 @@
/**
* 课件列表大小
- *
+ *
* @param chapterId
* 章节id
* @param keyword
@@ -212,7 +219,7 @@
/**
* 课件列表搜索
- *
+ *
* @param chapterId
* 章节id
* @param keyword
@@ -230,14 +237,14 @@
/**
* 课件列表搜索
- *
+ *
* @return
*/
List<SubjectLecture> listLectureBySubjectId(String subjectId);
/**
* 读取课件真实文件访问路径
- *
+ *
* @param lectureId
* 课件id数组
* @param attribute
@@ -252,4 +259,17 @@
* 读取文档课件
*/
LectureDocV readDocLecture(String handoutId);
+
+ /**
+ * 课件详情查询
+ * @param learnerId
+ * @param subjectId
+ * @param keyword
+ * @param pageSize
+ * @param pageNum
+ * @param type
+ * @return
+ */
+ List<MyLectureV> listLectureVBySubjectId(String learnerId, String subjectId, String keyword, Integer pageSize,
+ Integer pageNum, String type);
}
diff --git a/src/main/java/com/qxueyou/scc/teach/subject/service/ISubjectService.java b/src/main/java/com/qxueyou/scc/teach/subject/service/ISubjectService.java
index 26c7bf1..779f347 100644
--- a/src/main/java/com/qxueyou/scc/teach/subject/service/ISubjectService.java
+++ b/src/main/java/com/qxueyou/scc/teach/subject/service/ISubjectService.java
@@ -8,12 +8,13 @@
import com.qxueyou.scc.base.model.Result;
import com.qxueyou.scc.teach.subject.model.Subject;
import com.qxueyou.scc.teach.subject.model.view.MySubjectV;
+import org.springframework.transaction.annotation.Transactional;
public interface ISubjectService {
/**
* 新增课程
- *
+ *
* @param subjectName
* 课程名称
* @param coverPageFileId
@@ -26,7 +27,7 @@
/**
* 修改课程
- *
+ *
* @param subjectName
* 课程名称
* @param subjectId
@@ -41,7 +42,7 @@
/**
* 删除课程
- *
+ *
* @param subjectIds
* 课程id数组
* @return 上传结果:{"success":true,msg:"success",attrs:{}}
@@ -50,7 +51,7 @@
/**
* 发布课程
- *
+ *
* @param subjectIds
* 课程id数组
* @return 上传结果:{"success":true,msg:"success",attrs:{}}
@@ -59,7 +60,7 @@
/**
* 撤回课程
- *
+ *
* @param subjectIds
* 课程id数组
* @return 上传结果:{"success":true,msg:"success",attrs:{}}
@@ -68,7 +69,7 @@
/**
* 更新课件数量
- *
+ *
* @param subjectId
* @param count
* @return
@@ -77,7 +78,7 @@
/**
* 查询课程
- *
+ *
* @param text
* 搜索文本
* @param pageSize
@@ -90,7 +91,7 @@
/**
* 查询课程个数
- *
+ *
* @param text
* 搜索文本
* @return 返回课程总数
@@ -99,7 +100,7 @@
/**
* 读取课程
- *
+ *
* @param subjectId
* 课程ID
* @return 返回课程列表
@@ -108,7 +109,7 @@
/**
* 读取课程详情介绍
- *
+ *
* @param subjectId
* 课程ID
* @return 返回课程详情介绍
@@ -117,7 +118,7 @@
/**
* 查询我的课程
- *
+ *
* @param classId
* 班级id
* @return 返回课程列表
@@ -131,7 +132,7 @@
/**
* 查询我的课程
- *
+ *
* @param classId
* 班级id
* @return 返回课程列表
@@ -140,7 +141,7 @@
/**
* 查询个人课程章节的学习进度
- *
+ *
* @param classId
* 班级id
* @return 返回章节学习进度列表
@@ -154,7 +155,7 @@
/**
* 我的活动获取课程完成情况
- *
+ *
* @return
*/
Result getPerformance4Subject();
@@ -166,7 +167,7 @@
/**
* 获取数据排行
- *
+ *
* @return
*/
Result getDataDesc(String classId, String subjectId);
@@ -175,7 +176,7 @@
* 获取上次学习的位置
*/
Result lastStudied(String userId);
-
+
/**
* 添加班级课程
* @param origSubjectId
@@ -183,12 +184,12 @@
* @param schoolYear
* @param term
* @return
- * @throws InvocationTargetException
- * @throws IllegalAccessException
+ * @throws InvocationTargetException
+ * @throws IllegalAccessException
*/
Result addClsSubject(String classId,String origSubjectId, String teacherId, Integer schoolYear, Integer term) throws IllegalAccessException, InvocationTargetException;
-
-
+
+
/**
* 更新班级课程
* @param subjectId
@@ -199,7 +200,7 @@
* @return
*/
Result updateClsSubject(String classId,String subjectId, String origSubjectId, String teacherId, Integer schoolYear, Integer term);
-
+
/**
* 删除班级课程
* @param classId
@@ -207,147 +208,147 @@
* @return
*/
Result deleteClsSubject(String classId, String[] subjectIds);
-
+
/**
* 查询班级课程
- *
+ *
* @param classId
* @param schoolYear
* @param term
* @return
*/
public List<Map<String, Object>> clsSubjectlist(String classId, Integer schoolYear, Integer term);
-
+
/**
* 获取班级学期
- *
+ *
* @param classId
* @return
*/
public List<Map<String,Object>> termList(String classId);
-
+
/**
* 我的课程按学期分类
- *
+ *
* @param classId
* @return
*/
public List<Map<String,Object>> myTermSubjectList(String classId);
-
+
/**
* 我的课程,按时间排序
- *
+ *
* @param classId
* @return
*/
public List<Map<String,Object>> mySubjectList(String classId, Pager pager);
-
+
/**
* 查询老师或管理员可用的课程ID和课程名字列表
* @param teacherId 根据教师ID过滤
* @return
*/
List<Map<String, Object>> queryAvailableSubjectIdAndName(String teacherId,Integer sbujectType);
-
+
/**
* 我的班级信息
- *
+ *
* @param classId
* @return
*/
public Map<String,Object> myClassInfo(String classId);
-
+
/**
* 获取我的课程数量
- *
+ *
* @param classId
* @return
*/
public long myClsSubjectCount(String classId);
-
+
/**
* 获取我的课程进度
- *
+ *
* @param classId
* @param userId
* @return
*/
public List<Map<String,Object>> myClsSubjectlist(String classId, String userId, Pager pager);
-
+
/**
* 学员课程作业进度
- *
+ *
* @param classId
* @param subjectId
* @return
*/
public Map<String, Object> studentSubjectHomeworkProgress(String classId, String subjectId, String userId);
-
+
/**
* 学员考试作业进度
- *
+ *
* @param classId
* @param subjectId
* @return
*/
public Map<String, Object> studentSubjectExamProgress(String classId, String subjectId, String studentId);
-
+
/**
* 获取学员的课程进度
- *
+ *
* @param classId
* @return
*/
public List<Map<String,Object>> studentSubjectProgress(String classId, Pager pager);
-
+
/**
* 班级学员课件总体进度
- *
+ *
* @param subjectId
* @param classId
* @return
*/
public List<Map<String, Object>> studentSubjectLectureProgress(String subjectId, String classId);
-
+
/**
* 我的公开课列表
- *
+ *
* @param pageNum
* @param pageSize
* @param keyword
* @return
*/
public Map<String,Object> myOpenSubjectList(Integer pageNum, Integer pageSize, String keyword);
-
+
/**
* 公开课列表
- *
+ *
* @param pageNum
* @param pageSize
* @param keyword
* @return
*/
public Map<String,Object> openSubjectList(Integer pageNum, Integer pageSize, String keyword);
-
+
/**
* 公开课详情
- *
+ *
* @param subjectId
* @return
*/
public Map<String,Object> openSubjectInfo(String subjectId);
-
+
/**
* 我的课程详情
- *
+ *
* @param classId
* @return
*/
public Map<String,Object> mySubjectInfo(String subjectId, String classId);
-
+
/**
* app教师端课程列表
- *
+ *
* @param text
* @param status
* @param type
@@ -356,26 +357,26 @@
* @return
*/
Result teacherSubjectList(Pager pager, String keyword, String status,Integer type);
-
+
/**
* 课程按学期分类
- *
+ *
* @param classId
* @return
*/
List<Map<String,Object>> termSubjectList(String classId, List<Map<String,Object>> clsSubjectlist);
-
-
+
+
/**
* 查询课程关联的班级信息
* @param origSubjectId
* @return
*/
List<Map<String, Object>> querySubjectReClassInfos(String origSubjectId);
-
+
/**
* 获取课件数量
- *
+ *
* @param subjectId
* @return
*/
diff --git a/src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectLectureService.java b/src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectLectureService.java
index 9fc2b12..b6057e2 100644
--- a/src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectLectureService.java
+++ b/src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectLectureService.java
@@ -2,7 +2,9 @@
import java.util.List;
+import com.qxueyou.scc.admin.classes.model.ClsClassReSubject;
import com.qxueyou.scc.admin.classes.service.IClassLectureService;
+import com.qxueyou.scc.teach.subject.model.Subject;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
@@ -30,6 +32,7 @@
import com.qxueyou.scc.teach.subject.model.view.MyLectureV;
import com.qxueyou.scc.teach.subject.service.ILectureService;
import com.qxueyou.scc.teach.subject.service.ISubjectService;
+import org.springframework.transaction.annotation.Transactional;
@Service
public class SubjectLectureService extends CommonAppService implements ILectureService {
@@ -177,12 +180,26 @@
lecture.setRemark(res.getRemark());
lecture.setSubjectId(chapter.getSubjectId());
lecture.setResItemId(res.getResId());
-
-
save(lecture);
+ subjectService.addLectureCount(lecture.getSubjectId(), 1);
+ return new Result(true, "success");
+ }
- subjectService.addLectureCount(chapter.getSubjectId(), 1);
-
+ @Override
+ public Result addLectureLoad(String sectionId){
+ SubjectChapter chapter = read(SubjectChapter.class, sectionId);
+ String hql = "from Subject where subjectId = ? and deleteFlag is false";
+ String subjectId = chapter.getSubjectId();
+ Subject subjectOne = findUnique(hql,CollectionUtils.newList(subjectId),Subject.class);
+ String hqlOne = "from Subject where name = ? and deleteFlag is false";
+ List<Subject> subjectTwo = find(hqlOne,CollectionUtils.newList(subjectOne.getName()),Subject.class);
+ for (Subject s : subjectTwo){
+ String hqlTwo = "from ClsClassReSubject where subjectId = ? and deleteFlag is false";
+ ClsClassReSubject subject = findUnique(hqlTwo,CollectionUtils.newList(s.getSubjectId()),ClsClassReSubject.class);
+ if(subject != null){
+ subjectService.updateClsSubject(subject.getClassId(),s.getSubjectId(),s.getOrigSubjectId(),s.getTeacherId(),s.getSchoolYear(),s.getTerm());
+ }
+ }
return new Result(true, "success");
}
@@ -209,7 +226,23 @@
for (String lectureId : lectureIds) {
deleteLecture(lectureId);
}
-
+ return new Result(true, "success");
+ }
+ @Override
+ public Result deleteLectureLoad(String[] lectureIds){
+ SubjectLecture lecture = read(SubjectLecture.class, lectureIds[0]);
+ String hql = "from Subject where subjectId = ? and deleteFlag is false";
+ String subjectId = lecture.getSubjectId();
+ Subject subjectOne = findUnique(hql,CollectionUtils.newList(subjectId),Subject.class);
+ String hqlOne = "from Subject where name = ? and deleteFlag is false";
+ List<Subject> subjectTwo = find(hqlOne,CollectionUtils.newList(subjectOne.getName()),Subject.class);
+ for (Subject s : subjectTwo){
+ String hqlTwo = "from ClsClassReSubject where subjectId = ? and deleteFlag is false";
+ ClsClassReSubject subject = findUnique(hqlTwo,CollectionUtils.newList(s.getSubjectId()),ClsClassReSubject.class);
+ if(subject != null){
+ subjectService.updateClsSubject(subject.getClassId(),s.getSubjectId(),s.getOrigSubjectId(),s.getTeacherId(),s.getSchoolYear(),s.getTerm());
+ }
+ }
return new Result(true, "success");
}
@@ -225,7 +258,6 @@
TraceUtils.setUpdateTrace(lecture);
lecture.setDeleteFlag(true);
-
save(lecture);
subjectService.addLectureCount(lecture.getSubjectId(), -1);
@@ -268,6 +300,22 @@
Integer pageNum, String type) {
StringBuffer hql = new StringBuffer("from MyLectureV where chapterId=? and id.userId=?");
List<Object> args = CollectionUtils.newList(chapterId, learnerId);
+
+ if (StringUtils.isNotEmpty(type)) {
+ hql.append(" and lectureType=?");
+ args.add(type);
+ }
+
+ List<MyLectureV> result = findList(hql.toString(), new Pager(pageSize, pageNum), args, MyLectureV.class);
+
+ return result;
+ }
+
+ @Override
+ public List<MyLectureV> listLectureVBySubjectId(String learnerId, String subjectId, String keyword, Integer pageSize,
+ Integer pageNum, String type) {
+ StringBuffer hql = new StringBuffer("from MyLectureV where subjectId=? and id.userId=? order by lectureUpdateTime desc");
+ List<Object> args = CollectionUtils.newList(subjectId, learnerId);
if (StringUtils.isNotEmpty(type)) {
hql.append(" and lectureType=?");
@@ -370,7 +418,7 @@
@Override
public Result doStudy(String lectureId, Double from, Double to) {
String userId = null;
- return progressService.addProgress(Progress.PROGRESS_TYPE_LECTURE, lectureId, from.doubleValue(), to.doubleValue(),
+ return progressService.addProgress(Progress.PROGRESS_TYPE_LECTURE, lectureId, from.intValue(), to.intValue(),
userId);
}
diff --git a/src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java b/src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java
index ab5edb5..0b95484 100644
--- a/src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java
+++ b/src/main/java/com/qxueyou/scc/teach/subject/service/impl/SubjectService.java
@@ -10,6 +10,7 @@
import com.qxueyou.scc.base.model.UserInfoWrapper;
import com.qxueyou.scc.sys.model.CacheParamters;
+import com.qxueyou.scc.teach.subject.model.view.*;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
@@ -61,441 +62,433 @@
import com.qxueyou.scc.teach.subject.model.Subject;
import com.qxueyou.scc.teach.subject.model.SubjectChapter;
import com.qxueyou.scc.teach.subject.model.SubjectLecture;
-import com.qxueyou.scc.teach.subject.model.view.MySubjectV;
-import com.qxueyou.scc.teach.subject.model.view.OpenSubjectV;
-import com.qxueyou.scc.teach.subject.model.view.QMyLectureV;
-import com.qxueyou.scc.teach.subject.model.view.QMySubjectV;
-import com.qxueyou.scc.teach.subject.model.view.QOpenSubjectV;
import com.qxueyou.scc.teach.subject.service.ILectureService;
import com.qxueyou.scc.teach.subject.service.ISubjectService;
import com.qxueyou.scc.user.model.QUser;
import com.qxueyou.scc.user.model.UserTeacher;
+import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletRequest;
@Service
public class SubjectService extends CommonAppService implements ISubjectService {
- private final Logger log = LogManager.getLogger(SubjectService.class);
+ private final Logger log = LogManager.getLogger(SubjectService.class);
- @Autowired
- SubjectDAO subjectDAO;
+ @Autowired
+ SubjectDAO subjectDAO;
- @Autowired
- IFileService fileService;
+ @Autowired
+ IFileService fileService;
- @Autowired
- ILectureService lectureService;
+ @Autowired
+ ILectureService lectureService;
- @Autowired
- IClassLectureService clsLectureService;
+ @Autowired
+ IClassLectureService clsLectureService;
- @Autowired
- IProgressService progressService;
+ @Autowired
+ IProgressService progressService;
- @Autowired
- IExamService examService;
+ @Autowired
+ IExamService examService;
- @Autowired
- IExerciseInfoService exerciseInfoService;
+ @Autowired
+ IExerciseInfoService exerciseInfoService;
- @Autowired
- ProgressDAO progressDao;
+ @Autowired
+ ProgressDAO progressDao;
- @Autowired
- private ITeacherService teacherService;
+ @Autowired
+ private ITeacherService teacherService;
- @Autowired
- private IMediaLiveService mediaLiveService;
+ @Autowired
+ private IMediaLiveService mediaLiveService;
- @Override
- public Result add(String subjectName,String coverPageFileId, String contentFileId,int type) {
+ @Override
+ public Result add(String subjectName, String coverPageFileId, String contentFileId, int type) {
- Subject subject = new Subject();
- if (StringUtils.isNotEmpty(coverPageFileId)) {
- ResFile file = fileService.read(coverPageFileId);
- subject.setCoverPageFileId(coverPageFileId);
- subject.setCoverPageUrl(file.getPath());
- }
+ Subject subject = new Subject();
+ if (StringUtils.isNotEmpty(coverPageFileId)) {
+ ResFile file = fileService.read(coverPageFileId);
+ subject.setCoverPageFileId(coverPageFileId);
+ subject.setCoverPageUrl(file.getPath());
+ }
- TraceUtils.setCreateTrace(subject);
- subject.setContentFileId(contentFileId);
- subject.setName(subjectName);
- subject.setStatus(Subject.STATUS_DRAFT);
- subject.setLectureCount(0);
- subject.setType(type);
- subject.setOrgId(ClientUtils.getOrgId());
+ TraceUtils.setCreateTrace(subject);
+ subject.setContentFileId(contentFileId);
+ subject.setName(subjectName);
+ subject.setStatus(Subject.STATUS_DRAFT);
+ subject.setLectureCount(0);
+ subject.setType(type);
+ subject.setOrgId(ClientUtils.getOrgId());
- save(subject);
+ save(subject);
- //初始化创建 根节点
- SubjectChapter chapter = new SubjectChapter();
- TraceUtils.setCreateTrace(chapter);
- chapter.setName("根节点");
- chapter.setSubjectId(subject.getSubjectId());
- chapter.setParentChapterId(SubjectChapter.ROOT_CHAPTER_ID);
- save(chapter);
+ //初始化创建 根节点
+ SubjectChapter chapter = new SubjectChapter();
+ TraceUtils.setCreateTrace(chapter);
+ chapter.setName("根节点");
+ chapter.setSubjectId(subject.getSubjectId());
+ chapter.setParentChapterId(SubjectChapter.ROOT_CHAPTER_ID);
+ save(chapter);
- return new Result(true,"success",CollectionUtils.newObjectMap("subjectId",subject.getSubjectId()));
- }
+ return new Result(true, "success", CollectionUtils.newObjectMap("subjectId", subject.getSubjectId()));
+ }
- @Override
- public Result update(String subjectId, String subjectName, String coverPageFileId, String contentFileId,int type) {
- Subject subject = read(Subject.class, subjectId);
- if (StringUtils.isNotEmpty(coverPageFileId)) {
- ResFile file = fileService.read(coverPageFileId);
- subject.setCoverPageUrl(file.getPath());
- subject.setCoverPageFileId(coverPageFileId);
- }else{
- subject.setCoverPageUrl(null);
- subject.setCoverPageFileId(null);
- }
+ @Override
+ public Result update(String subjectId, String subjectName, String coverPageFileId, String contentFileId, int type) {
+ Subject subject = read(Subject.class, subjectId);
+ if (StringUtils.isNotEmpty(coverPageFileId)) {
+ ResFile file = fileService.read(coverPageFileId);
+ subject.setCoverPageUrl(file.getPath());
+ subject.setCoverPageFileId(coverPageFileId);
+ } else {
+ subject.setCoverPageUrl(null);
+ subject.setCoverPageFileId(null);
+ }
- TraceUtils.setUpdateTrace(subject);
- subject.setContentFileId(contentFileId);
- subject.setName(subjectName);
- subject.setType(type);
+ TraceUtils.setUpdateTrace(subject);
+ subject.setContentFileId(contentFileId);
+ subject.setName(subjectName);
+ subject.setType(type);
- save(subject);
+ 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()} );
- }
+ //更新所有关联的课程
+ 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");
- }
+ return new Result(true, "success");
+ }
- @Override
- public Result delete(String[] subjectIds) {
- for (String subjectId : subjectIds) {
- deleteSubject(subjectId);
+ @Override
+ 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",
- CollectionUtils.newObjectMap("origSubjectId",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",
+ 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")});
- }
- }
- }
+ if (result != null && result.size() > 0) {
+ for (Map<String, Object> map : result) {
+ this.deleteClsSubject((String) map.get("classId"), new String[]{(String) map.get("subjectId")});
+ }
+ }
+ }
- return new Result(true, "success");
- }
+ return new Result(true, "success");
+ }
- /**
- * 删除单个课程
- *
- * @param chapterId
- * 章节id
- * @return
- */
- private Result deleteSubject(String subjectId) {
+ /**
+ * 删除单个课程
+ *
+ * @param chapterId 章节id
+ * @return
+ */
+ private Result deleteSubject(String subjectId) {
- Subject subject = read(Subject.class, subjectId);
+ Subject subject = read(Subject.class, subjectId);
- TraceUtils.setUpdateTrace(subject);
- subject.setDeleteFlag(true);
+ TraceUtils.setUpdateTrace(subject);
+ subject.setDeleteFlag(true);
- save(subject);
+ save(subject);
- return new Result(true, "success");
- }
+ return new Result(true, "success");
+ }
- @Override
- public List<Subject> list(String text, String teacherId, String status,Integer type, Integer pageSize, Integer pageNum) {
+ @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 ");
+ 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 (type != null) {
+ hql.append(" and type=?");
+ args.add(type);
+ }
- if (!StringUtils.isEmpty(status)) {
- hql.append(" and status=?");
- args.add(status);
- }
+ if (!StringUtils.isEmpty(status)) {
+ hql.append(" and status=?");
+ args.add(status);
+ }
- if (!StringUtils.isEmpty(teacherId)) {
- hql.append(" and createId=?");
- args.add(teacherId);
- }
- hql.append(" order by createTime desc");
- List<Subject> result = findList(hql.toString(), new Pager(pageSize, pageNum), args, Subject.class);
+ if (!StringUtils.isEmpty(teacherId)) {
+ hql.append(" and createId=?");
+ args.add(teacherId);
+ }
+ hql.append(" order by createTime desc");
+ List<Subject> result = findList(hql.toString(), new Pager(pageSize, pageNum), args, Subject.class);
- return result;
- }
+ return result;
+ }
- /**
- * app教师端课程列表
- *
- * @param text
- * @param status
- * @param type
- * @param pageSize
- * @param pageNum
- * @return
- */
- @Override
- 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, "当前用户无老师角色");
- }
+ /**
+ * app教师端课程列表
+ *
+ * @param text
+ * @param status
+ * @param type
+ * @param pageSize
+ * @param pageNum
+ * @return
+ */
+ @Override
+ 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, "当前用户无老师角色");
+ }
- QSubject qSubject = QSubject.subject;
- QSubjectLecture qSubjectLecture = QSubjectLecture.subjectLecture;
- QProgress qProgress = QProgress.progress;
- QClsClassReSubject qClsClassReSubject = QClsClassReSubject.clsClassReSubject;
+ 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)
- .where(qSubject.deleteFlag.isFalse()
- .and(qSubject.status.eq(Subject.STATUS_ISSUED)).and(qSubject.type.eq(type))
- .and(qSubject.createId.eq(ClientUtils.getUserId()))
- .and(qSubject.name.like("%" + keyword + "%")));
+ JPAQuery<Tuple> query = this.getQueryFactory()
+ .select(qSubject.subjectId, qSubject.name, qSubject.term, qSubject.coverPageUrl, qSubject.schoolYear, qSubject.createTime, qSubject.type)
+ .from(qSubject)
+ .where(qSubject.deleteFlag.isFalse()
+ .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();
+ 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);
- String subjectId = tuple.get(qSubject.subjectId);
+ 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);
+ String subjectId = tuple.get(qSubject.subjectId);
- map.put("name", tuple.get(qSubject.name));
- map.put("subjectId", subjectId);
- map.put("schoolYear", tuple.get(qSubject.schoolYear));
- map.put("term", tuple.get(qSubject.term));
- map.put("coverPageUrl", tuple.get(qSubject.coverPageUrl));
- map.put("createTime", tuple.get(qSubject.createTime));
- map.put("type", tuple.get(qSubject.type));
- map.put("classId", "");
- map.put("studyCount", this.getQueryFactory().selectDistinct(qProgress.learnerId).from(qProgress, qSubjectLecture)
- .where(qProgress.deleteFlag.isFalse().and(qSubjectLecture.subjectId.eq(subjectId)).and(qProgress.targetType.eq(Progress.PROGRESS_TYPE_LECTURE))
- .and(qProgress.targetId.eq(qSubjectLecture.lectureId)).and(qSubjectLecture.deleteFlag.isFalse())).fetchCount());
- map.put("classCount",
- this.getQueryFactory().selectDistinct(qClsClassReSubject.classId)
- .from(qClsClassReSubject, qSubject)
- .where(qSubject.deleteFlag.isFalse().and(qClsClassReSubject.deleteFlag.isFalse())
- .and(qClsClassReSubject.subjectId.eq(qSubject.subjectId)).and(qSubject.origSubjectId.eq(subjectId))).fetchCount());
-
- return map;
- }).collect(Collectors.toList());
+ map.put("name", tuple.get(qSubject.name));
+ map.put("subjectId", subjectId);
+ map.put("schoolYear", tuple.get(qSubject.schoolYear));
+ map.put("term", tuple.get(qSubject.term));
+ map.put("coverPageUrl", tuple.get(qSubject.coverPageUrl));
+ map.put("createTime", tuple.get(qSubject.createTime));
+ map.put("type", tuple.get(qSubject.type));
+ map.put("classId", "");
+ map.put("studyCount", this.getQueryFactory().selectDistinct(qProgress.learnerId).from(qProgress, qSubjectLecture)
+ .where(qProgress.deleteFlag.isFalse().and(qSubjectLecture.subjectId.eq(subjectId)).and(qProgress.targetType.eq(Progress.PROGRESS_TYPE_LECTURE))
+ .and(qProgress.targetId.eq(qSubjectLecture.lectureId)).and(qSubjectLecture.deleteFlag.isFalse())).fetchCount());
+ map.put("classCount",
+ this.getQueryFactory().selectDistinct(qClsClassReSubject.classId)
+ .from(qClsClassReSubject, qSubject)
+ .where(qSubject.deleteFlag.isFalse().and(qClsClassReSubject.deleteFlag.isFalse())
+ .and(qClsClassReSubject.subjectId.eq(qSubject.subjectId)).and(qSubject.origSubjectId.eq(subjectId))).fetchCount());
- return new Result(true, "", CollectionUtils.newObjectMap("count", count, "listData", listData));
- }
+ return map;
+ }).collect(Collectors.toList());
- @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());
+ return new Result(true, "", CollectionUtils.newObjectMap("count", count, "listData", listData));
+ }
- if(type!=null){
- hql.append(" and type=?");
- args.add(type);
- }
+ @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());
- if (StringUtils.isNotBlank(status)) {
- hql = hql.append(" and status = ?");
- args.add(status);
- }
+ if (type != null) {
+ hql.append(" and type=?");
+ args.add(type);
+ }
- if (!StringUtils.isEmpty(teacherId)) {
- hql.append(" and createId=?");
- args.add(teacherId);
- }
+ if (StringUtils.isNotBlank(status)) {
+ hql = hql.append(" and status = ?");
+ args.add(status);
+ }
- return findCount(hql.toString(), args);
+ if (!StringUtils.isEmpty(teacherId)) {
+ hql.append(" and createId=?");
+ args.add(teacherId);
+ }
- }
+ return findCount(hql.toString(), args);
- @Override
- public Subject read(String subjectId) {
- return read(Subject.class, subjectId);
- }
+ }
- @Override
- public String readSubjectContent(String subjectId) {
+ @Override
+ public Subject read(String subjectId) {
+ return read(Subject.class, subjectId);
+ }
- Subject sub = read(subjectId);
+ @Override
+ public String readSubjectContent(String subjectId) {
- //读取原课程
- if(StringUtils.isNotBlank(sub.getOrigSubjectId())) {
- sub = read(sub.getOrigSubjectId());
- }
+ Subject sub = read(subjectId);
- try {
- if(!StringUtils.isEmpty(sub.getContentFileId())){
- return IOUtils.toString(fileService.readStreamById(sub.getContentFileId()));
- }
- } catch (Exception e) {
- log.error(e, e);
- }
- return null;
+ //读取原课程
+ if (StringUtils.isNotBlank(sub.getOrigSubjectId())) {
+ sub = read(sub.getOrigSubjectId());
+ }
- }
+ try {
+ if (!StringUtils.isEmpty(sub.getContentFileId())) {
+ return IOUtils.toString(fileService.readStreamById(sub.getContentFileId()));
+ }
+ } catch (Exception e) {
+ log.error(e, e);
+ }
+ return null;
- @Override
- public Result doRelease(String[] subjectIds) {
- for (String subjectId : subjectIds) {
- releaseSubject(subjectId);
- }
+ }
- return new Result(true, "success");
- }
+ @Override
+ public Result doRelease(String[] subjectIds) {
+ for (String subjectId : subjectIds) {
+ releaseSubject(subjectId);
+ }
- @Override
- public Result doCancel(String[] subjectIds) {
- for (String subjectId : subjectIds) {
- cancelSubject(subjectId);
- }
+ return new Result(true, "success");
+ }
- return new Result(true, "success");
- }
+ @Override
+ public Result doCancel(String[] subjectIds) {
+ for (String subjectId : subjectIds) {
+ cancelSubject(subjectId);
+ }
- /**
- * 发布单个课程
- *
- * @param chapterId
- * 章节id
- * @return
- */
- private Result releaseSubject(String subjectId) {
+ return new Result(true, "success");
+ }
- Subject subject = read(Subject.class, subjectId);
+ /**
+ * 发布单个课程
+ *
+ * @param chapterId 章节id
+ * @return
+ */
+ private Result releaseSubject(String subjectId) {
- TraceUtils.setUpdateTrace(subject);
- subject.setStatus(Subject.STATUS_ISSUED);
+ Subject subject = read(Subject.class, subjectId);
- save(subject);
+ TraceUtils.setUpdateTrace(subject);
+ subject.setStatus(Subject.STATUS_ISSUED);
- //更新所有关联的课程
- this.bulkUpdate("update Subject set status='" + Subject.STATUS_ISSUED + "' where origSubjectId=? and deleteFlag is false ",new Object[]{subjectId});
+ save(subject);
- return new Result(true, "success");
- }
+ //更新所有关联的课程
+ this.bulkUpdate("update Subject set status='" + Subject.STATUS_ISSUED + "' where origSubjectId=? and deleteFlag is false ", new Object[]{subjectId});
- /**
- * 发布单个课程
- *
- * @param chapterId
- * 章节id
- * @return
- */
- private Result cancelSubject(String subjectId) {
+ return new Result(true, "success");
+ }
- Subject subject = read(Subject.class, subjectId);
+ /**
+ * 发布单个课程
+ *
+ * @param chapterId 章节id
+ * @return
+ */
+ private Result cancelSubject(String subjectId) {
- TraceUtils.setUpdateTrace(subject);
- subject.setStatus(Subject.STATUS_OFFLINE);
+ Subject subject = read(Subject.class, subjectId);
- save(subject);
+ TraceUtils.setUpdateTrace(subject);
+ subject.setStatus(Subject.STATUS_OFFLINE);
- //更新所有关联的课程
- this.bulkUpdate("update Subject set status='" + Subject.STATUS_OFFLINE + "' where origSubjectId=? and deleteFlag is false ",new Object[]{subjectId});
+ save(subject);
- return new Result(true, "success");
- }
+ //更新所有关联的课程
+ this.bulkUpdate("update Subject set status='" + Subject.STATUS_OFFLINE + "' where origSubjectId=? and deleteFlag is false ", new Object[]{subjectId});
- @Override
- public List<MySubjectV> listMySubjectV(String classId,String userId) {
- StringBuffer hql = new StringBuffer("from MySubjectV p where p.id.userId=? and p.subjectStatus=?");
- List<Object> args = CollectionUtils.newList(userId,Subject.STATUS_ISSUED);
+ return new Result(true, "success");
+ }
- if (!StringUtils.isEmpty(classId)) {
- hql.append(" and p.id.classId = ?");
- args.add(classId);
+ @Override
+ public List<MySubjectV> listMySubjectV(String classId, String userId) {
+ StringBuffer hql = new StringBuffer("from MySubjectV p where p.id.userId=? and p.subjectStatus=?");
+ List<Object> args = CollectionUtils.newList(userId, Subject.STATUS_ISSUED);
- }
- List<MySubjectV> result = find(hql.toString(), args, MySubjectV.class);
+ if (!StringUtils.isEmpty(classId)) {
+ hql.append(" and p.id.classId = ?");
+ args.add(classId);
- return result;
- }
+ }
+ List<MySubjectV> result = find(hql.toString(), args, MySubjectV.class);
- @Override
- public List<Map<String, Object>> listChapterStudyProgress(String subjectId) {
+ return result;
+ }
- QSubjectProgressTreeV qSubjectProgressTreeV = QSubjectProgressTreeV.subjectProgressTreeV;
- List<Map<String, Object>> lstResult = this.getQueryFactory().selectFrom(qSubjectProgressTreeV).
- 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());
+ @Override
+ public List<Map<String, Object>> listChapterStudyProgress(String subjectId) {
- return map;
- }).collect(Collectors.toList());
+ QSubjectProgressTreeV qSubjectProgressTreeV = QSubjectProgressTreeV.subjectProgressTreeV;
+ List<Map<String, Object>> lstResult = this.getQueryFactory().selectFrom(qSubjectProgressTreeV).
+ 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 lstResult;
- }
+ return map;
+ }).collect(Collectors.toList());
- @Override
- public MySubjectV getMy1stSubjectVById(String subjectId) {
- String hql = "from MySubjectV p where p.id.userId=? and p.id.subjectId=?";
- String UserId = ClientUtils.getUserId();
- MySubjectV result = findUnique(hql, CollectionUtils.newList(UserId, subjectId),
- MySubjectV.class);
+ return lstResult;
+ }
- return result;
- }
+ @Override
+ public MySubjectV getMy1stSubjectVById(String subjectId) {
+ String hql = "from MySubjectV p where p.id.userId=? and p.id.subjectId=?";
+ String UserId = ClientUtils.getUserId();
+ MySubjectV result = findUnique(hql, CollectionUtils.newList(UserId, subjectId),
+ MySubjectV.class);
+ return result;
+ }
- @Override
- public Result addLectureCount(String subjectId, int count) {
+ @Override
+ public Result addLectureCount(String subjectId, int count) {
- subjectDAO.addLectureCount(subjectId, count);
+ subjectDAO.addLectureCount(subjectId, count);
- return new Result(true);
- }
+ return new Result(true);
+ }
- @Override
- public Subject readSubject(String subjectId) {
+ @Override
+ public Subject readSubject(String subjectId) {
- return read(Subject.class, subjectId);
- }
+ return read(Subject.class, subjectId);
+ }
- @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);
- UserTeacher teacher = this.read(UserTeacher.class, teacherId);
- BeanUtils.copyProperties(newSubject,origSubject);
+ @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);
+ UserTeacher teacher = this.read(UserTeacher.class, teacherId);
+ BeanUtils.copyProperties(newSubject, origSubject);
- TraceUtils.setCreateTrace(newSubject);
- newSubject.setSubjectId(null);
- newSubject.setTeacherId(teacherId);
- newSubject.setSchoolYear(schoolYear);
- newSubject.setTerm(term);
- newSubject.setStatus(origSubject.getStatus());
- newSubject.setOrigSubjectId(origSubjectId);
- newSubject.setOrigCopySubjectId(origSubjectId);
- newSubject.setType(Subject.TYPE_CLS_SUBJECT);
- newSubject.setTeacherName(teacher.getName());
- newSubject.setOrgId(ClientUtils.getOrgId());
- save(newSubject);
+ TraceUtils.setCreateTrace(newSubject);
+ newSubject.setSubjectId(null);
+ newSubject.setTeacherId(teacherId);
+ newSubject.setSchoolYear(schoolYear);
+ newSubject.setTerm(term);
+ newSubject.setStatus(origSubject.getStatus());
+ newSubject.setOrigSubjectId(origSubjectId);
+ newSubject.setOrigCopySubjectId(origSubjectId);
+ newSubject.setType(Subject.TYPE_CLS_SUBJECT);
+ newSubject.setTeacherName(teacher.getName());
+ newSubject.setOrgId(ClientUtils.getOrgId());
+ save(newSubject);
- //添加班级课程关系
- addClassReSubject(newSubject.getSubjectId(),classId);
+ //添加班级课程关系
+ addClassReSubject(newSubject.getSubjectId(), classId);
- //复制课件
- clsLectureService.doCopyLecturesToClass(origSubjectId,newSubject.getSubjectId(),classId);
+ //复制课件
+ clsLectureService.doCopyLecturesToClass(origSubjectId, newSubject.getSubjectId(), classId);
- return new Result(true, "success",CollectionUtils.newStringMap("subjectId",newSubject.getSubjectId()));
- }
+ return new Result(true, "success", CollectionUtils.newStringMap("subjectId", newSubject.getSubjectId()));
+ }
private void addClassReSubject(String subjectId, String classId) {
ClsClassReSubject re = new ClsClassReSubject();
@@ -505,1043 +498,1061 @@
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);
+ @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());
- subject.setCoverPageUrl(origSubject.getCoverPageUrl());
- subject.setContentFileId(origSubject.getContentFileId());
- subject.setName(origSubject.getName());
- subject.setOrigSubjectId(origSubjectId);
- subject.setOrigCopySubjectId(origSubjectId);
+ //如果原课程做出了修改
+ if (!origSubjectId.equals(subject.getOrigSubjectId())) {
+ subject.setContentFileId(origSubject.getCoverPageFileId());
+ subject.setCoverPageUrl(origSubject.getCoverPageUrl());
+ subject.setContentFileId(origSubject.getContentFileId());
+ subject.setName(origSubject.getName());
+ subject.setOrigSubjectId(origSubjectId);
+ subject.setOrigCopySubjectId(origSubjectId);
- //清理并复制原课程
- clsLectureService.doClearLecturesToClass(classId,subjectId);
- clsLectureService.doCopyLecturesToClass(origSubjectId, subjectId, classId);
- }else {
- 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);
+ //清理并复制原课程
+ clsLectureService.doClearLecturesToClass(classId, subjectId);
+ clsLectureService.doCopyLecturesToClass(origSubjectId, subjectId, classId);
+ } else {
+ 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");
- }
-
- @Override
- public Result getPerformance4Subject() {
- String findCompleteCountByHql = "from MySubjectV where id.userId = ? and percent = 1 ";
- String findUndoneByHql = "from MySubjectV where id.userId = ? and (percent != 1 or percent is null)";
- String userId = ClientUtils.getUserId();
- int CompleteCount = findCount(findCompleteCountByHql, CollectionUtils.newList(userId));
- int UndoneCount = findCount(findUndoneByHql, CollectionUtils.newList(userId));
- return new Result(true, "success",
- CollectionUtils.newObjectMap("CompleteCount", CompleteCount, "UndoneCount", UndoneCount));
- }
-
- @Override
- public Result lstSubjectDetail() {
- String userId = ClientUtils.getUserId();
- StringBuffer hql = new StringBuffer(
- "select percent as percent,className as className ,id.classId as classId ,id.subjectId as subjectId ,"
- + "subjectName as subjectName ,coverPageUrl as coverPageUrl , progressValue as progressValue from"
- + " MySubjectV p where p.id.userId =:userId and p.subjectStatus=:subjectStatus ");
-
- Map<String, Object> args = CollectionUtils.newObjectMap("userId", userId,"subjectStatus",Subject.STATUS_ISSUED);
-
- List<Map<String, Object>> subjectLstMap = findListWithMapByHql(hql.toString(), args);
-
- for (Map<String, Object> subject : subjectLstMap) {
-
- String classId = (String) subject.get("classId");
- String subjectId = (String) subject.get("subjectId");
- Map<String, Object> map = progressDao.getStudyById(userId, subjectId, classId);
- subject.put("lectureParentId", map.get("lectureParentId"));
- subject.put("lectureId", map.get("lectureId"));
- subject.put("unCommitExerciseCount", exerciseInfoService.getUnCommitExerciseCount(classId, userId));
- subject.put("toBeCommitExerciseCount", exerciseInfoService.getToBeCommitExerciseCount(classId, userId));
- subject.put("CommitExerciseCount", exerciseInfoService.getCommitExerciseCount(classId, userId));
- subject.put("exerciseCount", exerciseInfoService.getExerciseCount(classId, userId));
- subject.put("examCount", examService.getExamCount(classId, userId));
- subject.put("unCommitExamCount", examService.getUnCommitExamCount(classId, userId));
- subject.put("commitExamCount", examService.getCommitExamCount(classId, userId));
- subject.put("toBeCommitExamCount", examService.getToBeCommitExamCount(classId, userId));
-
- }
- return new Result(true, "success", subjectLstMap);
- }
-
- @SuppressWarnings({ "unchecked", "rawtypes" })
- @Override
- public Result getDataDesc(String classId, String subjectId) {
- if(StringUtils.isEmpty(classId)) {
- return new Result(false, "班级id参数错误");
- }
- QSubjectProgressTreeV qSubjectProgressTreeV = QSubjectProgressTreeV.subjectProgressTreeV;
-
- List<Map<String, Object>> percentDesc = this.percentDesc(classId, subjectId, new OrderSpecifier(Order.DESC, qSubjectProgressTreeV.percent));
-
- List<Map<String, Object>> studyTimeDesc = this.percentDesc(classId, subjectId, new OrderSpecifier(Order.DESC, qSubjectProgressTreeV.progressValue));
-
- List<Map<String, Object>> exerciseInfoDesc = this.exerciseInfoDesc(classId, subjectId);
-
- List<Map<String, Object>> examInfoDesc = this.examInfoDesc(classId, subjectId);
-
- return new Result(true, "success", CollectionUtils.newObjectMap("percentDesc", percentDesc, "studyTimeDesc",
- studyTimeDesc, "exerciseInfoDesc", exerciseInfoDesc, "examInfoDesc", examInfoDesc));
- }
-
- /**
- * 获取班级对应的学员 按进度进行排序
- */
- private List<Map<String, Object>> percentDesc(String classId, String subjectId, @SuppressWarnings("rawtypes") OrderSpecifier order) {
- QSubjectProgressTreeV qSubjectProgressTreeV = QSubjectProgressTreeV.subjectProgressTreeV;
- 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))
- .and(qSubjectProgressTreeV.id.nodeId.eq(nodeId))).orderBy(order).fetch().stream().map(tuple -> {
- Map<String, Object> map = new HashMap<>();
- map.put("userName", tuple.get(qUser.name));
- map.put("userId", tuple.get(qUser.userId));
- map.put("classId", tuple.get(qSubjectProgressTreeV.id.nodeId));
- map.put("percent", tuple.get(qSubjectProgressTreeV.percent));
- map.put("progressValue", tuple.get(qSubjectProgressTreeV.progressValue));
- return map;
- }).collect(Collectors.toList());
- return lstMap;
- }
-
- /**
- * 通过作业完成个数排序
- *
- */
- 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数量判断
- 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分数
- 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).
- orderBy(caseScoreSum.divide(caseCount).desc()).fetch().stream().map(tuple ->{
- Map<String, Object> map = new HashMap<>();
- map.put("userId", tuple.get(qExerciseResultV.userId));
- map.put("userName", tuple.get(qExerciseResultV.studentName));
- 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):
- qExamResultV.id.classId.eq(classId).and(qExamResultV.subjectId.eq(subjectId));
- //case判断
- NumberExpression<BigDecimal> caseCount = new CaseBuilder()
- .when(qExamResultV.status.eq("0")).then(BigDecimal.ZERO).otherwise(BigDecimal.ONE).sum();
- //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).
- orderBy(caseScoreSum.divide(caseCount).desc()).fetch().stream().map(tuple ->{
- Map<String, Object> map = new HashMap<>();
- map.put("userId", tuple.get(qExamResultV.userId));
- map.put("userName", tuple.get(qExamResultV.studentName));
- 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;
-
- }
-
- @Override
- public Result lastStudied(String userId) {
- Map<String, Object> map = progressDao.getStudyByUserId(userId);
- String subjectId = (String) map.get("subjectId");
- Subject subject = read(Subject.class, subjectId);
- if (subject != null) {
- map.put("subjectName", subject.getName());
- }
- 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);
- }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);
- }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);
- }
- }
-
- return result;
- }
-
- @Override
- public List<Map<String, Object>> getMySubjectList() {
- String sql = "SELECT o.CLASS_ID, a.`NAME` AS subjectName, a.SUBJECT_ID, o.`NAME` AS className FROM ( ( SELECT "
- + "c.CLASS_ID, c.`NAME` FROM stu_student s, cls_class c WHERE s.CLASS_ID = c.CLASS_ID AND s.USER_ID =:userId"
- + " ) o LEFT JOIN ( SELECT r.class_id,s.SUBJECT_ID, s.`NAME` FROM `subject` s, cls_class_re_subject r WHERE "
- + "s.SUBJECT_ID = r.subject_id ) a ON o.CLASS_ID = a.class_id ) ";
- List<Object[]> list = findByComplexSql(sql, CollectionUtils.newObjectMap("userId", ClientUtils.getUserId()),
- Object[].class);
- List<Map<String, Object>> lstMap = new ArrayList<Map<String, Object>>(list.size());
- Map<String, Object> map = null;
- for (Object[] objects : list) {
- map = new HashMap<String, Object>(objects.length);
- map.put("classId", objects[0]);
- map.put("subjectName", objects[1]);
- map.put("subjectId", objects[2]);
- map.put("className", objects[3]);
- lstMap.add(map);
- }
- 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)
- .and(qClsClassReSubject.subjectId::eq, qSubject.subjectId)
- .and(qClsClassReSubject.deleteFlag::eq, false).and(qSubject.status::eq, Subject.STATUS_ISSUED);
- if(schoolYear != null && schoolYear != 0){//学年
- builder = builder.and(qSubject.schoolYear::eq, schoolYear);
- }
- 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())
- .orderBy(qSubject.createTime.desc())
- .fetch().stream()
- .map(tuple -> {
- Map<String,Object> map = new HashMap<String,Object>(2);
- map.put("name", tuple.get(qSubject.name));
- map.put("subjectId", tuple.get(qSubject.subjectId));
- map.put("schoolYear", tuple.get(qSubject.schoolYear));
- map.put("term", tuple.get(qSubject.term));
- map.put("origSubjectId", tuple.get(qSubject.origSubjectId));
- 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())
- .and(qSubject.term.isNotNull())).groupBy(qSubject.schoolYear, qSubject.term)
- .orderBy(qSubject.schoolYear.desc(), qSubject.term.desc())
- .fetch().stream()
- .map(tuple -> {
- Map<String,Object> map = new HashMap<String,Object>(2);
- map.put("schoolYear", tuple.get(0, Integer.class));
- map.put("term", tuple.get(1, Integer.class));
- 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 {
- return CollectionUtils.newObjectMap("className", objClsClass.getName(), "percent",
- 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)));
- }else {
- predicate = qMySubjectV.id.classId.eq(classId).and(qMySubjectV.id.userId.eq(userId).and(qMySubjectV.subjectStatus.eq(Subject.STATUS_ISSUED)));
- }
- return this.getQueryFactory().select(qMySubjectV.id.subjectId,
- qMySubjectV.subjectName,qMySubjectV.term,
- qMySubjectV.schoolYear,qMySubjectV.percent, qMySubjectV.coverPageUrl,qMySubjectV.origSubjectId)
- .from(qMySubjectV)
- .where(predicate)
- .orderBy(qMySubjectV.schoolYear.desc(),qMySubjectV.term.desc())
- .limit(pager.getPageSize()).offset(pager.getOffset())
- .fetch().stream()
- .map(tuple -> {
- Map<String,Object> map = new HashMap<String,Object>(5);
- map.put("name", tuple.get(qMySubjectV.subjectName));
- map.put("origSubjectId", tuple.get(qMySubjectV.origSubjectId));
- map.put("subjectId", tuple.get(qMySubjectV.id.subjectId));
- map.put("progressPercent", tuple.get(qMySubjectV.percent));
- map.put("schoolYear", tuple.get(qMySubjectV.schoolYear));
- map.put("term", tuple.get(qMySubjectV.term));
- map.put("coverPageUrl", tuple.get(qMySubjectV.coverPageUrl));
- 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)
- .from(qMySubjectV)
- .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,
- qMySubjectV.schoolYear,qMySubjectV.lectureCount, qMySubjectV.percent.avg().as(qMySubjectV.percent))
- .from(qMySubjectV)
- .where(qMySubjectV.id.classId.eq(classId).and(qMySubjectV.teacherId.eq(teacherId)))
- .groupBy(qMySubjectV.id.subjectId)
- .orderBy(qMySubjectV.schoolYear.desc(),qMySubjectV.term.desc())
- .limit(pager.getPageSize()).offset(pager.getOffset())
- .fetch().stream()
- .map(tuple -> {
- Map<String,Object> map = new HashMap<String,Object>(5);
- map.put("name", tuple.get(qMySubjectV.subjectName));
- map.put("subjectId", tuple.get(qMySubjectV.id.subjectId));
- map.put("schoolYear", tuple.get(qMySubjectV.schoolYear));
- map.put("term", tuple.get(qMySubjectV.term));
- map.put("progressPercent",
- this.getQueryFactory().select(qSubjectProgressTreeV.percent.avg())
- .from(qSubjectProgressTreeV)
- .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;
- }
- 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
- * @return
- */
- public Map<String,Object> myOpenSubjectList(Integer pageNum, Integer pageSize, String keyword){
- 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))
- .from(qSubject, qProgress, qSubjectLecture )
- .where(qSubject.deleteFlag.isFalse().and(qSubjectLecture.subjectId.eq(qSubject.subjectId))
- .and(qSubjectLecture.deleteFlag.isFalse()).and(qSubjectLecture.lectureId.eq(qProgress.targetId))
- .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));
- map.put("term", tuple.get(qSubject.term));
- map.put("coverPageUrl", tuple.get(qSubject.coverPageUrl));
- map.put("progressPercent", tuple.get(qProgress.progressPercent));
- 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"));
-
- // 已观看完成课件数量
- map.put("subjectLectureDoCount",openSubjectDetail.get("subjectLectureDoCount"));
-
- return map;
- }).collect(Collectors.toList());
-
- return CollectionUtils.newObjectMap("count", count, "listData", listData);
- }
-
- /**
- * 课程统计详情
- *
- * @param subjectId
- * @return
- */
- public Map<String,Object> openSubjectDetail(String subjectId){
- Map<String, Object> map = new HashMap<String, Object>();
- QMediaVideoLive qMediaVideoLive = QMediaVideoLive.mediaVideoLive;
- QSubjectLecture qSubjectLecture = QSubjectLecture.subjectLecture;
- QProgress qProgress = QProgress.progress;
-
- // 直播数量
- map.put("mediaVideoLiveCount",
- this.getQueryFactory().select(qMediaVideoLive).from(qMediaVideoLive)
- .where(qMediaVideoLive.deleteFlag.isFalse()
- .and(qMediaVideoLive.status.gt(0))
- .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))
- .and(qProgress.targetId.eq(qSubjectLecture.lectureId)))
- .fetchCount());
-
- map.put("content", this.readSubjectContent(subjectId));
-
- // 已观看完成课件数量
- map.put("subjectLectureDoCount",
- this.getQueryFactory().select(qSubjectLecture).from(qSubjectLecture, qProgress)
- .where(qSubjectLecture.deleteFlag.isFalse().and(qProgress.deleteFlag.isFalse())
- .and(qProgress.learnerId.eq(ClientUtils.getUserId())).and(qProgress.type.eq(Progress.PROGRESS_TYPE_LECTURE))
- .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 {
- subjectInfo.put("progressPercent", progress.get(qProgress.progressPercent).floatValue()/(Long)openSubjectDetail.get("subjectLectureCount"));
- }
- subjectInfo.put("progressValue", progress == null?0:progress.get(qProgress.progressValue));
-
- return map;
- }
-
- @Override
- public Map<String, Object> mySubjectInfo(String subjectId, String classId) {
- 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)
- .from(qMySubjectV)
- .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);
- subject.put("name", objSubject.getName());
- subject.put("subjectId", subjectId);
- subject.put("origSubjectId", objSubject.getOrigSubjectId());
- subject.put("schoolYear", objSubject.getSchoolYear());
- subject.put("term", objSubject.getTerm());
- subject.put("coverPageUrl", objSubject.getCoverPageUrl());
- subject.put("content", this.readSubjectContent(subjectId));
- subject.put("teacherName", objSubject.getTeacherName());
- if(tuple == null) {
- subject.put("progressPercent", 0);
- subject.put("progressValue", 0);
- }else {
- subject.put("progressPercent", tuple.get(qMySubjectV.percent));
- subject.put("progressValue", tuple.get(qMySubjectV.progressValue));
- }
-
- 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%算完成
- from(qMyLectureV)
- .where(qMyLectureV.classId.eq(classId).and(qMyLectureV.id.userId.eq(ClientUtils.getUserId()))
- .and(qMyLectureV.subjectId.eq(subjectId)))
- .groupBy(qMyLectureV.subjectId).fetchOne();
-
- long mediaVideoLivesCount = this.mediaLiveService.listCount("", new String[] {classId}, origSubjectId, null);
-
- return CollectionUtils.newObjectMap("mediaVideoLivesCount", mediaVideoLivesCount, "examsCount", examsCount,
- "homeworksCount", homeworksCount, "subjectInfo", subject, "lectureCount",
- tupleLecture == null?0:tupleLecture.get(0, Long.class),
- "completeLectureCount", tupleLecture == null?0:tupleLecture.get(1,Integer.class));
- }
-
- /**
- * 公开课列表
- *
- * @param pageNum
- * @param pageSize
- * @param keyword
- * @return
- */
- 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();
-
- List<Map<String, Object>> listData = query.orderBy(qOpenSubjectV.mediaVideoCount.desc(),
- qOpenSubjectV.learnerCount.desc(), qOpenSubjectV.createTime.desc()).limit(pageSize).offset(pageNum)
- .fetch().stream().map(tuple -> {
- Map<String, Object> map = new HashMap<String, Object>(8);
-
- map.put("name", tuple.getSubjectName());
- map.put("subjectId", tuple.getSubjectId());
- map.put("schoolYear", tuple.getSchoolYear());
- map.put("term", tuple.getTerm());
- map.put("coverPageUrl", tuple.getCoverPageUrl());
- map.put("mediaVideoCount", tuple.getMediaVideoCount());
- map.put("learnerCount", tuple.getLearnerCount());
- map.put("createTime", tuple.getCreateTime());
-
- return map;
- }).collect(Collectors.toList());
-
- return CollectionUtils.newObjectMap("count", count, "listData", listData);
- }
-
- /**
- * 班级学员课件总体进度
- *
- * @param subjectId
- * @param classId
- * @return
- */
- @Override
- public List<Map<String, Object>> studentSubjectLectureProgress(String subjectId, String classId) {
- QMyLectureV qMyLectureV = QMyLectureV.myLectureV;
-
- return this.getQueryFactory()
- .select(qMyLectureV.lectureName, qMyLectureV.id.lectureId, qMyLectureV.lectureType,
- qMyLectureV.chapterId, qMyLectureV.subjectId, qMyLectureV.lectureCreateTime,
- qMyLectureV.percent.avg().as(qMyLectureV.percent))
- .from(qMyLectureV).where(qMyLectureV.classId.eq(classId).and(qMyLectureV.subjectId.eq(subjectId)))
- .groupBy(qMyLectureV.id.lectureId).orderBy(qMyLectureV.lectureCreateTime.desc()).fetch().stream()
- .map(tuple -> {
- Map<String, Object> map = new HashMap<String, Object>(6);
- map.put("lectureName", tuple.get(qMyLectureV.lectureName));
- map.put("lectureId", tuple.get(qMyLectureV.id.lectureId));
- map.put("lectureType", tuple.get(qMyLectureV.lectureType));
- map.put("chapterId", tuple.get(qMyLectureV.chapterId));
- map.put("subjectId", tuple.get(qMyLectureV.subjectId));
- map.put("progressPercent", tuple.get(qMyLectureV.percent));
- map.put("createTime", tuple.get(qMyLectureV.lectureCreateTime));
- return map;
- }).collect(Collectors.toList());
+ save(subject);
+ return new Result(true, "success");
}
- /**
- * 学员课程作业进度
- *
- * @param classId
- * @param subjectId
- * @return
- */
- public Map<String, Object> studentSubjectHomeworkProgress(String classId, String subjectId, String studentId){
- QExerciseResultV qHomeworkScoreV = QExerciseResultV.exerciseResultV;
+ @Override
+ public Result deleteClsSubject(String classId, String[] subjectIds) {
+ Map<String, Object> paramMap = new HashMap<String, Object>();
+ paramMap.put("classId", classId);
+ paramMap.put("subjectIds", subjectIds);
- StuStudent student = read(StuStudent.class, studentId);
- Subject subject = read(Subject.class, subjectId);
+ 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);
- Tuple tuple = this.getQueryFactory()
- .select(qHomeworkScoreV.subjectId, qHomeworkScoreV.count(),
- new CaseBuilder()
- .when(qHomeworkScoreV.completeStatus.eq(ExerciseCompleteInfo.STATUS_CHECKED)
- .or(qHomeworkScoreV.completeStatus.eq(ExerciseCompleteInfo.STATUS_COMMIT)))
- .then(qHomeworkScoreV.studentScore).otherwise(BigDecimal.ZERO).sum(),
- new CaseBuilder()
- .when(qHomeworkScoreV.completeStatus.eq(ExerciseCompleteInfo.STATUS_CHECKED)
- .or(qHomeworkScoreV.completeStatus.eq(ExerciseCompleteInfo.STATUS_COMMIT)))
- .then(1).otherwise(0).sum())
- .from(qHomeworkScoreV)
- .where(qHomeworkScoreV.subjectId.eq(subject.getOrigSubjectId())
- .and(qHomeworkScoreV.userId.eq(student.getUserId()))
- .and(qHomeworkScoreV.exerciseStatus.eq(ExerciseInfo.EXERCISE_STATUS_PUBLISHED)))
- .groupBy(qHomeworkScoreV.userId).fetchOne();
+ //删除关联关系
+ if (reIdLst != null && reIdLst.size() > 0) {
+ this.bulkUpdateInLoop("update ClsClassReSubject set deleteFlag = true where clsReSubjectId=?", reIdLst.toArray());
+ }
- Map<String,Object> map = new HashMap<String,Object>(4);
- if(tuple == null) {
- map.put("subjectId", subjectId);
- map.put("homeworkCount", 0);
- map.put("avgScore", "0");
- map.put("commitHomeworkCount", 0);
- }else {
- int commitHomeworkCount = tuple.get(3, Integer.class) == null?0:tuple.get(3, Integer.class);
- map.put("subjectId", subjectId);
- map.put("homeworkCount", tuple.get(1, Integer.class) == null?0:tuple.get(1, Integer.class));
- 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);
- }
+ this.delete(subjectIds);
+ return new Result(true, "success");
+ }
- return map;
- }
+ @Override
+ public Result getPerformance4Subject() {
+ String findCompleteCountByHql = "from MySubjectV where id.userId = ? and percent = 1 ";
+ String findUndoneByHql = "from MySubjectV where id.userId = ? and (percent != 1 or percent is null)";
+ String userId = ClientUtils.getUserId();
+ int CompleteCount = findCount(findCompleteCountByHql, CollectionUtils.newList(userId));
+ int UndoneCount = findCount(findUndoneByHql, CollectionUtils.newList(userId));
+ return new Result(true, "success",
+ CollectionUtils.newObjectMap("CompleteCount", CompleteCount, "UndoneCount", UndoneCount));
+ }
- /**
- * 学员考试作业进度
- *
- * @param classId
- * @param subjectId
- * @return
- */
- public Map<String, Object> studentSubjectExamProgress(String classId, String subjectId, String studentId){
- QExamResultV qExamScoreV = QExamResultV.examResultV;
+ @Override
+ public Result lstSubjectDetail() {
+ String userId = ClientUtils.getUserId();
+ StringBuffer hql = new StringBuffer(
+ "select percent as percent,className as className ,id.classId as classId ,id.subjectId as subjectId ,"
+ + "subjectName as subjectName ,coverPageUrl as coverPageUrl , progressValue as progressValue from"
+ + " MySubjectV p where p.id.userId =:userId and p.subjectStatus=:subjectStatus ");
- StuStudent student = read(StuStudent.class, studentId);
- Subject subject = read(Subject.class, subjectId);
+ Map<String, Object> args = CollectionUtils.newObjectMap("userId", userId, "subjectStatus", Subject.STATUS_ISSUED);
- 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()).
- from(qExamScoreV).
- where(qExamScoreV.subjectId.eq(subject.getOrigSubjectId()).and(qExamScoreV.userId.eq(student.getUserId())).and(qExamScoreV.examStatus.eq(ExerciseInfo.EXERCISE_STATUS_PUBLISHED))).
- groupBy(qExamScoreV.userId).fetchOne();
- Map<String,Object> map = new HashMap<String,Object>(4);
- map.put("subjectId", subjectId);
- if(tuple == null) {
- map.put("examCount", 0);
- map.put("avgScore", "0");
- map.put("commitExamCount", 0);
- }else {
- int commitExamCount = tuple.get(3, Integer.class) == null?0:tuple.get(3, Integer.class);
+ List<Map<String, Object>> subjectLstMap = findListWithMapByHql(hql.toString(), args);
- 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));
- }
+ for (Map<String, Object> subject : subjectLstMap) {
- return map;
- }
+ String classId = (String) subject.get("classId");
+ String subjectId = (String) subject.get("subjectId");
+ Map<String, Object> map = progressDao.getStudyById(userId, subjectId, classId);
+ List<MyLectureV> myLectureVList = lectureService.listLectureVBySubjectId(userId, subjectId, "", 1000, 1, null);
+ Double percent = 0.0;
+ Double progressValue = 0.0;
+ Double percentAvg = 0.0;
+ if (!myLectureVList.isEmpty()) {
+ for (MyLectureV myLectureV : myLectureVList) {
+ if (myLectureV.getPercent() != null && myLectureV.getProgressValue() != null) {
+ percent += myLectureV.getPercent();
+ progressValue += myLectureV.getProgressValue().intValue();
+ }
+ }
+ percentAvg = percent / myLectureVList.size();
+ if (percentAvg.isNaN()) {
+ percentAvg = 0.0;
+ }
+ }
+ subject.put("percent", new BigDecimal(percentAvg));
+ subject.put("progressValue", new BigDecimal(progressValue));
- /**
- * 我的课件情况
- *
- * @param classId
- * @return
- */
- private List<Map<String, Object>> myLectureList(String classId){
- QMyLectureV qMyLectureV = QMyLectureV.myLectureV;
+ subject.put("lectureParentId", map.get("lectureParentId"));
+ subject.put("lectureId", map.get("lectureId"));
+ subject.put("unCommitExerciseCount", exerciseInfoService.getUnCommitExerciseCount(classId, userId));
+ subject.put("toBeCommitExerciseCount", exerciseInfoService.getToBeCommitExerciseCount(classId, userId));
+ subject.put("CommitExerciseCount", exerciseInfoService.getCommitExerciseCount(classId, userId));
+ subject.put("exerciseCount", exerciseInfoService.getExerciseCount(classId, userId));
+ subject.put("examCount", examService.getExamCount(classId, userId));
+ subject.put("unCommitExamCount", examService.getUnCommitExamCount(classId, userId));
+ subject.put("commitExamCount", examService.getCommitExamCount(classId, userId));
+ subject.put("toBeCommitExamCount", examService.getToBeCommitExamCount(classId, userId));
- return this.getQueryFactory().select(qMyLectureV.subjectId,
- qMyLectureV.count(),
- 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()))).
- groupBy(qMyLectureV.subjectId).fetch().stream()
- .map(tuple -> {
- Map<String,Object> map = new HashMap<String,Object>(3);
- map.put("subjectId", tuple.get(0, String.class));
- map.put("lectureCount", tuple.get(1, Integer.class));
- map.put("completeLectureCount", tuple.get(2, String.class));
- return map;
- }).collect(Collectors.toList());
- }
+ }
+ return new Result(true, "success", subjectLstMap);
+ }
- /**
- * 我的课程,按时间排序
- *
- * @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");
- clsSubject.put("exam", CollectionUtils.newObjectMap("examCount", this.examService.listStudentExamCount("", new String[] {classId}, origSubjectId, null)));
- 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)));
+ @SuppressWarnings({"unchecked", "rawtypes"})
+ @Override
+ public Result getDataDesc(String classId, String subjectId) {
+ if (StringUtils.isEmpty(classId)) {
+ return new Result(false, "班级id参数错误");
+ }
+ QSubjectProgressTreeV qSubjectProgressTreeV = QSubjectProgressTreeV.subjectProgressTreeV;
- this.setSubjectStatistics("lecture", clsSubject, lectures);
- }
+ List<Map<String, Object>> percentDesc = this.percentDesc(classId, subjectId, new OrderSpecifier(Order.DESC, qSubjectProgressTreeV.percent));
- return clsSubjectlist;
- }
+ List<Map<String, Object>> studyTimeDesc = this.percentDesc(classId, subjectId, new OrderSpecifier(Order.DESC, qSubjectProgressTreeV.progressValue));
- /**
- * 统计课程的数据
- *
- * @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()) {
- for(Map<String,Object> statistics : lstStatistics) {
- if(clsSubject.get("origSubjectId").equals(statistics.get("subjectId")) || clsSubject.get("subjectId").equals(statistics.get("subjectId"))) {
- clsSubject.put(type, statistics);
- }
- }
- }
+ List<Map<String, Object>> exerciseInfoDesc = this.exerciseInfoDesc(classId, subjectId);
- }
+ List<Map<String, Object>> examInfoDesc = this.examInfoDesc(classId, subjectId);
- /**
- * 我的课程详情
- *
- * @param classId
- * @return
- */
- public Map<String,Object> mySubjectInfo(String subjectId, String classId,HttpServletRequest request) {
+ return new Result(true, "success", CollectionUtils.newObjectMap("percentDesc", percentDesc, "studyTimeDesc",
+ studyTimeDesc, "exerciseInfoDesc", exerciseInfoDesc, "examInfoDesc", examInfoDesc));
+ }
- 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)
- .from(qMySubjectV)
- .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);
- subject.put("name", objSubject.getName());
- subject.put("subjectId", subjectId);
- subject.put("origSubjectId", objSubject.getOrigSubjectId());
- subject.put("schoolYear", objSubject.getSchoolYear());
- subject.put("term", objSubject.getTerm());
- subject.put("coverPageUrl", objSubject.getCoverPageUrl());
- subject.put("content", this.readSubjectContent(subjectId));
- subject.put("teacherName", objSubject.getTeacherName());
- if(tuple == null) {
- subject.put("progressPercent", 0);
- subject.put("progressValue", 0);
- }else {
- subject.put("progressPercent", tuple.get(qMySubjectV.percent));
- subject.put("progressValue", tuple.get(qMySubjectV.progressValue));
- }
-
- 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%算完成
- from(qMyLectureV)
- .where(qMyLectureV.classId.eq(classId).and(qMyLectureV.id.userId.eq(ClientUtils.getUserId()))
- .and(qMyLectureV.subjectId.eq(subjectId)))
- .groupBy(qMyLectureV.subjectId).fetchOne();
-
- long mediaVideoLivesCount = this.mediaLiveService.listCount("", new String[] {classId}, origSubjectId, null);
-
- return CollectionUtils.newObjectMap("mediaVideoLivesCount", mediaVideoLivesCount, "examsCount", examsCount,
- "homeworksCount", homeworksCount, "subjectInfo", subject, "lectureCount",
- tupleLecture == null?0:tupleLecture.get(0, Long.class),
- "completeLectureCount", tupleLecture == null?0:tupleLecture.get(1,Integer.class));
- }
-
- /**
- * 我的课程按学期分类
- *
- * @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);
- }
+ /**
+ * 获取班级对应的学员 按进度进行排序
+ */
+ private List<Map<String, Object>> percentDesc(String classId, String subjectId, @SuppressWarnings("rawtypes") OrderSpecifier order) {
+ QSubjectProgressTreeV qSubjectProgressTreeV = QSubjectProgressTreeV.subjectProgressTreeV;
+ 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))
+ .and(qSubjectProgressTreeV.id.nodeId.eq(nodeId))).orderBy(order).fetch().stream().map(tuple -> {
+
+ Map<String, Object> map = new HashMap<>();
+ map.put("userName", tuple.get(qUser.name));
+ map.put("userId", tuple.get(qUser.userId));
+ map.put("classId", tuple.get(qSubjectProgressTreeV.id.nodeId));
+ map.put("percent", tuple.get(qSubjectProgressTreeV.percent));
+ map.put("progressValue", tuple.get(qSubjectProgressTreeV.progressValue));
+ return map;
+ }).collect(Collectors.toList());
+ return lstMap;
+ }
+
+ /**
+ * 通过作业完成个数排序
+ */
+ 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数量判断
+ 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分数
+ 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).
+ orderBy(caseScoreSum.divide(caseCount).desc()).fetch().stream().map(tuple -> {
+ Map<String, Object> map = new HashMap<>();
+ map.put("userId", tuple.get(qExerciseResultV.userId));
+ map.put("userName", tuple.get(qExerciseResultV.studentName));
+ 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) :
+ qExamResultV.id.classId.eq(classId).and(qExamResultV.subjectId.eq(subjectId));
+ //case判断
+ NumberExpression<BigDecimal> caseCount = new CaseBuilder()
+ .when(qExamResultV.status.eq("0")).then(BigDecimal.ZERO).otherwise(BigDecimal.ONE).sum();
+ //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).
+ orderBy(caseScoreSum.divide(caseCount).desc()).fetch().stream().map(tuple -> {
+ Map<String, Object> map = new HashMap<>();
+ map.put("userId", tuple.get(qExamResultV.userId));
+ map.put("userName", tuple.get(qExamResultV.studentName));
+ 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;
+
+ }
+
+ @Override
+ public Result lastStudied(String userId) {
+ Map<String, Object> map = progressDao.getStudyByUserId(userId);
+ String subjectId = (String) map.get("subjectId");
+ Subject subject = read(Subject.class, subjectId);
+ if (subject != null) {
+ map.put("subjectName", subject.getName());
+ }
+ 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);
+ } 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);
+ } 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);
+ }
+ }
+
+ return result;
+ }
+
+ @Override
+ public List<Map<String, Object>> getMySubjectList() {
+ String sql = "SELECT o.CLASS_ID, a.`NAME` AS subjectName, a.SUBJECT_ID, o.`NAME` AS className FROM ( ( SELECT "
+ + "c.CLASS_ID, c.`NAME` FROM stu_student s, cls_class c WHERE s.CLASS_ID = c.CLASS_ID AND s.USER_ID =:userId"
+ + " ) o LEFT JOIN ( SELECT r.class_id,s.SUBJECT_ID, s.`NAME` FROM `subject` s, cls_class_re_subject r WHERE "
+ + "s.SUBJECT_ID = r.subject_id ) a ON o.CLASS_ID = a.class_id ) ";
+ List<Object[]> list = findByComplexSql(sql, CollectionUtils.newObjectMap("userId", ClientUtils.getUserId()),
+ Object[].class);
+ List<Map<String, Object>> lstMap = new ArrayList<Map<String, Object>>(list.size());
+ Map<String, Object> map = null;
+ for (Object[] objects : list) {
+ map = new HashMap<String, Object>(objects.length);
+ map.put("classId", objects[0]);
+ map.put("subjectName", objects[1]);
+ map.put("subjectId", objects[2]);
+ map.put("className", objects[3]);
+ lstMap.add(map);
+ }
+ return lstMap;
+ }
- /**
- * 课程按学期分类
- *
- * @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);
+ @Override
+ public List<Map<String, Object>> clsSubjectlist(String classId, Integer schoolYear, Integer term) {
+ QSubject qSubject = QSubject.subject;
+ QClsClassReSubject qClsClassReSubject = QClsClassReSubject.clsClassReSubject;
- if(termList != null && !termList.isEmpty()) {
- for(Map<String,Object> term : termList) {
- if(termList != null && !termList.isEmpty()) {
- List<Map<String,Object>> subjectList = new ArrayList<>();
- for(Map<String,Object> clsSubject : clsSubjectlist) {
- if(term.get("schoolYear").equals(clsSubject.get("schoolYear")) &&
- term.get("term").equals(clsSubject.get("term"))) {
- subjectList.add(clsSubject);
- }
- term.put("subjectList", subjectList);
- }
- }
- }
- }
- return termList;
- }
+ 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);
+ if (schoolYear != null && schoolYear != 0) {//学年
+ builder = builder.and(qSubject.schoolYear::eq, schoolYear);
+ }
+ 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())
+ .orderBy(qSubject.createTime.desc())
+ .fetch().stream()
+ .map(tuple -> {
+ Map<String, Object> map = new HashMap<String, Object>(2);
+ map.put("name", tuple.get(qSubject.name));
+ map.put("subjectId", tuple.get(qSubject.subjectId));
+ map.put("schoolYear", tuple.get(qSubject.schoolYear));
+ map.put("term", tuple.get(qSubject.term));
+ map.put("origSubjectId", tuple.get(qSubject.origSubjectId));
+ 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())
+ .and(qSubject.term.isNotNull())).groupBy(qSubject.schoolYear, qSubject.term)
+ .orderBy(qSubject.schoolYear.desc(), qSubject.term.desc())
+ .fetch().stream()
+ .map(tuple -> {
+ Map<String, Object> map = new HashMap<String, Object>(2);
+ map.put("schoolYear", tuple.get(0, Integer.class));
+ map.put("term", tuple.get(1, Integer.class));
+ 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 {
+ return CollectionUtils.newObjectMap("className", objClsClass.getName(), "percent",
+ 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)));
+ } else {
+ predicate = qMySubjectV.id.classId.eq(classId).and(qMySubjectV.id.userId.eq(userId).and(qMySubjectV.subjectStatus.eq(Subject.STATUS_ISSUED)));
+ }
+ return this.getQueryFactory().select(qMySubjectV.id.subjectId,
+ qMySubjectV.subjectName, qMySubjectV.term,
+ qMySubjectV.schoolYear, qMySubjectV.percent, qMySubjectV.coverPageUrl, qMySubjectV.origSubjectId)
+ .from(qMySubjectV)
+ .where(predicate)
+ .orderBy(qMySubjectV.schoolYear.desc(), qMySubjectV.term.desc())
+ .limit(pager.getPageSize()).offset(pager.getOffset())
+ .fetch().stream()
+ .map(tuple -> {
+ Map<String, Object> map = new HashMap<String, Object>(5);
+ map.put("name", tuple.get(qMySubjectV.subjectName));
+ map.put("origSubjectId", tuple.get(qMySubjectV.origSubjectId));
+ map.put("subjectId", tuple.get(qMySubjectV.id.subjectId));
+ map.put("progressPercent", tuple.get(qMySubjectV.percent));
+ map.put("schoolYear", tuple.get(qMySubjectV.schoolYear));
+ map.put("term", tuple.get(qMySubjectV.term));
+ map.put("coverPageUrl", tuple.get(qMySubjectV.coverPageUrl));
+ 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)
+ .from(qMySubjectV)
+ .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,
+ qMySubjectV.schoolYear, qMySubjectV.lectureCount, qMySubjectV.percent.avg().as(qMySubjectV.percent))
+ .from(qMySubjectV)
+ .where(qMySubjectV.id.classId.eq(classId).and(qMySubjectV.teacherId.eq(teacherId)))
+ .groupBy(qMySubjectV.id.subjectId)
+ .orderBy(qMySubjectV.schoolYear.desc(), qMySubjectV.term.desc())
+ .limit(pager.getPageSize()).offset(pager.getOffset())
+ .fetch().stream()
+ .map(tuple -> {
+ Map<String, Object> map = new HashMap<String, Object>(5);
+ map.put("name", tuple.get(qMySubjectV.subjectName));
+ map.put("subjectId", tuple.get(qMySubjectV.id.subjectId));
+ map.put("schoolYear", tuple.get(qMySubjectV.schoolYear));
+ map.put("term", tuple.get(qMySubjectV.term));
+ map.put("progressPercent",
+ this.getQueryFactory().select(qSubjectProgressTreeV.percent.avg())
+ .from(qSubjectProgressTreeV)
+ .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;
+ }
+ 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 classId
- * @return
- */
- @Override
- public List<Map<String,Object>> querySubjectReClassInfos(String origSubjectId) {
- String hql = "select s.subjectId as subjectId ,s.teacherId as teacherId,s.teacherName as teacherName,"
- + " 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";
+ /**
+ * 我的公开课列表
+ *
+ * @param pageNum
+ * @param pageSize
+ * @param keyword
+ * @return
+ */
+ public Map<String, Object> myOpenSubjectList(Integer pageNum, Integer pageSize, String keyword) {
+ QSubject qSubject = QSubject.subject;
+ QProgress qProgress = QProgress.progress;
+ QSubjectLecture qSubjectLecture = QSubjectLecture.subjectLecture;
- return this.findListWithMapByHql(hql,CollectionUtils.newObjectMap("origSubjectId",origSubjectId));
- }
+ 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))
+ .from(qSubject, qProgress, qSubjectLecture)
+ .where(qSubject.deleteFlag.isFalse().and(qSubjectLecture.subjectId.eq(qSubject.subjectId))
+ .and(qSubjectLecture.deleteFlag.isFalse()).and(qSubjectLecture.lectureId.eq(qProgress.targetId))
+ .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));
+ map.put("term", tuple.get(qSubject.term));
+ map.put("coverPageUrl", tuple.get(qSubject.coverPageUrl));
+ map.put("progressPercent", tuple.get(qProgress.progressPercent));
+ 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"));
+
+ // 已观看完成课件数量
+ map.put("subjectLectureDoCount", openSubjectDetail.get("subjectLectureDoCount"));
+
+ return map;
+ }).collect(Collectors.toList());
+
+ return CollectionUtils.newObjectMap("count", count, "listData", listData);
+ }
+
+ /**
+ * 课程统计详情
+ *
+ * @param subjectId
+ * @return
+ */
+ public Map<String, Object> openSubjectDetail(String subjectId) {
+ Map<String, Object> map = new HashMap<String, Object>();
+ QMediaVideoLive qMediaVideoLive = QMediaVideoLive.mediaVideoLive;
+ QSubjectLecture qSubjectLecture = QSubjectLecture.subjectLecture;
+ QProgress qProgress = QProgress.progress;
+
+ // 直播数量
+ map.put("mediaVideoLiveCount",
+ this.getQueryFactory().select(qMediaVideoLive).from(qMediaVideoLive)
+ .where(qMediaVideoLive.deleteFlag.isFalse()
+ .and(qMediaVideoLive.status.gt(0))
+ .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))
+ .and(qProgress.targetId.eq(qSubjectLecture.lectureId)))
+ .fetchCount());
+
+ map.put("content", this.readSubjectContent(subjectId));
+
+ // 已观看完成课件数量
+ map.put("subjectLectureDoCount",
+ this.getQueryFactory().select(qSubjectLecture).from(qSubjectLecture, qProgress)
+ .where(qSubjectLecture.deleteFlag.isFalse().and(qProgress.deleteFlag.isFalse())
+ .and(qProgress.learnerId.eq(ClientUtils.getUserId())).and(qProgress.type.eq(Progress.PROGRESS_TYPE_LECTURE))
+ .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 {
+ subjectInfo.put("progressPercent", progress.get(qProgress.progressPercent).floatValue() / (Long) openSubjectDetail.get("subjectLectureCount"));
+ }
+ subjectInfo.put("progressValue", progress == null ? 0 : progress.get(qProgress.progressValue));
+
+ return map;
+ }
+
+ @Override
+ public Map<String, Object> mySubjectInfo(String subjectId, String classId) {
+ 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)
+ .from(qMySubjectV)
+ .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);
+ subject.put("name", objSubject.getName());
+ subject.put("subjectId", subjectId);
+ subject.put("origSubjectId", objSubject.getOrigSubjectId());
+ subject.put("schoolYear", objSubject.getSchoolYear());
+ subject.put("term", objSubject.getTerm());
+ subject.put("coverPageUrl", objSubject.getCoverPageUrl());
+ subject.put("content", this.readSubjectContent(subjectId));
+ subject.put("teacherName", objSubject.getTeacherName());
+ if (tuple == null) {
+ subject.put("progressPercent", 0);
+ subject.put("progressValue", 0);
+ } else {
+ subject.put("progressPercent", tuple.get(qMySubjectV.percent));
+ subject.put("progressValue", tuple.get(qMySubjectV.progressValue));
+ }
+
+ 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%算完成
+ from(qMyLectureV)
+ .where(qMyLectureV.classId.eq(classId).and(qMyLectureV.id.userId.eq(ClientUtils.getUserId()))
+ .and(qMyLectureV.subjectId.eq(subjectId)))
+ .groupBy(qMyLectureV.subjectId).fetchOne();
+
+ long mediaVideoLivesCount = this.mediaLiveService.listCount("", new String[]{classId}, origSubjectId, null);
+
+ return CollectionUtils.newObjectMap("mediaVideoLivesCount", mediaVideoLivesCount, "examsCount", examsCount,
+ "homeworksCount", homeworksCount, "subjectInfo", subject, "lectureCount",
+ tupleLecture == null ? 0 : tupleLecture.get(0, Long.class),
+ "completeLectureCount", tupleLecture == null ? 0 : tupleLecture.get(1, Integer.class));
+ }
+
+ /**
+ * 公开课列表
+ *
+ * @param pageNum
+ * @param pageSize
+ * @param keyword
+ * @return
+ */
+ 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();
+
+ List<Map<String, Object>> listData = query.orderBy(qOpenSubjectV.mediaVideoCount.desc(),
+ qOpenSubjectV.learnerCount.desc(), qOpenSubjectV.createTime.desc()).limit(pageSize).offset(pageNum)
+ .fetch().stream().map(tuple -> {
+ Map<String, Object> map = new HashMap<String, Object>(8);
+
+ map.put("name", tuple.getSubjectName());
+ map.put("subjectId", tuple.getSubjectId());
+ map.put("schoolYear", tuple.getSchoolYear());
+ map.put("term", tuple.getTerm());
+ map.put("coverPageUrl", tuple.getCoverPageUrl());
+ map.put("mediaVideoCount", tuple.getMediaVideoCount());
+ map.put("learnerCount", tuple.getLearnerCount());
+ map.put("createTime", tuple.getCreateTime());
+
+ return map;
+ }).collect(Collectors.toList());
+
+ return CollectionUtils.newObjectMap("count", count, "listData", listData);
+ }
+
+ /**
+ * 班级学员课件总体进度
+ *
+ * @param subjectId
+ * @param classId
+ * @return
+ */
+ @Override
+ public List<Map<String, Object>> studentSubjectLectureProgress(String subjectId, String classId) {
+ QMyLectureV qMyLectureV = QMyLectureV.myLectureV;
+
+ return this.getQueryFactory()
+ .select(qMyLectureV.lectureName, qMyLectureV.id.lectureId, qMyLectureV.lectureType,
+ qMyLectureV.chapterId, qMyLectureV.subjectId, qMyLectureV.lectureCreateTime,
+ qMyLectureV.percent.avg().as(qMyLectureV.percent))
+ .from(qMyLectureV).where(qMyLectureV.classId.eq(classId).and(qMyLectureV.subjectId.eq(subjectId)))
+ .groupBy(qMyLectureV.id.lectureId).orderBy(qMyLectureV.lectureCreateTime.desc()).fetch().stream()
+ .map(tuple -> {
+ Map<String, Object> map = new HashMap<String, Object>(6);
+ map.put("lectureName", tuple.get(qMyLectureV.lectureName));
+ map.put("lectureId", tuple.get(qMyLectureV.id.lectureId));
+ map.put("lectureType", tuple.get(qMyLectureV.lectureType));
+ map.put("chapterId", tuple.get(qMyLectureV.chapterId));
+ map.put("subjectId", tuple.get(qMyLectureV.subjectId));
+ map.put("progressPercent", tuple.get(qMyLectureV.percent));
+ map.put("createTime", tuple.get(qMyLectureV.lectureCreateTime));
+ return map;
+ }).collect(Collectors.toList());
+ }
+
+ /**
+ * 学员课程作业进度
+ *
+ * @param classId
+ * @param subjectId
+ * @return
+ */
+ public Map<String, Object> studentSubjectHomeworkProgress(String classId, String subjectId, String studentId) {
+ QExerciseResultV qHomeworkScoreV = QExerciseResultV.exerciseResultV;
+
+ StuStudent student = read(StuStudent.class, studentId);
+ Subject subject = read(Subject.class, subjectId);
+
+ Tuple tuple = this.getQueryFactory()
+ .select(qHomeworkScoreV.subjectId, qHomeworkScoreV.count(),
+ new CaseBuilder()
+ .when(qHomeworkScoreV.completeStatus.eq(ExerciseCompleteInfo.STATUS_CHECKED)
+ .or(qHomeworkScoreV.completeStatus.eq(ExerciseCompleteInfo.STATUS_COMMIT)))
+ .then(qHomeworkScoreV.studentScore).otherwise(BigDecimal.ZERO).sum(),
+ new CaseBuilder()
+ .when(qHomeworkScoreV.completeStatus.eq(ExerciseCompleteInfo.STATUS_CHECKED)
+ .or(qHomeworkScoreV.completeStatus.eq(ExerciseCompleteInfo.STATUS_COMMIT)))
+ .then(1).otherwise(0).sum())
+ .from(qHomeworkScoreV)
+ .where(qHomeworkScoreV.subjectId.eq(subject.getOrigSubjectId())
+ .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);
+ map.put("homeworkCount", 0);
+ map.put("avgScore", "0");
+ map.put("commitHomeworkCount", 0);
+ } else {
+ int commitHomeworkCount = tuple.get(3, Integer.class) == null ? 0 : tuple.get(3, Integer.class);
+ map.put("subjectId", subjectId);
+ map.put("homeworkCount", tuple.get(1, Integer.class) == null ? 0 : tuple.get(1, Integer.class));
+ 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
+ */
+ public Map<String, Object> studentSubjectExamProgress(String classId, String subjectId, String studentId) {
+ QExamResultV qExamScoreV = QExamResultV.examResultV;
+
+ 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()).
+ from(qExamScoreV).
+ where(qExamScoreV.subjectId.eq(subject.getOrigSubjectId()).and(qExamScoreV.userId.eq(student.getUserId())).and(qExamScoreV.examStatus.eq(ExerciseInfo.EXERCISE_STATUS_PUBLISHED))).
+ groupBy(qExamScoreV.userId).fetchOne();
+ Map<String, Object> map = new HashMap<String, Object>(4);
+ map.put("subjectId", subjectId);
+ if (tuple == null) {
+ map.put("examCount", 0);
+ map.put("avgScore", "0");
+ 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
+ */
+ private List<Map<String, Object>> myLectureList(String classId) {
+ QMyLectureV qMyLectureV = QMyLectureV.myLectureV;
+
+ return this.getQueryFactory().select(qMyLectureV.subjectId,
+ qMyLectureV.count(),
+ 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()))).
+ groupBy(qMyLectureV.subjectId).fetch().stream()
+ .map(tuple -> {
+ Map<String, Object> map = new HashMap<String, Object>(3);
+ map.put("subjectId", tuple.get(0, String.class));
+ map.put("lectureCount", tuple.get(1, Integer.class));
+ map.put("completeLectureCount", tuple.get(2, String.class));
+ return map;
+ }).collect(Collectors.toList());
+ }
+
+ /**
+ * 我的课程,按时间排序
+ *
+ * @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");
+ clsSubject.put("exam", CollectionUtils.newObjectMap("examCount", this.examService.listStudentExamCount("", new String[]{classId}, origSubjectId, null)));
+ 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 统计信息
+ */
+ private void setSubjectStatistics(String type, Map<String, Object> clsSubject, List<Map<String, Object>> lstStatistics) {
+ if (lstStatistics != null && !lstStatistics.isEmpty()) {
+ for (Map<String, Object> statistics : lstStatistics) {
+ if (clsSubject.get("origSubjectId").equals(statistics.get("subjectId")) || clsSubject.get("subjectId").equals(statistics.get("subjectId"))) {
+ clsSubject.put(type, statistics);
+ }
+ }
+ }
+
+ }
+
+ /**
+ * 我的课程详情
+ *
+ * @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");
+ // 课程
+ Tuple tuple = this.getQueryFactory()
+ .select(qMySubjectV.id.subjectId, qMySubjectV.subjectName, qMySubjectV.term, qMySubjectV.schoolYear, qMySubjectV.origSubjectId,
+ qMySubjectV.percent, qMySubjectV.coverPageUrl, qMySubjectV.progressValue)
+ .from(qMySubjectV)
+ .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);
+ subject.put("name", objSubject.getName());
+ subject.put("subjectId", subjectId);
+ subject.put("origSubjectId", objSubject.getOrigSubjectId());
+ subject.put("schoolYear", objSubject.getSchoolYear());
+ subject.put("term", objSubject.getTerm());
+ subject.put("coverPageUrl", objSubject.getCoverPageUrl());
+ subject.put("content", this.readSubjectContent(subjectId));
+ subject.put("teacherName", objSubject.getTeacherName());
+ if (tuple == null) {
+ subject.put("progressPercent", 0);
+ subject.put("progressValue", 0);
+ } else {
+ subject.put("progressPercent", tuple.get(qMySubjectV.percent));
+ subject.put("progressValue", tuple.get(qMySubjectV.progressValue));
+ }
+
+ 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%算完成
+ from(qMyLectureV)
+ .where(qMyLectureV.classId.eq(classId).and(qMyLectureV.id.userId.eq(ClientUtils.getUserId()))
+ .and(qMyLectureV.subjectId.eq(subjectId)))
+ .groupBy(qMyLectureV.subjectId).fetchOne();
+
+ long mediaVideoLivesCount = this.mediaLiveService.listCount("", new String[]{classId}, origSubjectId, null);
+
+ return CollectionUtils.newObjectMap("mediaVideoLivesCount", mediaVideoLivesCount, "examsCount", examsCount,
+ "homeworksCount", homeworksCount, "subjectInfo", subject, "lectureCount",
+ tupleLecture == null ? 0 : tupleLecture.get(0, Long.class),
+ "completeLectureCount", tupleLecture == null ? 0 : tupleLecture.get(1, Integer.class));
+ }
+
+ /**
+ * 我的课程按学期分类
+ *
+ * @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);
+ }
+
+
+ /**
+ * 课程按学期分类
+ *
+ * @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()) {
+ for (Map<String, Object> term : termList) {
+ if (termList != null && !termList.isEmpty()) {
+ List<Map<String, Object>> subjectList = new ArrayList<>();
+ for (Map<String, Object> clsSubject : clsSubjectlist) {
+ if (term.get("schoolYear").equals(clsSubject.get("schoolYear")) &&
+ term.get("term").equals(clsSubject.get("term"))) {
+ subjectList.add(clsSubject);
+ }
+ term.put("subjectList", subjectList);
+ }
+ }
+ }
+ }
+ return termList;
+ }
+
+
+ /**
+ * 查询课程关联的班级课程信息
+ *
+ * @param classId
+ * @return
+ */
+ @Override
+ public List<Map<String, Object>> querySubjectReClassInfos(String origSubjectId) {
+ String hql = "select s.subjectId as subjectId ,s.teacherId as teacherId,s.teacherName as teacherName,"
+ + " 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));
+ }
};
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/student/model/QStuStudent.java b/target/generated-sources/java/com/qxueyou/scc/teach/student/model/QStuStudent.java
index 1c3e0e2..40666bd 100644
--- a/target/generated-sources/java/com/qxueyou/scc/teach/student/model/QStuStudent.java
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/student/model/QStuStudent.java
@@ -19,6 +19,8 @@
public static final QStuStudent stuStudent = new QStuStudent("stuStudent");
+ public final StringPath attendanceStatus = createString("attendanceStatus");
+
public final StringPath classId = createString("classId");
public final StringPath createId = createString("createId");
@@ -43,6 +45,8 @@
public final StringPath studentNo = createString("studentNo");
+ public final StringPath studentNumber = createString("studentNumber");
+
public final NumberPath<java.math.BigDecimal> studyDuration = createNumber("studyDuration", java.math.BigDecimal.class);
public final StringPath subjectId = createString("subjectId");
diff --git a/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMyLectureV.java b/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMyLectureV.java
index 1c087ed..77ad532 100644
--- a/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMyLectureV.java
+++ b/target/generated-sources/java/com/qxueyou/scc/teach/subject/model/view/QMyLectureV.java
@@ -40,14 +40,15 @@
public final NumberPath<java.math.BigDecimal> progressValue = createNumber("progressValue", java.math.BigDecimal.class);
- public final StringPath status = createString("status");
-
public final StringPath subjectId = createString("subjectId");
public final StringPath subjectName = createString("subjectName");
public final StringPath userName = createString("userName");
+ public final StringPath deleteFlag = createString("deleteFlag");
+
+
public QMyLectureV(String variable) {
this(MyLectureV.class, forVariable(variable), INITS);
}
--
Gitblit v1.8.0