添加视频时长统计排序

courseware
anke1460 5 years ago
parent f38b1217b9
commit aed5c76b98

@ -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

@ -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
@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

@ -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

@ -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

@ -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
Loading…
Cancel
Save