diff --git a/app/helpers/exercises_helper.rb b/app/helpers/exercises_helper.rb index cf9aec815..eaeb458a3 100644 --- a/app/helpers/exercises_helper.rb +++ b/app/helpers/exercises_helper.rb @@ -530,7 +530,7 @@ module ExercisesHelper exercise_cha_score = 0.0 answer_status = 0 # if game.status == 2 && game.final_score >= 0 - if game.final_score > 0 && game.end_time && game.end_time < exercise_end_time + if game.final_score > 0 && (game.end_time.nil? || 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 diff --git a/db/migrate/20200111024736_add_index_for_subject_records.rb b/db/migrate/20200111024736_add_index_for_subject_records.rb index c27c9b9ae..e196c407f 100644 --- a/db/migrate/20200111024736_add_index_for_subject_records.rb +++ b/db/migrate/20200111024736_add_index_for_subject_records.rb @@ -1,6 +1,6 @@ class AddIndexForSubjectRecords < ActiveRecord::Migration[5.2] def change - remove_index :subject_records, :subject_id + # remove_index :subject_records, :subject_id add_index :subject_records, :subject_id, unique: true end end diff --git a/db/migrate/20200112030419_migrate_3176_exercise_score.rb b/db/migrate/20200112030419_migrate_3176_exercise_score.rb new file mode 100644 index 000000000..e96931f79 --- /dev/null +++ b/db/migrate/20200112030419_migrate_3176_exercise_score.rb @@ -0,0 +1,50 @@ +class Migrate3176ExerciseScore < ActiveRecord::Migration[5.2] + + def calculate_student_score(exercise,user) + score5 = 0.0 #实训题 + exercise_end_time = exercise.end_time + 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.nil? || 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.find_by(user_id:user.id,exercise_question_id:q.id) + if ex_shixun_answer_content.present? && !(ex_shixun_answer_content.score >0) #把关卡的答案存入试卷的实训里 + ex_shixun_answer_content.update_attributes!(score:exercise_cha_score.round(1),status:answer_status) + end + score5 += exercise_cha_score + else + score5 += 0.0 + end + end + end + end + score5 + end + + def change + exercise = Exercise.find_by(id: 3176) + if exercise + exercise_users = exercise.exercise_users.where("start_at is not null") + 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 + if exercise_user.end_at.present? + exercise_user.update_attributes!(score:total_score,objective_score:calculate_score) + end + puts exercise_user.id + end + end + end +end diff --git a/db/migrate/20200112035304_migrate_3517_exercise_score.rb b/db/migrate/20200112035304_migrate_3517_exercise_score.rb new file mode 100644 index 000000000..821b2bbd8 --- /dev/null +++ b/db/migrate/20200112035304_migrate_3517_exercise_score.rb @@ -0,0 +1,49 @@ +class Migrate3517ExerciseScore < ActiveRecord::Migration[5.2] + def calculate_student_score(exercise,user) + score5 = 0.0 #实训题 + exercise_end_time = exercise.end_time + 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.nil? || 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.find_by(user_id:user.id,exercise_question_id:q.id) + if ex_shixun_answer_content.present? && !(ex_shixun_answer_content.score >0) #把关卡的答案存入试卷的实训里 + ex_shixun_answer_content.update_attributes!(score:exercise_cha_score.round(1),status:answer_status) + end + score5 += exercise_cha_score + else + score5 += 0.0 + end + end + end + end + score5 + end + + def change + exercise = Exercise.find_by(id: 3517) + if exercise + exercise_users = exercise.exercise_users.where("start_at is not null") + 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 + if exercise_user.end_at.present? + exercise_user.update_attributes!(score:total_score,objective_score:calculate_score) + end + puts exercise_user.id + end + end + end +end