班级的统计模块显示“活跃度”、“英雄榜”、“项目活跃度”(单个作业的过滤未完成)

This commit is contained in:
cxt 2017-02-10 14:35:43 +08:00
parent 61d6a6a7c3
commit e4ebd4dd2c
26 changed files with 708 additions and 148 deletions

View File

@ -1373,21 +1373,34 @@ class CoursesController < ApplicationController
#统计
def course_statistics
@left_nav_type = 10
# @order = params[:order] ? params[:order] : 'desc'
# if !params[:tab] || params[:tab] == "activity"
# @type = params[:type] ? params[:type] : 'act_score'
# sql = "SELECT (message_num*2 + message_reply_num*1 + news_reply_num*1 + news_num*1 + resource_num*5 + journal_num*1 + homework_journal_num*1) AS act_score,
# message_num, message_reply_num, news_reply_num, news_num, resource_num, journal_num, homework_journal_num, ccs.user_id FROM course_contributor_scores ccs
# JOIN students_for_courses ON students_for_courses.course_id = ccs.course_id AND students_for_courses.student_id = ccs.user_id
# WHERE ccs.course_id = #{@course.id} HAVING act_score != 0 ORDER BY #{@type} #{@order}, act_score #{@order}"
# @members = CourseContributorScore.find_by_sql(sql)
# end
#
# @limit = 20
# @page = params[:page].nil? ? 1 : params['page'].to_i
# @members_count = @members.count
# @mem_pages = Paginator.new @members_count, @limit, @page
# @members = paginateHelper @members, @limit
@order = params[:order] ? params[:order] : 'desc'
@tab = params[:tab] ? params[:tab].to_i : nil
if !params[:tab] || params[:tab] == "1"
@type = params[:type] ? params[:type] : 'act_score'
sql = "SELECT (message_num*2 + message_reply_num*1 + news_reply_num*1 + news_num*1 + resource_num*5 + journal_num*1 + homework_journal_num*1) AS act_score,
message_num, message_reply_num, news_reply_num, news_num, resource_num, journal_num, homework_journal_num, ccs.user_id FROM course_contributor_scores ccs
JOIN students_for_courses ON students_for_courses.course_id = ccs.course_id AND students_for_courses.student_id = ccs.user_id
WHERE ccs.course_id = #{@course.id} HAVING act_score != 0 ORDER BY #{@type} #{@order}, act_score #{@order}"
@members = CourseContributorScore.find_by_sql(sql)
elsif params[:tab] == "2"
@type = params[:type] ? params[:type] : 'total_score'
@members = @course.course_homework_statisticss.reorder("#{@type} #{@order}, total_score #{@order}")
elsif params[:tab] == "3"
@type = params[:type] ? params[:type] : 'project_act_score'
sql = "SELECT (IFNULL(changeset_num, 0)*4 + issue_num*4 + issue_journal_num*1 + attach_num*5 + board_num*2 + board_message_num*1) AS project_act_score,
changeset_num, issue_num, issue_journal_num, attach_num, board_num, board_message_num, pss.project_id FROM project_scores pss
JOIN student_work_projects ON student_work_projects.project_id = pss.project_id AND student_work_projects.course_id = #{@course.id}
GROUP BY pss.project_id ORDER BY #{@type} #{@order}, project_act_score #{@order}"
@members = ProjectScore.find_by_sql(sql)
end
@limit = 20
@page = params[:page].nil? ? 1 : params['page'].to_i
@members_count = @members.count
@mem_pages = Paginator.new @members_count, @limit, @page
@members = paginateHelper @members, @limit
respond_to do |format|
format.js
format.html {render :layout => 'base_courses'}

View File

@ -97,6 +97,9 @@ class HomeworkCommonController < ApplicationController
st.late_penalty = @homework.late_penalty
st.work_status = 2
st.save
#更新CourseHomeworkStatistics中学生的迟交作品数
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, st.user_id)
course_statistics.update_attribute('late_commit_work_num', course_statistics.late_commit_work_num + 1) if course_statistics
end
end
else
@ -105,6 +108,9 @@ class HomeworkCommonController < ApplicationController
st.late_penalty = 0
st.work_status = 1
st.save
#更新CourseHomeworkStatistics中学生的迟交作品数
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, st.user_id)
course_statistics.update_attribute('late_commit_work_num', (course_statistics.late_commit_work_num - 1) < 0 ? 0 : (course_statistics.late_commit_work_num - 1)) if course_statistics
end
end
end
@ -134,9 +140,22 @@ class HomeworkCommonController < ApplicationController
end
status = false
if @homework.publish_time <= Date.today && homework_detail_manual.comment_status == 0
if @homework.publish_time > Date.today && homework_detail_manual.comment_status == 1
homework_detail_manual.comment_status = 0
@homework.student_works.destroy_all
#更新CourseHomeworkStatistics中每个学生的未交作品数
@homework.course.student.each do |student|
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, student.student_id)
course_statistics.update_attribute('un_commit_work_num', (course_statistics.un_commit_work_num - 1) < 0 ? 0 : (course_statistics.un_commit_work_num - 1)) if course_statistics
end
elsif @homework.publish_time <= Date.today && homework_detail_manual.comment_status == 0
homework_detail_manual.comment_status = 1
status = true
#更新CourseHomeworkStatistics中每个学生的未交作品数
@homework.course.student.each do |student|
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, student.student_id)
course_statistics.update_attribute('un_commit_work_num', course_statistics.un_commit_work_num + 1) if course_statistics
end
end
eval_start = homework_detail_manual.evaluation_start
if eval_start.nil? || (eval_start <= @homework.end_time && homework_detail_manual.comment_status <= 1)
@ -216,6 +235,36 @@ class HomeworkCommonController < ApplicationController
def destroy
if @homework.destroy
#更新CourseHomeworkStatistics中每个学生的未交作品数、已交作品数、迟交作品数
hw_count = @course.homework_commons.includes(:homework_detail_manual).where("homework_detail_manuals.comment_status > 0").count
homework_ids = @course.homework_commons.empty? ? "(-1)" : "(" + @course.homework_commons.map{|hw| hw.id}.join(",") + ")"
student_works = StudentWork.where("homework_common_id in #{homework_ids} and work_status !=0")
is_eva_homeworks = @course.homework_commons.includes(:homework_detail_manual).where("homework_commons.anonymous_comment = 0 and homework_detail_manuals.comment_status = 2")
is_eva_student_works = StudentWork.where(:homework_common_id => is_eva_homeworks.map{|hw| hw.id})
has_eva_homeworks = @course.homework_commons.includes(:homework_detail_manual).where("homework_commons.anonymous_comment = 0 and homework_detail_manuals.comment_status = 3")
has_eva_student_works = StudentWork.where(:homework_common_id => has_eva_homeworks.map{|hw| hw.id})
@course.student.each do |student|
user = student.student
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, student.student_id)
if user && course_statistics
committed_work_num = user.student_works.where("homework_common_id in #{homework_ids} and work_status != 0").count
un_commit_work_num = (hw_count - committed_work_num) < 0 ? 0 : (hw_count - committed_work_num)
late_commit_work_num = user.student_works.where("homework_common_id in #{homework_ids} and work_status = 2").count
absence_evaluation_work_num = user.student_works_evaluation_distributions.where(:student_work_id => has_eva_student_works.map(&:id)).count -
user.student_works_scores.where(:reviewer_role => 3, :student_work_id => has_eva_student_works.map(&:id)).group_by(&:student_work_id).count
absence_evaluation_work_num = absence_evaluation_work_num < 0 ? 0 : absence_evaluation_work_num
un_evaluation_work_num = user.student_works_evaluation_distributions.where(:student_work_id => is_eva_student_works.map(&:id)).count -
user.student_works_scores.where(:reviewer_role => 3, :student_work_id => is_eva_student_works.map(&:id)).group_by(&:student_work_id).count
un_evaluation_work_num = un_evaluation_work_num < 0 ? 0 : un_evaluation_work_num
appeal_num = user.student_works_scores.where(:student_work_id => student_works.map(&:id), :appeal_status => 3).count
average_score = user.student_works.where(:id => student_works.map(&:id)).select("AVG(student_works.work_score) as score").first ? user.student_works.where(:id => student_works.map(&:id)).select("AVG(student_works.work_score) as score").first.score : 0
total_score = user.student_works.where(:id => student_works.map(&:id)).select("SUM(student_works.work_score) as score").first ? user.student_works.where(:id => student_works.map(&:id)).select("SUM(student_works.work_score) as score").first.score : 0
course_statistics.update_attributes(:committed_work_num => committed_work_num, :un_commit_work_num => un_commit_work_num,
:late_commit_work_num => late_commit_work_num, :absence_evaluation_work_num => absence_evaluation_work_num, :un_evaluation_work_num => un_evaluation_work_num,
:appeal_num => appeal_num, :average_score => average_score, :total_score => total_score)
end
end
respond_to do |format|
format.html {
@hw_status = params[:hw_status].to_i
@ -272,6 +321,10 @@ class HomeworkCommonController < ApplicationController
student_works_evaluation_distributions = StudentWorksEvaluationDistribution.new(user_id: pro_work.user_id, student_work_id: h.id)
student_works_evaluation_distributions.save
end
#更新CourseHomeworkStatistics中该学生的待匿评数
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, pro_work.user_id)
course_statistics.update_attribute('un_evaluation_work_num', course_statistics.un_evaluation_work_num + n) if course_statistics
end
else
student_works.each_with_index do |work, index|
@ -283,6 +336,10 @@ class HomeworkCommonController < ApplicationController
student_works_evaluation_distributions = StudentWorksEvaluationDistribution.new(user_id: user.id, student_work_id: h.id)
student_works_evaluation_distributions.save
end
#更新CourseHomeworkStatistics中该学生的待匿评数
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, user.id)
course_statistics.update_attribute('un_evaluation_work_num', course_statistics.un_evaluation_work_num + n) if course_statistics
end
end
@homework_detail_manual.update_column('comment_status', 2)
@ -315,6 +372,11 @@ class HomeworkCommonController < ApplicationController
absence_penalty_count = student_work.user.student_works_evaluation_distributions.where("student_work_id IN #{work_ids}").count - student_work.user.student_works_scores.where("student_work_id IN #{work_ids} and reviewer_role = 3").count
student_work.absence_penalty = absence_penalty_count > 0 ? absence_penalty_count * @homework_detail_manual.absence_penalty : 0
student_work.save
#更新CourseHomeworkStatistics中该学生的待匿评数和缺评数
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, student_work.user_id)
course_statistics.update_attribute('un_evaluation_work_num', (course_statistics.un_evaluation_work_num - absence_penalty_count) < 0 ? 0 : (course_statistics.un_evaluation_work_num - absence_penalty_count)) if course_statistics
course_statistics.update_attribute('absence_evaluation_work_num', course_statistics.absence_evaluation_work_num + absence_penalty_count) if course_statistics
end
# 未参与匿评的缺评计算

