diff --git a/tz/exam/exam-service/src/main/java/com/tz/platform/pc/PCQuestionController.java b/tz/exam/exam-service/src/main/java/com/tz/platform/pc/PCQuestionController.java index e97ba7c..43d66ac 100644 --- a/tz/exam/exam-service/src/main/java/com/tz/platform/pc/PCQuestionController.java +++ b/tz/exam/exam-service/src/main/java/com/tz/platform/pc/PCQuestionController.java @@ -3,6 +3,7 @@ package com.tz.platform.pc; import com.tz.platform.common.core.base.BaseController; import com.tz.platform.common.core.base.Result; import com.tz.platform.common.core.enmus.QuestionTypeEnum; +import com.tz.platform.entity.Question; import com.tz.platform.exam.pc.dto.QuestionContDTO; import com.tz.platform.pc.biz.PCQuestionBiz; import com.tz.platform.pc.dto.ListQuestionDTO; @@ -13,6 +14,11 @@ import com.tz.platform.repository.QuestionDao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + @RestController @RequestMapping(value = "/pc/question") public class PCQuestionController extends BaseController { @@ -21,6 +27,7 @@ public class PCQuestionController extends BaseController { private PCQuestionBiz questionBiz; @Autowired private QuestionDao questionDao; + @PostMapping(value = "list") public Result list(@RequestBody PageQuestionVO questionVO) { return questionBiz.list(questionVO); @@ -75,11 +82,66 @@ public class PCQuestionController extends BaseController { return Result.success(dto); } - //todo 随机抽取逻辑 - //1、展示所有课程信息,供选择使用。已有 使用下拉框 + @GetMapping(value = "getCourseList") + public List getCourseList() { + return questionDao.getCourseList(); + } + - //2、根据选择的一个或多个课程ID查出总共的题型数量 改造完成 getCount + @PostMapping(value = "getIdsByCount") + public List getIdsByCount(@RequestBody GetIdsVo vo) { + List ids = new ArrayList<>(); + List courseIds = vo.getCourseIds(); + int judgeCount = vo.getJudgeCount(); + int singleCount = vo.getSingleCount(); + int gapFillingCount = vo.getGapFillingCount(); + int multyCount = vo.getMultyCount(); - //3、根据用户设置的各个题型的数量组成考试,这一步应该是前端完成 + // 随机抽取题目ID + if (judgeCount > 0) { + List judgeIds = questionDao.findAllByQuestionTypeAndCourseIdIn(3, courseIds); + List collect = judgeIds.stream().map(Question::getId).collect(Collectors.toList()); + ids.addAll(randomSelect(collect, judgeCount)); + } + if (singleCount > 0) { + List singleIds = questionDao.findAllByQuestionTypeAndCourseIdIn(1, courseIds); + List collect = singleIds.stream().map(Question::getId).collect(Collectors.toList()); + ids.addAll(randomSelect(collect, singleCount)); + } + if (gapFillingCount > 0) { + List gapFillingIds = questionDao.findAllByQuestionTypeAndCourseIdIn(4, courseIds); + List collect = gapFillingIds.stream().map(Question::getId).collect(Collectors.toList()); + ids.addAll(randomSelect(collect, gapFillingCount)); + } + if (multyCount > 0) { + List multyIds= questionDao.findAllByQuestionTypeAndCourseIdIn(2, courseIds); + List collect = multyIds.stream().map(Question::getId).collect(Collectors.toList()); + ids.addAll(randomSelect(collect, multyCount)); + } + return ids; + } + /** + * 从给定的题目ID列表中随机抽取指定数量的题目ID + * + * @param ids 题目ID列表 + * @param count 需要抽取的题目数量 + * @return 抽取的题目ID列表 + */ + private List randomSelect(List ids, int count) { + if (count > ids.size()) { + throw new IllegalArgumentException("请求的题目数量超过可用题目数量"); + } + Collections.shuffle(ids); + return ids.subList(0, count); + } } + + +//todo 随机抽取逻辑 +//1、展示所有课程信息,供选择使用。已有 使用下拉框 + +//2、根据选择的一个或多个课程ID查出总共的题型数量 改造完成 getCount + +//3、根据用户设置的各个题型的数量组成考试,这一步应该是前端完成 + diff --git a/tz/exam/exam-service/src/main/java/com/tz/platform/pc/biz/PCCourseBiz.java b/tz/exam/exam-service/src/main/java/com/tz/platform/pc/biz/PCCourseBiz.java index b1feec2..e216f49 100644 --- a/tz/exam/exam-service/src/main/java/com/tz/platform/pc/biz/PCCourseBiz.java +++ b/tz/exam/exam-service/src/main/java/com/tz/platform/pc/biz/PCCourseBiz.java @@ -63,9 +63,9 @@ public class PCCourseBiz { if(StringUtils.isEmpty(courseVO.getName())){ return Result.error("课程名不能为空"); } - if(StringUtils.isEmpty(courseVO.getContent())){ - return Result.error("简介不能为空"); - } +// if(StringUtils.isEmpty(courseVO.getContent())){ +// return Result.error("简介不能为空"); +// } if(courseVO.getUserNo()<=0){ return Result.error("没有权限"); } diff --git a/tz/exam/exam-service/src/main/java/com/tz/platform/pc/vo/CourseDTO.java b/tz/exam/exam-service/src/main/java/com/tz/platform/pc/vo/CourseDTO.java new file mode 100644 index 0000000..1ea680c --- /dev/null +++ b/tz/exam/exam-service/src/main/java/com/tz/platform/pc/vo/CourseDTO.java @@ -0,0 +1,13 @@ +package com.tz.platform.pc.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class CourseDTO { + private String courseName; + private Long courseId; +} \ No newline at end of file diff --git a/tz/exam/exam-service/src/main/java/com/tz/platform/pc/vo/CourseList.java b/tz/exam/exam-service/src/main/java/com/tz/platform/pc/vo/CourseList.java new file mode 100644 index 0000000..b38953c --- /dev/null +++ b/tz/exam/exam-service/src/main/java/com/tz/platform/pc/vo/CourseList.java @@ -0,0 +1,13 @@ +package com.tz.platform.pc.vo; + +import lombok.Data; + +import java.util.List; + +/** + * @Author xcj + * @Date 2024/9/11 + */ +@Data +public class CourseList { +} diff --git a/tz/exam/exam-service/src/main/java/com/tz/platform/pc/vo/GetIdsVo.java b/tz/exam/exam-service/src/main/java/com/tz/platform/pc/vo/GetIdsVo.java new file mode 100644 index 0000000..980f89c --- /dev/null +++ b/tz/exam/exam-service/src/main/java/com/tz/platform/pc/vo/GetIdsVo.java @@ -0,0 +1,18 @@ +package com.tz.platform.pc.vo; + +import lombok.Data; + +import java.util.List; + +/** + * @Author xcj + * @Date 2024/9/11 + */ +@Data +public class GetIdsVo { + private List courseIds; + private int singleCount; + private int multyCount; + private int judgeCount; + private int gapFillingCount; +} diff --git a/tz/exam/exam-service/src/main/java/com/tz/platform/repository/QuestionDao.java b/tz/exam/exam-service/src/main/java/com/tz/platform/repository/QuestionDao.java index 6309cc6..7106e3d 100644 --- a/tz/exam/exam-service/src/main/java/com/tz/platform/repository/QuestionDao.java +++ b/tz/exam/exam-service/src/main/java/com/tz/platform/repository/QuestionDao.java @@ -1,6 +1,7 @@ package com.tz.platform.repository; import com.tz.platform.entity.Question; +import com.tz.platform.pc.vo.CourseDTO; import org.springframework.data.domain.Example; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -12,6 +13,7 @@ import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; import java.util.List; +import java.util.Map; @Repository @@ -36,6 +38,11 @@ public interface QuestionDao extends JpaRepository { int countByQuestionTypeAndTypeAndCourseIdIn(Integer qtype, Integer type, List courseId); + @Query("SELECT DISTINCT new com.tz.platform.pc.vo.CourseDTO(q.courseName,q.courseId) FROM Question q WHERE q.type = 0") + List getCourseList(); + + List findAllByQuestionTypeAndCourseIdIn(Integer questionType, List courseId); + int countByQuestionTypeAndType(Integer qtype, Integer type); Question getByStem(String stem);