From b17d4840b11a789ad4614fa1a5995ffa581a4cd2 Mon Sep 17 00:00:00 2001 From: alan <547533434@qq.com> Date: Thu, 25 Dec 2014 10:23:59 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E3=80=8A=E4=BD=9C=E4=B8=9A=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E3=80=8B=20Signed-off-by:=20alan=20<547533434@qq.com>?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/courses_controller.rb | 22 +++++++++++----------- app/helpers/courses_helper.rb | 11 +++++++++-- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index ae6ad4ce3..1ec17e2cf 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -213,10 +213,10 @@ class CoursesController < ApplicationController q = "#{params[:name].strip}" #(redirect_to stores_url, :notice => l(:label_sumbit_empty);return) if params[:name].blank? if params[:incourse] - @results = searchmember_by_name(@@member_scores, q) + @results = searchmember_by_name(student_homework_score, q) elsif params[:ingroup] @group = CourseGroup.find(params[:search_group_id]) - @results = @results =searchgroupmember_by_name(@@member_scores, @group, q) + @results = @results =searchgroupmember_by_name(student_homework_score, @group, q) end @result_count = @results.count @@ -285,7 +285,7 @@ class CoursesController < ApplicationController member.course_group_id = group.id member.save @group = group - @members = searchStudent(@course) + @course_groups = @course.course_groups @membercount = @members.count search_group_members group @@ -298,7 +298,7 @@ class CoursesController < ApplicationController member.save @group = group @course_groups = @course.course_groups - @members = searchStudent(@course) + @membercount = @members.count search_group_members group end @@ -309,9 +309,9 @@ class CoursesController < ApplicationController @is_remote = true if params[:group_id] && params[:group_id] != "0" @group = CourseGroup.find(params[:group_id]) - @results = @@member_scores.find_all {|mem| mem.course_group_id == group.id} + @results = student_homework_score.find_all {|mem| mem.course_group_id == group.id} else - @results = @@member_scores + @results = student_homework_score end @@result = @results @@ -336,8 +336,8 @@ class CoursesController < ApplicationController @members = searchTeacherAndAssistant(@course) when '2' @subPage_title = l :label_student_list - @@member_scores = student_homework_score - @members = @@member_scores + @members = student_homework_score + # @member_scores = @@member_scores # @members = searchStudent_sort(@course, 'desc', @@member_scores) @membercount = @members.count @@ -886,8 +886,8 @@ class CoursesController < ApplicationController homework_scores = Member.find_by_sql("SELECT id, user_id,course_id, course_group_id,created_on,IFNULL(SUM(CASE WHEN t_score <> 0 AND t_score IS NOT NULL THEN t_score ELSE s_score END),0) as score FROM ( SELECT members.id as id, members.user_id AS user_id, members.course_id AS course_id, members.created_on as created_on,members.course_group_id AS course_group_id, - (SELECT AVG(seems_rateable_rates.stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id IN (3040,4762,4765)) AS t_score, - (SELECT AVG(seems_rateable_rates.stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id NOT IN (3040,4762,4765)) AS s_score + (SELECT AVG(seems_rateable_rates.stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id IN (#{teachers})) AS t_score, + (SELECT AVG(seems_rateable_rates.stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id NOT IN (#{teachers})) AS s_score FROM `homework_attaches` , members WHERE members.course_id = #{@course.id} AND members.user_id NOT IN (#{teachers}) AND homework_attaches.bid_id IN (SELECT bid_id FROM homework_for_courses WHERE course_id = #{@course.id}) @@ -909,7 +909,7 @@ class CoursesController < ApplicationController @members = searchStudent(@course) @membercount = @members.count - @results = @@member_scores.find_all {|mem| mem.course_group_id == group.id} + @results = student_homework_score.find_all {|mem| mem.course_group_id == group.id} @@result = @results @results = paginateHelper @results end diff --git a/app/helpers/courses_helper.rb b/app/helpers/courses_helper.rb index a5ae7d760..096ce7ad8 100644 --- a/app/helpers/courses_helper.rb +++ b/app/helpers/courses_helper.rb @@ -194,19 +194,23 @@ module CoursesHelper def searchmember_by_name members, name #searchPeopleByRoles(project, StudentRoles) mems = [] - members.each do |m| + if name != "" + members.each do |m| username = m.user[:lastname].to_s + m.user[:firstname].to_s if(m.user[:login].to_s.include?(name) || m.user.user_extensions[:student_id].to_s.include?(name) || username.include?(name)) mems << m end - + end + else + mems = members end mems end def searchgroupmember_by_name members, name, group #searchPeopleByRoles(project, StudentRoles) mems = [] + if name != "" members.each do |m| if m.course_group_id == group.id username = m.user[:lastname].to_s + m.user[:firstname].to_s @@ -215,6 +219,9 @@ module CoursesHelper end end end + else + mems = members + end mems end def searchgroupstudent_by_name(group, project, name) From d2aef552e6bf24a56042f851da2717384000d859 Mon Sep 17 00:00:00 2001 From: alan <547533434@qq.com> Date: Fri, 26 Dec 2014 14:50:14 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BC=98=E5=8C=96=E3=80=8A=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A=E8=AF=84=E5=88=86=E3=80=8B=20Signed-off-by:=20alan=20?= =?UTF-8?q?<547533434@qq.com>?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/application_controller.rb | 1 + app/controllers/courses_controller.rb | 18 ++--- app/views/courses/_member_list.html.erb | 4 +- data/member_score.sql | 97 +++++++++++++++++++++++ 4 files changed, 106 insertions(+), 14 deletions(-) create mode 100644 data/member_score.sql diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 54346c0cc..35e034603 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -759,6 +759,7 @@ class ApplicationController < ActionController::Base end end + #查找首页相关信息 def find_first_page @first_page = FirstPage.find_by_page_type('project') diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 2e28c793e..ffdd51762 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -216,7 +216,7 @@ class CoursesController < ApplicationController @results = searchmember_by_name(student_homework_score, q) elsif params[:ingroup] @group = CourseGroup.find(params[:search_group_id]) - @results = @results =searchgroupmember_by_name(student_homework_score, @group, q) + @results =searchgroupmember_by_name(student_homework_score, @group, q) end @result_count = @results.count @@ -881,17 +881,11 @@ class CoursesController < ApplicationController end def student_homework_score - teachers = find_course_teachers(@course) - homework_scores = Member.find_by_sql("SELECT id, user_id,course_id, course_group_id,created_on,IFNULL(SUM(CASE WHEN t_score <> 0 AND t_score IS NOT NULL THEN t_score ELSE s_score END),0) as score - FROM ( - SELECT members.id as id, members.user_id AS user_id, members.course_id AS course_id, members.created_on as created_on,members.course_group_id AS course_group_id, - (SELECT AVG(seems_rateable_rates.stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id IN (#{teachers})) AS t_score, - (SELECT AVG(seems_rateable_rates.stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id NOT IN (#{teachers})) AS s_score - FROM `homework_attaches` , members - WHERE members.course_id = #{@course.id} - AND members.user_id NOT IN (#{teachers}) AND homework_attaches.bid_id IN (SELECT bid_id FROM homework_for_courses WHERE course_id = #{@course.id}) - AND homework_attaches.user_id = members.user_id - ) AS table1 GROUP BY user_id ORDER BY score DESC") + #teachers = find_course_teachers(@course) + sql = ActiveRecord::Base.connection() + + homework_scores = Member.find_by_sql("call member_score(#{@course.id})") + sql.close() homework_scores end #获取课程的老师列表 diff --git a/app/views/courses/_member_list.html.erb b/app/views/courses/_member_list.html.erb index 9b3a0443d..860c86ba4 100644 --- a/app/views/courses/_member_list.html.erb +++ b/app/views/courses/_member_list.html.erb @@ -53,7 +53,7 @@ <% members.each do |member| %>
- <% next if member.new_record? %> + <%= member.user.nil? ? '' : (image_tag(url_to_avatar(member.user), :width => 40, :height => 40)) %> @@ -101,7 +101,7 @@
<% else %>

