mirror of
https://gitlink.org.cn/Gitlink/forgeplus.git
synced 2026-05-03 03:40:49 +08:00
init project
This commit is contained in:
98
lib/tasks/zip_pack.rake
Normal file
98
lib/tasks/zip_pack.rake
Normal file
@@ -0,0 +1,98 @@
|
||||
# 执行示例 bundle exec rake zip_pack:shixun_pack class=Course ids=123,2323 parallel_size=4
|
||||
# 执行示例 bundle exec rake zip_pack:shixun_pack class=HomeworkCommon ids=123,2323
|
||||
namespace :zip_pack do
|
||||
desc "手工打包作品"
|
||||
OUTPUT_FOLDER = "#{Rails.root}/files/archiveZip"
|
||||
|
||||
task :shixun_pack => :environment do
|
||||
|
||||
if ENV['class'] && ENV['ids']
|
||||
parallel_size = ENV['parallel_size'] || 2
|
||||
parallel_size = parallel_size.to_i
|
||||
env_ids = ENV['ids'].split(",").map(&:to_i)
|
||||
folders = []
|
||||
if ENV['class'] == "Course"
|
||||
courses = Course.where(id: env_ids)
|
||||
courses.each do |course|
|
||||
homeworks = course.practice_homeworks.homework_published
|
||||
new_dir_name = "#{course.name.to_s.strip}_#{Time.now.strftime("%Y%m%d%H%M%S").to_s}"
|
||||
new_dir_name.gsub!(" ", "-")
|
||||
new_dir_name.gsub!("/", "_")
|
||||
new_folder = "#{OUTPUT_FOLDER}/#{new_dir_name}"
|
||||
zip_homework_pdf homeworks, new_folder, parallel_size
|
||||
folders << new_folder
|
||||
end
|
||||
else
|
||||
homeworks = HomeworkCommon.where(id: env_ids)
|
||||
new_dir_name = "#{homeworks.first&.course&.name.to_s.strip}_#{Time.now.strftime("%Y%m%d%H%M%S").to_s}"
|
||||
new_dir_name.gsub!(" ", "-")
|
||||
new_dir_name.gsub!("/", "_")
|
||||
new_folder = "#{OUTPUT_FOLDER}/#{new_dir_name}"
|
||||
zip_homework_pdf homeworks, new_folder, parallel_size
|
||||
folders << new_folder
|
||||
end
|
||||
|
||||
puts "下载路径: #{folders.join(",")}"
|
||||
end
|
||||
end
|
||||
|
||||
def zip_homework_pdf homeworks, folder, parallel_size
|
||||
Dir.mkdir(folder) unless File.directory?(folder)
|
||||
|
||||
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!("/", "_")
|
||||
|
||||
zipfile_name = "#{folder}/#{out_file_name}"
|
||||
|
||||
student_works = homework.score_student_works
|
||||
|
||||
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|
|
||||
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
|
||||
end
|
||||
end
|
||||
else
|
||||
zipfile = {:message => "no file"}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# 执行示例 bundle exec rake zip_pack:homework_attach_pack args=123
|
||||
task :homework_attach_pack => :environment do
|
||||
include ExportHelper
|
||||
if ENV['args']
|
||||
homework_id = ENV['args']
|
||||
homework = HomeworkCommon.find homework_id
|
||||
zip_works = homework.student_works.where("work_status > 0")
|
||||
if zip_works.size > 0
|
||||
zipfile = zip_homework_common homework, zip_works
|
||||
else
|
||||
zipfile = {:message => "no file"}
|
||||
end
|
||||
puts "out: #{zipfile}"
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user