|
|
|
@ -38,9 +38,8 @@ namespace :zip_pack do
|
|
|
|
|
|
|
|
|
|
def zip_homework_pdf homeworks, folder, parallel_size
|
|
|
|
|
Dir.mkdir(folder) unless File.directory?(folder)
|
|
|
|
|
homeworks = homeworks.includes(:score_student_works)
|
|
|
|
|
|
|
|
|
|
Parallel.each(homeworks, in_processes: 2) do |homework|
|
|
|
|
|
homeworks.includes(:score_student_works).each do |homework|
|
|
|
|
|
out_file_name = "#{Time.now.strftime("%Y%m%d%H%M%S").to_s}-#{homework.course_id}-#{homework.name}.zip"
|
|
|
|
|
out_file_name.gsub!(" ", "-")
|
|
|
|
|
out_file_name.gsub!("/", "_")
|
|
|
|
@ -51,21 +50,26 @@ namespace :zip_pack do
|
|
|
|
|
|
|
|
|
|
if student_works.size > 0
|
|
|
|
|
pdfs = []
|
|
|
|
|
file_paths = []
|
|
|
|
|
student_works.find_in_batches(batch_size: 500) do |sw|
|
|
|
|
|
Parallel.each(sw, in_threads: parallel_size) do |student_work|
|
|
|
|
|
export = ExportShixunReportService.new(homework, student_work)
|
|
|
|
|
pdf = export.to_pdf
|
|
|
|
|
pdfs << pdf
|
|
|
|
|
file_paths << {filename: export.filename, path: pdf.path}
|
|
|
|
|
puts "out: #{export.filename}_#{pdf.path}"
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
Zip::File.open(zipfile_name, Zip::File::CREATE) do |zip|
|
|
|
|
|
student_works.find_in_batches(batch_size: 500) do |sw|
|
|
|
|
|
Parallel.each(sw, in_processes: parallel_size) do |student_work|
|
|
|
|
|
export = ExportShixunReportService.new(homework, student_work)
|
|
|
|
|
pdf = export.to_pdf
|
|
|
|
|
pdfs << pdf
|
|
|
|
|
begin
|
|
|
|
|
zip.add(export.filename, pdf.path)
|
|
|
|
|
puts "out: #{export.filename}_#{pdf.path}"
|
|
|
|
|
rescue => ex
|
|
|
|
|
Rails.logger.error(ex.message)
|
|
|
|
|
file_paths.each do |pdf|
|
|
|
|
|
begin
|
|
|
|
|
zip.add(pdf[:filename], pdf[:path])
|
|
|
|
|
rescue => ex
|
|
|
|
|
Rails.logger.error(ex.message)
|
|
|
|
|
|
|
|
|
|
zip.get_output_stream('FILE_NOTICE.txt'){|os| os.write("文件重复:#{export.filename}") }
|
|
|
|
|
next
|
|
|
|
|
end
|
|
|
|
|
zip.get_output_stream('FILE_NOTICE.txt'){|os| os.write("文件重复:#{export.filename}") }
|
|
|
|
|
next
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|