class ExportExercisesService include ExercisesHelper include StudentWorksHelper attr_reader :exercise, :ex_users def initialize(exercise, ex_users) @exercise = exercise @ex_users = ex_users 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 Rails.logger.info("##################_______________________file_name___________11111__________###########") zip_file = Tempfile.new(filename) Rails.logger.info("##################_______________________file_name___________2222222__________###########") pdfs = [] Zip::File.open(zip_file.path, Zip::File::CREATE) do |zip| Rails.logger.info("##################_______________________file_name___________3333333__________###########") ex_users.each do |ex_user| export = ExerciseUserPdfService.new(exercise, ex_user) Rails.logger.info("##################_______________________file_name___________444444__________###########") pdf = export.ex_pdf Rails.logger.info("##################_______________________file_name___________888888888__________###########") pdfs << pdf Rails.logger.info("##################_______________________file_name___________999999999__________###########") begin zip.add(export.filename, pdf.path) Rails.logger.info("##################_______________________file_name___________10000000000000__________###########") 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