题目分析汇总导出

beetlsql3-dev
Mlxa0324 2 years ago
parent c29da66759
commit 8f3d73dbee

@ -1,6 +1,7 @@
package com.ibeetl.jlw.dao;
import com.ibeetl.jlw.entity.QuestionLogSummary;
import com.ibeetl.jlw.entity.vo.QuestionLogSummaryAnalysisVO;
import com.ibeetl.jlw.web.query.QuestionLogSummaryQuery;
import org.beetl.sql.core.engine.PageQuery;
import org.beetl.sql.mapper.BaseMapper;
@ -38,4 +39,12 @@ public interface QuestionLogSummaryDao extends BaseMapper<QuestionLogSummary>{
*/
@Update
int logicDeleteByQuestionSettingIds(String questionSettingIds);
/**
*
*
* @param query
* @return
*/
PageQuery<QuestionLogSummaryAnalysisVO> analysisPageQuery(PageQuery query);
}

@ -0,0 +1,94 @@
package com.ibeetl.jlw.entity.vo;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.excel.annotation.ExcelProperty;
import com.ibeetl.admin.core.entity.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.FieldNameConstants;
/**
* : <br>
*
* @author: mlx
* @description:
* @date: 2022/12/12 15:56
* @version: 1.0
*/
@Data
@FieldNameConstants
@EqualsAndHashCode(callSuper=false)
public class QuestionLogSummaryAnalysisVO extends BaseEntity {
/**
*
*/
@ExcelProperty(value = "名称", index = 1)
private String questionSettingName;
/**
*
*/
@ExcelProperty(value = "题目总数", index = 2)
private String questionTotalCount;
/**
*
*/
@ExcelProperty(value = "合计场次", index = 3)
private String totalSettingCount;
/**
*
*/
@ExcelProperty(value = "平均答对数量", index = 4)
private String avgCorrectCount;
/**
*
*/
@ExcelProperty(value = "平均答错数量", index = 5)
private String avgWrongCount;
/**
*
*/
@ExcelProperty(value = "学生平均分数", index = 6)
private String avgStudentScore;
/**
*
*/
@ExcelProperty(value = "总班级数", index = 7)
private String totalSchoolClassCount;
/**
*
*/
@ExcelProperty(value = "平均做题数量", index = 8)
private String avgQuestionLogSummaryStudentDoCount;
/**
*
*/
@ExcelProperty(value = "平均正确率", index = 9)
private String avgQuestionLogSummarySuccessRate;
/**
*
*/
@ExcelProperty(value = "平均通过率", index = 10)
private String avgQuestionLogSummaryIsPass;
/**
*
*/
@ExcelProperty(value = "平均用时(秒)", index = 11)
private String avgFinishSecondTime;
/**
*
*/
@ExcelProperty(value = "平均用时 时间格式", index = 12)
private String avgFinishTime;
public void setAvgFinishSecondTime(String avgFinishSecondTime) {
this.avgFinishSecondTime = avgFinishSecondTime;
if (StrUtil.isNotBlank(avgFinishSecondTime) && NumberUtil.isNumber(avgFinishSecondTime)) {
setAvgFinishTime(DateUtil.secondToTime(NumberUtil.toBigDecimal(avgFinishSecondTime).intValue()));
}
}
}

@ -5,6 +5,7 @@ import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import com.ibeetl.admin.core.entity.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.FieldNameConstants;
/**
@ -18,6 +19,7 @@ import lombok.experimental.FieldNameConstants;
*/
@Data
@FieldNameConstants
@EqualsAndHashCode(callSuper=false)
public class TeacherOpenCourseQuestionSettingAnalysisVO extends BaseEntity {
/**

@ -13,6 +13,7 @@ import com.ibeetl.admin.core.web.JsonReturnCode;
import com.ibeetl.jlw.dao.QuestionLogSummaryDao;
import com.ibeetl.jlw.entity.FileEntity;
import com.ibeetl.jlw.entity.QuestionLogSummary;
import com.ibeetl.jlw.entity.vo.QuestionLogSummaryAnalysisVO;
import com.ibeetl.jlw.enums.QuestionBusinessTypeEnum;
import com.ibeetl.jlw.enums.ResourcesQuestionSnapshotFromTypeEnum;
import com.ibeetl.jlw.web.query.QuestionLogSummaryQuery;
@ -383,4 +384,20 @@ public class QuestionLogSummaryService extends CoreBaseService<QuestionLogSummar
public List<Map<String,Object>> getExcelValues (QuestionLogSummaryQuery questionLogSummaryQuery){
return questionLogSummaryDao.getExcelValues(questionLogSummaryQuery);
}
/**
* : <br>
*
*
*
* @param query
* teacherOpenCourseId ID
* questionSettingType {@link ResourcesQuestionSnapshotFromTypeEnum}
* @return {@link QuestionLogSummaryAnalysisVO}
* @Author: lx
* @Date: 2022/12/12 16:00
*/
public PageQuery<QuestionLogSummaryAnalysisVO> analysisPageQuery(PageQuery query) {
return questionLogSummaryDao.analysisPageQuery(query);
}
}

