|  |  |  | @ -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) | 
			
		
	
	
		
			
				
					|  |  |  | 
 |