一、生成试卷
public void saveByCourseId(String courseId, Long examId) {
//取出各个题型的数量
QuestionRule questionRule = questionRuleDao.findCurrentQuestionRule();
Integer singlCount = questionRule.getSinglCount();//单选题数量
Integer moreCount = questionRule.getMoreCount();//多选题数量
Integer judgeCount = questionRule.getJudgeCount();//判断题数量
//取出数据
//List<Question> singlList = questionService.findByCourseId(courseId,Question.Type.singl.ordinal());
//List<Question> moreList = questionService.findByCourseId(courseId,Question.Type.more.ordinal());
//List<Question> judgeList = questionService.findByCourseId(courseId,Question.Type.judge.ordinal());
//单选题
List<Question> singlList = questionDao.findByCourseId(courseId,Question.Type.singl.ordinal());
//list转换成无序的set集合
Set<Question> singlResult = new HashSet<Question>();
for (Question question : singlList) {
singlResult.add(question);
}
Set<Question> singlSet = new HashSet<Question>();//用来存储抽到的单选题
int singlFlag = 0; //单选题存储个数标记
for (Question question : singlResult) {
//判断是否是单选题
if (question.getType() == Question.Type.singl.ordinal()) {
for (int i = 0; i < singlCount; i++) {
if (singlFlag >= singlCount) {
break;
}
singlFlag ++;
//如果考题已存在,继续遍历
if (singlSet.contains(question)) {
singlFlag --;
}
singlSet.add(question);
}
}
}
insertEntity(singlSet,examId);
//多选题
List<Question> moreList = questionDao.findByCourseId(courseId,Question.Type.more.ordinal());
//list转换成set集合
Set<Question> moreResult = new HashSet<Question>();
for (Question question : moreList) {
moreResult.add(question);
}
//用来存储抽到的多选题
Set<Question> moreSet = new HashSet<Question>();
int moreFlag = 0; //多选题存储个数标记
for (Question question : moreResult) {
//判断是否是多选题
if (question.getType() == Question.Type.more.ordinal()) {
for (int i = 0; i < moreCount; i++) {
if (moreFlag >= moreCount) {
break;
}
moreFlag ++;
//如果考题已存在,继续遍历
if (moreSet.contains(question)) {
moreFlag --;
}
moreSet.add(question);
}
}
}
insertEntity(moreSet,examId);
//判断题
List<Question> judgeList = questionDao.findByCourseId(courseId,Question.Type.judge.ordinal());
//list转换成set
Set<Question> judgeResult = new HashSet<Question>();
for (Question question : judgeList) {
judgeResult.add(question);
}
//用来存储抽到的判断题
Set<Question> judgeSet = new HashSet<Question>();
int judgeFlag = 0; //判断题存储个数标记
for (Question question : judgeResult) {
//判断是否是判断题
if (question.getType() == Question.Type.judge.ordinal()) {
for (int i = 0; i < judgeCount; i++) {
if (judgeFlag >= judgeCount) {
break;
}
judgeFlag ++;
//如果考题已存在,继续遍历
if (judgeSet.contains(question)) {
judgeFlag --;
}
judgeSet.add(question);
}
}
}
insertEntity(judgeSet,examId);
}
二、执行保存操作
三、试卷数据库设计