Merge branch 'dev_cxt2' into dev_aliyun

issues25489
cxt 6 years ago
commit eebd2f2b7c

@ -107,7 +107,7 @@ class ExerciseAnswersController < ApplicationController
normal_status(-1,"已提交/已结束的试卷不允许修改!") normal_status(-1,"已提交/已结束的试卷不允许修改!")
else else
if (@exercise_user_status == Exercise::DEADLINE && @exercise_user.commit_status == 0) || (@exercise.time > 0 && @exercise_user.start_at.present? && ((@exercise_user.start_at + @exercise.time.to_i.minutes) < Time.now)) if (@exercise_user_status == Exercise::DEADLINE && @exercise_user.commit_status == 0) || (@exercise.time > 0 && @exercise_user.start_at.present? && ((@exercise_user.start_at + @exercise.time.to_i.minutes) < Time.now))
objective_score = calculate_student_score(@exercise,current_user)[:total_score] objective_score = calculate_student_score(@exercise,current_user,Time.now)[:total_score]
subjective_score = @exercise_user.subjective_score < 0.0 ? 0.0 : @exercise_user.subjective_score subjective_score = @exercise_user.subjective_score < 0.0 ? 0.0 : @exercise_user.subjective_score
total_score = objective_score + subjective_score total_score = objective_score + subjective_score
commit_option = { commit_option = {

@ -886,7 +886,7 @@ class ExercisesController < ApplicationController
ex_user_ids = exercise_users.pluck(:id) ex_user_ids = exercise_users.pluck(:id)
EndExerciseCalculateJob.perform_later(ex_user_ids,exercise) EndExerciseCalculateJob.perform_later(ex_user_ids,exercise,Time.now)
# exercise_users.each do |user| # exercise_users.each do |user|
# if user.commit_status == 0 && user.start_at.present? # if user.commit_status == 0 && user.start_at.present?
# objective_score = calculate_student_score(exercise,user.user)[:total_score] # objective_score = calculate_student_score(exercise,user.user)[:total_score]
@ -1019,59 +1019,57 @@ class ExercisesController < ApplicationController
#学生开始答题页面 #学生开始答题页面
def start_answer def start_answer
ActiveRecord::Base.transaction do begin
begin ex_users_current = ExerciseUser.where(user_id:@exercise_current_user_id,exercise_id:@exercise.id) #不能用@exercise.exercise_users因为exercise_users删除时只是状态改变未删除
ex_users_current = ExerciseUser.where(user_id:@exercise_current_user_id,exercise_id:@exercise.id) #不能用@exercise.exercise_users因为exercise_users删除时只是状态改变未删除 @exercise_user_current = ex_users_current&.first
@exercise_user_current = ex_users_current&.first if ex_users_current.exists?
if ex_users_current.exists? if @exercise_user_current.start_at.blank?
if @exercise_user_current.start_at.blank? @exercise_user_current.update_attribute("start_at",Time.now)
@exercise_user_current.update_attribute("start_at",Time.now)
end
else
if @user_course_identity > Course::ASSISTANT_PROFESSOR #当为老师的时候不创建exercise_user表理论上老师是不能进入答题的
exercise_user_params = {
:user_id => @exercise_current_user_id,
:exercise_id => @exercise.id,
:start_at => Time.now
}
exercise_user_current = ExerciseUser.new(exercise_user_params)
exercise_user_current.save
end
end end
@t_user_exercise_status = @exercise.get_exercise_status(current_user) else
if @user_course_identity > Course::ASSISTANT_PROFESSOR #当为老师的时候不创建exercise_user表理论上老师是不能进入答题的
@user_left_time = nil exercise_user_params = {
if @user_course_identity < Course::STUDENT || (@t_user_exercise_status == 3) || :user_id => @exercise_current_user_id,
(ex_users_current.exists? && @exercise_user_current.commit_status == 1) :exercise_id => @exercise.id,
@user_exercise_status = 1 #当前用户为老师/试卷已截止/试卷已提交不可编辑 :start_at => Time.now
else }
@user_left_time = get_exercise_left_time(@exercise,current_user) exercise_user_current = ExerciseUser.new(exercise_user_params)
@user_exercise_status = 0 #可编辑 exercise_user_current.save
end end
end
@t_user_exercise_status = @exercise.get_exercise_status(current_user)
@exercise_questions = @exercise.exercise_questions @user_left_time = nil
if @user_course_identity < Course::STUDENT || (@t_user_exercise_status == 3) ||
if @exercise.question_random (ex_users_current.exists? && @exercise_user_current.commit_status == 1)
@exercise_questions = @exercise_questions.order("RAND()") @user_exercise_status = 1 #当前用户为老师/试卷已截止/试卷已提交不可编辑
else else
@exercise_questions = @exercise_questions.order("question_number ASC") @user_left_time = get_exercise_left_time(@exercise,current_user)
end @user_exercise_status = 0 #可编辑
# 判断问题是否已回答还是未回答 end
@exercise_questions = @exercise_questions.includes(:exercise_shixun_challenges,
:exercise_shixun_answers,
:exercise_answers,
:exercise_standard_answers)
if @t_user_exercise_status == Exercise::DEADLINE @exercise_questions = @exercise.exercise_questions
get_each_student_exercise(@exercise.id,@exercise_questions,@exercise_current_user_id)
end
get_user_answer_status(@exercise_questions,@exercise_current_user_id,@exercise,@t_user_exercise_status)
rescue Exception => e if @exercise.question_random
uid_logger_error(e.message) @exercise_questions = @exercise_questions.order("RAND()")
tip_exception("页面调用失败!") else
raise ActiveRecord::Rollback @exercise_questions = @exercise_questions.order("question_number ASC")
end
# 判断问题是否已回答还是未回答
@exercise_questions = @exercise_questions.includes(:exercise_shixun_challenges,
:exercise_shixun_answers,
:exercise_answers,
:exercise_standard_answers)
if @t_user_exercise_status == Exercise::DEADLINE
get_each_student_exercise(@exercise.id,@exercise_questions,@exercise_current_user_id)
end end
get_user_answer_status(@exercise_questions,@exercise_current_user_id,@exercise,@t_user_exercise_status)
rescue Exception => e
uid_logger_error(e.message)
tip_exception("页面调用失败!")
raise ActiveRecord::Rollback
end end
end end
@ -1125,6 +1123,7 @@ class ExercisesController < ApplicationController
# 学生提交试卷 # 学生提交试卷
def commit_exercise def commit_exercise
tip_exception(-1, "试卷已提交") if @answer_committed_user.commit_status == 1
ActiveRecord::Base.transaction do ActiveRecord::Base.transaction do
begin begin
can_commit_exercise = false can_commit_exercise = false
@ -1140,7 +1139,7 @@ class ExercisesController < ApplicationController
can_commit_exercise = true can_commit_exercise = true
end end
if can_commit_exercise if can_commit_exercise
objective_score = calculate_student_score(@exercise,current_user)[:total_score] objective_score = calculate_student_score(@exercise,current_user,Time.now)[:total_score]
subjective_score = @answer_committed_user.subjective_score subjective_score = @answer_committed_user.subjective_score
total_score_subjective_score = subjective_score < 0.0 ? 0.0 : subjective_score total_score_subjective_score = subjective_score < 0.0 ? 0.0 : subjective_score
total_score = objective_score + total_score_subjective_score total_score = objective_score + total_score_subjective_score
@ -1204,7 +1203,6 @@ class ExercisesController < ApplicationController
#答题列表 #答题列表
def exercise_lists def exercise_lists
ActiveRecord::Base.transaction do
begin begin
@current_user_id = current_user.id @current_user_id = current_user.id
exercise_ids = [@exercise.id] exercise_ids = [@exercise.id]
@ -1278,81 +1276,80 @@ class ExercisesController < ApplicationController
if params[:review].present? if params[:review].present?
review_type = params[:review].first.to_i #已评则数据为1未评则数据为0,前端传过来的为数组 review_type = params[:review].first.to_i #已评则数据为1未评则数据为0,前端传过来的为数组
if review_type == 1 if review_type == 1
@exercise_users_list = teacher_reviews @exercise_users_list = teacher_reviews
else else
@exercise_users_list = teacher_unreviews @exercise_users_list = teacher_unreviews
end
end end
end
#答题状态的选择 #答题状态的选择
if params[:commit_status].present? if params[:commit_status].present?
choose_type = params[:commit_status] choose_type = params[:commit_status]
@exercise_users_list = @exercise_users_list.commit_exercise_by_status(choose_type) @exercise_users_list = @exercise_users_list.commit_exercise_by_status(choose_type)
end end
#班级的选择 #班级的选择
if params[:exercise_group_id].present? if params[:exercise_group_id].present?
group_id = params[:exercise_group_id] group_id = params[:exercise_group_id]
exercise_students = @course_all_members.course_find_by_ids("course_group_id",group_id) #试卷所分班的全部人数 exercise_students = @course_all_members.course_find_by_ids("course_group_id",group_id) #试卷所分班的全部人数
user_ids = exercise_students.pluck(:user_id).reject(&:blank?) user_ids = exercise_students.pluck(:user_id).reject(&:blank?)
@exercise_users_list = @exercise_users_list.exercise_commit_users(user_ids) @exercise_users_list = @exercise_users_list.exercise_commit_users(user_ids)
end end
#搜索 #搜索
if params[:search].present? if params[:search].present?
@exercise_users_list = @exercise_users_list.joins(user: :user_extension).where("CONCAT(lastname, firstname) like ? OR student_id like ?", "%#{params[:search]}%", "%#{params[:search]}%") @exercise_users_list = @exercise_users_list.joins(user: :user_extension).where("CONCAT(lastname, firstname) like ? OR student_id like ?", "%#{params[:search]}%", "%#{params[:search]}%")
end end
exercise_user_joins = @exercise_users_list.joins(user: :user_extension) exercise_user_joins = @exercise_users_list.joins(user: :user_extension)
if order == "student_id" if order == "student_id"
@exercise_users_list = exercise_user_joins.order("user_extensions.student_id #{order_type}") @exercise_users_list = exercise_user_joins.order("user_extensions.student_id #{order_type}")
elsif order == "score" elsif order == "score"
@exercise_users_list = exercise_user_joins.order("#{order} #{order_type}") @exercise_users_list = exercise_user_joins.order("#{order} #{order_type}")
else else
@exercise_users_list = exercise_user_joins.order("end_at #{order_type}, start_at #{order_type}") @exercise_users_list = exercise_user_joins.order("end_at #{order_type}, start_at #{order_type}")
end end
@export_ex_users = @exercise_users_list @export_ex_users = @exercise_users_list
@exercise_users_size = @exercise_users_list.size @exercise_users_size = @exercise_users_list.size
# 分页 # 分页
@page = params[:page] || 1 @page = params[:page] || 1
@limit = params[:limit] || 20 @limit = params[:limit] || 20
@exercise_users_list = @exercise_users_list.page(@page).per(@limit) @exercise_users_list = @exercise_users_list.page(@page).per(@limit)
else else
@exercise_users_list = [] @exercise_users_list = []
@export_ex_users = @exercise_users_list @export_ex_users = @exercise_users_list
@exercise_users_size = 0 @exercise_users_size = 0
end end
if params[:format] == "xlsx" if params[:format] == "xlsx"
if @user_course_identity > Course::ASSISTANT_PROFESSOR if @user_course_identity > Course::ASSISTANT_PROFESSOR
tip_exception(403,"无权限操作") tip_exception(403,"无权限操作")
elsif @exercise_status == Exercise::UNPUBLISHED elsif @exercise_status == Exercise::UNPUBLISHED
normal_status(-1,"试卷未发布") normal_status(-1,"试卷未发布")
elsif (@exercise_users_size == 0) || ( @export_ex_users&.exercise_user_committed.size == 0) elsif (@exercise_users_size == 0) || ( @export_ex_users&.exercise_user_committed.size == 0)
normal_status(-1,"暂无用户提交") normal_status(-1,"暂无用户提交")
elsif params[:export].present? && params[:export] elsif params[:export].present? && params[:export]
normal_status(0,"正在下载中") normal_status(0,"正在下载中")
else else
respond_to do |format| respond_to do |format|
format.xlsx{ format.xlsx{
set_export_cookies set_export_cookies
get_export_users(@exercise,@course,@export_ex_users) get_export_users(@exercise,@course,@export_ex_users)
exercise_export_name_ = exercise_export_name_ =
"#{current_user.real_name}_#{@course.name}_#{@exercise.exercise_name}_#{Time.now.strftime('%Y%m%d_%H%M%S')}" "#{current_user.real_name}_#{@course.name}_#{@exercise.exercise_name}_#{Time.now.strftime('%Y%m%d_%H%M%S')}"
render xlsx: "#{exercise_export_name_.strip}",template: "exercises/exercise_lists.xlsx.axlsx",locals: {table_columns:@table_columns,exercise_users:@user_columns} render xlsx: "#{exercise_export_name_.strip}",template: "exercises/exercise_lists.xlsx.axlsx",locals: {table_columns:@table_columns,exercise_users:@user_columns}
} }
end
end end
end end
rescue Exception => e
uid_logger_error(e.message)
tip_exception(e.message)
raise ActiveRecord::Rollback
end end
rescue Exception => e
uid_logger_error(e.message)
tip_exception(e.message)
raise ActiveRecord::Rollback
end end
end end
@ -1391,101 +1388,99 @@ class ExercisesController < ApplicationController
#学生的统计结果 #学生的统计结果
def exercise_result def exercise_result
ActiveRecord::Base.transaction do begin
begin exercise_ids = [@exercise.id]
exercise_ids = [@exercise.id] @exercise_publish_count = get_user_permission_course(exercise_ids,Exercise::PUBLISHED).size #判断是否有已发布的分班
@exercise_publish_count = get_user_permission_course(exercise_ids,Exercise::PUBLISHED).size #判断是否有已发布的分班 @exercise_unpublish_count = get_user_permission_course(exercise_ids,Exercise::UNPUBLISHED).size #判断是否有未发布的分班
@exercise_unpublish_count = get_user_permission_course(exercise_ids,Exercise::UNPUBLISHED).size #判断是否有未发布的分班 @course_all_members = @course.students #课堂的全部学生
@course_all_members = @course.students #课堂的全部学生 @exercise_all_users = @exercise.exercise_users
@exercise_all_users = @exercise.exercise_users ex_common_ids = @exercise.common_published_ids(current_user.id)
ex_common_ids = @exercise.common_published_ids(current_user.id) @exercise_course_groups = @course.get_ex_published_course(ex_common_ids)
@exercise_course_groups = @course.get_ex_published_course(ex_common_ids)
#班级的选择
#班级的选择 if params[:exercise_group_id].present?
if params[:exercise_group_id].present? group_id = params[:exercise_group_id]
group_id = params[:exercise_group_id] exercise_students = @course_all_members.course_find_by_ids("course_group_id",group_id) # 试卷所分班的全部人数
exercise_students = @course_all_members.course_find_by_ids("course_group_id",group_id) # 试卷所分班的全部人数 user_ids = exercise_students.pluck(:user_id).reject(&:blank?)
user_ids = exercise_students.pluck(:user_id).reject(&:blank?) @exercise_all_users = @exercise.exercise_users.exercise_commit_users(user_ids)
@exercise_all_users = @exercise.exercise_users.exercise_commit_users(user_ids) @course_all_members_count = @exercise_all_users.size
@course_all_members_count = @exercise_all_users.size else
else @exercise_users_list = @exercise.all_exercise_users(current_user.id)
@exercise_users_list = @exercise.all_exercise_users(current_user.id) @course_all_members_count = @exercise_users_list.size
@course_all_members_count = @exercise_users_list.size end
end @exercise_commit_users = @exercise_all_users.commit_exercise_by_status(1) #试卷的已提交用户
@exercise_commit_users = @exercise_all_users.commit_exercise_by_status(1) #试卷的已提交用户 @exercise_commit_user_ids = @exercise_commit_users.pluck(:user_id).uniq #已提交试卷的全部用户id
@exercise_commit_user_ids = @exercise_commit_users.pluck(:user_id).uniq #已提交试卷的全部用户id @exercise_commit_user_counts = @exercise_commit_users.size #试卷的已提交用户人数
@exercise_commit_user_counts = @exercise_commit_users.size #试卷的已提交用户人数 @exercise_status = @exercise.get_exercise_status(current_user)
@exercise_status = @exercise.get_exercise_status(current_user)
#提交率
#提交率 if @course_all_members_count == 0
if @course_all_members_count == 0 commit_percent = 0.00
commit_percent = 0.00 min_score = 0.0
min_score = 0.0 max_score = 0.0
max_score = 0.0 average_score = 0.0
average_score = 0.0 fail_counts = 0
fail_counts = 0 pass_counts = 0
pass_counts = 0 good_counts = 0
good_counts = 0 best_counts = 0
best_counts = 0 else
else commit_percent = (@exercise_commit_user_counts / @course_all_members_count.to_f).round(3)
commit_percent = (@exercise_commit_user_counts / @course_all_members_count.to_f).round(3) exercise_scores = @exercise_commit_users.pluck(:score).reject(&:blank?)
exercise_scores = @exercise_commit_users.pluck(:score).reject(&:blank?) min_score = exercise_scores.min.present? ? exercise_scores.min : 0.0
min_score = exercise_scores.min.present? ? exercise_scores.min : 0.0 max_score = exercise_scores.max.present? ? exercise_scores.max : 0.0
max_score = exercise_scores.max.present? ? exercise_scores.max : 0.0 total_score = exercise_scores.sum.present? ? exercise_scores.sum : 0.0
total_score = exercise_scores.sum.present? ? exercise_scores.sum : 0.0 average_score = @exercise_commit_user_counts > 0 ? (total_score.round(1) / @exercise_commit_user_counts).round(1) : 0.0
average_score = @exercise_commit_user_counts > 0 ? (total_score.round(1) / @exercise_commit_user_counts).round(1) : 0.0 question_scores = @exercise.question_scores
question_scores = @exercise.question_scores fail_score = question_scores * 0.6.round(2)
fail_score = question_scores * 0.6.round(2) pass_score = question_scores * 0.7.round(2)
pass_score = question_scores * 0.7.round(2) good_score = question_scores * 0.9.round(2)
good_score = question_scores * 0.9.round(2)
fail_counts = exercise_scores.count{|a| a < fail_score}
fail_counts = exercise_scores.count{|a| a < fail_score} pass_counts = exercise_scores.count{|a| a < pass_score && a >= fail_score}
pass_counts = exercise_scores.count{|a| a < pass_score && a >= fail_score} good_counts = exercise_scores.count{|a| a < good_score && a >= pass_score}
good_counts = exercise_scores.count{|a| a < good_score && a >= pass_score} best_counts = exercise_scores.count{|a| a >= good_score && a <= question_scores}
best_counts = exercise_scores.count{|a| a >= good_score && a <= question_scores} end
end @counts_array = {
@counts_array = { :commit_percent => commit_percent,
:commit_percent => commit_percent, :min_score => min_score.to_s,
:min_score => min_score.to_s, :max_score => max_score.to_s,
:max_score => max_score.to_s, :average_score => average_score.to_s,
:average_score => average_score.to_s, :fail_counts => fail_counts,
:fail_counts => fail_counts, :pass_counts => pass_counts,
:pass_counts => pass_counts, :good_counts => good_counts,
:good_counts => good_counts, :best_counts => best_counts,
:best_counts => best_counts, }
}
@exercise_questions = @exercise.exercise_questions&.includes(:exercise_choices,:exercise_answers,:exercise_standard_answers,:exercise_shixun_challenges,:exercise_shixun_answers)
percent_sort = "desc" @exercise_questions = @exercise.exercise_questions&.includes(:exercise_choices,:exercise_answers,:exercise_standard_answers,:exercise_shixun_challenges,:exercise_shixun_answers)
if params[:sort].present? percent_sort = "desc"
percent_sort = params[:sort]
end
# @paging_type = "percent"
# # 按题型排序
# if params[:sort].present?
# @paging_type = params[:sort].to_s
# end
ques_result_all = exercise_commit_result(@exercise_questions,@exercise_commit_user_ids) if params[:sort].present?
percent_sort = params[:sort]
end
# @paging_type = "percent"
# # 按题型排序
# if params[:sort].present?
# @paging_type = params[:sort].to_s
# end
#默认降序排列 ques_result_all = exercise_commit_result(@exercise_questions,@exercise_commit_user_ids)
if percent_sort == "desc"
@question_result_hash = ques_result_all.sort_by{|s| s[:percent]}.reverse
else
@question_result_hash = ques_result_all.sort_by{|s| s[:percent]}
end
@exercise_questions_count = @exercise_questions.size #默认降序排列
@page = params[:page] || 1 if percent_sort == "desc"
@limit = params[:limit] || 10 @question_result_hash = ques_result_all.sort_by{|s| s[:percent]}.reverse
@question_result_hash = Kaminari.paginate_array(@question_result_hash).page(@page).per(@limit) else
rescue Exception => e @question_result_hash = ques_result_all.sort_by{|s| s[:percent]}
uid_logger_error(e.message)
tip_exception("没有权限")
raise ActiveRecord::Rollback
end end
@exercise_questions_count = @exercise_questions.size
@page = params[:page] || 1
@limit = params[:limit] || 10
@question_result_hash = Kaminari.paginate_array(@question_result_hash).page(@page).per(@limit)
rescue Exception => e
uid_logger_error(e.message)
tip_exception("没有权限")
raise ActiveRecord::Rollback
end end
end end

@ -412,12 +412,13 @@ module ExercisesHelper
end end
#计算试卷的总分和试卷的答题状态 #计算试卷的总分和试卷的答题状态
def calculate_student_score(exercise,user) def calculate_student_score(exercise,user,end_time)
score1 = 0.0 #选择题/判断题 score1 = 0.0 #选择题/判断题
score2 = 0.0 #填空题 score2 = 0.0 #填空题
score5 = 0.0 #实训题 score5 = 0.0 #实训题
ques_stand = [] #问题是否正确 ques_stand = [] #问题是否正确
exercise_questions = exercise.exercise_questions.includes(:exercise_answers,:exercise_shixun_answers,:exercise_standard_answers,:exercise_shixun_challenges) exercise_end_time = end_time || Time.now
exercise_questions = exercise.exercise_questions.includes(:exercise_standard_answers,:exercise_shixun_challenges)
exercise_questions&.each do |q| exercise_questions&.each do |q|
begin begin
if q.question_type != 5 if q.question_type != 5
@ -505,7 +506,7 @@ module ExercisesHelper
exercise_cha_score = 0.0 exercise_cha_score = 0.0
answer_status = 0 answer_status = 0
# if game.status == 2 && game.final_score >= 0 # if game.status == 2 && game.final_score >= 0
if game.final_score > 0 if game.final_score > 0 && game.end_time && game.end_time < exercise_end_time
exercise_cha_score = game.real_score(exercise_cha.question_score) exercise_cha_score = game.real_score(exercise_cha.question_score)
# exercise_cha_score = exercise_cha.question_score #每一关卡的得分 # exercise_cha_score = exercise_cha.question_score #每一关卡的得分
answer_status = 1 answer_status = 1

@ -5,11 +5,11 @@ class EndExerciseCalculateJob < ApplicationJob
queue_as :default queue_as :default
def perform(ex_user_ids,exercise) def perform(ex_user_ids,exercise,end_time)
exercise_users = ExerciseUser.where(id: ex_user_ids) exercise_users = ExerciseUser.where(id: ex_user_ids)
exercise_users.each do |user| exercise_users.each do |user|
if user.commit_status == 0 && user.start_at.present? if user.commit_status == 0 && user.start_at.present?
objective_score = calculate_student_score(exercise,user.user)[:total_score] objective_score = calculate_student_score(exercise,user.user,end_time)[:total_score]
user_sub_score = user.subjective_score user_sub_score = user.subjective_score
subjective_score = user_sub_score < 0.0 ? 0.0 : user_sub_score subjective_score = user_sub_score < 0.0 ? 0.0 : user_sub_score
total_score = objective_score + subjective_score total_score = objective_score + subjective_score

@ -376,7 +376,7 @@ class Course < ApplicationRecord
case type case type
when 'activity' then '动态' when 'activity' then '动态'
when 'announcement' then '公告栏' when 'announcement' then '公告栏'
when 'online_learning' then '在线学习' when 'online_learning' then '课程学习'
when 'shixun_homework' then '实训作业' when 'shixun_homework' then '实训作业'
when 'common_homework' then '普通作业' when 'common_homework' then '普通作业'
when 'group_homework' then '分组作业' when 'group_homework' then '分组作业'

@ -70,7 +70,7 @@ class Exercise < ApplicationRecord
if unified_setting if unified_setting
self&.end_time self&.end_time
else else
user_course_group = course.course_members.find_by(user_id: user_id)&.course_group_id user_course_group = course.students.find_by(user_id: user_id)&.course_group_id
exercise_group_settings.find_by(course_group_id:user_course_group)&.end_time exercise_group_settings.find_by(course_group_id:user_course_group)&.end_time
end end
end end

@ -41,20 +41,21 @@ class ExercisePublishTask
puts "--------------------------------exercise_publish end" puts "--------------------------------exercise_publish end"
end end
def end def end
Rails.logger.info("log--------------------------------exercise_end start") Rails.logger.info("log--------------------------------exercise_end start")
puts "--------------------------------exercise_end start" puts "--------------------------------exercise_end start"
# 1。统一设置的试卷 # 1。统一设置的试卷
exercises = Exercise.includes(:exercise_users,:exercise_questions).where("exercise_status = 2 AND exercises = Exercise.includes(:exercise_questions).where("exercise_status = 2 AND end_time <= ?",Time.now + 900)
unified_setting = true AND end_time <= ?",Time.now + 900) exercises.each do |exercise|
exercises&.each do |exercise| Rails.logger.info("end_exercise_id: #{exercise.id}")
ex_type = exercise.exercise_questions.pluck(:question_type).uniq exercise.update_attributes!('exercise_status', 3)
exercise.update_column('exercise_status', 3) if exercise.unified_setting
exercise.exercise_users&.each do |exercise_user| ex_type = exercise.exercise_questions.pluck(:question_type).uniq
begin exercise.exercise_users.where("commit_status = 0 and start_at is not null").each do |exercise_user|
Rails.logger.info("true: user_id:#{exercise_user.user_id}--commit_status:#{exercise_user.commit_status}") begin
if (exercise_user&.commit_status == 0) && (exercise_user&.start_at.present?) Rails.logger.info("true: user_id:#{exercise_user.user_id}--commit_status:#{exercise_user.commit_status}")
s_score = calculate_student_score(exercise, exercise_user.user)[:total_score] s_score = calculate_student_score(exercise, exercise_user.user, exercise.end_time)[:total_score]
if ex_type.include?(4) #是否包含主观题 if ex_type.include?(4) #是否包含主观题
subjective_score = exercise_user.subjective_score subjective_score = exercise_user.subjective_score
else else
@ -66,72 +67,61 @@ class ExercisePublishTask
Rails.logger.info("true: user_id:#{exercise_user.user_id}--s_score:#{s_score}") Rails.logger.info("true: user_id:#{exercise_user.user_id}--s_score:#{s_score}")
Rails.logger.info("true: user_id:#{exercise_user.user_id}--commit_method:#{exercise_user.commit_method}") Rails.logger.info("true: user_id:#{exercise_user.user_id}--commit_method:#{exercise_user.commit_method}")
commit_option = { commit_option = {
:status => 1, :status => 1,
:commit_status => 1, :commit_status => 1,
:end_at => Time.now, :end_at => exercise.end_time,
:objective_score => s_score, :objective_score => s_score,
:score => total_score, :score => total_score,
:subjective_score => subjective_score, :subjective_score => subjective_score,
:commit_method => exercise_user&.commit_method.to_i > 0 ? exercise_user&.commit_method.to_i : 3 :commit_method => exercise_user&.commit_method.to_i > 0 ? exercise_user&.commit_method.to_i : 3
} }
exercise_user.update_attributes(commit_option) exercise_user.update_attributes(commit_option)
rescue Exception => e
Rails.logger.info("rescue errors ___________________________#{e}")
next
end end
rescue Exception => e
Rails.logger.info("rescue errors ___________________________#{e}")
next
end end
end end
end end
# 2.非统一的试卷 ExerciseGroupSetting.where("end_time < ? and end_time > ?", Time.now + 900, Time.now - 900).each do |exercise_setting|
all_exercises = Exercise.includes(:exercise_group_settings,:exercise_users,:exercise_questions).where("unified_setting = false AND exercise_status = 2 AND end_time > ?",Time.now + 900)
exercise_ids = all_exercises.blank? ? "(-1)" : "(" + all_exercises.map(&:id).join(",") + ")"
ex_group_settings = ExerciseGroupSetting.where("end_time <= '#{Time.now}' and exercise_id in #{exercise_ids}")
ex_group_settings&.each do |exercise_setting|
exercise = exercise_setting.exercise exercise = exercise_setting.exercise
if exercise.end_time <= Time.now Rails.logger.info("exercise_group_setting: exercise_id:#{exercise.id}--group_settings_id:#{exercise_setting.id}")
exercise.update_column('exercise_status', 3)
end
users = exercise.course.course_members.where(:course_group_id => exercise_setting.course_group_id)
exercise_users = exercise.exercise_users.where(user_id: users.pluck(:user_id)).where("commit_status = 0 and start_at is not null")
ex_types = exercise.exercise_questions.pluck(:question_type).uniq ex_types = exercise.exercise_questions.pluck(:question_type).uniq
users = exercise.course.students.where(:course_group_id => exercise_setting.course_group_id) exercise_users.each do |exercise_user|
exercise_users = exercise.exercise_users.where(:user_id => users.pluck(:user_id)) Rails.logger.info("false: user_id:#{exercise_user.user_id}--commit_status:#{exercise_user.commit_status}")
exercise_users&.each do |exercise_user|
begin begin
Rails.logger.info("false: user_id:#{exercise_user.user_id}--commit_status:#{exercise_user.commit_status}") if ex_types.include?(4) #是否包含主观题
if exercise_user.commit_status == 0 && !exercise_user.start_at.nil? subjective_score = exercise_user.subjective_score
if ex_types.include?(4) #是否包含主观题 else
subjective_score = exercise_user.subjective_score subjective_score = -1.0
else
subjective_score = -1.0
end
s_score = calculate_student_score(exercise, exercise_user.user)[:total_score]
total_score_subjective_score = subjective_score < 0.0 ? 0.0 : subjective_score
total_score = s_score + total_score_subjective_score
Rails.logger.info("false: user_id:#{exercise_user.user_id}--s_score:#{s_score}")
Rails.logger.info("false: user_id:#{exercise_user.user_id}--subjective_score:#{subjective_score}")
Rails.logger.info("false: user_id:#{exercise_user.user_id}--commit_method:#{exercise_user.commit_method}")
commit_option = {
:status => 1,
:commit_status => 1,
:end_at => Time.now,
:objective_score => s_score,
:score => total_score,
:subjective_score => subjective_score,
:commit_method => exercise_user&.commit_method.to_i > 0 ? exercise_user&.commit_method.to_i : 3
}
exercise_user.update_attributes(commit_option)
end end
s_score = calculate_student_score(exercise, exercise_user.user, exercise_setting.end_time)[:total_score]
total_score_subjective_score = subjective_score < 0.0 ? 0.0 : subjective_score
total_score = s_score + total_score_subjective_score
Rails.logger.info("false: user_id:#{exercise_user.user_id}--s_score:#{s_score}")
Rails.logger.info("false: user_id:#{exercise_user.user_id}--subjective_score:#{subjective_score}")
Rails.logger.info("false: user_id:#{exercise_user.user_id}--commit_method:#{exercise_user.commit_method}")
commit_option = {
:status => 1,
:commit_status => 1,
:end_at => exercise_setting.end_time,
:objective_score => s_score,
:score => total_score,
:subjective_score => subjective_score,
:commit_method => exercise_user&.commit_method.to_i > 0 ? exercise_user&.commit_method.to_i : 3
}
exercise_user.update_attributes(commit_option)
rescue Exception => e rescue Exception => e
Rails.logger.info("unified_setting_false_rescue errors ___________________________#{e}") Rails.logger.info("unified_setting_false_rescue errors ___________________________#{e}")
next next
end end
end end
end end
Rails.logger.info("log--------------------------------exercise_end end") Rails.logger.info("log--------------------------------exercise_end end")
puts "--------------------------------exercise_end end" puts "--------------------------------exercise_end end"
end end
end end

@ -110,7 +110,7 @@ namespace :poll_publish do
# # end # # end
# end # end
PollGroupSetting.where("end_time < ? and end_time > ?", Time.now + 1800, Time.now - 1800).each do |poll_setting| PollGroupSetting.where("end_time < ? and end_time > ?", Time.now + 900, Time.now - 900).each do |poll_setting|
poll = poll_setting.poll poll = poll_setting.poll
# poll.update_column('polls_status',3) # poll.update_column('polls_status',3)

Loading…
Cancel
Save