View File

@ -607,11 +607,20 @@ class StudentWorkController < ApplicationController
anon_count = all_dis_eva.count / has_sw_count
student_work.absence_penalty = @homework.homework_detail_manual.absence_penalty * anon_count
end
#更新CourseHomeworkStatistics中学生的迟交作品数
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, User.current.id)
course_statistics.update_attribute('late_commit_work_num', course_statistics.late_commit_work_num + 1) if course_statistics
else
student_work.late_penalty = 0
student_work.work_status = 1
end
if student_work.save
#更新CourseHomeworkStatistics中学生的未交作品数、已交作品数
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, User.current.id)
course_statistics.update_attribute('committed_work_num', course_statistics.committed_work_num + 1) if course_statistics
course_statistics.update_attribute('un_commit_work_num', (course_statistics.un_commit_work_num - 1) < 0 ? 0 : (course_statistics.un_commit_work_num - 1)) if course_statistics
if @homework.homework_type == 3
if @homework.homework_detail_group.base_on_project == 1
@student_work_project.student_work_id = student_work.id
@ -627,6 +636,14 @@ class StudentWorkController < ApplicationController
stu_project = StudentWorkProject.new(:homework_common_id => @homework.id, :student_work_id => student_work.id, :project_id => stu_work.project_id == 0 ? -1 : stu_work.project_id, :user_id => members[i].to_i, :is_leader => 0, :course_id => @homework.course_id)
stu_project.save
end
#更新CourseHomeworkStatistics中学生的未交作品数、已交作品数、迟交作品数
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, members[i].to_i)
course_statistics.update_attribute('committed_work_num', course_statistics.committed_work_num + 1) if course_statistics
course_statistics.update_attribute('un_commit_work_num', (course_statistics.un_commit_work_num - 1) < 0 ? 0 : (course_statistics.un_commit_work_num - 1)) if course_statistics
if student_work.work_status == 2
course_statistics.update_attribute('late_commit_work_num', course_statistics.late_commit_work_num + 1) if course_statistics
end
end
end
@homework.update_column(:updated_at, Time.now)
@ -676,6 +693,14 @@ class StudentWorkController < ApplicationController
student_work_projects = @homework.student_work_projects.where("student_work_id=? and is_leader =?",@work.id,0)
user_ids = student_work_projects.empty? ? "(-1)" : "(" + student_work_projects.map{|stu|stu.user_id}.join(",") + ")"
student_works = @homework.student_works.where("user_id in #{user_ids}")
student_works.each do |sw|
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, sw.user_id)
if @work.work_status == 2
course_statistics.update_attribute('late_commit_work_num', (course_statistics.late_commit_work_num - 1) < 0 ? 0 : (course_statistics.late_commit_work_num - 1)) if course_statistics
end
course_statistics.update_attribute('committed_work_num', (course_statistics.committed_work_num - 1) < 0 ? 0 : (course_statistics.committed_work_num - 1)) if course_statistics
course_statistics.update_attribute('un_commit_work_num', course_statistics.un_commit_work_num + 1) if course_statistics
end
student_works.delete_all
student_work_projects.delete_all
members = params[:group_member_ids].split(',')
@ -685,6 +710,14 @@ class StudentWorkController < ApplicationController
stu_project = StudentWorkProject.new(:homework_common_id => @homework.id, :student_work_id => @work.id, :project_id => stu_work.project_id == 0 ? -1 : stu_work.project_id, :user_id => members[i].to_i, :is_leader => 0, :course_id => @homework.course_id)
stu_project.save
end
#更新CourseHomeworkStatistics中学生的未交作品数、已交作品数、迟交作品数
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, members[i].to_i)
course_statistics.update_attribute('committed_work_num', course_statistics.committed_work_num + 1) if course_statistics
course_statistics.update_attribute('un_commit_work_num', (course_statistics.un_commit_work_num - 1) < 0 ? 0 : (course_statistics.un_commit_work_num - 1)) if course_statistics
if @work.work_status == 2
course_statistics.update_attribute('late_commit_work_num', course_statistics.late_commit_work_num + 1) if course_statistics
end
end
end
@ -736,6 +769,16 @@ class StudentWorkController < ApplicationController
pros = @work.student_work_projects.where("is_leader = 0")
user_ids = pros.empty? ? "(-1)" : "(" + pros.map{|stu|stu.user_id}.join(",") + ")"
student_works = @homework.student_works.where("user_id in #{user_ids}")
#更新CourseHomeworkStatistics中每个学生的未交作品数、已交作品数、迟交作品数
student_works.each do |sw|
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, sw.user_id)
if @work.work_status == 2
course_statistics.update_attribute('late_commit_work_num', (course_statistics.late_commit_work_num - 1) < 0 ? 0 : (course_statistics.late_commit_work_num - 1)) if course_statistics
end
course_statistics.update_attribute('committed_work_num', (course_statistics.committed_work_num - 1) < 0 ? 0 : (course_statistics.committed_work_num - 1)) if course_statistics
course_statistics.update_attribute('un_commit_work_num', course_statistics.un_commit_work_num + 1) if course_statistics
end
student_works.delete_all
pros.delete_all
@ -747,6 +790,14 @@ class StudentWorkController < ApplicationController
end
@work.destroy
else
#更新CourseHomeworkStatistics中学生的已交作品数、迟交作品数
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, @work.user_id)
if @work.work_status == 2
course_statistics.update_attribute('late_commit_work_num', (course_statistics.late_commit_work_num - 1) < 0 ? 0 : (course_statistics.late_commit_work_num - 1)) if course_statistics
end
course_statistics.update_attribute('committed_work_num', (course_statistics.committed_work_num - 1) < 0 ? 0 : (course_statistics.committed_work_num - 1)) if course_statistics
course_statistics.update_attribute('un_commit_work_num', course_statistics.un_commit_work_num + 1) if course_statistics
@work.attachments.destroy_all
@work.student_works_scores.destroy_all
@work.course_messages.destroy_all
@ -762,20 +813,44 @@ class StudentWorkController < ApplicationController
end
def delete_work
@work = StudentWork.where("user_id =? and homework_common_id =?", User.current.id, @homework.id).first
@work = StudentWork.where("user_id =? and homework_common_id =? and work_status != 0", User.current.id, @homework.id).first
if @work
@work.destroy
if @homework.homework_type == 3 && @homework.homework_detail_group.base_on_project == 1
if @homework.homework_type == 3
pros = @work.student_work_projects.where("is_leader = 0")
pros.each do |pro|
pro.destroy
user_ids = pros.empty? ? "(-1)" : "(" + pros.map{|stu|stu.user_id}.join(",") + ")"
student_works = @homework.student_works.where("user_id in #{user_ids}")
#更新CourseHomeworkStatistics中每个学生的已交作品数、迟交作品数
student_works.each do |sw|
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, sw.user_id)
if @work.work_status == 2
course_statistics.update_attribute('late_commit_work_num', (course_statistics.late_commit_work_num - 1) < 0 ? 0 : (course_statistics.late_commit_work_num - 1)) if course_statistics
end
course_statistics.update_attribute('committed_work_num', (course_statistics.committed_work_num - 1) < 0 ? 0 : (course_statistics.committed_work_num - 1)) if course_statistics
course_statistics.update_attribute('un_commit_work_num', course_statistics.un_commit_work_num + 1) if course_statistics
end
student_works.delete_all
pros.delete_all
project = @work.student_work_projects.where("is_leader = 1").first
project.update_attributes(:student_work_id => nil)
elsif @homework.homework_type == 3 && @homework.homework_detail_group.base_on_project == 0
@work.student_work_projects.each do |pro2|
pro2.destroy
if @homework.homework_detail_group.base_on_project == 1
project.update_attributes(:student_work_id => nil)
else
project.destroy
end
@work.destroy
else
#更新CourseHomeworkStatistics中学生的已交作品数、迟交作品数
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, @work.user_id)
if @work.work_status == 2
course_statistics.update_attribute('late_commit_work_num', (course_statistics.late_commit_work_num - 1) < 0 ? 0 : (course_statistics.late_commit_work_num - 1)) if course_statistics
end
course_statistics.update_attribute('committed_work_num', (course_statistics.committed_work_num - 1) < 0 ? 0 : (course_statistics.committed_work_num - 1)) if course_statistics
course_statistics.update_attribute('un_commit_work_num', course_statistics.un_commit_work_num + 1) if course_statistics
@work.update_attributes(:work_status => 0, :name => "#{@homework.name}的作品提交", :description => nil, :late_penalty => 0, :commit_time => nil, :project_id => 0)
@work.attachments.destroy_all
@work.course_messages.destroy_all
end
end
redirect_to student_work_index_path(:homework => @homework.id)
@ -786,6 +861,16 @@ class StudentWorkController < ApplicationController
pros = @work.student_work_projects.where("is_leader = 0")
user_ids = pros.empty? ? "(-1)" : "(" + pros.map{|stu|stu.user_id}.join(",") + ")"
student_works = @homework.student_works.where("user_id in #{user_ids}")
#更新CourseHomeworkStatistics中每个学生的已交作品数、迟交作品数
student_works.each do |sw|
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, sw.user_id)
if @work.work_status == 2
course_statistics.update_attribute('late_commit_work_num', (course_statistics.late_commit_work_num - 1) < 0 ? 0 : (course_statistics.late_commit_work_num - 1)) if course_statistics
end
course_statistics.update_attribute('committed_work_num', (course_statistics.committed_work_num - 1) < 0 ? 0 : (course_statistics.committed_work_num - 1)) if course_statistics
course_statistics.update_attribute('un_commit_work_num', course_statistics.un_commit_work_num + 1) if course_statistics
end
student_works.delete_all
pros.delete_all
@ -797,6 +882,14 @@ class StudentWorkController < ApplicationController
end
@work.destroy
else
#更新CourseHomeworkStatistics中学生的已交作品数、迟交作品数
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, @work.user_id)
if @work.work_status == 2
course_statistics.update_attribute('late_commit_work_num', (course_statistics.late_commit_work_num - 1) < 0 ? 0 : (course_statistics.late_commit_work_num - 1)) if course_statistics
end
course_statistics.update_attribute('committed_work_num', (course_statistics.committed_work_num - 1) < 0 ? 0 : (course_statistics.committed_work_num - 1)) if course_statistics
course_statistics.update_attribute('un_commit_work_num', course_statistics.un_commit_work_num + 1) if course_statistics
@work.update_attributes(:work_status => 0, :name => "#{@homework.name}的作品提交", :description => nil, :late_penalty => 0, :commit_time => nil, :project_id => 0)
@work.attachments.destroy_all
@work.course_messages.destroy_all
@ -835,6 +928,10 @@ class StudentWorkController < ApplicationController
@new_score.student_work_id = @work.id
if @is_teacher && !@new_score.score.nil? && @work.work_status == 0
@work.update_attributes(:work_status => 1, :commit_time => Time.now)
#更新CourseHomeworkStatistics中学生的已交作品数、未交作品数
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, @work.user_id)
course_statistics.update_attribute('committed_work_num', course_statistics.committed_work_num + 1) if course_statistics
course_statistics.update_attribute('un_commit_work_num', (course_statistics.un_commit_work_num - 1) < 0 ? 0 : (course_statistics.un_commit_work_num - 1)) if course_statistics
end
if User.current.admin?
@new_score.reviewer_role = 1
@ -884,7 +981,13 @@ class StudentWorkController < ApplicationController
if @is_group_leader
add_score_to_member @work, @homework, @new_score
end
end
#更新CourseHomeworkStatistics中该学生的待匿评数, 只计算第一次评分
if User.current.student_works_scores.where(:student_work_id => @work.id, :reviewer_role => 3).count == 1
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, student_work.user_id)
course_statistics.update_attribute('un_evaluation_work_num', (course_statistics.un_evaluation_work_num - 1) < 0 ? 0 : (course_statistics.un_evaluation_work_num - 1)) if course_statistics
end
end
@homework.update_column('updated_at', Time.now)
update_course_activity(@homework.class,@homework.id)
update_user_activity(@homework.class,@homework.id)
@ -1178,11 +1281,18 @@ class StudentWorkController < ApplicationController
score_appeal.applied_messages.update_all(:status => params[:status].to_i == 2 ? 3 : (params[:status].to_i == 3 ? 1 : 2))
if params[:status].to_i == 3 || params[:status].to_i == 4
homework = @student_work_score.student_work.homework_common
course = homework.course
if params[:status].to_i == 3
# 申诉成功后 扣匿评学生的违规匿评扣分
sw = homework.student_works.where("user_id = #{@student_work_score.user_id}").first
sw.update_attribute("appeal_penalty", homework.homework_detail_manual.appeal_penalty + sw.appeal_penalty)
#申诉成功,匿评学生的被申诉记录加一
course_homework_statistics = CourseHomeworkStatistics.where(:user_id => @student_work_score.user_id, :course_id => course.id).first
if course_homework_statistics
course_homework_statistics.update_attribute('appeal_num', course_homework_statistics.appeal_num + 1)
end
# 申诉成功 重新计算申诉者的匿评分
work = @student_work_score.student_work
if work.student_works_scores.where("reviewer_role = 3 AND appeal_status != 3").count > 0
@ -1193,7 +1303,6 @@ class StudentWorkController < ApplicationController
end
@student_work_score.student_work.save
end
course = homework.course
CourseMessage.create(:user_id => @student_work_score.user_id, :course_id => course.id, :viewed => false,:course_message_id=> score_appeal.id,:course_message_type=>'StudentWorksScoresAppeal',:status=>params[:status].to_i,:apply_result =>User.current.id)
CourseMessage.create(:user_id => score_appeal.user_id, :course_id => course.id, :viewed => false,:course_message_id=> score_appeal.id,:course_message_type=>'StudentWorksScoresAppeal',:status=>params[:status].to_i,:apply_result =>User.current.id)
end
@ -1368,6 +1477,14 @@ class StudentWorkController < ApplicationController
stu_project = StudentWorkProject.new(:homework_common_id => @homework.id, :student_work_id => student_work.id, :project_id => stu_work.project_id == 0 ? -1 : stu_work.project_id, :user_id => params[:member_id][i].to_i, :is_leader => 0, :course_id => @homework.course_id)
stu_project.save
end
#更新CourseHomeworkStatistics中学生的未交作品数、已交作品数、迟交作品数
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, params[:member_id][i].to_i)
course_statistics.update_attribute('committed_work_num', course_statistics.committed_work_num + 1) if course_statistics
course_statistics.update_attribute('un_commit_work_num', (course_statistics.un_commit_work_num - 1) < 0 ? 0 : (course_statistics.un_commit_work_num - 1)) if course_statistics
if student_work.work_status == 2
course_statistics.update_attribute('late_commit_work_num', course_statistics.late_commit_work_num + 1) if course_statistics
end
end
end
@ -1378,6 +1495,14 @@ class StudentWorkController < ApplicationController
work = StudentWork.where("homework_common_id = #{@homework.id} and user_id = #{sp.user_id}").first
sp.destroy
if work
#更新CourseHomeworkStatistics中学生的未交作品数、已交作品数、迟交作品数
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(@homework.course_id, work.user_id)
if student_work.work_status == 2
course_statistics.update_attribute('late_commit_work_num', (course_statistics.late_commit_work_num - 1) < 0 ? 0 : (course_statistics.late_commit_work_num - 1)) if course_statistics
end
course_statistics.update_attribute('committed_work_num', (course_statistics.committed_work_num - 1) < 0 ? 0 : (course_statistics.committed_work_num - 1)) if course_statistics
course_statistics.update_attribute('un_commit_work_num', course_statistics.un_commit_work_num + 1) if course_statistics
work.destroy
end
end

