From f9c79c9c2376b6652b386543306fa02a6b4e8984 Mon Sep 17 00:00:00 2001 From: Mlxa0324 Date: Tue, 6 Dec 2022 02:48:32 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A2=98=E7=9B=AE=E6=97=A5=E5=BF=97=E6=B1=87?= =?UTF-8?q?=E6=80=BB=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ibeetl/jlw/entity/QuestionLogSummary.java | 298 ++---------------- .../jlw/web/QuestionLogSummaryController.java | 41 ++- ...ourseMergeResourcesQuestionController.java | 1 + .../web/query/QuestionLogSummaryQuery.java | 23 ++ .../resources/sql/jlw/questionLogSummary.md | 36 +++ 5 files changed, 119 insertions(+), 280 deletions(-) diff --git a/web/src/main/java/com/ibeetl/jlw/entity/QuestionLogSummary.java b/web/src/main/java/com/ibeetl/jlw/entity/QuestionLogSummary.java index abf9729e..dc6a1775 100644 --- a/web/src/main/java/com/ibeetl/jlw/entity/QuestionLogSummary.java +++ b/web/src/main/java/com/ibeetl/jlw/entity/QuestionLogSummary.java @@ -1,11 +1,14 @@ package com.ibeetl.jlw.entity; +import cn.hutool.core.util.NumberUtil; import com.ibeetl.admin.core.annotation.Dict; import com.ibeetl.admin.core.annotation.DictDeep; import com.ibeetl.admin.core.entity.BaseEntity; import com.ibeetl.admin.core.util.ValidateConfig; import com.ibeetl.jlw.enums.QuestionBusinessTypeEnum; import com.ibeetl.jlw.enums.ResourcesQuestionSnapshotFromTypeEnum; +import lombok.Data; +import lombok.EqualsAndHashCode; import org.beetl.sql.annotation.entity.AssignID; import org.beetl.sql.annotation.entity.InsertIgnore; import org.beetl.sql.annotation.entity.UpdateIgnore; @@ -19,6 +22,8 @@ import java.util.Date; * 学生-题目日志-分析汇总 * gen by Spring Boot2 Admin 2022-12-04 */ +@Data +@EqualsAndHashCode(callSuper=false) public class QuestionLogSummary extends BaseEntity{ //学生做题日志汇总ID @@ -113,6 +118,12 @@ public class QuestionLogSummary extends BaseEntity{ private String finishTime ; + // 完成进度 + @InsertIgnore + @UpdateIgnore + + private float finishProgress; + //组织ID private Long orgId ; @@ -120,287 +131,22 @@ public class QuestionLogSummary extends BaseEntity{ //用户ID private Long userId ; - - public QuestionLogSummary(){ - } - - /**学生做题日志汇总ID - *@return - */ - public Long getQuestionLogSummaryId(){ - return questionLogSummaryId; - } - /**学生做题日志汇总ID - *@param questionLogSummaryId - */ - public void setQuestionLogSummaryId(Long questionLogSummaryId){ - this.questionLogSummaryId = questionLogSummaryId; - } - - /**题目配置ID - *@return - */ - public Long getQuestionSettingId(){ - return questionSettingId; - } - /**题目配置ID - *@param questionSettingId - */ - public void setQuestionSettingId(Long questionSettingId){ - this.questionSettingId = questionSettingId; - } - - /**题目配置名称 - *@return - */ - public String getQuestionSettingName(){ - return questionSettingName; - } - /**题目配置名称 - *@param questionSettingName - */ - public void setQuestionSettingName(String questionSettingName){ - this.questionSettingName = questionSettingName; - } - - /**类型 枚举(ResourcesQuestionSnapshotFromTypeEnum) - *@return - */ - public ResourcesQuestionSnapshotFromTypeEnum getQuestionSettingType(){ - return questionSettingType; - } - /**类型 枚举(ResourcesQuestionSnapshotFromTypeEnum) - *@param questionSettingType - */ - public void setQuestionSettingType(ResourcesQuestionSnapshotFromTypeEnum questionSettingType){ - this.questionSettingType = questionSettingType; - } - - /**来源类型 枚举 - *@return - */ - public QuestionBusinessTypeEnum getQuestionLogSummaryFromType(){ - return questionLogSummaryFromType; - } - /**来源类型 枚举 - *@param questionLogSummaryFromType - */ - public void setQuestionLogSummaryFromType(QuestionBusinessTypeEnum questionLogSummaryFromType){ - this.questionLogSummaryFromType = questionLogSummaryFromType; - } - - /**配置的题目总分数 - *@return - */ - public BigDecimal getQuestionSettingTotalScore(){ - return questionSettingTotalScore; - } - /**配置的题目总分数 - *@param questionSettingTotalScore - */ - public void setQuestionSettingTotalScore(BigDecimal questionSettingTotalScore){ - this.questionSettingTotalScore = questionSettingTotalScore; - } - /**人员ID(学生ID等等) - *@return - */ - public Long getPersonId(){ - return personId; - } - /**人员ID(学生ID等等) - *@param personId - */ - public void setPersonId(Long personId){ - this.personId = personId; - } - - /**关联的做题日志IDs - *@return - */ - public String getQuestionLogIds(){ - return questionLogIds; - } - /**关联的做题日志IDs - *@param questionLogIds - */ - public void setQuestionLogIds(String questionLogIds){ - this.questionLogIds = questionLogIds; - } - - /**配置的题目总数 - *@return - */ - public Integer getQuestionLogSummaryQuestionTotalCount(){ - return questionLogSummaryQuestionTotalCount; - } - /**配置的题目总数 - *@param questionLogSummaryQuestionTotalCount - */ - public void setQuestionLogSummaryQuestionTotalCount(Integer questionLogSummaryQuestionTotalCount){ + public void setQuestionLogSummaryQuestionTotalCount(Integer questionLogSummaryQuestionTotalCount) { this.questionLogSummaryQuestionTotalCount = questionLogSummaryQuestionTotalCount; + tryCalcFinishProgress(); } - /**学生做题总数 - *@return - */ - public Integer getQuestionLogSummaryStudentDoCount(){ - return questionLogSummaryStudentDoCount; - } - /**学生做题总数 - *@param questionLogSummaryStudentDoCount - */ - public void setQuestionLogSummaryStudentDoCount(Integer questionLogSummaryStudentDoCount){ + public void setQuestionLogSummaryStudentDoCount(Integer questionLogSummaryStudentDoCount) { this.questionLogSummaryStudentDoCount = questionLogSummaryStudentDoCount; + tryCalcFinishProgress(); } - /**正确数量 - *@return - */ - public Integer getQuestionLogSummarySuccessCount(){ - return questionLogSummarySuccessCount; - } - /**正确数量 - *@param questionLogSummarySuccessCount - */ - public void setQuestionLogSummarySuccessCount(Integer questionLogSummarySuccessCount){ - this.questionLogSummarySuccessCount = questionLogSummarySuccessCount; - } - - /**错误数量 - *@return - */ - public Integer getQuestionLogSummaryErrorCount(){ - return questionLogSummaryErrorCount; - } - /**错误数量 - *@param questionLogSummaryErrorCount - */ - public void setQuestionLogSummaryErrorCount(Integer questionLogSummaryErrorCount){ - this.questionLogSummaryErrorCount = questionLogSummaryErrorCount; - } - - /**正确率,最大100 - *@return - */ - public BigDecimal getQuestionLogSummarySuccessRate(){ - return questionLogSummarySuccessRate; - } - /**正确率,最大100 - *@param questionLogSummarySuccessRate - */ - public void setQuestionLogSummarySuccessRate(BigDecimal questionLogSummarySuccessRate){ - this.questionLogSummarySuccessRate = questionLogSummarySuccessRate; - } - - /**当前配置的及格比率 - *@return - */ - public BigDecimal getQuestionLogSummaryCurrentPassRate(){ - return questionLogSummaryCurrentPassRate; - } - /**当前配置的及格比率 - *@param questionLogSummaryCurrentPassRate - */ - public void setQuestionLogSummaryCurrentPassRate(BigDecimal questionLogSummaryCurrentPassRate){ - this.questionLogSummaryCurrentPassRate = questionLogSummaryCurrentPassRate; - } - - /**是否及格 - *@return - */ - public Integer getQuestionLogSummaryIsPass(){ - return questionLogSummaryIsPass; - } - /**是否及格 - *@param questionLogSummaryIsPass - */ - public void setQuestionLogSummaryIsPass(Integer questionLogSummaryIsPass){ - this.questionLogSummaryIsPass = questionLogSummaryIsPass; - } - - /**状态(1正常 2删除) - *@return - */ - public Integer getQuestionLogSummaryStatus(){ - return questionLogSummaryStatus; - } - /**状态(1正常 2删除) - *@param questionLogSummaryStatus - */ - public void setQuestionLogSummaryStatus(Integer questionLogSummaryStatus){ - this.questionLogSummaryStatus = questionLogSummaryStatus; - } - - /**添加时间 - *@return - */ - public Date getQuestionLogSummaryAddTime(){ - return questionLogSummaryAddTime; - } - /**添加时间 - *@param questionLogSummaryAddTime - */ - public void setQuestionLogSummaryAddTime(Date questionLogSummaryAddTime){ - this.questionLogSummaryAddTime = questionLogSummaryAddTime; - } - - /**组织ID - *@return - */ - public Long getOrgId(){ - return orgId; - } - /**组织ID - *@param orgId - */ - public void setOrgId(Long orgId){ - this.orgId = orgId; - } - - /**用户ID - *@return - */ - public Long getUserId(){ - return userId; - } - /**用户ID - *@param userId - */ - public void setUserId(Long userId){ - this.userId = userId; - } - - - public Long getFinishSecondTime() { - return finishSecondTime; - } - - public void setFinishSecondTime(Long finishSecondTime) { - this.finishSecondTime = finishSecondTime; - } - - public String getFinishTime() { - return finishTime; - } - - public void setFinishTime(String finishTime) { - this.finishTime = finishTime; - } - - public BigDecimal getQuestionLogSummaryStudentTotalScore() { - return questionLogSummaryStudentTotalScore; - } - - public void setQuestionLogSummaryStudentTotalScore(BigDecimal questionLogSummaryStudentTotalScore) { - this.questionLogSummaryStudentTotalScore = questionLogSummaryStudentTotalScore; - } - - public Student getStudentInfo() { - return studentInfo; - } - - public void setStudentInfo(Student studentInfo) { - this.studentInfo = studentInfo; - } + private void tryCalcFinishProgress() { + Integer totalCount = this.questionLogSummaryQuestionTotalCount; + Integer doCount = this.questionLogSummaryStudentDoCount; + if (null != doCount && null != totalCount && totalCount > 0) { + this.finishProgress = NumberUtil.round(NumberUtil.mul(NumberUtil.div(doCount , totalCount), 100), 2).floatValue(); + } + } } diff --git a/web/src/main/java/com/ibeetl/jlw/web/QuestionLogSummaryController.java b/web/src/main/java/com/ibeetl/jlw/web/QuestionLogSummaryController.java index d85c41bb..575ea5bb 100644 --- a/web/src/main/java/com/ibeetl/jlw/web/QuestionLogSummaryController.java +++ b/web/src/main/java/com/ibeetl/jlw/web/QuestionLogSummaryController.java @@ -1,6 +1,8 @@ package com.ibeetl.jlw.web; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.StrUtil; import cn.jlw.Interceptor.GetFile; import cn.jlw.Interceptor.RFile; import cn.jlw.Interceptor.SCoreUser; @@ -9,12 +11,14 @@ import cn.jlw.validate.ValidateConfig; import com.ibeetl.admin.core.annotation.Function; import com.ibeetl.admin.core.entity.CoreUser; 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.jlw.entity.FileEntity; import com.ibeetl.jlw.entity.QuestionLogSummary; import com.ibeetl.jlw.service.QuestionLogSummaryService; import com.ibeetl.jlw.web.query.QuestionLogSummaryQuery; +import lombok.SneakyThrows; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -37,11 +41,10 @@ import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.util.*; +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; /** @@ -97,6 +100,36 @@ public class QuestionLogSummaryController{ } } + /** + * 作业详情导出 + * @param condition 日志记录查询条件 + * @return + */ + @SneakyThrows + @GetMapping(API + "/export.do") + public void export(HttpServletResponse resp, QuestionLogSummaryQuery condition) { + + /** 构建表头 */ + Map header = new LinkedHashMap<>(11); + header.put("studentName", "学生姓名"); + header.put("studentSn", "学生学号"); + header.put("className", "班级"); + header.put("questionLogSummaryQuestionTotalCount", "题目总数量"); + header.put("questionLogSummaryStudentDoCount", "已完成题目数量"); + header.put("questionLogSummarySuccessCount", "答对数量"); + header.put("questionLogSummaryErrorCount", "答错数量"); + header.put("questionLogSummarySuccessRate", "正确率"); + header.put("questionLogSummaryStudentTotalScore", "得分"); + header.put("finishProgress", "进度(%)"); + + condition.setQuestionLogSummaryStatus(1); + List list = questionLogSummaryService.getValuesByQueryNotWithPermission(condition); + List> maps = BeanCopyUtil.baseEntity2MapWithParallel(list); + + String filename = StrUtil.format("题目日志汇总-导出 {}.xlsx", DateUtil.now()); + write(resp, filename,"Sheet1", header.values(), convertData(header.keySet(), maps)); + } + /* 后台页面 */ diff --git a/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeResourcesQuestionController.java b/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeResourcesQuestionController.java index a07c6e5e..8df1c612 100644 --- a/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeResourcesQuestionController.java +++ b/web/src/main/java/com/ibeetl/jlw/web/TeacherOpenCourseMergeResourcesQuestionController.java @@ -501,6 +501,7 @@ public class TeacherOpenCourseMergeResourcesQuestionController extends BaseContr /** * 功能描述:
* 〈导入批量模板数据〉 + * 批量导入题目 excel版本,只支持单选多选,对错吧 * @param file * @return {@link JsonResult} * @Author: 87966 diff --git a/web/src/main/java/com/ibeetl/jlw/web/query/QuestionLogSummaryQuery.java b/web/src/main/java/com/ibeetl/jlw/web/query/QuestionLogSummaryQuery.java index 752890cd..51123381 100644 --- a/web/src/main/java/com/ibeetl/jlw/web/query/QuestionLogSummaryQuery.java +++ b/web/src/main/java/com/ibeetl/jlw/web/query/QuestionLogSummaryQuery.java @@ -72,6 +72,13 @@ public class QuestionLogSummaryQuery extends PageParam { private String _given;//指定更新的特定字段,多个逗号隔开 + // 扩展字段 + // 学生姓名或者学号 + private String studentSnOrName; + + // 班级IDs + private String schoolClassIdPlural; + public Long getQuestionLogSummaryId(){ return questionLogSummaryId; } @@ -286,4 +293,20 @@ public class QuestionLogSummaryQuery extends PageParam { public void setQuestionLogSummaryStudentTotalScore(BigDecimal questionLogSummaryStudentTotalScore) { this.questionLogSummaryStudentTotalScore = questionLogSummaryStudentTotalScore; } + + public String getStudentSnOrName() { + return studentSnOrName; + } + + public void setStudentSnOrName(String studentSnOrName) { + this.studentSnOrName = studentSnOrName; + } + + public String getSchoolClassIdPlural() { + return schoolClassIdPlural; + } + + public void setSchoolClassIdPlural(String schoolClassIdPlural) { + this.schoolClassIdPlural = schoolClassIdPlural; + } } diff --git a/web/src/main/resources/sql/jlw/questionLogSummary.md b/web/src/main/resources/sql/jlw/questionLogSummary.md index 4244efd1..d335daab 100644 --- a/web/src/main/resources/sql/jlw/questionLogSummary.md +++ b/web/src/main/resources/sql/jlw/questionLogSummary.md @@ -93,6 +93,12 @@ queryByCondition @if(!isEmpty(userIdPlural)){ and find_in_set(t.user_id,#userIdPlural#) @} + @if(!isEmpty(studentSnOrName)){ + and (ta.student_sn like #'%'+studentSnOrName+'%'# or ta.student_name like #'%'+studentSnOrName+'%'#) + @} + @if(!isEmpty(schoolClassIdPlural)){ + and find_in_set(ta.class_id, #schoolClassIdPlural#) + @} queryByConditionQuery @@ -188,6 +194,12 @@ queryByConditionQuery @if(!isEmpty(userIdPlural)){ and find_in_set(t.user_id,#userIdPlural#) @} + @if(!isEmpty(studentSnOrName)){ + and (ta.student_sn like #'%'+studentSnOrName+'%'# or ta.student_name like #'%'+studentSnOrName+'%'#) + @} + @if(!isEmpty(schoolClassIdPlural)){ + and find_in_set(ta.class_id, #schoolClassIdPlural#) + @} @@ -526,6 +538,12 @@ getValuesByQuery @if(!isEmpty(userIdPlural)){ and find_in_set(t.user_id,#userIdPlural#) @} + @if(!isEmpty(studentSnOrName)){ + and (ta.student_sn like #'%'+studentSnOrName+'%'# or ta.student_name like #'%'+studentSnOrName+'%'#) + @} + @if(!isEmpty(schoolClassIdPlural)){ + and find_in_set(ta.class_id, #schoolClassIdPlural#) + @} getValuesByQueryNotWithPermission @@ -619,6 +637,12 @@ getValuesByQueryNotWithPermission @if(!isEmpty(userIdPlural)){ and find_in_set(t.user_id,#userIdPlural#) @} + @if(!isEmpty(studentSnOrName)){ + and (ta.student_sn like #'%'+studentSnOrName+'%'# or ta.student_name like #'%'+studentSnOrName+'%'#) + @} + @if(!isEmpty(schoolClassIdPlural)){ + and find_in_set(ta.class_id, #schoolClassIdPlural#) + @} @@ -726,6 +750,12 @@ getExcelValues @if(!isEmpty(userIdPlural)){ and find_in_set(t.user_id,#userIdPlural#) @} + @if(!isEmpty(studentSnOrName)){ + and (ta.student_sn like #'%'+studentSnOrName+'%'# or ta.student_name like #'%'+studentSnOrName+'%'#) + @} + @if(!isEmpty(schoolClassIdPlural)){ + and find_in_set(ta.class_id, #schoolClassIdPlural#) + @} ) UNION ALL ( @@ -825,6 +855,12 @@ getExcelValues @if(!isEmpty(userIdPlural)){ and find_in_set(t.user_id,#userIdPlural#) @} + @if(!isEmpty(studentSnOrName)){ + and (ta.student_sn like #'%'+studentSnOrName+'%'# or ta.student_name like #'%'+studentSnOrName+'%'#) + @} + @if(!isEmpty(schoolClassIdPlural)){ + and find_in_set(ta.class_id, #schoolClassIdPlural#) + @} ) )t