|  |  | @ -0,0 +1,73 @@ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | class MigrateExerciseAnswerScore < ActiveRecord::Migration[5.2] | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   def calculate_student_score(exercise,user) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     score5 = 0.0  #实训题 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     exercise_questions = exercise.exercise_questions.includes(:exercise_standard_answers,:exercise_shixun_challenges) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     exercise_questions.each do |q| | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       if q.question_type == 5 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         q.exercise_shixun_challenges.each do |exercise_cha| | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |           game = Game.user_games(user.id,exercise_cha.challenge_id)&.first  #当前用户的关卡 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |           if game.present? | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             exercise_cha_score = 0.0 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             answer_status = 0 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             # if game.status == 2 && game.final_score >= 0 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             if game.final_score > 0 && game.end_time < exercise.end_time | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |               exercise_cha_score = game.real_score(exercise_cha.question_score) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |               # exercise_cha_score = exercise_cha.question_score #每一关卡的得分 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |               answer_status = 1 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             end | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             ex_shixun_answer_content = exercise_cha.exercise_shixun_answers.where(user_id:user.id,exercise_question_id:q.id) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             code = nil | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             if exercise_cha.challenge&.path.present? | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |               cha_path = challenge_path(exercise_cha.challenge&.path) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |               game_challenge = game.game_codes.search_challenge_path(cha_path)&.first | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |               if game_challenge.present? | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 game_code = game_challenge | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 code = game_code.try(:new_code) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |               else | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 begin | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                   code = git_fle_content(game.myshixun.repo_path,cha_path) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 rescue | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                   code = "" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 end | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |               end | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             end | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             if ex_shixun_answer_content.blank?  #把关卡的答案存入试卷的实训里 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |               ### Todo 实训题的_shixun_details里的代码是不是直接从这里取出就可以了?涉及到code的多个版本库的修改 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |               sx_option = { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 :exercise_question_id => q.id, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 :exercise_shixun_challenge_id => exercise_cha.id, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 :user_id => user.id, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 :score => exercise_cha_score.round(1), | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 :answer_text => code, | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 :status => answer_status | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |               } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |               ExerciseShixunAnswer.create!(sx_option) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             else | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |               ex_shixun_answer_content.first.update_attributes!(score:exercise_cha_score.round(1),answer_text:code,answer_status:answer_status) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             end | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             score5 += exercise_cha_score | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |           else | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             score5 += 0.0 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |           end | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         end | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       end | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     end | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     score5 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   end | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   def change | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     user_ids = [111887, 111892, 111883, 111880] | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     exercise = Exercise.find_by(id: 2734) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if exercise | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       exercise_users = exercise.exercise_users.where(user_id: user_ids) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       exercise_users.each do |exercise_user| | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         calculate_score = calculate_student_score(exercise, exercise_user.user) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         subjective_score = exercise_user.subjective_score | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         total_score_subjective_score = subjective_score < 0.0 ? 0.0 : subjective_score | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         total_score = calculate_score + total_score_subjective_score | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         exercise_user.update_attributes!(score:total_score,objective_score:calculate_score) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         puts exercise_user.id | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       end | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     end | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   end | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | end |