diff --git a/admin-core/src/main/java/com/ibeetl/admin/core/entity/BaseEntity.java b/admin-core/src/main/java/com/ibeetl/admin/core/entity/BaseEntity.java index 2a76d66c..e21b706f 100644 --- a/admin-core/src/main/java/com/ibeetl/admin/core/entity/BaseEntity.java +++ b/admin-core/src/main/java/com/ibeetl/admin/core/entity/BaseEntity.java @@ -21,8 +21,8 @@ public class BaseEntity extends TailBean implements java.io.Serializable { public Map getTails(){ return super.getTails(); } - - - + public void putAll(Map map) { + super.extMap.putAll(map); + } } diff --git a/web/src/main/java/com/ibeetl/jlw/dao/QuestionLogSummaryDao.java b/web/src/main/java/com/ibeetl/jlw/dao/QuestionLogSummaryDao.java index f554abf2..0e54a8e3 100644 --- a/web/src/main/java/com/ibeetl/jlw/dao/QuestionLogSummaryDao.java +++ b/web/src/main/java/com/ibeetl/jlw/dao/QuestionLogSummaryDao.java @@ -2,6 +2,7 @@ package com.ibeetl.jlw.dao; import com.ibeetl.jlw.entity.QuestionLogSummary; import com.ibeetl.jlw.entity.vo.QuestionLogSummaryAnalysisVO; +import com.ibeetl.jlw.enums.ResourcesQuestionSnapshotFromTypeEnum; import com.ibeetl.jlw.web.query.QuestionLogSummaryQuery; import org.beetl.sql.core.engine.PageQuery; import org.beetl.sql.mapper.BaseMapper; @@ -47,4 +48,12 @@ public interface QuestionLogSummaryDao extends BaseMapper{ * @return */ PageQuery analysisPageQuery(PageQuery query); + + /** + * 求平均值 + * @param questionSettingIds + * @param questionSettingType + * @return + */ + Map analysisAvg(String questionSettingIds, ResourcesQuestionSnapshotFromTypeEnum questionSettingType); } diff --git a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseQuestionSettingService.java b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseQuestionSettingService.java index 3e441e4c..14982792 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseQuestionSettingService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseQuestionSettingService.java @@ -1,6 +1,7 @@ package com.ibeetl.jlw.service; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.ConcurrentHashSet; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; @@ -20,6 +21,7 @@ import com.ibeetl.admin.core.web.JsonReturnCode; import com.ibeetl.jlw.dao.*; import com.ibeetl.jlw.entity.*; import com.ibeetl.jlw.entity.dto.QuestionSettingDTO; +import com.ibeetl.jlw.entity.vo.OpenCourseQuestionSettingAnalysisAvgVO; import com.ibeetl.jlw.entity.vo.TeacherOpenCourseQuestionSettingAnalysisVO; import com.ibeetl.jlw.enums.*; import com.ibeetl.jlw.service.questionQueue.questionSettingQueue.QuestionSettingRedisDelayQueueImpl; @@ -43,6 +45,7 @@ import java.util.stream.Collectors; import static cn.hutool.core.text.CharSequenceUtil.join; import static cn.jlw.util.CacheUserUtil.getStudent; import static cn.jlw.util.QuestionUtil.shuffleQuestion; +import static com.ibeetl.jlw.enums.GlobalPushStatusEnum.PUSH; import static com.ibeetl.jlw.enums.QuestionLogAddTypeEnum.FINALLY_SUBMIT; import static com.ibeetl.jlw.enums.QuestionLogAddTypeEnum.PRE_SUBMIT; import static com.ibeetl.jlw.enums.ResourcesQuestionSnapshotFromTypeEnum.*; @@ -73,6 +76,8 @@ public class TeacherOpenCourseQuestionSettingService extends CoreBaseServicequeryByCondition(PageQuery query){ PageQuery ret = teacherOpenCourseQuestionSettingDao.queryByCondition(query); @@ -904,4 +909,46 @@ public class TeacherOpenCourseQuestionSettingService extends CoreBaseService + * 分析汇总 + * + * @param teacherOpenCourseId 开课ID + * @param questionSettingType 题目配置类型 + * @Author: 87966 + * @Date: 2022/12/21 22:40 + */ + public OpenCourseQuestionSettingAnalysisAvgVO analysisTotal(Long teacherOpenCourseId, ResourcesQuestionSnapshotFromTypeEnum questionSettingType) { + + TeacherOpenCourseQuestionSettingQuery settingQuery = new TeacherOpenCourseQuestionSettingQuery(); + settingQuery.setTeacherOpenCourseQuestionSettingStatus(1); + settingQuery.setTeacherOpenCourseId(teacherOpenCourseId); + settingQuery.setTeacherOpenCourseQuestionSettingPushStatus(PUSH); + settingQuery.setTeacherOpenCourseQuestionSettingType(questionSettingType); + List settingList = teacherOpenCourseQuestionSettingDao.getValuesByQueryNotWithPermission(settingQuery); + List questionSettingIdList = CollectionUtil.emptyIfNull(settingList).stream() + .map(TeacherOpenCourseQuestionSetting::getTeacherOpenCourseQuestionSettingId).map(Objects::toString).collect(Collectors.toList()); + String questionSettingIds = join( ",", questionSettingIdList); + + OpenCourseQuestionSettingAnalysisAvgVO analysisAvgVO = new OpenCourseQuestionSettingAnalysisAvgVO(); + + if (StrUtil.isNotBlank(questionSettingIds)) { + ResourcesQuestionSnapshotQuery snapshotQuery = new ResourcesQuestionSnapshotQuery(); + snapshotQuery.setTeacherOpenCourseQuestionSettingIdPlural(questionSettingIds); + snapshotQuery.setQuestionStatus(1); + + long questionCount = resourcesQuestionSnapshotDao.createLambdaQuery() + .andIn(ResourcesQuestionSnapshot::getTeacherOpenCourseQuestionSettingId, questionSettingIdList) + .andEq(ResourcesQuestionSnapshot::getQuestionStatus, 1) + .count(); + + Map stringObjectMap = questionLogSummaryDao.analysisAvg(questionSettingIds, questionSettingType); + analysisAvgVO.setSettingTotalCount(questionSettingIdList.size()); + analysisAvgVO.setQuestionTotalCount(questionCount); + analysisAvgVO.putAll(stringObjectMap); + } + + return analysisAvgVO; + } } diff --git a/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseQuestionSettingController.java b/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseQuestionSettingController.java index 3bd8fa30..dfdb7bfc 100644 --- a/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseQuestionSettingController.java +++ b/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseQuestionSettingController.java @@ -160,6 +160,17 @@ public class TeacherOpenCourseQuestionSettingController{ return JsonResult.success(teacherOpenCourseQuestionSettingService.analysis(teacherOpenCourseId, questionSettingType)); } + /** + * 题目配置,统计分析接口 + * @param teacherOpenCourseId 开课ID + * @param questionSettingType 题目配置类型 + * @return + */ + @PostMapping(API + "/analysisTotal.do") + public JsonResult analysisTotal(Long teacherOpenCourseId, ResourcesQuestionSnapshotFromTypeEnum questionSettingType, @SCoreUser CoreUser coreUser) { + return JsonResult.success(teacherOpenCourseQuestionSettingService.analysisTotal(teacherOpenCourseId, questionSettingType)); + } + /** * 逻辑删除 * @param ids diff --git a/web/src/main/resources/sql/jlw/questionLogSummary.md b/web/src/main/resources/sql/jlw/questionLogSummary.md index 34cba5b0..42a38ff9 100644 --- a/web/src/main/resources/sql/jlw/questionLogSummary.md +++ b/web/src/main/resources/sql/jlw/questionLogSummary.md @@ -867,6 +867,7 @@ getExcelValues analysisPageQuery === * 题目配置,统计分析接口。用于分析所有题目类型的平均值 + select @pageTag(){ z.* @@ -875,8 +876,8 @@ analysisPageQuery select ta.teacher_open_course_question_setting_name as question_setting_name, ta.teacher_open_course_question_setting_type as question_setting_type, - count(distinct(ab.resources_question_snapshot_id)) as question_total_count, - count(distinct(t.question_setting_id)) as total_setting_count, + count((ab.resources_question_snapshot_id)) as question_total_count, + count(distinct(ta.teacher_open_course_question_setting_id)) as total_setting_count, round(avg(question_setting_total_score), 1) as avg_question_setting_total_score, round(avg(question_log_summary_student_total_score), 1) as avg_student_score, round(avg(question_log_summary_question_total_count), 1) as avg_question_total_count, @@ -903,4 +904,28 @@ analysisPageQuery ta.teacher_open_course_question_setting_name, ta.teacher_open_course_question_setting_type ) z - \ No newline at end of file + +analysisAvg +=== +* 平均值分析 + + select + round(avg(question_setting_total_score), 1) as avg_question_setting_total_score, + round(avg(question_log_summary_student_total_score), 1) as avg_student_score, + round(avg(question_log_summary_question_total_count), 1) as avg_question_total_count, + round(avg(question_log_summary_student_do_count), 1) as avg_question_log_summary_student_do_count, + round(avg(question_log_summary_success_count), 1) as avg_correct_count, + round(avg(question_log_summary_error_count), 1)as avg_wrong_count, + round(avg(question_log_summary_success_rate), 1) as avg_question_log_summary_success_rate, + round(avg(question_log_summary_is_pass), 1) as avg_question_log_summary_is_pass, + round(avg(finish_second_time), 1) as avg_finish_second_time + from question_log_summary t + where 1 + @if(!isEmpty(questionSettingType)) { + and t.question_setting_type = #questionSettingType# + @} + @if(!isEmpty(questionSettingType)) { + and find_in_set(t.question_setting_id, #questionSettingIds#) + @} + and t.question_log_summary_status = 1 + \ No newline at end of file