From bd28c8b1a0a7883470d742f1b28b3359a942c02d Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Sat, 15 Jun 2019 08:56:04 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=81=E7=A7=BB=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...52_migrate_exercise_shixun_answer_score.rb | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 db/migrate/20190613092252_migrate_exercise_shixun_answer_score.rb diff --git a/db/migrate/20190613092252_migrate_exercise_shixun_answer_score.rb b/db/migrate/20190613092252_migrate_exercise_shixun_answer_score.rb new file mode 100644 index 00000000..30219bcd --- /dev/null +++ b/db/migrate/20190613092252_migrate_exercise_shixun_answer_score.rb @@ -0,0 +1,78 @@ +class MigrateExerciseShixunAnswerScore < ActiveRecord::Migration + def up + # exercises = Exercise.where(id: [1057, 1058]) + # exercises.each do |exercise| + # exercise.exercise_users.where(commit_status: 1).each do |ex_user| + # ex_user.exercise_user_questions.each do |ex_user_question| + # score_change = false + # answer_count = ex_user.user.exercise_shixun_answers.where(exercise_question_id: ex_user_question.exercise_question_id).count + # if answer_count > 1 + # score_change = true + # first_answer = ex_user.user.exercise_shixun_answers.where(exercise_question_id: ex_user_question.exercise_question_id).reorder("score desc").first + # ex_user.user.exercise_shixun_answers.where(exercise_question_id: ex_user_question.exercise_question_id).where("id != #{first_answer.id}").delete_all + # end + # + # if score_change + # score = ExerciseShixunAnswer.where(user_id: ex_user.user_id, exercise_question_id: ex_user.exercise_user_questions.pluck(:exercise_question_id)).pluck(:score).sum + # ex_user.update_attributes(score: score, objective_score: score) + # end + # end + # end + # end + + # exercise_users = ExerciseUser.where(exercise_id: 1057, user_id: [54486, 54563, 54517, 54609, 54785]) + # exercise_users.each do |ex_user| + # score = ExerciseShixunAnswer.where(user_id: ex_user.user_id, exercise_question_id: ex_user.exercise_user_questions.pluck(:exercise_question_id)).pluck(:score).sum + # ex_user.update_attributes(score: score, objective_score: score) + # end + # + # exercise_users = ExerciseUser.where(exercise_id: 1058, user_id: 54957) + # exercise_users.each do |ex_user| + # score = ExerciseShixunAnswer.where(user_id: ex_user.user_id, exercise_question_id: ex_user.exercise_user_questions.pluck(:exercise_question_id)).pluck(:score).sum + # ex_user.update_attributes(score: score, objective_score: score) + # end + + + exercises = Exercise.where(id: [1057, 1058]) + exercises.each do |exercise| + exercise.exercise_users.where(commit_status: 1).each do |ex_user| + ex_user.exercise_user_questions.each do |ex_user_question| + question = ex_user_question.exercise_question + question.exercise_shixun_challenges.each do |exercise_cha| + game = Game.where(:user_id => ex_user.user_id, :challenge_id => exercise_cha.challenge_id).first + if game.present? + exercise_cha_score = 0 + if game.final_score >= 0 + exercise_cha_score = game.real_score exercise_cha.question_score + end + + answer = exercise_cha.exercise_shixun_answers.where(:user_id => ex_user.user_id).first + + if exercise_cha_score.to_i != answer.try(:score).to_i + puts("###########{exercise_cha_score}--#{answer.try(:score).to_f}--#{ex_user.id}--#{ex_user.user_id}--#{game.id}") + end + end + end + end + end + end + + Exercise.where("id not in (1057, 1058)").each do |exercise| + ExerciseShixunChallenge.joins(:exercise_question).where("exercise_id = #{exercise.id}").each do |ex_challenge| + exercise.exercise_users.where(commit_status: 1).find_each do |ex_user| + first = ex_challenge.exercise_shixun_answers.where(user_id: ex_user.user_id).first + if first.present? + puts("#######{ex_challenge.exercise_shixun_answers.where(user_id: ex_user.user_id).where("id != #{first.id}").pluck(:id)}") + ex_challenge.exercise_shixun_answers.where(user_id: ex_user.user_id).where("id != #{first.id}").delete_all + end + end + end + end + + add_index :exercise_shixun_answers, [:user_id, :exercise_shixun_challenge_id], unique: true, + name: "index_user_id_and_exercise_shixun_challenge_id" + end + + def down + end +end