diff --git a/web/src/main/java/com/ibeetl/jlw/dao/TeacherOpenCourseMergeResourcesQuestionDao.java b/web/src/main/java/com/ibeetl/jlw/dao/TeacherOpenCourseMergeResourcesQuestionDao.java index d042b658..75e5e8d5 100644 --- a/web/src/main/java/com/ibeetl/jlw/dao/TeacherOpenCourseMergeResourcesQuestionDao.java +++ b/web/src/main/java/com/ibeetl/jlw/dao/TeacherOpenCourseMergeResourcesQuestionDao.java @@ -1,6 +1,7 @@ package com.ibeetl.jlw.dao; import com.ibeetl.jlw.entity.TeacherOpenCourseMergeResourcesQuestion; +import com.ibeetl.jlw.entity.dto.TeacherOpenCourseQuestionSettingDTO; import com.ibeetl.jlw.web.query.TeacherOpenCourseMergeResourcesQuestionQuery; import org.beetl.sql.core.engine.PageQuery; import org.beetl.sql.mapper.BaseMapper; @@ -28,4 +29,10 @@ public interface TeacherOpenCourseMergeResourcesQuestionDao extends BaseMapper getValuesByQuery(TeacherOpenCourseMergeResourcesQuestionQuery teacherOpenCourseMergeResourcesQuestionQuery); List getValuesByQueryNotWithPermission(TeacherOpenCourseMergeResourcesQuestionQuery teacherOpenCourseMergeResourcesQuestionQuery); List>getExcelValues(TeacherOpenCourseMergeResourcesQuestionQuery teacherOpenCourseMergeResourcesQuestionQuery); + + /** + * 根据题型和数量,随机取离线题库 + * @return + */ + List getRandomMergeResourcesQuestionList(TeacherOpenCourseQuestionSettingDTO questionSettingDTO); } diff --git a/web/src/main/java/com/ibeetl/jlw/entity/dto/TeacherOpenCourseQuestionSettingDTO.java b/web/src/main/java/com/ibeetl/jlw/entity/dto/TeacherOpenCourseQuestionSettingDTO.java new file mode 100644 index 00000000..53e3f597 --- /dev/null +++ b/web/src/main/java/com/ibeetl/jlw/entity/dto/TeacherOpenCourseQuestionSettingDTO.java @@ -0,0 +1,43 @@ +package com.ibeetl.jlw.entity.dto; + +import com.ibeetl.jlw.enums.ResourcesQuestionTypeEnum; +import lombok.Data; + +import java.math.BigDecimal; + +/** + *题目配置查询 + * + * @author mlx + */ +@Data +public class TeacherOpenCourseQuestionSettingDTO { + + /** + * 题型 + */ + private ResourcesQuestionTypeEnum typeEnum; + + /** + * 总数量 + */ + private Integer totalCount; + + /** + * 选题数 + */ + private Integer selectCount; + + /** + * 单个题目的分值 + */ + private BigDecimal singleScore; + + /** + * 单个类型的总分值 + */ + private BigDecimal singleTypeTotalScore; + +} + + diff --git a/web/src/main/java/com/ibeetl/jlw/entity/dto/UniversitiesCollegesInfoDTO.java b/web/src/main/java/com/ibeetl/jlw/entity/dto/UniversitiesCollegesInfoDTO.java new file mode 100644 index 00000000..491755ca --- /dev/null +++ b/web/src/main/java/com/ibeetl/jlw/entity/dto/UniversitiesCollegesInfoDTO.java @@ -0,0 +1,16 @@ +package com.ibeetl.jlw.entity.dto; + +import com.ibeetl.admin.core.entity.CoreUser; +import com.ibeetl.jlw.entity.UniversitiesColleges; +import lombok.Data; + +/** + * 院校-用户中心 + */ +@Data +public class UniversitiesCollegesInfoDTO { + + private UniversitiesColleges universitiesColleges; + private CoreUser coreUser; +// private teachercourseInfoCount; +} diff --git a/web/src/main/java/com/ibeetl/jlw/enums/ResourcesQuestionTypeEnum.java b/web/src/main/java/com/ibeetl/jlw/enums/ResourcesQuestionTypeEnum.java new file mode 100644 index 00000000..74f98d6d --- /dev/null +++ b/web/src/main/java/com/ibeetl/jlw/enums/ResourcesQuestionTypeEnum.java @@ -0,0 +1,27 @@ +package com.ibeetl.jlw.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.beetl.sql.annotation.entity.EnumMapping; +import org.beetl.sql.annotation.entity.EnumValue; + +/** + * 题目类型枚举,目前用在出题配置页面 + * + * @author mlx + */ +@Getter +@EnumMapping("name") +@AllArgsConstructor +public enum ResourcesQuestionTypeEnum { + + SINGLE_QUESTION(1, "单选题"), + MULTIPLE_QUESTION(2, "多选题"), + JUDGMENT_QUESTION(3, "判断题"), + FILL_QUESTION(4, "填空题"), + ANALYSIS_QUESTION(5, "分析题"); + + @EnumValue + private Integer code; + private String text; +} diff --git a/web/src/main/java/com/ibeetl/jlw/service/ResourcesQuestionSnapshotService.java b/web/src/main/java/com/ibeetl/jlw/service/ResourcesQuestionSnapshotService.java index a33df054..62b6ba59 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/ResourcesQuestionSnapshotService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/ResourcesQuestionSnapshotService.java @@ -1,6 +1,7 @@ package com.ibeetl.jlw.service; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; import cn.jlw.util.ToolUtils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; @@ -12,6 +13,7 @@ import com.ibeetl.jlw.dao.ResourcesQuestionSnapshotDao; import com.ibeetl.jlw.dao.StudentDao; import com.ibeetl.jlw.dao.TeacherOpenCourseMergeResourcesQuestionDao; import com.ibeetl.jlw.entity.*; +import com.ibeetl.jlw.entity.dto.TeacherOpenCourseQuestionSettingDTO; import com.ibeetl.jlw.web.query.ResourcesQuestionSnapshotQuery; import org.apache.commons.lang3.StringUtils; import org.beetl.sql.core.SQLReady; @@ -26,11 +28,8 @@ import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; import static com.ibeetl.admin.core.util.user.CacheUserUtil.getUserId; @@ -165,23 +164,85 @@ public class ResourcesQuestionSnapshotService extends CoreBaseService questionSettingOptions, + String questionIdPlural) { - // 处理题目ID - String questionIdPlural = Arrays.stream(questionIds) - .distinct().flatMap(item -> Stream.of(item.split(","))) - .collect(Collectors.joining(",")); + // 在插入之前,先清空列表。这种情况下,支持题目配置还在,重置题目列表的操作。 + ResourcesQuestionSnapshot deleteCondition = new ResourcesQuestionSnapshot(); + deleteCondition.setTeacherOpenCourseQuestionSettingId(teacherOpenCourseQuestionSettingId); + deleteCondition.setQuestionStatus(1); + deleteByCondition(deleteCondition); + List insertList = new ArrayList<>(); + + // 题目设置,来动态获取题目 + if(ObjectUtil.isNotEmpty(questionSettingOptions)) { + insertList = getResourcesQuestionSnapshotListByQuestionSettingOptions(teacherOpenCourseQuestionSettingId, questionSettingOptions); + } + + // 根据题目ID集合获取题目 + if(ObjectUtil.isNotEmpty(questionIdPlural)) { + insertList = getResourcesQuestionSnapshotListByQuestionIds(teacherOpenCourseQuestionSettingId, questionIdPlural); + } + + resourcesQuestionSnapshotDao.insertBatch(insertList); + } + + + /** + * 根据题目ID集合 + * 获取题目快照列表。并配置题目配置ID + * + * @param teacherOpenCourseQuestionSettingId + * @param questionIdPlural + * @return + */ + public List getResourcesQuestionSnapshotListByQuestionIds( + @NotNull(message = "开课题目配置ID不能为空!") final Long teacherOpenCourseQuestionSettingId, + @NotBlank(message = "题目ID列表不能为空!") String questionIdPlural) { // 批量插入快照表 List byIds = teacherOpenCourseMergeResourcesQuestionDao.getByIds(questionIdPlural); List snapshotList = BeanUtil.copyToList(byIds, ResourcesQuestionSnapshot.class); snapshotList.forEach(snapshot -> { snapshot.setTeacherOpenCourseQuestionSettingId(teacherOpenCourseQuestionSettingId); }); - resourcesQuestionSnapshotDao.insertBatch(snapshotList); + + return snapshotList; + } + + /** + * 根据题目类型配置 + * 获取题目快照列表。并配置题目配置ID + * + * @param teacherOpenCourseQuestionSettingId + * @param questionSettingOptions + * @return + */ + public List getResourcesQuestionSnapshotListByQuestionSettingOptions( + @NotNull(message = "开课题目配置ID不能为空!") final Long teacherOpenCourseQuestionSettingId, + @NotBlank(message = "题目设置不能为空!") List questionSettingOptions) { + + List result = new ArrayList<>(); + + for (TeacherOpenCourseQuestionSettingDTO questionSettingOption : questionSettingOptions) { + // 根据配置随机出题 + List randomMergeResourcesQuestionList = + teacherOpenCourseMergeResourcesQuestionDao.getRandomMergeResourcesQuestionList(questionSettingOption); + + // Copy到新对象中 + List snapshotList = BeanUtil.copyToList(randomMergeResourcesQuestionList, ResourcesQuestionSnapshot.class); + snapshotList.forEach(snapshot -> { + snapshot.setTeacherOpenCourseQuestionSettingId(teacherOpenCourseQuestionSettingId); + }); + + // 放入最终的集合中 + result.addAll(snapshotList); + } + return result; } /** 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 0047c097..1ab33054 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseQuestionLogService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/TeacherOpenCourseQuestionLogService.java @@ -280,7 +280,7 @@ public class TeacherOpenCourseQuestionLogService extends CoreBaseService questionSettingOptions; + /** * 上传的题目ID,逗号隔开 * 对应{@link TeacherOpenCourseMergeResourcesQuestion#getTeacherOpenCourseMergeCourseInfoId()} 集合 + * */ - @NotBlank(message = "题目ID集合不能为空!", groups = ValidateConfig.ADD.class) private String resourcesQuestionIdPlural; private String teacherOpenCourseQuestionSettingIdPlural; diff --git a/web/src/main/resources/sql/jlw/teacherOpenCourseMergeResourcesQuestion.md b/web/src/main/resources/sql/jlw/teacherOpenCourseMergeResourcesQuestion.md index cde759ce..dc64a8de 100644 --- a/web/src/main/resources/sql/jlw/teacherOpenCourseMergeResourcesQuestion.md +++ b/web/src/main/resources/sql/jlw/teacherOpenCourseMergeResourcesQuestion.md @@ -697,3 +697,18 @@ getExcelValues ) )t + +getRandomMergeResourcesQuestionList +=== +* 根据题目设置随机出题 + + select t.* from teacher_open_course_merge_resources_question t + where 1=1 + and t.question_status = 1 + @if(!isEmpty(typeEnum)){ + and find_in_set(t.question_type, #typeEnum#) + @} + @if(!isEmpty(selectCount)){ + ORDER BY RAND() + limit #selectCount# + @} \ No newline at end of file