From aed5c76b9809d351ba3ad660c4a5f3fdfc27248c Mon Sep 17 00:00:00 2001 From: anke1460 Date: Mon, 16 Mar 2020 17:10:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=A7=86=E9=A2=91=E6=97=B6?= =?UTF-8?q?=E9=95=BF=E7=BB=9F=E8=AE=A1=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/course_videos_controller.rb | 16 +++++++- app/controllers/courses_controller.rb | 41 +++++++++++++------ .../watch_histories.json.jbuilder | 2 +- .../courses/own_watch_histories.json.jbuilder | 4 +- .../watch_video_histories.json.jbuilder | 4 +- 5 files changed, 48 insertions(+), 19 deletions(-) diff --git a/app/controllers/course_videos_controller.rb b/app/controllers/course_videos_controller.rb index cda312973..c5e0358cd 100644 --- a/app/controllers/course_videos_controller.rb +++ b/app/controllers/course_videos_controller.rb @@ -24,14 +24,26 @@ class CourseVideosController < ApplicationController return normal_status(403, "你没有权限操作") if !current_user.teacher_of_course?(@course) course_video = CourseVideo.find(@video.id) - @watch_course_videos = course_video.watch_course_videos.includes(:user, :watch_video_histories).where("end_at IS NOT NULL") - @count = @watch_course_videos.count + @watch_course_videos = course_video.watch_course_videos.joins(" + JOIN watch_video_histories ON watch_video_histories.watch_course_video_id = watch_course_videos.id + ").group("watch_video_histories.watch_course_video_id").where("watch_course_videos.end_at IS NOT NULL").select("watch_course_videos.id") + + @count = @watch_course_videos.count.count if params[:group_id].present? @watch_course_videos = @watch_course_videos.joins(" JOIN course_members ON course_members.user_id = watch_course_videos.user_id AND course_members.course_id = #{@course.id} ").where("course_members.course_group_id = ?", params[:group_id]) end + + @watch_course_videos = @watch_course_videos.select("count(watch_video_histories.id) AS freq, watch_course_videos.*") + + if params[:order].present? + key = params[:order].split("-") + if ["freq", 'total_duration'].include?(key.first) && ["desc", "asc"].include?(key.last) + @watch_course_videos = @watch_course_videos.order("#{key.first} #{key.last}") + end + end @watch_course_videos = paginate @watch_course_videos end diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index e5c9ae0f5..fa4f949c9 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -1487,9 +1487,7 @@ class CoursesController < ApplicationController def watch_video_histories return normal_status(403, "你没有权限操作") unless current_user.teacher_of_course?(@course) - @videos = CourseVideo.find_by_sql(" - SELECT course_videos.id, videos.user_id, videos.title, IFNULL(hisotries.time,0) AS time, IFNULL(hisotries.num,0) AS num - FROM course_videos + @videos = CourseVideo.joins(" JOIN videos ON course_videos.course_id = #{@course.id} AND videos.id = course_videos.video_id LEFT JOIN ( SELECT watch_course_videos.course_video_id, SUM(watch_course_videos.total_duration) AS time, COUNT(watch_course_videos.course_video_id) AS num @@ -1497,29 +1495,48 @@ class CoursesController < ApplicationController JOIN course_videos ON course_videos.id = watch_course_videos.course_video_id AND watch_course_videos.end_at IS NOT NULL WHERE course_videos.course_id = #{@course.id} GROUP BY watch_course_videos.course_video_id - ) AS hisotries ON hisotries.course_video_id = course_videos.id - ") + ) AS hisotries ON hisotries.course_video_id = course_videos.id").select("course_videos.id") + @count = @videos.count + + if params[:order].present? + key = params[:order].split("-") + if ["people_num", 'total_time'].include?(key.first) && ["desc", "asc"].include?(key.last) + @videos = @videos.order("#{key.first} #{key.last}") + end + end + + @videos = @videos.select("course_videos.id, videos.user_id, videos.title, IFNULL(hisotries.time,0) AS total_time, IFNULL(hisotries.num,0) AS people_num") + @videos = paginate @videos end # 学生角度观看课堂视频的记录 def own_watch_histories @current_user = current_user - @videos = CourseVideo.find_by_sql(" - SELECT course_videos.id, watch_course_videos.start_at, watch_course_videos.total_duration, watch_course_videos.end_at, watch_course_videos.is_finished, videos.title, IFNULL(hisotries.time,0) AS time, IFNULL(hisotries.num,0) AS num - FROM course_videos - JOIN videos ON course_videos.course_id = #{@course.id} AND videos.id = course_videos.video_id + + @videos = CourseVideo.joins(" + JOIN videos ON course_videos.course_id = #{@course.id} AND videos.id = course_videos.video_id JOIN watch_course_videos ON course_videos.id = watch_course_videos.course_video_id AND watch_course_videos.user_id = #{current_user.id} JOIN ( - SELECT watch_course_videos.course_video_id, SUM(watch_course_videos.total_duration) AS time, COUNT(watch_course_videos.course_video_id) AS num + SELECT watch_course_videos.course_video_id, COUNT(watch_course_videos.course_video_id) AS num FROM watch_course_videos JOIN course_videos ON course_videos.id = watch_course_videos.course_video_id WHERE course_videos.course_id = #{@course.id} AND watch_course_videos.user_id = #{current_user.id} AND watch_course_videos.end_at IS NOT NULL GROUP BY watch_course_videos.course_video_id - ) AS hisotries ON hisotries.course_video_id = course_videos.id - ") + ) AS hisotries ON hisotries.course_video_id = course_videos.id").select("course_videos.id") + @count = @videos.count + + if params[:order].present? + key = params[:order].split("-") + if ["freq", 'total_duration'].include?(key.first) && ["desc", "asc"].include?(key.last) + @videos = @videos.order("#{key.first} #{key.last}") + end + end + + @videos = @videos.select("course_videos.id, watch_course_videos.start_at, watch_course_videos.total_duration, watch_course_videos.end_at, watch_course_videos.is_finished, videos.title, IFNULL(hisotries.num,0) AS freq") + @videos = paginate @videos end diff --git a/app/views/course_videos/watch_histories.json.jbuilder b/app/views/course_videos/watch_histories.json.jbuilder index 4845476dc..705e2d6b7 100644 --- a/app/views/course_videos/watch_histories.json.jbuilder +++ b/app/views/course_videos/watch_histories.json.jbuilder @@ -3,7 +3,7 @@ json.data do json.user_name d.user&.real_name json.is_finished d.is_finished ? true : false json.total_duration d.total_duration.round(2) - json.feq d.watch_video_histories.count + json.feq d['freq'] json.start_at d.start_at.to_s json.end_at d.end_at.to_s end diff --git a/app/views/courses/own_watch_histories.json.jbuilder b/app/views/courses/own_watch_histories.json.jbuilder index 3c3bddc55..982939d9c 100644 --- a/app/views/courses/own_watch_histories.json.jbuilder +++ b/app/views/courses/own_watch_histories.json.jbuilder @@ -3,8 +3,8 @@ json.data do json.title d.title json.user_name @current_user&.real_name json.is_finished d.is_finished ? true : false - json.total_duration d.time.round(2) - json.feq d.num + json.total_duration d.total_duration.round(2) + json.freq d['freq'] json.start_at d.start_at.to_s json.end_at d.end_at.to_s end diff --git a/app/views/courses/watch_video_histories.json.jbuilder b/app/views/courses/watch_video_histories.json.jbuilder index 4e7a4b174..207b9029b 100644 --- a/app/views/courses/watch_video_histories.json.jbuilder +++ b/app/views/courses/watch_video_histories.json.jbuilder @@ -3,8 +3,8 @@ json.videos do json.id v.id json.title v.title json.user_name v.user&.real_name - json.people_num v.num - json.total_time v.time + json.people_num v['people_num'] + json.total_time v['total_time'] end end json.count @count \ No newline at end of file