修复 章节练习和试题管理同步问题;

beetlsql3-dev
Mlxa0324 2 years ago
parent fb9a11176b
commit 0e56f62624

@ -3,6 +3,7 @@ package com.ibeetl.jlw.dao;
import com.ibeetl.jlw.entity.ResourcesQuestionSnapshot;
import com.ibeetl.jlw.entity.vo.TeacherOpenCourseQuestionTestDetailVO;
import com.ibeetl.jlw.entity.vo.TeacherOpenCourseQuestionTestSimpleInfoVO;
import com.ibeetl.jlw.enums.GlobalUpStatusEnum;
import com.ibeetl.jlw.web.query.ResourcesQuestionSnapshotQuery;
import org.beetl.sql.core.engine.PageQuery;
import org.beetl.sql.mapper.BaseMapper;
@ -67,4 +68,14 @@ public interface ResourcesQuestionSnapshotDao extends BaseMapper<ResourcesQuesti
.count();
return toIntExact(count);
}
/**
* ID
*
* @param ids IDs
* @param questionStatus
* @return
*/
@Update
int updateQuestionStatusByTeacherOpenCourseMergeResourcesQuestionIds(String ids, GlobalUpStatusEnum questionStatus);
}

@ -6,6 +6,7 @@ import com.ibeetl.jlw.entity.vo.QuestionTypeCountVO;
import com.ibeetl.jlw.web.query.TeacherOpenCourseMergeResourcesQuestionQuery;
import org.beetl.sql.core.engine.PageQuery;
import org.beetl.sql.mapper.BaseMapper;
import org.beetl.sql.mapper.annotation.Param;
import org.beetl.sql.mapper.annotation.SqlResource;
import org.beetl.sql.mapper.annotation.Update;
import org.springframework.stereotype.Component;
@ -40,6 +41,17 @@ public interface TeacherOpenCourseMergeResourcesQuestionDao extends BaseMapper<T
* @return
*/
List<TeacherOpenCourseMergeResourcesQuestion> getRandomMergeResourcesQuestionList(QuestionSettingDTO questionSettingDTO);
/**
* 线
*
* @param questionSettingDTO
* @param teacherOpenCourseId ID
* @param questionSettingId ID
* @return
*/
List<TeacherOpenCourseMergeResourcesQuestion> getRandomMergeResourcesQuestionListByChapterTestQuestion(QuestionSettingDTO questionSettingDTO,
@Param("teacherOpenCourseId") Long teacherOpenCourseId,
@Param("questionSettingId") Long questionSettingId);
/**
* ID

@ -18,6 +18,7 @@ import com.ibeetl.jlw.entity.dto.QuestionSettingDTO;
import com.ibeetl.jlw.entity.dto.TeacherOpenCourseQuestionTestSimpleInfoDTO;
import com.ibeetl.jlw.entity.vo.TeacherOpenCourseQuestionTestDetailVO;
import com.ibeetl.jlw.entity.vo.TeacherOpenCourseQuestionTestSimpleInfoVO;
import com.ibeetl.jlw.enums.GlobalUpStatusEnum;
import com.ibeetl.jlw.enums.QuestionLogAddTypeEnum;
import com.ibeetl.jlw.web.query.ResourcesQuestionSnapshotQuery;
import com.ibeetl.jlw.web.query.TeacherOpenCourseQuestionSettingQuery;
@ -45,6 +46,7 @@ import java.util.stream.Collectors;
import static cn.hutool.core.util.ArrayUtil.join;
import static cn.hutool.core.util.ObjectUtil.defaultIfNull;
import static cn.jlw.util.CacheUserUtil.getStudent;
import static com.ibeetl.admin.core.util.StreamUtils.listJoin;
import static com.ibeetl.jlw.enums.QuestionLogAddTypeEnum.FINALLY_SUBMIT;
/**
@ -95,6 +97,23 @@ public class ResourcesQuestionSnapshotService extends CoreBaseService<ResourcesQ
}
}
/**
* : <br>
* ID
*
* @param ids
* @param upStatusEnum
* @Author: 87966
* @Date: 2023/2/26 20:09
*/
public void updateQuestionStatusByTeacherOpenCourseMergeResourcesQuestionIds(String ids, GlobalUpStatusEnum upStatusEnum){
try {
resourcesQuestionSnapshotDao.updateQuestionStatusByTeacherOpenCourseMergeResourcesQuestionIds(ids, upStatusEnum);
} catch (Exception e) {
throw new PlatformException("批量修改题目快照的题目状态失败", e);
}
}
/**
* (ID)
* @param settingIds
@ -390,12 +409,12 @@ public class ResourcesQuestionSnapshotService extends CoreBaseService<ResourcesQ
*
* ID
*
* @param teacherOpenCourseQuestionSettingId
* @param questionSettingId
* @param questionSettingOptions
* @return
*/
public List<ResourcesQuestionSnapshot> getOpenResourcesQuestionSnapListBySettingOptions (
@NotNull(message = "开课题目配置ID不能为空") final Long teacherOpenCourseQuestionSettingId,
@NotNull(message = "开课题目配置ID不能为空") final Long questionSettingId,
@NotBlank(message = "题目设置不能为空!") Collection<QuestionSettingDTO> questionSettingOptions, Map<Long, Long> courseInfoIdPair) {
List<ResourcesQuestionSnapshot> result = new ArrayList<>();
@ -403,12 +422,13 @@ public class ResourcesQuestionSnapshotService extends CoreBaseService<ResourcesQ
for (QuestionSettingDTO questionSettingOption : questionSettingOptions) {
// 根据配置随机出题。这里直接设置题目的分值。
List<TeacherOpenCourseMergeResourcesQuestion> randomMergeResourcesQuestionList =
teacherOpenCourseMergeResourcesQuestionDao.getRandomMergeResourcesQuestionList(questionSettingOption);
teacherOpenCourseMergeResourcesQuestionDao
.getRandomMergeResourcesQuestionListByChapterTestQuestion(questionSettingOption, null, questionSettingId);
setRQNewCourseInfoId(randomMergeResourcesQuestionList, courseInfoIdPair);
// 放入最终的集合中
result.addAll(getResourcesQuestionSnapshotList(randomMergeResourcesQuestionList, teacherOpenCourseQuestionSettingId, e -> {}));
result.addAll(getResourcesQuestionSnapshotList(randomMergeResourcesQuestionList, questionSettingId, e -> {}));
}
return result;
}
@ -559,4 +579,25 @@ public class ResourcesQuestionSnapshotService extends CoreBaseService<ResourcesQ
public void deleteTeacherOpenCourseAllRelatedByTeacherOpenCourseId(@NotNull(message = "开课ID不能为空") Long teacherOpenCourseId) {
log.info("需要实现删除操作!");
}
/**
* ID
*
* @param openCourseMergeResourcesQuestionIds IDs
* @param upStatusEnum
*/
public void updateStatusByTeacherOpenCourseMergeResourcesQuestionId(@NotEmpty(message = "开课的题目IDs不能为空") String openCourseMergeResourcesQuestionIds,
@NotNull(message = "要更改的状态不能为空!") GlobalUpStatusEnum upStatusEnum) {
for (String mergeResourceQuestionId : openCourseMergeResourcesQuestionIds.split(",")) {
}
ResourcesQuestionSnapshotQuery query = new ResourcesQuestionSnapshotQuery();
query.setTeacherOpenCourseMergeResourcesQuestionIdPlural(openCourseMergeResourcesQuestionIds);
List<ResourcesQuestionSnapshot> questionSnapshotList = getValuesByQueryNotWithPermission(query);
String snapshotIds = listJoin(questionSnapshotList, ResourcesQuestionSnapshot::getResourcesQuestionSnapshotId);
deleteResourcesQuestionSnapshot(snapshotIds);
}
}

