class Videos::BatchPublishService < ApplicationService Error = Class.new(StandardError) attr_reader :user, :params def initialize(user, params) @user = user @params = params end def call video_params = Array.wrap(params[:videos]).compact return if video_params.blank? Rails.logger.info("#####video_course: #{video_params}") video_ids = [] ActiveRecord::Base.transaction do video_params.each do |param| video = user.videos.find_by(uuid: param[:video_id]) Rails.logger.info("video.processing_video_apply:#{video}") Rails.logger.info("video.processing_video_apply:#{video.blank? || video.processing_video_apply}") next if video.blank? || video.processing_video_apply.present? raise Error, '视频还未上传完成' if video.vod_uploading? video.title = param[:title].to_s.strip.presence || video.title video.apply_publish if param[:course_id].present? video.status = "published" end # 标清转码为h264 if AliyunVod::Service.get_meta_code_info(video.uuid).start_with?('h264', 'h265') video.transcoded = true Rails.logger.info("####video.uuid:#{video.uuid}") result = AliyunVod::Service.get_play_info(video.uuid) Rails.logger.info("####video.result:#{result}") video.play_url = result['PlayInfoList']['PlayInfo'][0]['PlayURL'] else AliyunVod::Service.submit_transcode_job(video.uuid, Video::NORMAL_TRANSCODE_GROUP_ID) end video.save! if param[:course_id].present? video.video_applies.create!(status: "agreed") else video.video_applies.create! end video_ids << video.id # 如果是课堂上传则创建课堂记录 Rails.logger.info("#####param: #{ param[:course_id]}") if param[:course_id].present? course_second_category_id = param[:category_id] || 0 video.course_videos.create!(course_id: param[:course_id], course_second_category_id: course_second_category_id) end end end BatchPublishVideoNotifyJob.perform_later(user.id, video_ids) if video_ids.present? end end