|
|
|
@ -42,11 +42,14 @@ class ExaminationIntelligentSettingsController < ApplicationController
|
|
|
|
|
|
|
|
|
|
# 获取可选的题
|
|
|
|
|
items = OptionalItemQuery.call(@exam.sub_discipline_id, @exam.tag_discipline_containers.pluck(:tag_discipline_id), @exam.difficulty, @exam.public)
|
|
|
|
|
|
|
|
|
|
# 可选题中去掉已组卷的试题
|
|
|
|
|
type_items = items.select{ |t_item| t_item.item_type == item.item_type }
|
|
|
|
|
# 如果可选的题数小于等于设置的题数则提示无可换的题
|
|
|
|
|
tip_exception("无可换的题") if type_items.size <= exam_type_setting.count
|
|
|
|
|
# 可选题中去掉已组卷的同题型试题
|
|
|
|
|
optional_item_ids = type_items.pluck(:id) - @exam.item_baskets.where(item_type: item.item_type).pluck(:item_bank_id)
|
|
|
|
|
optional_item_ids = (type_items.pluck(:id) - @exam.item_baskets.where(item_type: item.item_type).pluck(:item_bank_id)).uniq
|
|
|
|
|
|
|
|
|
|
# 如果可选的题数等于0则提示无可换的题
|
|
|
|
|
tip_exception("无可换的题") if optional_item_ids.size == 0
|
|
|
|
|
|
|
|
|
|
new_item = ItemBank.find optional_item_ids.sample(1).first
|
|
|
|
|
ActiveRecord::Base.transaction do
|
|
|
|
|
@exam.item_baskets << ItemBasket.new(item_bank_id: new_item.id, position: item.position, score: item.score, item_type: new_item.item_type)
|
|
|
|
@ -62,13 +65,15 @@ class ExaminationIntelligentSettingsController < ApplicationController
|
|
|
|
|
# 获取可选的题
|
|
|
|
|
items = OptionalItemQuery.call(@exam.sub_discipline_id, @exam.tag_discipline_containers.pluck(:tag_discipline_id), @exam.difficulty, @exam.public)
|
|
|
|
|
type_items = items.select{ |t_item| t_item.item_type == params[:item_type] }
|
|
|
|
|
# 如果可选的题数小于等于设置的题数则提示无可换的题
|
|
|
|
|
tip_exception("无可换的题") if type_items.size <= exam_type_setting.count
|
|
|
|
|
# 可选题中去掉已组卷的同题型试题
|
|
|
|
|
|
|
|
|
|
# 可选题中去掉已组卷的试题
|
|
|
|
|
choosed_item_ids = choosed_items.pluck(:item_bank_id)
|
|
|
|
|
optional_item_ids = type_items.pluck(:id) - choosed_item_ids
|
|
|
|
|
optional_item_ids = (type_items.pluck(:id) - choosed_item_ids).uniq
|
|
|
|
|
|
|
|
|
|
# 如果可选的题数等于0则提示无可换的题
|
|
|
|
|
tip_exception("无可换的题") if optional_item_ids.size == 0
|
|
|
|
|
|
|
|
|
|
# 如果可选题数小于设置的题数n,则在原来的选题中随机选n个,确保换题时能选到新的题
|
|
|
|
|
# 如果可选题数小于设置的题数(n),则在原来的选题中随机选n个,确保换题时能选到新的题
|
|
|
|
|
if optional_item_ids.size < exam_type_setting.count
|
|
|
|
|
absence_count = exam_type_setting.count - optional_item_ids.size
|
|
|
|
|
optional_item_ids = optional_item_ids + choosed_item_ids.sample(absence_count)
|
|
|
|
|