View File

@ -1373,6 +1373,12 @@ class UsersController < ApplicationController
homework_detail_manual.comment_status = 0
else
homework_detail_manual.comment_status = 1
#更新CourseHomeworkStatistics中每个学生的未交作品数
homework.course.student.each do |student|
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(homework.course_id, student.student_id)
course_statistics.update_attribute('un_commit_work_num', course_statistics.un_commit_work_num + 1) if course_statistics
end
end
homework_detail_manual.evaluation_start = params[:evaluation_start].blank? ? homework.end_time + 7 : params[:evaluation_start]
homework_detail_manual.evaluation_end = params[:evaluation_end].blank? ? homework_detail_manual.evaluation_start + 7 : params[:evaluation_end]

View File

@ -324,7 +324,7 @@ module ApplicationHelper
# 获取项目/课程总分
# 发布缺陷 4分 回复缺陷 1分 提交一次 4分 讨论帖子 2分 回复帖子 1分 发布新闻 1分
def static_project_score obj
score = obj.issue_num * 4 + obj.issue_journal_num + (obj.changeset_num||0) * 4 + obj.board_num * 2 + obj.board_message_num + obj.news_num + obj.attach_num * 5
score = obj.issue_num * 4 + obj.issue_journal_num + (obj.changeset_num||0) * 4 + obj.board_num * 2 + obj.board_message_num + obj.attach_num * 5
end
# 获取组织成员中文名字

