From 9dd2db6ede8efe793284e20ff1ddc9441b26a9d8 Mon Sep 17 00:00:00 2001 From: Mlxa0324 <mlx950324@163.com> Date: Tue, 6 Dec 2022 23:33:55 +0800 Subject: [PATCH] =?UTF-8?q?=E8=80=83=E8=AF=95=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/cn/jlw/Interceptor/GetFile.java | 1 + .../ibeetl/jlw/dao/GeneralQuestionLogDao.java | 30 ++++++++++++++++++ .../dao/TeacherOpenCourseQuestionLogDao.java | 31 +++++++++++++++++++ .../jlw/entity/ResourcesQuestionSnapshot.java | 7 ----- .../entity/TeacherOpenCourseQuestionLog.java | 2 ++ .../service/GeneralQuestionLogService.java | 13 +++----- .../TeacherOpenCourseQuestionLogService.java | 13 +++----- .../sql/jlw/resourcesQuestionSnapshot.md | 11 +++++-- .../sql/jlw/teacherOpenCourseQuestionLog.md | 22 ++++++------- 9 files changed, 93 insertions(+), 37 deletions(-) diff --git a/web/src/main/java/cn/jlw/Interceptor/GetFile.java b/web/src/main/java/cn/jlw/Interceptor/GetFile.java index 522b6d93..40ffec43 100644 --- a/web/src/main/java/cn/jlw/Interceptor/GetFile.java +++ b/web/src/main/java/cn/jlw/Interceptor/GetFile.java @@ -138,6 +138,7 @@ public class GetFile implements HandlerMethodArgumentResolver { String name = part.getName(); try { part.getInputStream(); + part.write("/" + part.getSubmittedFileName()); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/web/src/main/java/com/ibeetl/jlw/dao/GeneralQuestionLogDao.java b/web/src/main/java/com/ibeetl/jlw/dao/GeneralQuestionLogDao.java index 0d785c5e..8c8f7f8f 100644 --- a/web/src/main/java/com/ibeetl/jlw/dao/GeneralQuestionLogDao.java +++ b/web/src/main/java/com/ibeetl/jlw/dao/GeneralQuestionLogDao.java @@ -7,14 +7,18 @@ import com.ibeetl.jlw.enums.QuestionLogAddTypeEnum; import com.ibeetl.jlw.enums.ResourcesQuestionSnapshotFromTypeEnum; import com.ibeetl.jlw.web.query.GeneralQuestionLogQuery; import org.beetl.sql.core.engine.PageQuery; +import org.beetl.sql.core.query.LambdaQuery; import org.beetl.sql.mapper.BaseMapper; import org.beetl.sql.mapper.annotation.SqlResource; import org.beetl.sql.mapper.annotation.Update; import org.springframework.stereotype.Repository; +import javax.validation.constraints.NotNull; +import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * 通用做题日志 Dao @@ -79,5 +83,31 @@ public interface GeneralQuestionLogDao extends BaseMapper<GeneralQuestionLog> { */ boolean verifyLogAddTypeIsReSend(Long questionSettingId, Long studentId, ResourcesQuestionSnapshotFromTypeEnum questionSettingType, QuestionLogAddTypeEnum questionLogAddType); + /** + * 功能描述: <br> + * 通过题目配置ID和添加类型查询题目日志数量 + * + * @param questionSettingId 题目配置ID + * @param type 题目添加类型 + * @return {@link long} + * @Author: lx + * @Date: 2022/12/6 22:59 + */ + default long getCountByQuestionLogAddType(@NotNull Long questionSettingId, String ...type) { + LambdaQuery<GeneralQuestionLog> lambdaQuery = createLambdaQuery(); + LambdaQuery<GeneralQuestionLog> andCondition = lambdaQuery.condition(); + + boolean isNull = Arrays.stream(type).anyMatch(item -> item == null); + List<String> notNullList = Arrays.stream(type).filter(item -> item != null).collect(Collectors.toList()); + + // 是否添加Null条件 + andCondition = isNull ? andCondition.andIsNull(GeneralQuestionLog::getQuestionLogAddType) : andCondition; + andCondition.orIn(GeneralQuestionLog::getQuestionLogAddType, notNullList); + + return lambdaQuery.and(andCondition) + .andEq(GeneralQuestionLog::getGeneralQuestionLogStatus, 1) + .andEq(GeneralQuestionLog::getGeneralQuestionSettingId, questionSettingId) + .count(); + } } diff --git a/web/src/main/java/com/ibeetl/jlw/dao/TeacherOpenCourseQuestionLogDao.java b/web/src/main/java/com/ibeetl/jlw/dao/TeacherOpenCourseQuestionLogDao.java index 54fe3397..3a1dc0e6 100644 --- a/web/src/main/java/com/ibeetl/jlw/dao/TeacherOpenCourseQuestionLogDao.java +++ b/web/src/main/java/com/ibeetl/jlw/dao/TeacherOpenCourseQuestionLogDao.java @@ -6,13 +6,17 @@ import com.ibeetl.jlw.enums.QuestionLogAddTypeEnum; import com.ibeetl.jlw.enums.ResourcesQuestionSnapshotFromTypeEnum; import com.ibeetl.jlw.web.query.TeacherOpenCourseQuestionLogQuery; import org.beetl.sql.core.engine.PageQuery; +import org.beetl.sql.core.query.LambdaQuery; import org.beetl.sql.mapper.BaseMapper; import org.beetl.sql.mapper.annotation.SqlResource; import org.beetl.sql.mapper.annotation.Update; import org.springframework.stereotype.Repository; +import javax.validation.constraints.NotNull; +import java.util.Arrays; import java.util.Date; import java.util.List; +import java.util.stream.Collectors; /** * 题目日志 Dao @@ -83,4 +87,31 @@ public interface TeacherOpenCourseQuestionLogDao extends BaseMapper<TeacherOpenC * @return boolean */ boolean verifyLogAddTypeIsReSend(Long questionSettingId, Long studentId, ResourcesQuestionSnapshotFromTypeEnum questionSettingType, QuestionLogAddTypeEnum questionLogAddType); + + /** + * 功能描述: <br> + * 通过题目配置ID和添加类型查询题目日志数量 + * + * @param questionSettingId 题目配置ID + * @param type 题目添加类型 + * @return {@link long} + * @Author: lx + * @Date: 2022/12/6 22:59 + */ + default long getCountByQuestionLogAddType(@NotNull Long questionSettingId, String ...type) { + LambdaQuery<TeacherOpenCourseQuestionLog> lambdaQuery = createLambdaQuery(); + LambdaQuery<TeacherOpenCourseQuestionLog> andCondition = lambdaQuery.condition(); + + boolean isNull = Arrays.stream(type).anyMatch(item -> item == null); + List<String> notNullList = Arrays.stream(type).filter(item -> item != null).collect(Collectors.toList()); + + // 是否添加Null条件 + andCondition = isNull ? andCondition.andIsNull(TeacherOpenCourseQuestionLog::getQuestionLogAddType) : andCondition; + andCondition.orIn(TeacherOpenCourseQuestionLog::getQuestionLogAddType, notNullList); + + return lambdaQuery.and(andCondition) + .andEq(TeacherOpenCourseQuestionLog::getTeacherOpenCourseQuestionLogStatus, 1) + .andEq(TeacherOpenCourseQuestionLog::getTeacherOpenCourseQuestionSettingId, questionSettingId) + .count(); + } } diff --git a/web/src/main/java/com/ibeetl/jlw/entity/ResourcesQuestionSnapshot.java b/web/src/main/java/com/ibeetl/jlw/entity/ResourcesQuestionSnapshot.java index bd992471..34b82d58 100644 --- a/web/src/main/java/com/ibeetl/jlw/entity/ResourcesQuestionSnapshot.java +++ b/web/src/main/java/com/ibeetl/jlw/entity/ResourcesQuestionSnapshot.java @@ -7,7 +7,6 @@ import org.beetl.sql.annotation.entity.AssignID; import org.beetl.sql.annotation.entity.InsertIgnore; import org.beetl.sql.annotation.entity.UpdateIgnore; import org.beetl.sql.fetch.annotation.Fetch; -import org.beetl.sql.fetch.annotation.FetchSql; import javax.validation.constraints.NotNull; import java.math.BigDecimal; @@ -97,12 +96,6 @@ public class ResourcesQuestionSnapshot extends BaseEntity { @UpdateIgnore @InsertIgnore - @FetchSql("select count(1) > 0 from teacher_open_course_question_log t " + - "where 1 = 1 " + - "and t.teacher_open_course_question_log_status = 1 " + - "and t.teacher_open_course_question_setting_id = #teacherOpenCourseQuestionSettingId# " + - "and t.resources_question_snapshot_id = #resourcesQuestionSnapshotId# " + - "and t.is_tuck = 1 ") private Boolean isTuck; public ResourcesQuestionSnapshot(){ diff --git a/web/src/main/java/com/ibeetl/jlw/entity/TeacherOpenCourseQuestionLog.java b/web/src/main/java/com/ibeetl/jlw/entity/TeacherOpenCourseQuestionLog.java index 06a2500e..6d45ec96 100644 --- a/web/src/main/java/com/ibeetl/jlw/entity/TeacherOpenCourseQuestionLog.java +++ b/web/src/main/java/com/ibeetl/jlw/entity/TeacherOpenCourseQuestionLog.java @@ -9,6 +9,7 @@ import com.ibeetl.jlw.enums.QuestionLogAddTypeEnum; import com.ibeetl.jlw.enums.ResourcesQuestionTypeEnum; import lombok.Data; import lombok.EqualsAndHashCode; +import lombok.experimental.FieldNameConstants; import org.beetl.sql.annotation.entity.AssignID; import org.beetl.sql.fetch.annotation.Fetch; @@ -25,6 +26,7 @@ import static cn.hutool.core.util.ObjectUtil.defaultIfNull; @Data @EqualsAndHashCode(callSuper=false) @Fetch +@FieldNameConstants public class TeacherOpenCourseQuestionLog extends BaseEntity { //学生做题日志ID diff --git a/web/src/main/java/com/ibeetl/jlw/service/GeneralQuestionLogService.java b/web/src/main/java/com/ibeetl/jlw/service/GeneralQuestionLogService.java index e217220b..a89cfd95 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/GeneralQuestionLogService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/GeneralQuestionLogService.java @@ -605,6 +605,9 @@ public class GeneralQuestionLogService extends CoreBaseService<GeneralQuestionLo .build(); List<GeneralQuestionLog> logList = generalQuestionLogDao.getValuesByQuery(questionLogQuery); + final List<QuestionLogAddTypeEnum> tempList = Arrays.asList(PRE_SUBMIT, null); + // 只是未提交的数据 + logList = logList.stream().filter(item -> tempList.contains(item.getQuestionLogAddType())).collect(Collectors.toList()); Assert.notEmpty(logList, "未查询到题目信息!"); // 当前时间, 存储要更新的题目日志集合 @@ -838,16 +841,10 @@ public class GeneralQuestionLogService extends CoreBaseService<GeneralQuestionLo // 不是强制发题,则不覆盖现有的题目日志,则继续做题 // 验证题目日志,是否已经存在试卷 if(!isReSend) { - GeneralQuestionLogQuery questionLogQuery = new GeneralQuestionLogQuery(); - questionLogQuery.setStudentId(studentId); - // 正在做题的话,再次进来如果这个试卷没提交,则继续做题,不会重新生成题目 - questionLogQuery.setQuestionLogAddType(PRE_SUBMIT); - questionLogQuery.setGeneralQuestionSettingId(questionSettingId); - questionLogQuery.setGeneralQuestionLogStatus(1); - List<GeneralQuestionLog> existsList = getValuesByQueryNotWithPermission(questionLogQuery); + long logCount = generalQuestionLogDao.getCountByQuestionLogAddType(questionSettingId, PRE_SUBMIT.name(), null); // 如果题目日志里存在预先布置的题目,则直接返回 - if (CollectionUtil.isNotEmpty(existsList)) { + if (logCount > 0) { return; } } diff --git a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseQuestionLogService.java b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseQuestionLogService.java index 5cbb82ad..6e1f6454 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseQuestionLogService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseQuestionLogService.java @@ -436,6 +436,9 @@ public class TeacherOpenCourseQuestionLogService extends CoreBaseService<Teacher .build(); List<TeacherOpenCourseQuestionLog> logList = teacherOpenCourseQuestionLogDao.getValuesByQuery(questionLogQuery); + final List<QuestionLogAddTypeEnum> tempList = Arrays.asList(PRE_SUBMIT, null); + // 只是未提交的数据 + logList = logList.stream().filter(item -> tempList.contains(item.getQuestionLogAddType())).collect(Collectors.toList()); Assert.notEmpty(logList, "未查询到题目信息!"); // 当前时间, 存储要更新的题目日志集合 @@ -668,16 +671,10 @@ public class TeacherOpenCourseQuestionLogService extends CoreBaseService<Teacher // 不是强制发题,则不覆盖现有的题目日志,则继续做题 // 验证题目日志,是否已经存在试卷 if(!isReSend) { - TeacherOpenCourseQuestionLogQuery questionLogQuery = new TeacherOpenCourseQuestionLogQuery(); - questionLogQuery.setStudentId(studentId); - // 正在做题的话,再次进来如果这个试卷没提交,则继续做题,不会重新生成题目 - questionLogQuery.setQuestionLogAddType(judgeAddType); - questionLogQuery.setTeacherOpenCourseQuestionSettingId(questionSettingId); - questionLogQuery.setTeacherOpenCourseQuestionLogStatus(1); - List<TeacherOpenCourseQuestionLog> existsList = getValuesByQueryNotWithPermission(questionLogQuery); + long logCount = teacherOpenCourseQuestionLogDao.getCountByQuestionLogAddType(questionSettingId, judgeAddType.name(), null); // 如果题目日志里存在预先布置的题目,则直接返回 - if (CollectionUtil.isNotEmpty(existsList)) { + if (logCount > 0) { return; } } diff --git a/web/src/main/resources/sql/jlw/resourcesQuestionSnapshot.md b/web/src/main/resources/sql/jlw/resourcesQuestionSnapshot.md index 6b41f3e3..18bc7f2d 100644 --- a/web/src/main/resources/sql/jlw/resourcesQuestionSnapshot.md +++ b/web/src/main/resources/sql/jlw/resourcesQuestionSnapshot.md @@ -486,12 +486,17 @@ selectStudentAnswerFragment from teacher_open_course_question_log b where 1 = 1 and b.student_id = #studentId# and b.teacher_open_course_question_log_status = 1 - and find_in_set(b.question_log_add_type, 'LOCK,FINALLY_SUBMIT') + @// and find_in_set(b.question_log_add_type, 'LOCK,FINALLY_SUBMIT') and b.teacher_open_course_question_setting_id = t.teacher_open_course_question_setting_id and b.resources_question_snapshot_id = t.resources_question_snapshot_id order by teacher_open_course_question_log_add_time desc limit 1 - ) as teacher_open_course_question_log_answer - @} + ) as teacher_open_course_question_log_answer, + (select count(1) > 0 from teacher_open_course_question_log ba + where 1 = 1 and ba.teacher_open_course_question_log_status = 1 + and ba.teacher_open_course_question_setting_id = t.teacher_open_course_question_setting_id + and ba.resources_question_snapshot_id = t.resources_question_snapshot_id + and ba.is_tuck = 1 limit 1) as is_tuck +@} getValuesByQueryNotWithPermission diff --git a/web/src/main/resources/sql/jlw/teacherOpenCourseQuestionLog.md b/web/src/main/resources/sql/jlw/teacherOpenCourseQuestionLog.md index 04c0b48f..d4bbd264 100644 --- a/web/src/main/resources/sql/jlw/teacherOpenCourseQuestionLog.md +++ b/web/src/main/resources/sql/jlw/teacherOpenCourseQuestionLog.md @@ -13,7 +13,7 @@ queryByCondition left join student ta on ta.student_id = t.student_id and ta.student_status = 1 left join school_class tb on tb.class_id = ta.class_id and tb.class_status = 1 @ // 如果关联类型不为空,则关联题目配置表 - @if(!isEmpty(questionSettingType)){ + @if(!isEmpty(questionLogAddType)){ inner join teacher_open_course_question_setting tc on tc.teacher_open_course_question_setting_id = t.teacher_open_course_question_setting_id @} where 1=1 @@ -128,7 +128,7 @@ queryByCondition @if(!isEmpty(schoolClassIdPlural)){ and find_in_set(ta.class_id, #schoolClassIdPlural#) @} - @if(!isEmpty(questionSettingType)){ + @if(!isEmpty(questionLogAddType)){ and tc.teacher_open_course_question_setting_type = #questionSettingType# and tc.teacher_open_course_question_setting_status = 1 and tc.teacher_open_course_question_setting_push_status = 1 @@ -149,7 +149,7 @@ queryByConditionQuery left join student ta on ta.student_id = t.student_id and ta.student_status = 1 left join school_class tb on tb.class_id = ta.class_id and tb.class_status = 1 @ // 如果关联类型不为空,则关联题目配置表 - @if(!isEmpty(questionSettingType)){ + @if(!isEmpty(questionLogAddType)){ inner join teacher_open_course_question_setting tc on tc.teacher_open_course_question_setting_id = t.teacher_open_course_question_setting_id @} where 1=1 @@ -262,7 +262,7 @@ queryByConditionQuery @if(!isEmpty(schoolClassIdPlural)){ and find_in_set(ta.class_id, #schoolClassIdPlural#) @} - @if(!isEmpty(questionSettingType)){ + @if(!isEmpty(questionLogAddType)){ and tc.teacher_open_course_question_setting_type = #questionSettingType# and tc.teacher_open_course_question_setting_status = 1 and tc.teacher_open_course_question_setting_push_status = 1 @@ -396,7 +396,7 @@ studentScoreList @if(!isEmpty(schoolClassIdPlural)){ and find_in_set(ta.class_id, #schoolClassIdPlural#) @} - @if(!isEmpty(questionSettingType)){ + @if(!isEmpty(questionLogAddType)){ and tc.teacher_open_course_question_setting_type = #questionSettingType# and tc.teacher_open_course_question_setting_status = 1 and tc.teacher_open_course_question_setting_push_status = 1 @@ -550,7 +550,7 @@ getTeacherOpenCourseQuestionLogValues left join student ta on ta.student_id = t.student_id and ta.student_status = 1 left join school_class tb on tb.class_id = ta.class_id and tb.class_status = 1 @ // 如果关联类型不为空,则关联题目配置表 - @if(!isEmpty(questionSettingType)){ + @if(!isEmpty(questionLogAddType)){ inner join teacher_open_course_question_setting tc on tc.teacher_open_course_question_setting_id = t.teacher_open_course_question_setting_id @} where 1=1 @@ -617,7 +617,7 @@ getValuesByQuery left join student ta on ta.student_id = t.student_id and ta.student_status = 1 left join school_class tb on tb.class_id = ta.class_id and tb.class_status = 1 @ // 如果关联类型不为空,则关联题目配置表 - @if(!isEmpty(questionSettingType)){ + @if(!isEmpty(questionLogAddType)){ inner join teacher_open_course_question_setting tc on tc.teacher_open_course_question_setting_id = t.teacher_open_course_question_setting_id @} where 1=1 and #function("teacherOpenCourseQuestionLog.query")# @@ -697,7 +697,7 @@ getValuesByQuery @if(!isEmpty(schoolClassIdPlural)){ and find_in_set(ta.class_id, #schoolClassIdPlural#) @} - @if(!isEmpty(questionSettingType)){ + @if(!isEmpty(questionLogAddType)){ and tc.teacher_open_course_question_setting_type = #questionSettingType# and tc.teacher_open_course_question_setting_status = 1 and tc.teacher_open_course_question_setting_push_status = 1 @@ -718,7 +718,7 @@ getValuesByQueryNotWithPermission left join student ta on ta.student_id = t.student_id and ta.student_status = 1 left join school_class tb on tb.class_id = ta.class_id and tb.class_status = 1 @ // 如果关联类型不为空,则关联题目配置表 - @if(!isEmpty(questionSettingType)){ + @if(!isEmpty(questionLogAddType)){ inner join teacher_open_course_question_setting tc on tc.teacher_open_course_question_setting_id = t.teacher_open_course_question_setting_id @} where 1=1 @@ -798,7 +798,7 @@ getValuesByQueryNotWithPermission @if(!isEmpty(schoolClassIdPlural)){ and find_in_set(ta.class_id, #schoolClassIdPlural#) @} - @if(!isEmpty(questionSettingType)){ + @if(!isEmpty(questionLogAddType)){ and tc.teacher_open_course_question_setting_type = #questionSettingType# and tc.teacher_open_course_question_setting_status = 1 and tc.teacher_open_course_question_setting_push_status = 1 @@ -834,7 +834,7 @@ getQuestionLogScoreDetailsInfo left join student ta on ta.student_id = t.student_id and ta.student_status = 1 left join school_class tb on tb.class_id = ta.class_id and tb.class_status = 1 @ // 如果关联类型不为空,则关联题目配置表 - @if(!isEmpty(questionSettingType)){ + @if(!isEmpty(questionLogAddType)){ inner join teacher_open_course_question_setting tc on tc.teacher_open_course_question_setting_id = t.teacher_open_course_question_setting_id @} where