|
|
|
@ -8,10 +8,7 @@ import com.ibeetl.admin.core.entity.CoreUser;
|
|
|
|
|
import com.ibeetl.admin.core.util.enums.DelFlagEnum;
|
|
|
|
|
import com.ibeetl.jlw.dao.*;
|
|
|
|
|
import com.ibeetl.jlw.entity.*;
|
|
|
|
|
import com.ibeetl.jlw.enums.ChatLogSendTypeEnum;
|
|
|
|
|
import com.ibeetl.jlw.enums.GlobalPushStatusEnum;
|
|
|
|
|
import com.ibeetl.jlw.enums.ResourcesQuestionSnapshotFromTypeEnum;
|
|
|
|
|
import com.ibeetl.jlw.enums.SignInTypeEnum;
|
|
|
|
|
import com.ibeetl.jlw.enums.*;
|
|
|
|
|
import com.ibeetl.jlw.web.query.*;
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
import org.beetl.sql.core.query.LambdaQuery;
|
|
|
|
@ -28,48 +25,79 @@ import static com.ibeetl.jlw.enums.ResourcesQuestionSnapshotFromTypeEnum.HOMEWOR
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 统计分析service
|
|
|
|
|
*
|
|
|
|
|
* @Version 0.0.1
|
|
|
|
|
* @Author 许良彤
|
|
|
|
|
* @Date 2022/10/7 12:25
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
@Service
|
|
|
|
|
public class StatisticalAnalysisService {
|
|
|
|
|
|
|
|
|
|
@Autowired private StatisticalAnalysisDao statisticalAnalysisDao;
|
|
|
|
|
@Autowired private TeacherOpenCourseMergeSchoolClassService teacherOpenCourseMergeSchoolClassService;
|
|
|
|
|
@Autowired private TeacherOpenCourseMergeStudentService teacherOpenCourseMergeStudentService;
|
|
|
|
|
@Autowired private TeacherOpenCourseNoticeService teacherOpenCourseNoticeService;
|
|
|
|
|
@Autowired private StudentService studentService;
|
|
|
|
|
@Autowired private TeacherService teacherService;
|
|
|
|
|
@Autowired private CourseInfoService courseInfoService;
|
|
|
|
|
@Autowired private ResourcesApplicationService resourcesApplicationService;
|
|
|
|
|
@Autowired private UniversitiesCollegesDao universitiesCollegesDao;
|
|
|
|
|
@Autowired private SysLogDao sysLogDao;
|
|
|
|
|
@Autowired private UniversitiesCollegesService universitiesCollegesService;
|
|
|
|
|
@Autowired private CoreUserDao coreUserDao;
|
|
|
|
|
@Autowired private ResourcesTrainingDao resourcesTrainingService;
|
|
|
|
|
@Autowired private ResourcesInfoService resourcesInfoService;
|
|
|
|
|
@Autowired private ResourcesQuestionService resourcesQuestionService;
|
|
|
|
|
@Autowired private TeacherOpenCourseStudentSigninLogService teacherOpenCourseStudentSigninLogService;
|
|
|
|
|
@Autowired private TeacherOpenCourseQuestionSettingService teacherOpenCourseQuestionSettingService;
|
|
|
|
|
@Autowired private TeacherOpenCourseMergeCourseInfoService teacherOpenCourseMergeCourseInfoService;
|
|
|
|
|
@Autowired private TeacherOpenCourseQuestionLogService teacherOpenCourseQuestionLogService;
|
|
|
|
|
@Autowired private TeacherOpenCourseHandsOnService teacherOpenCourseHandsOnService;
|
|
|
|
|
@Autowired private TeacherOpenCourseHandsOnSimulationTasksService teacherOpenCourseHandsOnSimulationTasksService;
|
|
|
|
|
@Autowired private HandsOnAchievementService handsOnAchievementService;
|
|
|
|
|
@Autowired private TeacherOpenCourseChatLogService teacherOpenCourseChatLogService;
|
|
|
|
|
@Autowired private TeacherOpenCourseDao teacherOpenCourseService;
|
|
|
|
|
@Autowired private TeacherOpenCourseQuestionSettingDao teacherOpenCourseQuestionSettingDao;
|
|
|
|
|
@Autowired private HandsOnDao handsOnService;
|
|
|
|
|
@Autowired private ResourcesCompetitionDao resourcesCompetitionService;
|
|
|
|
|
@Autowired private TeacherOpenCourseScoreDashboardDao teacherOpenCourseScoreDashboardDao;
|
|
|
|
|
@Autowired private QuestionLogSummaryDao questionLogSummaryDao;
|
|
|
|
|
@Autowired private TeacherOpenCourseQuestionLogDao teacherOpenCourseQuestionLogDao;
|
|
|
|
|
@Autowired private ResourcesQuestionSnapshotService resourcesQuestionSnapshotService;
|
|
|
|
|
@Autowired private ResourcesQuestionSnapshotDao resourcesQuestionSnapshotDao;
|
|
|
|
|
@Autowired private UniversitiesCollegesJurisdictionExperimentalSystemDao universitiesCollegesJurisdictionExperimentalSystemDao;
|
|
|
|
|
@Autowired private UniversitiesCollegesJurisdictionCurriculumResourcesService universitiesCollegesJurisdictionCurriculumResourcesService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private TeacherOpenCourseMergeSchoolClassService teacherOpenCourseMergeSchoolClassService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private TeacherOpenCourseMergeStudentService teacherOpenCourseMergeStudentService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private TeacherOpenCourseNoticeService teacherOpenCourseNoticeService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private StudentService studentService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private TeacherService teacherService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private ResourcesApplicationService resourcesApplicationService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private UniversitiesCollegesDao universitiesCollegesDao;
|
|
|
|
|
@Autowired
|
|
|
|
|
private SysLogDao sysLogDao;
|
|
|
|
|
@Autowired
|
|
|
|
|
private UniversitiesCollegesService universitiesCollegesService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private CoreUserDao coreUserDao;
|
|
|
|
|
@Autowired
|
|
|
|
|
private ResourcesTrainingDao resourcesTrainingService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private ResourcesInfoService resourcesInfoService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private ResourcesQuestionService resourcesQuestionService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private TeacherOpenCourseStudentSigninLogService teacherOpenCourseStudentSigninLogService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private TeacherOpenCourseQuestionSettingService teacherOpenCourseQuestionSettingService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private TeacherOpenCourseMergeCourseInfoService teacherOpenCourseMergeCourseInfoService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private TeacherOpenCourseQuestionLogService teacherOpenCourseQuestionLogService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private TeacherOpenCourseHandsOnService teacherOpenCourseHandsOnService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private TeacherOpenCourseHandsOnSimulationTasksService teacherOpenCourseHandsOnSimulationTasksService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private HandsOnAchievementService handsOnAchievementService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private TeacherOpenCourseChatLogService teacherOpenCourseChatLogService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private TeacherOpenCourseDao teacherOpenCourseService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private TeacherOpenCourseQuestionSettingDao teacherOpenCourseQuestionSettingDao;
|
|
|
|
|
@Autowired
|
|
|
|
|
private HandsOnDao handsOnService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private ResourcesCompetitionDao resourcesCompetitionService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private TeacherOpenCourseScoreDashboardDao teacherOpenCourseScoreDashboardDao;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private UniversitiesCollegesJurisdictionExperimentalSystemDao universitiesCollegesJurisdictionExperimentalSystemDao;
|
|
|
|
|
@Autowired
|
|
|
|
|
private UniversitiesCollegesJurisdictionCurriculumResourcesService universitiesCollegesJurisdictionCurriculumResourcesService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private TeacherOpenCourseMergeResourcesInfoService teacherOpenCourseMergeResourcesInfoService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private TeacherOpenCourseMergeResourcesQuestionService teacherOpenCourseMergeResourcesQuestionService;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static final String PATTERN = "(?<=\"code\":\\[\").*?(?=\"\\],)";
|
|
|
|
@ -77,6 +105,7 @@ public class StatisticalAnalysisService {
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 统计分析
|
|
|
|
|
*
|
|
|
|
|
* @param
|
|
|
|
|
*/
|
|
|
|
|
public Map<String, Object> detail(Long teacherOpenCourseId, Date stime, Date etime) {
|
|
|
|
@ -101,9 +130,9 @@ public class StatisticalAnalysisService {
|
|
|
|
|
long count1 = scoreDashboards.stream().filter(v ->
|
|
|
|
|
"不及格".equals(v.getLastStatus()) || "E".equals(v.getLastStatus())).count();
|
|
|
|
|
long l = scoreDashboards.size() - count1;
|
|
|
|
|
data.put("passRate", NumberUtil.formatPercent(NumberUtil.div(l,studentList.size()), 0));
|
|
|
|
|
data.put("studentPassNum",l );
|
|
|
|
|
}else {
|
|
|
|
|
data.put("passRate", NumberUtil.formatPercent(NumberUtil.div(l, studentList.size()), 0));
|
|
|
|
|
data.put("studentPassNum", l);
|
|
|
|
|
} else {
|
|
|
|
|
data.put("passRate", "0%");
|
|
|
|
|
data.put("studentPassNum", 0);
|
|
|
|
|
}
|
|
|
|
@ -130,9 +159,9 @@ public class StatisticalAnalysisService {
|
|
|
|
|
//签到数量
|
|
|
|
|
data.put("signInNum", collect.size());
|
|
|
|
|
//到课率
|
|
|
|
|
if(CollectionUtil.isNotEmpty(collect)) {
|
|
|
|
|
if (CollectionUtil.isNotEmpty(collect)) {
|
|
|
|
|
data.put("signInRate", NumberUtil.div(NumberUtil.toBigDecimal(collect.size()), NumberUtil.toBigDecimal(signinLogs.size()), 2).multiply(BigDecimal.valueOf(100)).intValue());
|
|
|
|
|
}else {
|
|
|
|
|
} else {
|
|
|
|
|
data.put("signInRate", 0);
|
|
|
|
|
}
|
|
|
|
|
//章节练习
|
|
|
|
@ -156,7 +185,7 @@ public class StatisticalAnalysisService {
|
|
|
|
|
List<TeacherOpenCourseQuestionLog> values = teacherOpenCourseQuestionLogService.getValues(teacherOpenCourseQuestionLogQuery);
|
|
|
|
|
int size = values.stream().map(TeacherOpenCourseQuestionLog::getStudentId).collect(Collectors.toSet()).size();
|
|
|
|
|
data.put("chapterPeople", size);
|
|
|
|
|
}else {
|
|
|
|
|
} else {
|
|
|
|
|
data.put("chapterPeople", 0);
|
|
|
|
|
}
|
|
|
|
|
//课程实操
|
|
|
|
@ -178,7 +207,7 @@ public class StatisticalAnalysisService {
|
|
|
|
|
List<HandsOnAchievement> assessmentList = handsOnAchievementService.getValues(achievementQuery);
|
|
|
|
|
long count = assessmentList.stream().map(HandsOnAchievement::getStudentId).count();
|
|
|
|
|
data.put("handsOnPeople", count);
|
|
|
|
|
}else {
|
|
|
|
|
} else {
|
|
|
|
|
data.put("handsOnPeople", 0);
|
|
|
|
|
}
|
|
|
|
|
//作业
|
|
|
|
@ -193,7 +222,7 @@ public class StatisticalAnalysisService {
|
|
|
|
|
List<TeacherOpenCourseQuestionLog> values = teacherOpenCourseQuestionLogService.getValues(teacherOpenCourseQuestionLogQuery);
|
|
|
|
|
int size = values.stream().map(TeacherOpenCourseQuestionLog::getStudentId).collect(Collectors.toSet()).size();
|
|
|
|
|
data.put("homeworkPeople", size);
|
|
|
|
|
}else {
|
|
|
|
|
} else {
|
|
|
|
|
//作业参与人数
|
|
|
|
|
data.put("homeworkPeople", 0);
|
|
|
|
|
}
|
|
|
|
@ -207,7 +236,7 @@ public class StatisticalAnalysisService {
|
|
|
|
|
List<TeacherOpenCourseQuestionLog> values = teacherOpenCourseQuestionLogService.getValues(teacherOpenCourseQuestionLogQuery);
|
|
|
|
|
int size = values.stream().map(TeacherOpenCourseQuestionLog::getStudentId).collect(Collectors.toSet()).size();
|
|
|
|
|
data.put("examPeople", size);
|
|
|
|
|
}else {
|
|
|
|
|
} else {
|
|
|
|
|
//考试参与人数
|
|
|
|
|
data.put("examPeople", 0);
|
|
|
|
|
}
|
|
|
|
@ -232,6 +261,7 @@ public class StatisticalAnalysisService {
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 首页
|
|
|
|
|
*
|
|
|
|
|
* @param
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
@ -261,24 +291,37 @@ public class StatisticalAnalysisService {
|
|
|
|
|
List<TeacherOpenCourseMergeStudent> studentList = teacherOpenCourseMergeStudentService.getValuesByQueryNotWithPermission(studentQuery);
|
|
|
|
|
data.put("studentNum", studentList.size());
|
|
|
|
|
//课件
|
|
|
|
|
TeacherOpenCourseMergeResourcesInfoQuery teacherOpenCourseMergeResourcesInfoQuery = new TeacherOpenCourseMergeResourcesInfoQuery();
|
|
|
|
|
teacherOpenCourseMergeResourcesInfoQuery.setTeacherOpenCourseId(teacherOpenCourseId);
|
|
|
|
|
teacherOpenCourseMergeResourcesInfoQuery.setResourcesInfoStatus(GlobalUpStatusEnum.UP);
|
|
|
|
|
List<TeacherOpenCourseMergeResourcesInfo> resourcesInfoList = teacherOpenCourseMergeResourcesInfoService.getValuesByQueryNotWithPermission(teacherOpenCourseMergeResourcesInfoQuery);
|
|
|
|
|
data.put("coursewareNum", resourcesInfoList.size());
|
|
|
|
|
|
|
|
|
|
TeacherOpenCourseMergeCourseInfoQuery courseInfoQuery = new TeacherOpenCourseMergeCourseInfoQuery();
|
|
|
|
|
courseInfoQuery.setTeacherOpenCourseId(teacherOpenCourseId);
|
|
|
|
|
courseInfoQuery.setCourseInfoStatus(1);
|
|
|
|
|
List<TeacherOpenCourseMergeCourseInfo> courseInfos = teacherOpenCourseMergeCourseInfoService.getValuesByQueryNotWithPermission(courseInfoQuery);
|
|
|
|
|
data.put("coursewareNum", courseInfos.size());
|
|
|
|
|
//视频
|
|
|
|
|
List<TeacherOpenCourseMergeCourseInfo> videoCount = courseInfos.stream().filter(v -> v.getCourseVideoId() != null).collect(Collectors.toList());
|
|
|
|
|
data.put("videoNum", videoCount.size());
|
|
|
|
|
|
|
|
|
|
//题目
|
|
|
|
|
//习题总数
|
|
|
|
|
|
|
|
|
|
TeacherOpenCourseMergeResourcesQuestionQuery teacherOpenCourseMergeResourcesQuestionQuery = new TeacherOpenCourseMergeResourcesQuestionQuery();
|
|
|
|
|
teacherOpenCourseMergeResourcesQuestionQuery.setTeacherOpenCourseId(teacherOpenCourseId);
|
|
|
|
|
teacherOpenCourseMergeResourcesQuestionQuery.setQuestionStatus(1);
|
|
|
|
|
List<TeacherOpenCourseMergeResourcesQuestion> questionList = teacherOpenCourseMergeResourcesQuestionService.getValuesByQueryNotWithPermission(teacherOpenCourseMergeResourcesQuestionQuery);
|
|
|
|
|
data.put("subjectNum", questionList.size());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TeacherOpenCourseQuestionSettingQuery teacherOpenCourseQuestionSettingQuery = new TeacherOpenCourseQuestionSettingQuery();
|
|
|
|
|
teacherOpenCourseQuestionSettingQuery.setTeacherOpenCourseId(teacherOpenCourseId);
|
|
|
|
|
teacherOpenCourseQuestionSettingQuery.setTeacherOpenCourseQuestionSettingPushStatus(GlobalPushStatusEnum.PUSH);
|
|
|
|
|
teacherOpenCourseQuestionSettingQuery.setTeacherOpenCourseQuestionSettingStatus(1);
|
|
|
|
|
|
|
|
|
|
List<TeacherOpenCourseQuestionSettingPure> courseQuestionSettings = teacherOpenCourseQuestionSettingDao.getValuesByQueryNotWithPermission2(teacherOpenCourseQuestionSettingQuery);
|
|
|
|
|
List<TeacherOpenCourseQuestionSettingPure> collect1 = courseQuestionSettings.stream().filter(v -> v.getTeacherOpenCourseQuestionSettingType().equals(ResourcesQuestionSnapshotFromTypeEnum.CHAPTER_EXERCISE)).collect(Collectors.toList());
|
|
|
|
|
data.put("subjectNum", collect1.size());
|
|
|
|
|
//List<TeacherOpenCourseQuestionSettingPure> collect1 = courseQuestionSettings.stream().filter(v -> v.getTeacherOpenCourseQuestionSettingType().equals(ResourcesQuestionSnapshotFromTypeEnum.CHAPTER_EXERCISE)).collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
//案例
|
|
|
|
|
TeacherOpenCourseHandsOnQuery teacherOpenCourseHandsOnQuery = new TeacherOpenCourseHandsOnQuery();
|
|
|
|
|
teacherOpenCourseHandsOnQuery.setTeacherOpenCourseId(teacherOpenCourseId);
|
|
|
|
@ -459,13 +502,13 @@ public class StatisticalAnalysisService {
|
|
|
|
|
List<String> xList = new ArrayList<>();
|
|
|
|
|
List<Long> yList = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
collect.forEach((x,y) -> {
|
|
|
|
|
collect.forEach((x, y) -> {
|
|
|
|
|
xList.add(x);
|
|
|
|
|
yList.add(y);
|
|
|
|
|
});
|
|
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
|
|
map.put("xList" , xList);
|
|
|
|
|
map.put("yList" , yList);
|
|
|
|
|
map.put("xList", xList);
|
|
|
|
|
map.put("yList", yList);
|
|
|
|
|
return map;
|
|
|
|
|
}
|
|
|
|
|
}
|