@ -4,6 +4,7 @@ class CoursesService
include CoursesHelper
include CoursesHelper
include HomeworkAttachHelper
include HomeworkAttachHelper
include ApiHelper
include ApiHelper
include ActionView :: Helpers :: DateHelper
#参数school_id为0或不传时返回所有课程, 否则返回对应学校的课程
#参数school_id为0或不传时返回所有课程, 否则返回对应学校的课程
#参数per_page_count分页功能, 每页显示的课程数
#参数per_page_count分页功能, 每页显示的课程数
@ -332,13 +333,13 @@ class CoursesService
def homework_list params , current_user
def homework_list params , current_user
course = Course . find ( params [ :id ] )
course = Course . find ( params [ :id ] )
if course . is_public != 0 || current_user . member_of_course? ( course )
if course . is_public != 0 || current_user . member_of_course? ( course )
bids = course . homework_commons . page ( 1 ) . per ( 20 ) . order ( 'created_at DESC' )
bids = course . homework_commons . page ( params [ :page ] || 1 ) . per ( 20 ) . order ( 'created_at DESC' )
bids = bids . like ( params [ :name ] ) if params [ :name ] . present?
bids = bids . like ( params [ :name ] ) if params [ :name ] . present?
homeworks = [ ]
homeworks = [ ]
bids . each do | bid |
bids . each do | bid |
homeworks << show_homework_info ( course , bid , current_user , is_course_teacher ( current_user , course ) )
homeworks << show_homework_info ( course , bid , current_user , is_course_teacher ( current_user , course ) )
end
end
homeworks
homeworks
else
else
raise '403'
raise '403'
end
end
@ -551,17 +552,28 @@ class CoursesService
else
else
end
end
end
end
studentlist = [ ]
# studentlist = [ ]
bid . student_works . order ( " created_at desc " ) . page ( 1 ) . per ( 6 ) . each do | work |
# bid.student_works.order("created_at desc").page(1).per(6).each do |work |
studentlist << work . user
# studentlist << work. user
end
# end
unless is_course_teacher
# unless is_course_teacher
homework_for_anonymous_comments = get_student_batch_homework_list bid , current_user
# homework_for_anonymous_comments = get_student_batch_homework_list bid, current_user
end
# end
#end
#end
open_anonymous_evaluation = bid . homework_detail_manual . comment_status
open_anonymous_evaluation = bid . homework_detail_manual . comment_status
{ :course_name = > course . name , :course_id = > course . id , :id = > bid . id , :author = > bid . user , :author_real_name = > author_real_name , :homework_times = > many_times , :homework_name = > name , :homework_count = > homework_count , :student_questions_count = > 0 ,
{ :course_name = > course . name , :course_id = > course . id , :id = > bid . id ,
:description = > description , :homework_state = > state , :open_anonymous_evaluation = > open_anonymous_evaluation , :homework_for_anonymous_comments = > homework_for_anonymous_comments , :created_on = > bid . created_at , :deadline = > bid . end_time , :studentlist = > studentlist }
:author = > bid . user , :author_real_name = > author_real_name ,
:homework_times = > many_times , :homework_name = > name ,
:homework_count = > homework_count , :student_questions_count = > 0 ,
:description = > description , :homework_state = > state ,
:open_anonymous_evaluation = > open_anonymous_evaluation ,
#:homework_for_anonymous_comments => homework_for_anonymous_comments,
:created_on = > bid . created_at , :deadline = > bid . end_time ,
:homework_notsubmit_num = > bid . course . members . count - bid . student_works . count ,
:homework_submit_num = > bid . student_works . count ,
:homework_status_student = > get_homework_status ( bid ) , :homework_status_teacher = > homework_status_desc ( bid ) ,
:student_evaluation_part = > get_evaluation_part ( bid , 3 ) ,
:ta_evaluation_part = > get_evaluation_part ( bid , 2 ) , :homework_anony_type = > bid . homework_type == 1 && ! bid . homework_detail_manual . nil? }
end
end
@ -657,22 +669,12 @@ class CoursesService
membership . each do | mp |
membership . each do | mp |
course = mp . course
course = mp . course
latest_course_dynamics = [ ]
latest_course_dynamics = [ ]
dynamics_count = 0
# 课程学霸 学生总分数排名靠前的5个人
homework_count = course . homework_commons . count
sql = " select users.*,sum(IFNULL(0,student_works.final_score))/ #{ homework_count } score from student_works left outer join users on student_works.user_id = users.id " <<
" where homework_common_id in ( select id from homework_commons where homework_commons.course_id = #{ course . id } ) GROUP BY student_works.user_id ORDER BY score limit 0,6 "
better_students = User . find_by_sql ( sql )
if homework_count != 0 && ! better_students . empty?
latest_course_dynamics << { :type = > 6 , :time = > Time . now . to_s , :count = > 6 , :better_students = > better_students }
dynamics_count += 1
end
# 课程通知
# 课程通知
latest_news = course . news . page ( 1 ) . per ( 2 ) . order ( " created_on desc " )
latest_news = course . news . page ( 1 ) . per ( 2 ) . order ( " created_on desc " )
unless latest_news . first . nil?
unless latest_news . first . nil?
latest_course_dynamics << { :type = > 1 , :time = > latest_news . first . created_on , :count = > course . news . count ,
latest_course_dynamics << { :type = > 1 , :time = > latest_news . first . created_on , :count = > course . news . count ,
:news = > latest_news . all }
:news = > latest_news . all }
dynamics_count += 1
end
end
# 课程讨论区
# 课程讨论区
@ -694,12 +696,31 @@ class CoursesService
homeworks = course . homework_commons . page ( 1 ) . per ( 2 ) . order ( 'created_at desc' )
homeworks = course . homework_commons . page ( 1 ) . per ( 2 ) . order ( 'created_at desc' )
unless homeworks . first . nil?
unless homeworks . first . nil?
latest_course_dynamics << { :type = > 4 , :time = > homeworks . first . updated_at , :count = > course . homework_commons . count , :homeworks = > homeworks }
latest_course_dynamics << { :type = > 4 , :time = > homeworks . first . updated_at , :count = > course . homework_commons . count , :homeworks = > homeworks }
dynamics_count += 1
end
end
latest_course_dynamics . sort! { | order , newer | newer [ :time ] < = > order [ :time ] }
latest_course_dynamics . sort! { | order , newer | newer [ :time ] < = > order [ :time ] }
# 课程学霸 学生总分数排名靠前的5个人
homework_count = course . homework_commons . count
sql = " select users.*,sum(IFNULL(0,student_works.final_score))/ #{ homework_count } score from student_works left outer join users on student_works.user_id = users.id " <<
" where homework_common_id in ( select id from homework_commons where homework_commons.course_id = #{ course . id } ) GROUP BY student_works.user_id ORDER BY score limit 0,4 "
better_students = User . find_by_sql ( sql )
# 找出在课程讨论区发帖回帖数最多的
active_students = [ ]
sql1 = " select users.*,count(author_id) active_count from messages " <<
" LEFT JOIN users on messages.author_id = users.id " <<
" where messages.board_id in (select id from boards where boards.course_id = #{ course . id } ) " <<
" GROUP BY messages.author_id ORDER BY count(author_id) desc " <<
" limit 0,4 "
active_students = User . find_by_sql ( sql1 )
if homework_count != 0 && ! better_students . empty?
latest_course_dynamics << { :type = > 6 , :time = > Time . now . to_s , :count = > 4 , :better_students = > better_students }
end
unless active_students . empty?
latest_course_dynamics << { :type = > 7 , :time = > Time . now . to_s , :count = > 4 , :active_students = > active_students }
end
latest_course_dynamic = latest_course_dynamics . first
latest_course_dynamic = latest_course_dynamics . first
unless latest_course_dynamic . nil?
unless latest_course_dynamic . nil?
result << { :course_name = > course . name , :course_id = > course . id , :course_img_url = > url_to_avatar ( course ) , :course_time = > course . time , :course_term = > course . term , :message = > dynamics_count , :dynamics = > latest_course_dynamics , :count = > dynamics_count }
result << { :course_name = > course . name , :current_user_is_member = > current_user . member_of_course? ( course ) , :current_user_is_teacher = > is_course_teacher ( current_user , course ) , :course_id = > course . id , :course_img_url = > url_to_avatar ( course ) , :course_time = > course . time , :course_term = > course . term , :message = > " " , :dynamics = > latest_course_dynamics ,
:course_student_num = > course ? course . members . count : 0 , :time_from_now = > distance_of_time_in_words ( Time . now , latest_course_dynamic [ :time ] . to_time ) << " 前 " }
end
end
end
end
#返回数组集合
#返回数组集合
@ -709,11 +730,33 @@ class CoursesService
# 获取课程历次作业的学生总成绩
# 获取课程历次作业的学生总成绩
def students_score_list params , current_user
def students_score_list params , current_user
homework_count = Course . find ( params [ :course_id ] ) . homework_commons . count
page = ( params [ :page ] || 1 ) - 1
page = ( params [ :page ] || 1 ) - 1
sql = " select users.*,sum(IFNULL(0,student_works.final_score))/ #{ homework_count } score from student_works left outer join users on student_works.user_id = users.id " <<
user_list = [ ]
" where homework_common_id in ( select id from homework_commons where homework_commons.course_id = #{ params [ :course_id ] } ) GROUP BY student_works.user_id ORDER BY score limit #{ page * 10 } ,10 "
max_size = 0
User . find_by_sql ( sql )
if params [ :type ] == 1
homework_count = Course . find ( params [ :course_id ] ) . homework_commons . count
sql = " select users.*,sum(IFNULL(0,student_works.final_score))/ #{ homework_count } score from student_works left outer join users on student_works.user_id = users.id " <<
" where homework_common_id in ( select id from homework_commons where homework_commons.course_id = #{ params [ :course_id ] } ) GROUP BY student_works.user_id ORDER BY score limit #{ page * 10 } ,10 "
sql_count = " select count(distinct(student_works.user_id) ) " <<
" from student_works left outer join users on student_works.user_id = users.id " <<
" where homework_common_id in " <<
" ( select id from homework_commons where homework_commons.course_id = #{ params [ :course_id ] } ) "
max_size = ActiveRecord :: Base . connection ( ) . select_value ( sql_count )
user_list = User . find_by_sql ( sql )
else
sql1 = " select users.*,count(author_id)*2 active_count from messages " <<
" LEFT JOIN users on messages.author_id = users.id " <<
" where messages.board_id in (select id from boards where boards.course_id = #{ params [ :course_id ] } ) " <<
" GROUP BY messages.author_id ORDER BY count(author_id) desc " <<
" limit #{ page * 10 } ,10 "
sql1_count = " select count(DISTINCT(messages.author_id)) " <<
" from messages LEFT JOIN users on messages.author_id = users.id " <<
" where messages.board_id in (select id from boards where boards.course_id = #{ params [ :course_id ] } ) "
max_size = ActiveRecord :: Base . connection ( ) . select_value ( sql1_count )
user_list = User . find_by_sql ( sql1 )
end
{ :user_list = > user_list , :max_size = > max_size }
end
end
# 获取某次作业的所有作业列表
# 获取某次作业的所有作业列表
@ -746,41 +789,41 @@ class CoursesService
student_works
student_works
end
end
# 开启匿评
# # 开启匿评
# statue 1:启动成功, 2: 启动失败, 作业总数大于等于2份时才能启动匿评, 3:已开启匿评,请务重复开启,4:没有开启匿评的权限
# # statue 1:启动成功, 2: 启动失败, 作业总数大于等于2份时才能启动匿评, 3:已开启匿评,请务重复开启,4:没有开启匿评的权限
def start_anonymous_comment params , current_user
# def start_anonymous_comment params, current_user
homework = HomeworkCommon . find ( params [ :homework_id ] )
# homework = HomeworkCommon.find(params[:homework_id] )
return { :status = > 4 } unless current_user . admin? || current_user . allowed_to? ( :as_teacher , Course . find ( params [ :course_id ] ) )
# return {:status=>4} unless current_user.admin? || current_user.allowed_to?(:as_teacher,Course.find(params[:course_id]) )
return { :status = > 5 } if Time . parse ( homework . end_time . to_s ) . strftime ( " %Y-%m-%d " ) > = Time . now . strftime ( " %Y-%m-%d " )
# return {:status=>5} if Time.parse(homework.end_time.to_s).strftime("%Y-%m-%d") >= Time.now.strftime("%Y-%m-%d" )
homework_detail_manual = homework . homework_detail_manual
# homework_detail_manual = homework. homework_detail_manual
if homework_detail_manual . comment_status == 1
# if homework_detail_manual.comment_status == 1
student_works = homework . student_works
# student_works = homework.student_works
if student_works && student_works . size > = 2
# if student_works && student_works.size >=2
student_works . each_with_index do | work , index |
# student_works.each_with_index do |work, index|
user = work . user
# user = work.user
n = homework_detail_manual . evaluation_num
# n = homework_detail_manual.evaluation_num
n = n < student_works . size ? n : student_works . size - 1
# n = n < student_works.size ? n : student_works.size - 1
assigned_homeworks = get_assigned_homeworks ( student_works , n , index )
# assigned_homeworks = get_assigned_homeworks(student_works, n, index)
assigned_homeworks . each do | h |
# assigned_homeworks.each do |h|
student_works_evaluation_distributions = StudentWorksEvaluationDistribution . new ( user_id : user . id , student_work_id : h . id )
# student_works_evaluation_distributions = StudentWorksEvaluationDistribution.new(user_id: user.id, student_work_id: h.id)
student_works_evaluation_distributions . save
# student_works_evaluation_distributions.save
end
# end
end
# end
homework_detail_manual . update_column ( 'comment_status' , 2 )
# homework_detail_manual.update_column('comment_status', 2)
statue = 1
# statue = 1
else
# else
statue = 2
# statue = 2
end
# end
else
# else
statue = 3
# statue = 3
end
# end
{ :status = > statue }
# {:status => statue }
end
# end
#
def get_assigned_homeworks ( student_works , n , index )
# def get_assigned_homeworks(student_works, n, index )
student_works += student_works
# student_works += student_works
student_works [ index + 1 .. index + n ]
# student_works[index + 1 .. index + n ]
end
# end
end
end