@ -14,8 +14,11 @@ import com.ibeetl.admin.core.file.FileService;
import com.ibeetl.admin.core.util.BeanCopyUtil;
import com.ibeetl.admin.core.util.TimeTool;
import com.ibeetl.admin.core.web.JsonResult;
import com.ibeetl.admin.core.web.query.PageParam;
import com.ibeetl.jlw.entity.FileEntity;
import com.ibeetl.jlw.entity.QuestionLogSummary;
import com.ibeetl.jlw.entity.vo.QuestionLogSummaryAnalysisVO;
import com.ibeetl.jlw.enums.ResourcesQuestionSnapshotFromTypeEnum;
import com.ibeetl.jlw.service.QuestionLogSummaryService;
import com.ibeetl.jlw.web.query.QuestionLogSummaryQuery;
import lombok.SneakyThrows;
@ -40,9 +43,13 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
import static cn.jlw.util.PageUtil.ofDefault;
import static com.ibeetl.admin.core.util.BeanCopyUtil.baseEntity2MapWithParallel;
import static com.ibeetl.admin.core.util.BeanUtil.processExcelAnnotationToMap;
import static com.ibeetl.admin.core.util.ExcelUtil.convertData;
import static com.ibeetl.admin.core.util.ExcelUtil.write;
import static com.ibeetl.admin.core.util.user.CacheUserUtil.getUser;
@ -54,7 +61,7 @@ import static com.ibeetl.admin.core.util.user.CacheUserUtil.getUser;
@RestController
@Validated
public class QuestionLogSummaryController{
public class QuestionLogSummaryController extends BaseController {
private final Log log = LogFactory.getLog(this.getClass());
private static final String MODEL = "/jlw/questionLogSummary";
@ -100,6 +107,46 @@ public class QuestionLogSummaryController{
}
}
/**
*
* @param teacherOpenCourseId ID
* @param questionSettingType
* @return
*/
@PostMapping(API + "/analysis.do")
public JsonResult analysisDo(PageParam param, Long teacherOpenCourseId, ResourcesQuestionSnapshotFromTypeEnum questionSettingType, @SCoreUser CoreUser coreUser) {
PageQuery<Object> objectPageQuery = ofDefault(new PageQuery<>(), param);
objectPageQuery.setPara("questionSettingType", questionSettingType);
objectPageQuery.setPara("teacherOpenCourseId", teacherOpenCourseId);
return JsonResult.success(questionLogSummaryService.analysisPageQuery(objectPageQuery));
}
/**
*
* @param teacherOpenCourseId ID
* @param questionSettingType
* @return
*/
@PostMapping(API + "/exportAnalysis.do")
public void exportAnalysisDo(Long teacherOpenCourseId, ResourcesQuestionSnapshotFromTypeEnum questionSettingType, @SCoreUser CoreUser coreUser) throws IOException {
/** 构建表头 */
Map<String, String> header = processExcelAnnotationToMap(QuestionLogSummaryAnalysisVO.class);
PageQuery<Object> objectPageQuery = new PageQuery<>();
objectPageQuery.setPageNumber(1L);
objectPageQuery.setPageSize(Integer.MAX_VALUE);
objectPageQuery.setPara("questionSettingType", questionSettingType);
objectPageQuery.setPara("teacherOpenCourseId", teacherOpenCourseId);
PageQuery<QuestionLogSummaryAnalysisVO> page = questionLogSummaryService.analysisPageQuery(objectPageQuery);
List<Map<String, Object>> maps = baseEntity2MapWithParallel(page.getList());
String filename = StrUtil.format("题目统计分析导出 {}.xlsx", DateUtil.now());
write(response, filename,"Sheet1", header.values(), convertData(header.keySet(), maps));
}
/**
*
* @param condition
@ -469,4 +516,45 @@ public class QuestionLogSummaryController{
}
}
/**
*
* @param teacherOpenCourseId ID
* @param questionSettingType
* @return
*/
@PostMapping(MODEL + "/analysisPageList.json")
public JsonResult analysisPageList(PageParam param, Long teacherOpenCourseId, ResourcesQuestionSnapshotFromTypeEnum questionSettingType, @SCoreUser CoreUser coreUser) {
PageQuery<Object> objectPageQuery = ofDefault(new PageQuery<>(), param);
objectPageQuery.setPara("questionSettingType", questionSettingType);
objectPageQuery.setPara("teacherOpenCourseId", teacherOpenCourseId);
return JsonResult.success(questionLogSummaryService.analysisPageQuery(objectPageQuery));
}
/**
*
* @param teacherOpenCourseId ID
* @param questionSettingType
* @return
*/
@PostMapping(MODEL + "/exportAnalysis.json")
public void exportAnalysis(Long teacherOpenCourseId, ResourcesQuestionSnapshotFromTypeEnum questionSettingType, @SCoreUser CoreUser coreUser) throws IOException {
/** 构建表头 */
Map<String, String> header = processExcelAnnotationToMap(QuestionLogSummaryAnalysisVO.class);
// 不需要分页,直接查询出来所有的
PageQuery<Object> objectPageQuery = new PageQuery<>();
objectPageQuery.setPageNumber(1);
objectPageQuery.setPageSize(Integer.MAX_VALUE);
objectPageQuery.setPara("questionSettingType", questionSettingType);
objectPageQuery.setPara("teacherOpenCourseId", teacherOpenCourseId);
PageQuery<QuestionLogSummaryAnalysisVO> page = questionLogSummaryService.analysisPageQuery(objectPageQuery);
List<Map<String, Object>> maps = baseEntity2MapWithParallel(page.getList());
String filename = StrUtil.format("题目统计分析导出 {}.xlsx", DateUtil.now());
write(response, filename,"Sheet1", header.values(), convertData(header.keySet(), maps));
}
}

