问卷列表的优化

dev_course
cxt 6 years ago
parent 4fe212c05d
commit d9e274b298

@ -88,7 +88,7 @@ class PollsController < ApplicationController
@limit = params[:limit] || 15 @limit = params[:limit] || 15
@polls = @polls.page(@page).per(@limit) @polls = @polls.page(@page).per(@limit)
@polls = @polls&.includes(:poll_users,:poll_questions,:poll_group_settings) @polls = @polls&.includes(:published_settings)
else else
@polls = [] @polls = []
end end
@ -965,7 +965,7 @@ class PollsController < ApplicationController
if @user_course_identity < Course::STUDENT #当前为老师,而且老师只能查看自己班级的/课堂的问卷 if @user_course_identity < Course::STUDENT #当前为老师,而且老师只能查看自己班级的/课堂的问卷
@poll_current_user_status = 0 @poll_current_user_status = 0
@poll_users_list = @poll.all_poll_users(current_user.id) #该老师分班的全部学生 @poll_users_list = @poll.all_poll_users(current_user.id) #该老师分班的全部学生
get_poll_answers(@poll_users_list) get_poll_answers(@poll_users_list, @poll_list_status)
if @poll_list_status == 1 if @poll_list_status == 1
@poll_course_groups =[] @poll_course_groups =[]
else else
@ -977,7 +977,7 @@ class PollsController < ApplicationController
end end
elsif @user_course_identity > Course::ASSISTANT_PROFESSOR elsif @user_course_identity > Course::ASSISTANT_PROFESSOR
@poll_all_users = @poll.get_poll_exercise_users @poll_all_users = @poll.get_poll_exercise_users
get_poll_answers(@poll_all_users) # 未答和已答的 get_poll_answers(@poll_all_users, @poll_list_status) # 未答和已答的
@poll_course_groups = [] #当为学生的时候,不显示分班情况 @poll_course_groups = [] #当为学生的时候,不显示分班情况
@poll_current_user_status = 1 #当前用户的状态,为学生 @poll_current_user_status = 1 #当前用户的状态,为学生
poll_current_user = @poll_all_users.find_by_group_ids(current_user.id) #当前用户是否开始做问卷(提交/未提交/没做) poll_current_user = @poll_all_users.find_by_group_ids(current_user.id) #当前用户是否开始做问卷(提交/未提交/没做)
@ -988,7 +988,7 @@ class PollsController < ApplicationController
end end
else else
@poll_all_users = @poll.get_poll_exercise_users @poll_all_users = @poll.get_poll_exercise_users
get_poll_answers(@poll_all_users) # 未答和已答的 get_poll_answers(@poll_all_users, @poll_list_status) # 未答和已答的
@poll_current_user_status = 2 #当前用户非课堂成员 @poll_current_user_status = 2 #当前用户非课堂成员
@poll_users_list = [] @poll_users_list = []
end end

@ -1,10 +1,15 @@
module PollsHelper module PollsHelper
#获取试卷的已答/未答人数 #获取试卷的已答/未答人数
def get_poll_answers(poll_users) def get_poll_answers(poll_users, status)
@poll_answers = poll_users.commit_by_status(1).size #表示已经提交了的用户 if status == 1
course_all_members_count = poll_users.size @poll_answers = poll_users.commit_by_status(1).size #表示已经提交了的用户
@poll_unanswers = (course_all_members_count - @poll_answers) course_all_members_count = poll_users.size
@poll_unanswers = (course_all_members_count - @poll_answers)
else
@poll_answers = 0
@poll_unanswers = 0
end
end end
def poll_votes_count(votes,user_ids) def poll_votes_count(votes,user_ids)
@ -59,7 +64,7 @@ module PollsHelper
if is_teacher_or == 1 if is_teacher_or == 1
poll_users_list = poll.all_poll_users(user.id) #当前老师所在班级的全部学生 poll_users_list = poll.all_poll_users(user.id) #当前老师所在班级的全部学生
get_poll_answers(poll_users_list) get_poll_answers(poll_users_list, poll_status)
ex_pb_time = poll.get_poll_times(user.id,true) ex_pb_time = poll.get_poll_times(user.id,true)
poll_publish_time = ex_pb_time[:publish_time] poll_publish_time = ex_pb_time[:publish_time]
poll_end_time = ex_pb_time[:end_time] poll_end_time = ex_pb_time[:end_time]
@ -67,7 +72,7 @@ module PollsHelper
lock_icon = 0 #不显示锁图标 lock_icon = 0 #不显示锁图标
elsif is_teacher_or == 2 elsif is_teacher_or == 2
poll_users_list = poll.get_poll_exercise_users poll_users_list = poll.get_poll_exercise_users
get_poll_answers(poll_users_list) # 未答和已答的 get_poll_answers(poll_users_list, poll_status) # 未答和已答的
# get_poll_answers(poll_all_users) # get_poll_answers(poll_all_users)
ex_pb_time = poll.get_poll_times(user.id,false) ex_pb_time = poll.get_poll_times(user.id,false)
poll_publish_time = ex_pb_time[:publish_time] poll_publish_time = ex_pb_time[:publish_time]
@ -76,7 +81,7 @@ module PollsHelper
lock_icon = 0 #不显示锁图标 lock_icon = 0 #不显示锁图标
else else
poll_users_list = poll.get_poll_exercise_users poll_users_list = poll.get_poll_exercise_users
get_poll_answers(poll_users_list) # 未答和已答的 get_poll_answers(poll_users_list, poll_status) # 未答和已答的
poll_publish_time = poll.publish_time poll_publish_time = poll.publish_time
poll_end_time = poll.end_time poll_end_time = poll.end_time
current_status = 4 current_status = 4