View File

@ -55,7 +55,7 @@ class Course < ActiveRecord::Base
has_many :student_works, :through => :homework_commons, :dependent => :destroy
has_many :course_groups, :dependent => :destroy
#has_many :course_homework_statistics, :dependent => :destroy
has_many :course_homework_statisticss, :dependent => :destroy
# 课程动态
has_many :course_acts, :class_name => 'CourseActivity',:as =>:course_act ,:dependent => :destroy

View File

@ -0,0 +1,6 @@
class CourseHomeworkStatistics < ActiveRecord::Base
# attr_accessible :title, :body
belongs_to :user
belongs_to :course
end

View File

@ -19,6 +19,7 @@ class StudentWork < ActiveRecord::Base
before_destroy :delete_praise
before_save :set_program_score, :set_src
after_save :update_avg_sum_score
after_create :act_as_message
acts_as_attachable
@ -173,6 +174,20 @@ class StudentWork < ActiveRecord::Base
end
end
#更新course_homework_statistics中的avg_score和total_score
def update_avg_sum_score
course_homework_statistics = CourseHomeworkStatistics.where(:user_id => self.user_id, :course_id => self.homework_common.course_id).first
if course_homework_statistics
course = self.homework_common.course
homework_ids = course.homework_commons.empty? ? "(-1)" : "(" + course.homework_commons.map{|hw| hw.id}.join(",") + ")"
student_works = StudentWork.where("homework_common_id in #{homework_ids} and work_status !=0")
user = self.user
average_score = user.student_works.where(:id => student_works.map(&:id)).select("AVG(student_works.work_score) as score").first ? user.student_works.where(:id => student_works.map(&:id)).select("AVG(student_works.work_score) as score").first.score : 0
total_score = user.student_works.where(:id => student_works.map(&:id)).select("SUM(student_works.work_score) as score").first ? user.student_works.where(:id => student_works.map(&:id)).select("SUM(student_works.work_score) as score").first.score : 0
course_homework_statistics.update_attributes(:average_score => average_score, :total_score => total_score)
end
end
# status == 0 : delay
def act_as_message
if self.work_status != 0 && self.created_at > self.homework_common.end_time + 1

View File

@ -40,38 +40,36 @@ class StudentsForCourse < ActiveRecord::Base
#加入班级时创建一条记录
def create_course_homework_statistic
# if CourseHomeworkStatistic.where(:user_id => self.student_id, :course_id => self.course_id).count == 0
# course = self.course
# user = self.student
# hw_count = course.homework_commons.count
# homework_ids = course.homework_commons.empty? ? "(-1)" : "(" + course.homework_commons.map{|hw| hw.id}.join(",") + ")"
# student_works = StudentWork.where("homework_common_id in #{homework_ids}")
# is_eva_homeworks = course.homework_commons.includes(:homework_detail_manual).where("homework_commons.anonymous_comment = 0 and homework_detail_manuals.comment_status = 2")
# is_eva_student_works = StudentWork.where(:homework_common_id => is_eva_homeworks.map{|hw| hw.id})
# has_eva_homeworks = course.homework_commons.includes(:homework_detail_manual).where("homework_commons.anonymous_comment = 0 and homework_detail_manuals.comment_status = 3")
# has_eva_student_works = StudentWork.where(:homework_common_id => has_eva_homeworks.map{|hw| hw.id})
# course.student.each do |student|
# user = student.student
# if user
# committed_work_num = user.student_works.where("homework_common_id in #{homework_ids} and work_status != 0").count
# un_commit_work_num = hw_count - committed_work_num
# late_commit_work_num = user.student_works.where("homework_common_id in #{homework_ids} and work_status = 2").count
# absence_evaluation_work_num = user.student_works_evaluation_distributions.where(:student_work_id => has_eva_student_works.map(&:id)).count -
# user.student_works_scores.where(:reviewer_role => 3, :student_work_id => has_eva_student_works.map(&:id)).group_by(&:student_work_id).count
# un_evaluation_work_num = user.student_works_evaluation_distributions.where(:student_work_id => is_eva_student_works.map(&:id)).count -
# user.student_works_scores.where(:reviewer_role => 3, :student_work_id => is_eva_student_works.map(&:id)).group_by(&:student_work_id).count
# appeal_num = user.student_works_scores.where(:student_work_id => student_works.map(&:id), :appeal_status => 3).count
# average_score = user.student_works.where(:id => student_works.map(&:id)).select("AVG(student_works.work_score) as score").first ? user.student_works.where(:id => student_works.map(&:id)).select("SUM(student_works.work_score) as score").first.score : 0
# total_score = user.student_works.where(:id => student_works.map(&:id)).select("SUM(student_works.work_score) as score").first ? user.student_works.where(:id => student_works.map(&:id)).select("SUM(student_works.work_score) as score").first.score : 0
# CourseHomeworkStatistic.create(:course_id => course.id, :user_id => user.id, :committed_work_num => committed_work_num, :un_commit_work_num => un_commit_work_num,
# :late_commit_work_num => late_commit_work_num, :absence_evaluation_work_num => absence_evaluation_work_num, :un_evaluation_work_num => un_evaluation_work_num,
# :appeal_num => appeal_num, :average_score => average_score, :total_score => total_score)
# end
# end
# end
if CourseHomeworkStatistic.where(:user_id => self.student_id, :course_id => self.course_id).count == 0
course = self.course
user = self.student
hw_count = course.homework_commons.includes(:homework_detail_manual).where("homework_detail_manuals.comment_status > 0").count
homework_ids = course.homework_commons.empty? ? "(-1)" : "(" + course.homework_commons.map{|hw| hw.id}.join(",") + ")"
student_works = StudentWork.where("homework_common_id in #{homework_ids} and work_status !=0")
is_eva_homeworks = course.homework_commons.includes(:homework_detail_manual).where("homework_commons.anonymous_comment = 0 and homework_detail_manuals.comment_status = 2")
is_eva_student_works = StudentWork.where(:homework_common_id => is_eva_homeworks.map{|hw| hw.id})
has_eva_homeworks = course.homework_commons.includes(:homework_detail_manual).where("homework_commons.anonymous_comment = 0 and homework_detail_manuals.comment_status = 3")
has_eva_student_works = StudentWork.where(:homework_common_id => has_eva_homeworks.map{|hw| hw.id})
committed_work_num = user.student_works.where("homework_common_id in #{homework_ids} and work_status != 0").count
un_commit_work_num = (hw_count - committed_work_num) < 0 ? 0 : (hw_count - committed_work_num)
late_commit_work_num = user.student_works.where("homework_common_id in #{homework_ids} and work_status = 2").count
absence_evaluation_work_num = user.student_works_evaluation_distributions.where(:student_work_id => has_eva_student_works.map(&:id)).count -
user.student_works_scores.where(:reviewer_role => 3, :student_work_id => has_eva_student_works.map(&:id)).group_by(&:student_work_id).count
absence_evaluation_work_num = absence_evaluation_work_num < 0 ? 0 : absence_evaluation_work_num
un_evaluation_work_num = user.student_works_evaluation_distributions.where(:student_work_id => is_eva_student_works.map(&:id)).count -
user.student_works_scores.where(:reviewer_role => 3, :student_work_id => is_eva_student_works.map(&:id)).group_by(&:student_work_id).count
un_evaluation_work_num = un_evaluation_work_num < 0 ? 0 : un_evaluation_work_num
appeal_num = user.student_works_scores.where(:student_work_id => student_works.map(&:id), :appeal_status => 3).count
average_score = user.student_works.where(:id => student_works.map(&:id)).select("AVG(student_works.work_score) as score").first ? user.student_works.where(:id => student_works.map(&:id)).select("AVG(student_works.work_score) as score").first.score : 0
total_score = user.student_works.where(:id => student_works.map(&:id)).select("SUM(student_works.work_score) as score").first ? user.student_works.where(:id => student_works.map(&:id)).select("SUM(student_works.work_score) as score").first.score : 0
CourseHomeworkStatistic.create(:course_id => course.id, :user_id => user.id, :committed_work_num => committed_work_num, :un_commit_work_num => un_commit_work_num,
:late_commit_work_num => late_commit_work_num, :absence_evaluation_work_num => absence_evaluation_work_num, :un_evaluation_work_num => un_evaluation_work_num,
:appeal_num => appeal_num, :average_score => average_score, :total_score => total_score)
end
end
def delete_course_homework_statistic
#CourseHomeworkStatistic.where(:user_id => self.student_id, :course_id => self.course_id).destroy_all
CourseHomeworkStatistic.where(:user_id => self.student_id, :course_id => self.course_id).destroy_all
end
end