@ -152,7 +152,7 @@ public class TeacherOpenCourseQuestionSettingController{
* @return
*/
@PostMapping(API + "/analysis.do")
public JsonResult analysis(Long teacherOpenCourseId, ResourcesQuestionSnapshotFromTypeEnum questionSettingType, @SCoreUser CoreUser coreUser) {
public JsonResult analysisDo(Long teacherOpenCourseId, ResourcesQuestionSnapshotFromTypeEnum questionSettingType, @SCoreUser CoreUser coreUser) {
return JsonResult.success(teacherOpenCourseQuestionSettingService.analysis(teacherOpenCourseId, questionSettingType));
}
@ -324,4 +324,17 @@ public class TeacherOpenCourseQuestionSettingController{
teacherOpenCourseQuestionSettingService.editPushStatus(ids, pushStatus);
return JsonResult.success();
}
/**
*
* @param teacherOpenCourseId ID
* @param questionSettingType
* @return
*/
@PostMapping(MODEL + "/analysis.json")
@Function("teacherOpenCourseQuestionSetting.query")
public JsonResult analysis(Long teacherOpenCourseId, ResourcesQuestionSnapshotFromTypeEnum questionSettingType, @SCoreUser CoreUser coreUser) {
return JsonResult.success(teacherOpenCourseQuestionSettingService.analysis(teacherOpenCourseId, questionSettingType));
}
}

@ -864,3 +864,32 @@ getExcelValues
)
)t
analysis
===
* 题目配置,统计分析接口。用于分析所有题目类型的平均值
select
t.question_setting_name,
t.question_log_summary_from_type,
sum(t.question_setting_id) as total_setting_count,
avg(question_setting_total_score) as avg_question_setting_total_score,
avg(question_log_summary_student_total_score) as avg_student_score,
avg(question_log_summary_question_total_count) as question_total_count,
avg(question_log_summary_student_do_count) as avg_question_log_summary_student_do_count,
avg(question_log_summary_success_count) as avg_correct_count,
avg(question_log_summary_error_count) as avg_wrong_count,
avg(question_log_summary_success_rate) as avg_question_log_summary_success_rate,
avg(question_log_summary_is_pass) as avg_question_log_summary_is_pass,
avg(finish_second_time) as avg_finish_second_time
from question_log_summary t
left join teacher_open_course_question_setting ta on ta.teacher_open_course_question_setting_id = t.question_setting_id
where 1 = 1
and t.question_setting_type = #questionSettingType#
and ta.teacher_open_course_question_setting_type = #questionSettingType#
and t.question_log_summary_status = 1
and ta.teacher_open_course_id = #teacherOpenCourseId#
and ta.teacher_open_course_question_setting_status = 1
AND ta.teacher_open_course_question_setting_push_status = 1
group by
t.question_setting_name,
question_log_summary_from_type

@ -627,7 +627,7 @@ analysisOld
analysis
===
* 题目配置,统计分析接口
* 题目配置,统计分析接口。用于分析所有题目类型的平均值
select
t.question_log_summary_from_type,

Loading…
Cancel
Save