@ -42,7 +42,7 @@ class Exercise < ApplicationRecord
if unified_setting #试卷统一设置 if unified_setting #试卷统一设置
exercise_users exercise_users
else else
ex_group_setting_ids = exercise_group_settings.exercise_group_published.pluck(:course_group_id) ex_group_setting_ids = published_settings.pluck(:course_group_id)
exercise_users.joins("join course_members on exercise_users.user_id=course_members.user_id"). exercise_users.joins("join course_members on exercise_users.user_id=course_members.user_id").
where(course_members: {course_group_id: ex_group_setting_ids}) where(course_members: {course_group_id: ex_group_setting_ids})
end end
@ -59,15 +59,15 @@ class Exercise < ApplicationRecord
# 根据是否统一发布获取作业的作品列表 # 根据是否统一发布获取作业的作品列表
def all_works def all_works
exercise_users = self.unified_setting ? self.exercise_users : exercise_users = unified_setting ? exercise_users :
self.exercise_users.joins("join course_members on exercise_users.user_id=course_members.user_id"). exercise_users.joins("join course_members on exercise_users.user_id=course_members.user_id").
where(course_members: {course_group_id: self.published_settings.pluck(:course_group_id)}) where(course_members: {course_group_id: published_settings.pluck(:course_group_id)})
end end
# 分班权限的老师可见的作品列表 # 分班权限的老师可见的作品列表
def all_exercise_users user_id def all_exercise_users user_id
# member = course.course_member(user_id) # member = course.course_member(user_id)
teacher_course_groups = course.teacher_course_groups.where(user_id: user_id) teacher_course_groups = course.teacher_course_groups.get_user_groups
ex_users = self.all_works ex_users = self.all_works
# 有分班权限的统计管理的分班且已发布的学生情况 # 有分班权限的统计管理的分班且已发布的学生情况
if teacher_course_groups.exists? if teacher_course_groups.exists?

@ -8,6 +8,7 @@ class Poll < ApplicationRecord
has_many :poll_users, -> { where("is_delete != 1") }, :dependent => :delete_all has_many :poll_users, -> { where("is_delete != 1") }, :dependent => :delete_all
has_many :users, :through => :poll_users #该文件被哪些用户提交答案过 has_many :users, :through => :poll_users #该文件被哪些用户提交答案过
has_many :poll_group_settings, :dependent => :delete_all has_many :poll_group_settings, :dependent => :delete_all
has_many :published_settings, -> { poll_group_published }, class_name: "PollGroupSetting"
has_many :course_acts, class_name: 'CourseActivity', as: :course_act, dependent: :delete_all has_many :course_acts, class_name: 'CourseActivity', as: :course_act, dependent: :delete_all
has_many :tidings, as: :container, dependent: :delete_all has_many :tidings, as: :container, dependent: :delete_all
@ -44,21 +45,43 @@ class Poll < ApplicationRecord
if unified_setting #试卷统一设置 if unified_setting #试卷统一设置
poll_users poll_users
else else
ex_group_setting_ids = poll_group_settings.poll_group_published.pluck(:course_group_id) ex_group_setting_ids = published_settings.pluck(:course_group_id)
poll_users.where(user_id: course.students.where(course_group_id:ex_group_setting_ids).pluck(:user_id).uniq) poll_users.joins("join course_members on poll_users.user_id=course_members.user_id").
where(course_members: {course_group_id: ex_group_setting_ids})
end end
end end
# 统一设置,为当前老师有权限的分班学生,分班设置,也为当前老师有权限的分班的学生 # 根据是否统一发布获取作业的作品列表
def all_poll_users(user_id) def all_works
poll_all_users = poll_users poll_users = unified_setting ? poll_users :
group_ids = poll_published_ids(user_id) poll_users.joins("join course_members on poll_users.user_id=course_members.user_id").
if group_ids.present? where(course_members: {course_group_id: published_settings.pluck(:course_group_id)})
poll_all_users = poll_all_users.where(user_id: course.students.where(course_group_id: group_ids).select(:user_id).pluck(:user_id).uniq) end
# 分班权限的老师可见的作品列表
def all_poll_users user_id
# member = course.course_member(user_id)
teacher_course_groups = course.teacher_course_groups.get_user_groups
poll_users = self.all_works
# 有分班权限的统计管理的分班且已发布的学生情况
if teacher_course_groups.exists?
group_ids = teacher_course_groups.pluck(:course_group_id)
poll_users = poll_users.joins("join course_members on poll_users.user_id=course_members.user_id").
where(course_members: {course_group_id: group_ids})
end end
poll_all_users poll_users
end end
# # 统一设置,为当前老师有权限的分班学生,分班设置,也为当前老师有权限的分班的学生
# def all_poll_users(user_id)
# poll_all_users = poll_users
# group_ids = poll_published_ids(user_id)
# if group_ids.present?
# poll_all_users = poll_all_users.where(user_id: course.students.where(course_group_id: group_ids).select(:user_id).pluck(:user_id).uniq)
# end
# poll_all_users
# end
#当前用户已发布的班级id和试卷分组已发布的班级id的交集 #当前用户已发布的班级id和试卷分组已发布的班级id的交集
def poll_published_ids(user_id) def poll_published_ids(user_id)
current_user_groups = course.teacher_course_ids(user_id) current_user_groups = course.teacher_course_ids(user_id)

Loading…
Cancel
Save