View File

@ -183,7 +183,7 @@ class User < Principal
# 课程贡献榜
has_many :course_contributor_scores, :dependent => :destroy
#has_many :course_homework_statistics, :dependent => :destroy
has_many :course_homework_statisticss, :dependent => :destroy
######added by nie
has_many :project_infos, :dependent => :destroy

View File

@ -37,7 +37,7 @@
<p>= <%= (project_score.changeset_num||0) * 4 %>
+ <%= project_score.issue_num * 4 + project_score.issue_journal_num %> + <%= project_score.attach_num * 5 %>
+ <%= project_score.board_num * 2 + project_score.board_message_num + project_score.news_num %></p>
+ <%= project_score.board_num * 2 + project_score.board_message_num %></p>
<% end %>
</div>
</div>

View File

@ -37,7 +37,7 @@
<p>= <%= (project_score.changeset_num||0) * 4 %>
+ <%= project_score.issue_num * 4 + project_score.issue_journal_num %> + <%= project_score.attach_num * 5 %>
+ <%= project_score.board_num * 2 + project_score.board_message_num + project_score.news_num %></p>
+ <%= project_score.board_num * 2 + project_score.board_message_num %></p>
<% end %>
</div>
</div>

View File

@ -0,0 +1,92 @@
<% if @members.count != 0 %>
<table class="muban_table clearfix mb15 t-center" cellpadding="0" cellspacing="0">
<thead>
<tr>
<th class="table-td-w30" >姓名</th>
<th class="table-td-w10">
<%= link_to '已交作品', course_statistics_course_path(@course, :tab => 2, :type => 'committed_work_num', :order => (@order == "desc" ? "asc" : "desc")), method: 'get', remote: true, :style => 'color:#000000;'%>
<% if @type == "committed_work_num" && @order == 'desc' %>
<a href="javascript:" class= "sy_sortupbtn"></a>
<% elsif @type == "committed_work_num" && @order == 'asc' %>
<a href="javascript:" class= "sy_sortdownbtn"></a>
<% end %>
</th>
<th class="table-td-w10">
<%= link_to '未交作品', course_statistics_course_path(@course, :tab => 2, :type => 'un_commit_work_num', :order => (@order == "desc" ? "asc" : "desc")), method: 'get', remote: true, :style => 'color:#000000;'%>
<% if @type == "un_commit_work_num" && @order == 'desc' %>
<a href="javascript:" class= "sy_sortupbtn"></a>
<% elsif @type == "un_commit_work_num" && @order == 'asc' %>
<a href="javascript:" class= "sy_sortdownbtn"></a>
<% end %>
</th>
<th class="table-td-w10">
<%= link_to '迟交作品', course_statistics_course_path(@course, :tab => 2, :type => 'late_commit_work_num', :order => (@order == "desc" ? "asc" : "desc")), method: 'get', remote: true, :style => 'color:#000000;'%>
<% if @type == "late_commit_work_num" && @order == 'desc' %>
<a href="javascript:" class= "sy_sortupbtn"></a>
<% elsif @type == "late_commit_work_num" && @order == 'asc' %>
<a href="javascript:" class= "sy_sortdownbtn"></a>
<% end %>
</th>
<th class="table-td-w10">
<%= link_to '匿评缺评', course_statistics_course_path(@course, :tab => 2, :type => 'absence_evaluation_work_num', :order => (@order == "desc" ? "asc" : "desc")), method: 'get', remote: true, :style => 'color:#000000;'%>
<% if @type == "absence_evaluation_work_num" && @order == 'desc' %>
<a href="javascript:" class= "sy_sortupbtn"></a>
<% elsif @type == "absence_evaluation_work_num" && @order == 'asc' %>
<a href="javascript:" class= "sy_sortdownbtn"></a>
<% end %>
</th>
<th class="table-td-w10">
<%= link_to '被申诉', course_statistics_course_path(@course, :tab => 2, :type => 'appeal_num', :order => (@order == "desc" ? "asc" : "desc")), method: 'get', remote: true, :style => 'color:#000000;'%>
<% if @type == "appeal_num" && @order == 'desc' %>
<a href="javascript:" class= "sy_sortupbtn"></a>
<% elsif @type == "appeal_num" && @order == 'asc' %>
<a href="javascript:" class= "sy_sortdownbtn"></a>
<% end %>
</th>
<th class="table-td-w10">
<%= link_to '平均分', course_statistics_course_path(@course, :tab => 2, :type => 'average_score', :order => (@order == "desc" ? "asc" : "desc")), method: 'get', remote: true, :style => 'color:#000000;'%>
<% if @type == "average_score" && @order == 'desc' %>
<a href="javascript:" class= "sy_sortupbtn"></a>
<% elsif @type == "average_score" && @order == 'asc' %>
<a href="javascript:" class= "sy_sortdownbtn"></a>
<% end %>
</th>
<th class="table-td-w10">
<%= link_to '英雄榜', course_statistics_course_path(@course, :tab => 2, :type => 'total_score', :order => (@order == "desc" ? "asc" : "desc")), method: 'get', remote: true, :style => 'color:#000000;'%>
<% if @type == "total_score" && @order == 'desc' %>
<a href="javascript:" class= "sy_sortupbtn"></a>
<% elsif @type == "total_score" && @order == 'asc' %>
<a href="javascript:" class= "sy_sortdownbtn"></a>
<% end %>
</th>
</tr>
</thead>
<tbody>
<% boo = !(User.current.allowed_to?(:as_teacher,@course) || User.current.admin?) && course_has_score_open_common_homework(@course) %>
<% @members.each do |member| %>
<% is_hidden = boo && User.current.id != member.user_id %>
<tr>
<td><%= link_to member.user.show_name, user_path(member.user), :class => 'course_class_users_st_name' %></td>
<td><%= member.committed_work_num %></td>
<td><%= member.un_commit_work_num %></td>
<td><%= member.late_commit_work_num %></td>
<td><%= member.absence_evaluation_work_num %></td>
<td><%= member.appeal_num %></td>
<td><%= is_hidden ? '**' : (member.average_score.nil? ? 0 : format("%.1f", member.average_score < 0 ? 0 : member.average_score)) %></td>
<td><%= is_hidden ? '**' : (member.total_score.nil? ? 0 : format("%.1f", member.total_score < 0 ? 0 : member.total_score)) %></td>
</tr>
<% end %>
</tbody>
</table>
<div style="text-align:center;">
<div class="pages" style="width:auto; display:inline-block;">
<ul id="homework_pository_ref_pages">
<%= pagination_links_full @mem_pages, @members_count, :per_page_links => false, :remote => @is_remote, :flag => true, :is_new => true%>
</ul>
<div class="cl"></div>
</div>
</div>
<% else%>
<div class="icons_tishi"><img src="/images/sy/icons_smile.png" width="110" height="110" alt="" ></div>
<p class="sy_tab_con_p">没有数据可以显示!</p>
<% end %>

