You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
class ExportExercisesService
|
|
|
|
include ExercisesHelper
|
|
|
|
include StudentWorksHelper
|
|
|
|
attr_reader :exercise, :ex_users, :request_url
|
|
|
|
|
|
|
|
def initialize(exercise, ex_users, request_url)
|
|
|
|
@exercise = exercise
|
|
|
|
@ex_users = ex_users
|
|
|
|
@request_url = request_url
|
|
|
|
end
|
|
|
|
|
|
|
|
def filename
|
|
|
|
exercise_export_name = exercise.user.real_name + "_" + exercise.exercise_name + "_" + Time.now.strftime('%Y%m%d_%H%M%S')
|
|
|
|
"#{exercise_export_name.strip}.zip"
|
|
|
|
end
|
|
|
|
|
|
|
|
def ex_zip
|
|
|
|
zip_file = Tempfile.new(filename)
|
|
|
|
pdfs = []
|
|
|
|
Zip::File.open(zip_file.path, Zip::File::CREATE) do |zip|
|
|
|
|
ex_users.each do |ex_user|
|
|
|
|
export = ExerciseUserPdfService.new(exercise, ex_user,@request_url)
|
|
|
|
pdf = export.ex_pdf
|
|
|
|
pdfs << pdf
|
|
|
|
begin
|
|
|
|
zip.add(export.filename, pdf.path)
|
|
|
|
rescue => ex
|
|
|
|
Rails.logger.error(ex.message)
|
|
|
|
zip.get_output_stream('FILE_NOTICE.txt'){|os| os.write("文件重复:#{export.filename}") }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
zip_file
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|