@ -21,6 +21,7 @@ import com.ibeetl.jlw.dao.TeacherOpenCourseMergeResourcesQuestionDao;
import com.ibeetl.jlw.entity.*;
import com.ibeetl.jlw.entity.dto.QuestionSettingDTO;
import com.ibeetl.jlw.entity.vo.QuestionTypeCountVO;
import com.ibeetl.jlw.enums.GlobalUpStatusEnum;
import com.ibeetl.jlw.enums.ResourcesQuestionTypeEnum;
import com.ibeetl.jlw.web.query.ResourcesQuestionQuery;
import com.ibeetl.jlw.web.query.TeacherOpenCourseMergeResourcesQuestionQuery;
@ -118,6 +119,9 @@ public class TeacherOpenCourseMergeResourcesQuestionService extends CoreBaseServ
query.setQuestionStatus(questionStatus);
query.set_given("questionStatus");
teacherOpenCourseMergeResourcesQuestionDao.updateGivenByIds(query);
// 修改题目快照表的状态
resourcesQuestionSnapshotService.updateQuestionStatusByTeacherOpenCourseMergeResourcesQuestionIds(
ids, EnumUtil.likeValueOf(GlobalUpStatusEnum.class, questionStatus));
} catch (Exception e) {
throw new PlatformException("批量上下架开课题目失败", e);
}

