Merge branch 'dev_aliyun' of http://bdgit.educoder.net/Hjqreturn/educoder into dev_aliyun

PCqiandao
dinglink 5 years ago
commit 08f1f52334

@ -114,7 +114,7 @@ class CoursesController < ApplicationController
#sql = "left join videos on videos.id=course_videos.video_id AND (videos.transcoded=1 OR videos.user_id = #{current_user.id})" #sql = "left join videos on videos.id=course_videos.video_id AND (videos.transcoded=1 OR videos.user_id = #{current_user.id})"
#@videos = paginate videos.joins(sql).includes(video: [user: :user_extension], user: :user_extension) #@videos = paginate videos.joins(sql).includes(video: [user: :user_extension], user: :user_extension)
videos = videos.includes(:watch_course_videos, video: [user: :user_extension],user: :user_extension) videos = videos.includes(video: [user: :user_extension],user: :user_extension).select("course_videos.id, course_videos.title, course_videos.link, course_videos.user_id")
videos = videos.where(videos: {transcoded: true}) videos = videos.where(videos: {transcoded: true})
.or(videos.where(videos: {user_id: current_user.id})) .or(videos.where(videos: {user_id: current_user.id}))
.or(videos.where(course_videos: {is_link: true})) .or(videos.where(course_videos: {is_link: true}))

@ -5,6 +5,6 @@ class WatchVideoHistoriesController < ApplicationController
watch_log = CreateWatchVideoService.new(current_user, request, params).call watch_log = CreateWatchVideoService.new(current_user, request, params).call
render_ok(log_id: watch_log&.id) render_ok(log_id: watch_log&.id)
rescue CreateWatchVideoService::Error => ex rescue CreateWatchVideoService::Error => ex
render_error(ex.message) render_ok(log_id: watch_log&.id)
end end
end end

@ -14,6 +14,9 @@ class Weapps::CourseMemberAttendancesController < ApplicationController
@members = @members.where(course_group_id: params[:group_ids]) @members = @members.where(course_group_id: params[:group_ids])
end end
@page = params[:page] || 1
@limit = params[:limit] || 5
if params[:attendance_status].present? if params[:attendance_status].present?
@members = @members.joins(:course_member_attendances).where(course_member_attendances: {course_attendance_id: attendance.id, attendance_status: params[:attendance_status]}) @members = @members.joins(:course_member_attendances).where(course_member_attendances: {course_attendance_id: attendance.id, attendance_status: params[:attendance_status]})
end end

