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&.course&.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