View File

@ -0,0 +1,108 @@
<% if @members.count != 0 %>
<table class="muban_table clearfix mb15 t-center" cellpadding="0" cellspacing="0">
<thead>
<tr>
<th class="table-td-w30">项目名称</th>
<th class="table-td-w10">
<%= link_to '发布资源', course_statistics_course_path(@course, :tab => 3, :type => 'attach_num', :order => (@order == "desc" ? "asc" : "desc")), method: 'get', remote: true, :style => 'color:#000000;'%>
<% if @type == "attach_num" && @order == 'desc' %>
<a href="javascript:" class= "sy_sortupbtn"></a>
<% elsif @type == "attach_num" && @order == 'asc' %>
<a href="javascript:" class= "sy_sortdownbtn"></a>
<% end %>
</th>
<th class="table-td-w10">
<%= link_to '提交次数', course_statistics_course_path(@course, :tab => 3, :type => 'changeset_num', :order => (@order == "desc" ? "asc" : "desc")), method: 'get', remote: true, :style => 'color:#000000;'%>
<% if @type == "changeset_num" && @order == 'desc' %>
<a href="javascript:" class= "sy_sortupbtn"></a>
<% elsif @type == "changeset_num" && @order == 'asc' %>
<a href="javascript:" class= "sy_sortdownbtn"></a>
<% end %>
</th>
<th class="table-td-w10-5">
<%= link_to '发布Issue', course_statistics_course_path(@course, :tab => 3, :type => 'issue_num', :order => (@order == "desc" ? "asc" : "desc")), method: 'get', remote: true, :style => 'color:#000000;'%>
<% if @type == "issue_num" && @order == 'desc' %>
<a href="javascript:" class= "sy_sortupbtn"></a>
<% elsif @type == "issue_num" && @order == 'asc' %>
<a href="javascript:" class= "sy_sortdownbtn"></a>
<% end %>
</th>
<th class="table-td-w10-5">
<%= link_to 'Issue回复', course_statistics_course_path(@course, :tab => 3, :type => 'issue_journal_num', :order => (@order == "desc" ? "asc" : "desc")), method: 'get', remote: true, :style => 'color:#000000;'%>
<% if @type == "issue_journal_num" && @order == 'desc' %>
<a href="javascript:" class= "sy_sortupbtn"></a>
<% elsif @type == "issue_journal_num" && @order == 'asc' %>
<a href="javascript:" class= "sy_sortdownbtn"></a>
<% end %>
</th>
<th class="table-td-w10">
<%= link_to '发布帖子', course_statistics_course_path(@course, :tab => 3, :type => 'board_num', :order => (@order == "desc" ? "asc" : "desc")), method: 'get', remote: true, :style => 'color:#000000;'%>
<% if @type == "board_num" && @order == 'desc' %>
<a href="javascript:" class= "sy_sortupbtn"></a>
<% elsif @type == "board_num" && @order == 'asc' %>
<a href="javascript:" class= "sy_sortdownbtn"></a>
<% end %>
</th>
<th class="table-td-w10">
<%= link_to '帖子回复', course_statistics_course_path(@course, :tab => 3, :type => 'board_message_num', :order => (@order == "desc" ? "asc" : "desc")), method: 'get', remote: true, :style => 'color:#000000;'%>
<% if @type == "board_message_num" && @order == 'desc' %>
<a href="javascript:" class= "sy_sortupbtn"></a>
<% elsif @type == "board_message_num" && @order == 'asc' %>
<a href="javascript:" class= "sy_sortdownbtn"></a>
<% end %>
</th>
<th class="table-td-w9">
<%= link_to '活跃度', course_statistics_course_path(@course, :tab => 3, :type => 'project_act_score', :order => (@order == "desc" ? "asc" : "desc")), method: 'get', remote: true, :style => 'color:#000000;'%>
<% if @type == "project_act_score" && @order == 'desc' %>
<a href="javascript:" class= "sy_sortupbtn"></a>
<% elsif @type == "project_act_score" && @order == 'asc' %>
<a href="javascript:" class= "sy_sortdownbtn"></a>
<% end %>
</th>
</tr>
</thead>
<tbody>
<% @members.each do |member| %>
<tr>
<td>
<%= link_to member.project.name, project_path(member.project_id), :class => 'new_project_title_width fl ml5' %>
<span class="<%= member.project.is_public ? 'syllabus_class_open' : 'syllabus_class_private' %> fl ml5 syllabus_class_property"><%= member.project.is_public ? '公开' : '私有' %></span>
</td>
<td><%= member.attach_num %></td>
<td><%= member.changeset_num || 0 %></td>
<td><%= member.issue_num %></td>
<td><%= member.issue_journal_num %></td>
<td><%= member.board_num %></td>
<td><%= member.board_message_num %></td>
<td class="pr">
<span><%= member.project_act_score %></span>
<div class="st_tips_box_inner undis" style="text-align:left;">
<em></em>
<span></span>
<p>发布资源数*5=<%= member.attach_num %>*5=<%= member.attach_num.to_i * 5 %><br/>
代码提交数*2=<%= member.changeset_num %>*2=<%= member.changeset_num.to_i * 2 %><br/>
发布Issue数*1=<%= member.issue_num %>*1=<%= member.issue_num.to_i * 1 %><br/>
Issue回复数*1=<%= member.issue_journal_num %>*1=<%= member.issue_journal_num.to_i * 1 %><br/>
发布帖子数*1=<%= member.board_num %>*1=<%= member.board_num.to_i * 1 %><br/>
回复帖子数*1=<%= member.board_message_num %>*1=<%= member.board_message_num.to_i * 1 %><br/>
总得分:<%= member.project_act_score %>
</p>
</div>
</td>
</tr>
<% end %>
</tbody>
</table>
<div style="text-align:center;">
<div class="pages" style="width:auto; display:inline-block;">
<ul id="homework_pository_ref_pages">
<%= pagination_links_full @mem_pages, @members_count, :per_page_links => false, :remote => @is_remote, :flag => true, :is_new => true%>
</ul>
<div class="cl"></div>
</div>
</div>
<% else %>
<div class="icons_tishi"><img src="/images/sy/icons_smile.png" width="110" height="110" alt="" ></div>
<p class="sy_tab_con_p">没有数据可以显示!</p>
<% end %>

View File

@ -64,9 +64,4 @@
<li>
<%=link_to "分班", course_member_path(@course, :role => 2) %>
</li>
<% end %>
<% if show_nav?(0) %>
<li>
<a href="<%=course_statistics_course_path(@course) %>">统计</a>
</li>
<% end %>

View File