diff --git a/data/member_score.sql b/data/member_score.sql new file mode 100644 index 000000000..13858ccce --- /dev/null +++ b/data/member_score.sql @@ -0,0 +1,97 @@ + +DELIMITER $$ + +CREATE + /*[DEFINER = { user | CURRENT_USER }]*/ + PROCEDURE `member_score`(IN courseid INT) + /*LANGUAGE SQL + | [NOT] DETERMINISTIC + | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } + | SQL SECURITY { DEFINER | INVOKER } + | COMMENT 'string'*/ + BEGIN + + CREATE TEMPORARY TABLE IF NOT EXISTS course_teachers ( + id INT + + ); + TRUNCATE TABLE course_teachers; + + CREATE TEMPORARY TABLE IF NOT EXISTS mems ( + id INT , + user_id INT, + course_id INT, + created_on DATETIME, + course_group_id INT, + score FLOAT DEFAULT 0 + ); + TRUNCATE TABLE mems; + + CREATE TEMPORARY TABLE IF NOT EXISTS mem_home ( + id INT, + user_id INT, + course_id INT, + created_on DATETIME, + course_group_id INT, + home_id INT, + score FLOAT DEFAULT 0 + ); + TRUNCATE TABLE mem_home; + + CREATE TEMPORARY TABLE IF NOT EXISTS t_scores ( + + home_id INT, + score FLOAT + ); + TRUNCATE TABLE t_scores; + + CREATE TEMPORARY TABLE IF NOT EXISTS s_scores ( + + home_id INT, + score FLOAT + ); + TRUNCATE TABLE s_scores; + + CREATE TEMPORARY TABLE IF NOT EXISTS scores ( + + user_id INT, + score FLOAT + ); + TRUNCATE TABLE scores; + + INSERT INTO course_teachers (SELECT members.user_id FROM members WHERE members.user_id NOT IN (SELECT student_id FROM students_for_courses WHERE course_id = courseid)); + + #查出所有的学生 + + INSERT INTO mems (id, user_id, course_id, created_on, course_group_id) + (SELECT members.id, members.user_id, members.course_id, members.created_on, members.course_group_id + FROM members WHERE course_id = courseid AND members.user_id NOT IN (SELECT id FROM course_teachers)); + + # 查出所有的学生列表及其作业 + INSERT INTO mem_home (id, user_id, course_id, created_on, course_group_id,home_id) + (SELECT members.id, members.user_id, members.course_id, members.created_on, members.course_group_id, homework_attaches.id + FROM members, homework_attaches WHERE course_id = courseid + AND members.user_id = homework_attaches.user_id AND members.user_id NOT IN (SELECT id FROM course_teachers) + AND homework_attaches.bid_id IN (SELECT bid_id FROM homework_for_courses WHERE course_id = courseid )); + + INSERT INTO t_scores (home_id, score) (SELECT rateable_id,AVG(seems_rateable_rates.stars) + FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id IN (SELECT mem_home.home_id FROM mem_home) + AND rater_id IN (SELECT id FROM course_teachers) + GROUP BY rateable_id); + + INSERT INTO s_scores (home_id, score) (SELECT rateable_id,AVG(seems_rateable_rates.stars) + FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id IN (SELECT mem_home.home_id FROM mem_home) + AND rater_id NOT IN (SELECT id FROM course_teachers) + GROUP BY rateable_id) ; + + UPDATE mem_home, t_scores SET mem_home.score = t_scores.score WHERE mem_home.home_id = t_scores.home_id ; + + UPDATE mem_home, s_scores SET mem_home.score = s_scores.score WHERE mem_home.home_id = s_scores.home_id AND mem_home.score = 0; + + INSERT INTO scores (user_id, score) (SELECT user_id, SUM(score) FROM mem_home GROUP BY user_id); + UPDATE mems, scores SET mems.score = scores.score WHERE mems.user_id = scores.user_id; + + SELECT * FROM mems ORDER BY score DESC; + END$$ + +DELIMITER ; \ No newline at end of file From 68cadba317bf0f65019a177b0b14ca896c3e53ee Mon Sep 17 00:00:00 2001 From: z9hang Date: Fri, 26 Dec 2014 15:35:38 +0800 Subject: [PATCH 3/3] =?UTF-8?q?#1710=20=E6=B5=8B=E8=AF=95=E7=89=88--?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE--=E4=BD=9C=E5=93=81=E4=B8=8B=E8=BD=BD?= =?UTF-8?q?=EF=BC=9A=E9=80=89=E6=8B=A9=E4=BB=BB=E6=84=8F=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E3=80=81=E6=96=87=E4=BB=B6=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=EF=BC=8C=E9=83=BD=E5=BC=B9=E5=87=BAerror=E7=9A=84=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E6=A1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/files_controller.rb | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/app/controllers/files_controller.rb b/app/controllers/files_controller.rb index d87992ec8..56f760e13 100644 --- a/app/controllers/files_controller.rb +++ b/app/controllers/files_controller.rb @@ -395,16 +395,18 @@ class FilesController < ApplicationController render :layout => 'base_courses' } end + else + show_attachments @containers + @attachtype = params[:type].to_i + @contenttype = params[:contentType].to_s + + respond_to do |format| + format.js + format.html + end end - show_attachments @containers - @attachtype = params[:type].to_i - @contenttype = params[:contentType].to_s - respond_to do |format| - format.js - format.html - end end end