@ -10,33 +10,35 @@ class CreateWatchVideoService < ApplicationService
def call def call
ActiveRecord::Base.transaction do ActiveRecord::Base.transaction do
current_time = Time.now current_time = Time.now
params[:watch_duration] = params[:watch_duration].to_f.round(2)
params[:total_duration] = params[:total_duration].to_f.round(2)
params[:duration] = params[:duration].to_f.round(2)
if params[:log_id].present? if params[:log_id].present?
if params[:total_duration].to_f < params[:watch_duration].to_f || params[:watch_duration].to_f < 0 watch_video_history = user.watch_video_histories.find(params[:log_id])
raise Error, '观看时长错误' if params[:total_duration] < params[:watch_duration]
return watch_video_history
end end
# 更新观看时长 # 更新观看时长
watch_video_history = user.watch_video_histories.find(params[:log_id]) if watch_video_history.present? && !watch_video_history.is_finished && watch_video_history.watch_duration <= params[:watch_duration] && watch_video_history.total_duration <= params[:total_duration]
if watch_video_history.present? && watch_video_history.watch_duration <= params[:watch_duration].to_f && params[:total_duration].to_f > watch_video_history.total_duration
# 如果观看总时长没变,说明视频没有播放,无需再去记录 # 如果观看总时长没变,说明视频没有播放,无需再去记录
watch_video_history.end_at = current_time watch_video_history.end_at = current_time
watch_video_history.total_duration = params[:total_duration] watch_video_history.total_duration = params[:total_duration]
watch_video_history.watch_duration = params[:watch_duration].to_f > watch_video_history.duration ? watch_video_history.duration : params[:watch_duration] watch_video_history.watch_duration = params[:watch_duration] > watch_video_history.duration ? watch_video_history.duration : params[:watch_duration]
watch_video_history.is_finished = params[:ed].present? watch_video_history.is_finished = params[:ed].present?
watch_video_history.save! watch_video_history.save!
watch_course_video = watch_video_history.watch_course_video watch_course_video = watch_video_history.watch_course_video
watch_course_video.total_duration = watch_course_video.watch_video_histories.sum(:total_duration) if watch_course_video.present?
watch_course_video.end_at = current_time watch_course_video.total_duration = watch_course_video.watch_video_histories.sum(:total_duration)
watch_course_video.save! watch_course_video.end_at = current_time
if !watch_course_video.is_finished && watch_course_video.watch_duration < params[:watch_duration]
if watch_course_video.present? && !watch_course_video.is_finished && watch_course_video.watch_duration < params[:watch_duration].to_f # 更新课程视频的时长及是否看完状态
# 更新课程视频的时长及是否看完状态 watch_course_video.watch_duration = params[:watch_duration]
watch_course_video.watch_duration = params[:watch_duration] if params[:ed].present?
if params[:ed].present? watch_course_video.is_finished = watch_course_video.total_duration >= watch_course_video.duration
watch_course_video.is_finished = watch_course_video.watch_video_histories.sum(:total_duration) >= watch_course_video.duration end
end end
watch_course_video.save! watch_course_video.save!
end end
@ -50,11 +52,10 @@ class CreateWatchVideoService < ApplicationService
d.start_at = current_time d.start_at = current_time
d.duration = params[:duration] d.duration = params[:duration]
end end
watch_video_history = build_video_log(current_time, course_video.video_id, watch_course_video.id)
watch_video_history.save!
watch_course_video.save! unless watch_course_video.persisted? watch_course_video.save! unless watch_course_video.persisted?
watch_video_history = build_video_log(current_time, course_video.video_id, watch_course_video.id)
watch_video_history.save!
else else
# 非课堂视频 # 非课堂视频
video = Video.find(params[:video_id]) video = Video.find(params[:video_id])

@ -1,5 +1,5 @@
json.attendances @attendances do |attendance| json.attendances @attendances do |attendance|
json.(attendance, :id, :name, :normal_count, :all_count, :mode) json.(attendance, :id, :name, :normal_count, :all_count, :mode, :attendance_code)
json.author do json.author do
user = attendance.user user = attendance.user
json.user_name user.real_name json.user_name user.real_name

@ -10,7 +10,7 @@ json.videos @videos do |video|
json.user_login user&.login json.user_login user&.login
else else
json.partial! 'users/videos/video', locals: { video: video.video } json.partial! 'users/videos/video', locals: { video: video.video }
json.total_time video.watch_course_videos.sum(:total_duration) json.total_time video.watch_course_videos.sum(:total_duration).round(0)
json.people_num video.watch_course_videos.count(:user_id) json.people_num video.watch_course_videos.count(:user_id)
end end
end end

@ -4,8 +4,9 @@
# json.student_id member.user&.student_id # json.student_id member.user&.student_id
# end # end
json.member_attendances @members.each do |member| json.member_attendances @members.each_with_index.to_a do |member, index|
json.(member, :user_id) json.(member, :user_id)
json.index (@page.to_i - 1) * @limit.to_i + index + 1
json.user_name member.user&.real_name json.user_name member.user&.real_name
json.student_id member.user&.student_id json.student_id member.user&.student_id
json.attendance_status @member_attendances.select{|attendance| attendance.course_member_id == member.id}.first&.attendance_status || "ABSENCE" json.attendance_status @member_attendances.select{|attendance| attendance.course_member_id == member.id}.first&.attendance_status || "ABSENCE"

Loading…
Cancel
Save