@ -1,5 +1,88 @@
<div class="sy_class_r ml10">
<div class="icons_tishi"><img src="../../images/sy/icons_smile.png" width="110" height="110" alt="" ></div>
<p class="sy_tab_con_p">统计功能即将上线,届时我们一起享受教育大数据的红利吧!</p>
<div style="height:400px;"></div>
</div><!--sy_class_r end-->
<h3 class="game-setting-h3"><span class="ml15"></span>统计</h3>
<div class="game-setting-tab">
<ul id="game-setting-tab-nav">
<li id="game-setting-tab-nav-1" onclick="HoverLi(1);">
<a href="javascript:void(0);" >活跃度</a>
</li>
<li id="game-setting-tab-nav-2" onclick="HoverLi(2);">
<a href="javascript:void(0);" >英雄榜</a>
</li>
<li id="game-setting-tab-nav-3" onclick="HoverLi(3);">
<a href="javascript:void(0);" >项目活跃度</a>
</li>
<div class="cl"></div>
</ul>
<div id="game-setting-content-1" class="undis">
<div class="alert alert-blue mt10 ml10 mr10 mb10" style="width: 703px;">
活跃度总分 = 资源发布数 * 权值(5分) + 发帖数 * 权值(2分) + 帖子回复数 * 权值(1分) + 通知发布数 * 权值(1分) + <br/>通知回复数 * 权值(1分) + 作业回复数 * 权值(1分) + 班级留言数 * 权值(1分)
</div>
<div class="clear ml10 mr10" id="act_table_<%=@course.id %>">
<% if @tab.nil? || @tab == 1 %>
<%=render :partial => 'act_table' %>
<% end %>
</div>
</div><!--issues_list_content_1 end-->
<div id="game-setting-content-2" class="undis">
<div class="alert alert-blue mt10 ml10 mr10 mb10" style="width: 703px;">
每个同学作业的得分总和
</div>
<div class="clear ml10 mr10" id="hero_table_<%=@course.id %>">
<% if @tab == 2 %>
<%=render :partial => 'hero_table' %>
<% end %>
</div>
</div><!--issues_list_content_2 end-->
<div id="game-setting-content-3" class="undis">
<div class="alert alert-blue mt10 ml10 mr10 mb10" style="width: 703px;">
项目活跃度 = 发布资源数 * 权值(5分) + 代码提交数 * 权值(4分) + 发布Issue数 * 权值(4分) + Issue回复数 * 权值(1分) + <br/>发布帖子数 * 权值(2分) + 回复帖子数 * 权值(1分)
</div>
<div class=" clear ml10 mr10" >
<!--<div class="mb10 clear">-->
<!--<label class=" fl mt5 c_grey02">&nbsp;选择作业&nbsp;&nbsp;:&nbsp;</label>-->
<!--<select class=" fl newupload_select w150" style="width:150px; height:30px; background:#fff;">-->
<!--<option>全部</option>-->
<!--<option>第一作业</option>-->
<!--<option>第二次作业</option>-->
<!--</select>-->
<!--</div>-->
<div id="project_table_<%=@course.id %>">
<% if @tab == 3 %>
<%=render :partial => 'project_table' %>
<% end %>
</div>
</div>
</div><!--issues_list_content_3 end-->
</div><!--issues_con_list end-->
</div><!--sy_class_r end-->
<div class="cl"></div>
<script type="text/javascript">
$(function(){
<% if @tab.nil? %>
g('game-setting-content-1').className='dis';
g('game-setting-tab-nav-1').className='game-setting-nav-hover';
<% else %>
g('game-setting-content-<%= @tab %>').className='dis';
g('game-setting-tab-nav-<%= @tab %>').className='game-setting-nav-hover';
<% end %>
});
function g(o){
return document.getElementById(o);
}
function HoverLi(n){
for(var i=1;i<=3;i++){
g('game-setting-tab-nav-'+i).className='';
g('game-setting-content-'+i).className='undis';
}
g('game-setting-content-'+n).className='dis';
g('game-setting-tab-nav-'+n).className='game-setting-nav-hover';
$.get('<%= course_statistics_course_path() %>'+'?tab='+n);
}
</script>

View File

@ -1,5 +1,7 @@
<% if !params[:tab] || params[:tab] == "activity" %>
<% if !params[:tab] || params[:tab] == "1" %>
$("#act_table_<%=@course.id %>").html("<%= escape_javascript(render :partial => 'act_table')%>");
<% else %>
<% elsif params[:tab] == "2" %>
$("#hero_table_<%=@course.id %>").html("<%= escape_javascript(render :partial => 'hero_table')%>");
<% elsif params[:tab] == "3" %>
$("#project_table_<%=@course.id %>").html("<%= escape_javascript(render :partial => 'project_table')%>");
<% end %>

View File

@ -124,13 +124,10 @@
<%= render :partial => 'layouts/group_children_list', :locals => {:course => @course, :is_teacher => is_teacher} %>
</div>
<% end %>
<% statistics_count = 0 %>
<% unless show_nav?(statistics_count) %>
<li id="sy_10" class="sy_icons_st">
<a href="<%=course_statistics_course_path(@course) %>">统计<span></span></a>
<!--<a href="javascript:void(0);" class="sy_class_add"></a>-->
</li>
<% end %>
<li id="sy_010" class="sy_icons_st">
<a href="<%=course_statistics_course_path(@course) %>">统计</a>
<!--<a href="javascript:void(0);" class="sy_class_add"></a>-->
</li>
<%# 工具栏展开 %>
<% if @course.homework_commons.count == 0 || @course.news.count == 0 || course_file_num == 0 || course_poll_count == 0 || @course.exercises.count == 0 ||
course_feedback_count == 0 || @course.exercises.count == 0 || (@course.boards.first ? @course.boards.first.topics.count : 0) == 0 || statistics_count == 0%>

View File

@ -37,7 +37,7 @@
<p>= <%= (project_score.changeset_num||0) * 4 %>
+ <%= project_score.issue_num * 4 + project_score.issue_journal_num %> + <%= project_score.attach_num * 5 %>
+ <%= project_score.board_num * 2 + project_score.board_message_num + project_score.news_num %></p>
+ <%= project_score.board_num * 2 + project_score.board_message_num %></p>
<% end %>
</div>
</div>

View File

@ -0,0 +1,53 @@
class CreateCourseHomeworkStatistics < ActiveRecord::Migration
def change
create_table :course_homework_statistics do |t|
t.references :user
t.references :course
t.integer :committed_work_num, :default => 0
t.integer :un_commit_work_num, :default => 0
t.integer :late_commit_work_num, :default => 0
t.integer :absence_evaluation_work_num, :default => 0
t.integer :un_evaluation_work_num, :default => 0
t.integer :appeal_num, :default => 0
t.float :average_score, :default => 0
t.float :total_score, :default => 0
t.timestamps
end
count =Course.all.count / 30 + 2
transaction do
for i in 1 ... count do i
Course.page(i).per(30).each do |course|
hw_count = course.homework_commons.includes(:homework_detail_manual).where("homework_detail_manuals.comment_status > 0").count
homework_ids = course.homework_commons.empty? ? "(-1)" : "(" + course.homework_commons.map{|hw| hw.id}.join(",") + ")"
student_works = StudentWork.where("homework_common_id in #{homework_ids} and work_status !=0")
is_eva_homeworks = course.homework_commons.includes(:homework_detail_manual).where("homework_commons.anonymous_comment = 0 and homework_detail_manuals.comment_status = 2")
is_eva_student_works = StudentWork.where(:homework_common_id => is_eva_homeworks.map{|hw| hw.id})
has_eva_homeworks = course.homework_commons.includes(:homework_detail_manual).where("homework_commons.anonymous_comment = 0 and homework_detail_manuals.comment_status = 3")
has_eva_student_works = StudentWork.where(:homework_common_id => has_eva_homeworks.map{|hw| hw.id})
course.student.each do |student|
user = student.student
if user
committed_work_num = user.student_works.where("homework_common_id in #{homework_ids} and work_status != 0").count
un_commit_work_num = (hw_count - committed_work_num) < 0 ? 0 : (hw_count - committed_work_num)
late_commit_work_num = user.student_works.where("homework_common_id in #{homework_ids} and work_status = 2").count
absence_evaluation_work_num = user.student_works_evaluation_distributions.where(:student_work_id => has_eva_student_works.map(&:id)).count -
user.student_works_scores.where(:reviewer_role => 3, :student_work_id => has_eva_student_works.map(&:id)).group_by(&:student_work_id).count
absence_evaluation_work_num = absence_evaluation_work_num < 0 ? 0 : absence_evaluation_work_num
un_evaluation_work_num = user.student_works_evaluation_distributions.where(:student_work_id => is_eva_student_works.map(&:id)).count -
user.student_works_scores.where(:reviewer_role => 3, :student_work_id => is_eva_student_works.map(&:id)).group_by(&:student_work_id).count
un_evaluation_work_num = un_evaluation_work_num < 0 ? 0 : un_evaluation_work_num
appeal_num = user.student_works_scores.where(:student_work_id => student_works.map(&:id), :appeal_status => 3).count
average_score = user.student_works.where(:id => student_works.map(&:id)).select("AVG(student_works.work_score) as score").first ? user.student_works.where(:id => student_works.map(&:id)).select("AVG(student_works.work_score) as score").first.score : 0
total_score = user.student_works.where(:id => student_works.map(&:id)).select("SUM(student_works.work_score) as score").first ? user.student_works.where(:id => student_works.map(&:id)).select("SUM(student_works.work_score) as score").first.score : 0
CourseHomeworkStatistics.create(:course_id => course.id, :user_id => user.id, :committed_work_num => committed_work_num, :un_commit_work_num => un_commit_work_num,
:late_commit_work_num => late_commit_work_num, :absence_evaluation_work_num => absence_evaluation_work_num, :un_evaluation_work_num => un_evaluation_work_num,
:appeal_num => appeal_num, :average_score => average_score, :total_score => total_score)
end
end
end
end
end
end
end

View File