@ -396,6 +396,7 @@ public class TeacherOpenCourseQuestionSettingService extends CoreBaseService<Tea
// 题目类型区分
Collection<QuestionSettingDTO> settingDTOList = null;
// 指定题目IDs的时候指定题目。但是不传题目的类型后台这里需要处理题目分类
if(ObjectUtil.isNotEmpty(resourcesQuestionIdPlural)) {
TeacherOpenCourseMergeResourcesQuestionQuery questionQuery = new TeacherOpenCourseMergeResourcesQuestionQuery();
questionQuery.setQuestionStatus(1);
@ -416,7 +417,10 @@ public class TeacherOpenCourseQuestionSettingService extends CoreBaseService<Tea
});
if (ObjectUtil.isNotEmpty(map)) { settingDTOList = map.values(); }
} else {
}
// 随机抽取题目的方式
else {
settingDTOList = settingQuery.getQuestionSettingOptions();
}

@ -185,6 +185,13 @@ deleteResourcesQuestionSnapshotByIds
delete from resources_question_snapshot where find_in_set(resources_question_snapshot_id,#ids#)
updateQuestionStatusByTeacherOpenCourseMergeResourcesQuestionIds
===
* 通过对应的开课题目库ID批量修改题目快照状态
update resources_question_snapshot set question_status = #questionStatus# where find_in_set(teacher_open_course_merge_resources_question_id,#ids#)
deleteBySettingIds
===

@ -739,6 +739,82 @@ getRandomMergeResourcesQuestionList
@}
@}
getRandomMergeResourcesQuestionListByChapterTestQuestion
===
* 根据题目设置随机出题, 通过题目快照表获取题目
* 这里用章节练习的原因是:开课中的题库,是实时同步到章节练习中的,删除或者上下架,也都会同步的。
select
@if(!isEmpty(singleScore)){
t.teacher_open_course_id,
t.question_type,
t.question_stem,
t.question_option_a,
t.question_option_b,
t.question_option_c,
t.question_option_d,
t.question_option_e,
t.question_answer,
#singleScore# as question_score,
t.question_analysis,
t.question_status,
t.user_id,
t.org_id
@} else {
t.*
@}
from (
SELECT DISTINCT
b.teacher_open_course_id,
b.teacher_open_course_question_setting_type,
a.question_type,
a.question_stem,
a.question_option_a,
a.question_option_b,
a.question_option_c,
a.question_option_d,
a.question_option_e,
a.question_answer,
a.question_score,
a.question_analysis,
a.question_status,
b.user_id,
b.org_id
FROM
resources_question_snapshot a,
teacher_open_course_question_setting b
WHERE
1
AND a.teacher_open_course_question_setting_id = a.teacher_open_course_question_setting_id
AND question_status = 1
@if(!isEmpty(teacherOpenCourseId)){
AND b.teacher_open_course_id = #teacherOpenCourseId#
@}
@if(!isEmpty(questionSettingId)){
AND b.teacher_open_course_question_setting_id = #questionSettingId#
@}
@// 如果都为空,则不返回数据,比较保守些
@if(isEmpty(questionSettingId) && isEmpty(teacherOpenCourseId)){
AND false
@}
@// 这里用章节练习的原因是:开课中的题库,是实时同步到章节练习中的,删除或者上下架,也都会同步的。
AND b.teacher_open_course_question_setting_type = 'CHAPTER_EXERCISE'
) t
where 1=1
and t.question_status = 1
@// 题目ID优先级高
@if(!isEmpty(resourcesQuestionIdPlural)) {
and find_in_set(t.teacher_open_course_merge_resources_question_id, #resourcesQuestionIdPlural#)
@} else {
@// 随机抽题,根据题目配置动态抽取题目。会存在题库抽不够数的情况。
@if(!isEmpty(questionType)){
and find_in_set(t.question_type, #questionType#)
@}
@if(!isEmpty(selectCount)){
ORDER BY RAND()
limit #selectCount#
@}
@}
getRandomMergeResourcesQuestionListBySystem
===

Loading…
Cancel
Save