@ -11,7 +11,7 @@
#
# It's strongly recommended to check this file into your version control system.
ActiveRecord::Schema.define(:version => 20170207060207) do
ActiveRecord::Schema.define(:version => 20170209020934) do
create_table "activities", :force => true do |t|
t.integer "act_id", :null => false
@ -350,16 +350,14 @@ ActiveRecord::Schema.define(:version => 20170207060207) do
add_index "changeset_parents", ["parent_id"], :name => "changeset_parents_parent_ids"
create_table "changesets", :force => true do |t|
t.integer "repository_id", :null => false
t.string "revision", :null => false
t.integer "repository_id", :null => false
t.string "revision", :null => false
t.string "committer"
t.datetime "committed_on", :null => false
t.datetime "committed_on", :null => false
t.text "comments"
t.date "commit_date"
t.string "scmid"
t.integer "user_id"
t.integer "project_id"
t.integer "type", :default => 0
end
add_index "changesets", ["committed_on"], :name => "index_changesets_on_committed_on"
@ -521,13 +519,6 @@ ActiveRecord::Schema.define(:version => 20170207060207) do
add_index "contest_messages", ["contest_id"], :name => "index_contest_messages_on_contest_id"
add_index "contest_messages", ["user_id"], :name => "index_contest_messages_on_user_id"
create_table "contest_notifications", :force => true do |t|
t.text "title"
t.text "content"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "contestant_for_contests", :force => true do |t|
t.integer "student_id"
t.integer "contest_id"
@ -595,37 +586,6 @@ ActiveRecord::Schema.define(:version => 20170207060207) do
add_index "contestant_works", ["user_id"], :name => "index_contestant_works_on_user_id"
add_index "contestant_works", ["work_id"], :name => "index_contestant_works_on_work_id"
create_table "contesting_projects", :force => true do |t|
t.integer "project_id"
t.string "contest_id"
t.integer "user_id"
t.string "description"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.string "reward"
end
create_table "contesting_softapplications", :force => true do |t|
t.integer "softapplication_id"
t.integer "contest_id"
t.integer "user_id"
t.string "description"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.string "reward"
end
create_table "contestnotifications", :force => true do |t|
t.integer "contest_id"
t.string "title"
t.string "summary"
t.text "description"
t.integer "author_id"
t.integer "notificationcomments_count"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "contests", :force => true do |t|
t.integer "user_id"
t.string "name"
@ -668,6 +628,20 @@ ActiveRecord::Schema.define(:version => 20170207060207) do
t.integer "container_id", :default => 0
end
create_table "course_class_post", :id => false, :force => true do |t|
t.integer "班级id", :default => 0, :null => false
t.string "班级名"
t.integer "帖子id", :default => 0, :null => false
t.integer "主贴id"
t.string "帖子标题", :default => "", :null => false
t.text "帖子内容"
t.integer "帖子用户id"
t.integer "帖子回复数", :default => 0, :null => false
t.integer "最后回帖id"
t.datetime "发帖时间", :null => false
t.datetime "帖子更新时间", :null => false
end
create_table "course_contributor_scores", :force => true do |t|
t.integer "course_id"
t.integer "user_id"
@ -695,6 +669,21 @@ ActiveRecord::Schema.define(:version => 20170207060207) do
add_index "course_groups", ["course_id"], :name => "index_course_groups_on_course_id"
create_table "course_homework_statistics", :force => true do |t|
t.integer "user_id"
t.integer "course_id"
t.integer "committed_work_num", :default => 0
t.integer "un_commit_work_num", :default => 0
t.integer "late_commit_work_num", :default => 0
t.integer "absence_evaluation_work_num", :default => 0
t.integer "un_evaluation_work_num", :default => 0
t.integer "appeal_num", :default => 0
t.float "average_score", :default => 0.0
t.float "total_score", :default => 0.0
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "course_infos", :force => true do |t|
t.integer "course_id"
t.integer "user_id"
@ -843,21 +832,6 @@ ActiveRecord::Schema.define(:version => 20170207060207) do
add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority"
create_table "delayed_jobs_20161218", :id => false, :force => true do |t|
t.integer "id", :default => 0, :null => false
t.integer "priority", :default => 0, :null => false
t.integer "attempts", :default => 0, :null => false
t.text "handler", :null => false
t.text "last_error"
t.datetime "run_at"
t.datetime "locked_at"
t.datetime "failed_at"
t.string "locked_by"
t.string "queue"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "discuss_demos", :force => true do |t|
t.string "title"
t.text "body"
@ -983,11 +957,13 @@ ActiveRecord::Schema.define(:version => 20170207060207) do
t.integer "exercise_status"
t.integer "user_id"
t.integer "time"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.datetime "publish_time"
t.datetime "end_time"
t.integer "show_result"
t.integer "question_random", :default => 0
t.integer "choice_random", :default => 0
end
create_table "first_pages", :force => true do |t|
@ -1177,10 +1153,6 @@ ActiveRecord::Schema.define(:version => 20170207060207) do
t.datetime "updated_at", :null => false
end
create_table "innodb_monitor", :id => false, :force => true do |t|
t.integer "a"
end
create_table "invite_lists", :force => true do |t|
t.integer "project_id"
t.integer "user_id"

View File

@ -32,6 +32,10 @@ namespace :homework_evaluation do
student_works_evaluation_distributions = StudentWorksEvaluationDistribution.new(user_id: pro_work.user_id, student_work_id: h.id)
student_works_evaluation_distributions.save
end
#更新CourseHomeworkStatistics中该学生的待匿评数
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(homework_common.course_id, pro_work.user_id)
course_statistics.update_attribute('un_evaluation_work_num', course_statistics.un_evaluation_work_num + n) if course_statistics
end
else
student_works.each_with_index do |work, index|
@ -43,6 +47,10 @@ namespace :homework_evaluation do
student_works_evaluation_distributions = StudentWorksEvaluationDistribution.new(user_id: user.id, student_work_id: h.id)
student_works_evaluation_distributions.save
end
#更新CourseHomeworkStatistics中该学生的待匿评数
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(homework_common.course_id, user.id)
course_statistics.update_attribute('un_evaluation_work_num', course_statistics.un_evaluation_work_num + n) if course_statistics
end
end
homework_detail_manual.update_column('comment_status', 2)
@ -87,6 +95,11 @@ namespace :homework_evaluation do
absence_penalty_count = student_work.user.student_works_evaluation_distributions.where("student_work_id IN #{work_ids}").count - student_work.user.student_works_scores.where("student_work_id IN #{work_ids} and reviewer_role = 3").count
student_work.absence_penalty = absence_penalty_count > 0 ? absence_penalty_count * homework_detail_manual.absence_penalty : 0
student_work.save
#更新CourseHomeworkStatistics中该学生的待匿评数和缺评数
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(homework_common.course_id, student_work.user_id)
course_statistics.update_attribute('un_evaluation_work_num', (course_statistics.un_evaluation_work_num - absence_penalty_count) < 0 ? 0 : (course_statistics.un_evaluation_work_num - absence_penalty_count)) if course_statistics
course_statistics.update_attribute('absence_evaluation_work_num', course_statistics.absence_evaluation_work_num + absence_penalty_count) if course_statistics
end
# 未参与匿评

View File

@ -26,6 +26,13 @@ namespace :homework_publishtime do
ActiveRecord::Base.connection.execute sql
end
end
#更新CourseHomeworkStatistics中每个学生的未交作品数
homework.course.student.each do |student|
course_statistics = CourseHomeworkStatistics.find_by_course_id_and_user_id(homework.course_id, student.student_id)
course_statistics.update_attribute('un_commit_work_num', course_statistics.un_commit_work_num + 1) if course_statistics
end
course = homework.course
course.members.each do |m|
homework.course_messages << CourseMessage.new(:user_id => m.user_id, :course_id => course.id, :viewed => false, :status => nil)

View File

@ -525,9 +525,11 @@ a.banner-course-notice {position: absolute; font-size: 12px; line-height: 20px;
.game-setting-h3{ width: 100%; height: 40px; line-height: 40px; font-size: 14px; color: #666; font-weight: normal; background: #fff; border-bottom: 10px solid #eaebec;}
.t-center{ text-align: center;}
.table-td-w20{ width: 18%;}
.table-td-w9{ width: 9%;}
.table-td-w10{ width: 10%;}
.table-td-w10-5{ width: 10.5%;}
.table-td-w30{ width: 30%;}
.new_project_title_width {font-size: 14px;color: #666; max-width: 180px;font-weight: normal;white-space: nowrap;overflow: hidden; text-overflow: ellipsis;}
.new_project_title_width {font-size: 12px;color: #666; max-width: 170px;font-weight: normal;white-space: nowrap;overflow: hidden; text-overflow: ellipsis;}
.syllabus_class_property { font-size: 12px; padding: 0 5px;border-radius: 3px;line-height: 14px;}
.syllabus_class_private {color: #ff4a1b;border: 1px solid #ff4a1b;}
.syllabus_class_open { color: #7dd26c; border: 1px solid #7dd26c;}

View File

@ -0,0 +1,6 @@
FactoryGirl.define do
factory :course_homework_statistic, :class => 'CourseHomeworkStatistics' do
end
end

View File

@ -0,0 +1,5 @@
require 'rails_helper'
RSpec.describe CourseHomeworkStatistics, :type => :model do
pending "add some examples to (or delete) #{__FILE__}"
end