From f2e79833d0f6440feadbc6d54c4b2913229507d3 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 17 Jan 2020 09:52:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E8=AE=AD=E6=8A=A5=E5=91=8A=E7=9A=84?= =?UTF-8?q?=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/student_work.rb | 2 +- lib/tasks/zip_pack.rake | 92 ++++++++++++++++++++++++-------------- 2 files changed, 59 insertions(+), 35 deletions(-) diff --git a/app/models/student_work.rb b/app/models/student_work.rb index 3aee0611b..f8f3bee99 100644 --- a/app/models/student_work.rb +++ b/app/models/student_work.rb @@ -223,7 +223,7 @@ class StudentWork < ApplicationRecord game_score = adjust_score.score elsif game.present? setting = homework_common.homework_group_setting game.user_id - if game.status == 2 && ((game.end_time && game.end_time < setting.end_time) || (homework_common.allow_late && game.end_time && game.end_time < homework_common.late_time)) + if game.status == 2 && ((game.end_time && setting.end_time && game.end_time < setting.end_time) || (homework_common.allow_late && homework_common.late_time && game.end_time && game.end_time < homework_common.late_time)) answer_open_evaluation = homework_common.homework_detail_manual.answer_open_evaluation game_score = answer_open_evaluation ? score : (game.final_score > 0 ? game.real_score(score) : 0) end diff --git a/lib/tasks/zip_pack.rake b/lib/tasks/zip_pack.rake index 393f7ab3c..06598d56e 100644 --- a/lib/tasks/zip_pack.rake +++ b/lib/tasks/zip_pack.rake @@ -1,51 +1,78 @@ -# 执行示例 bundle exec rake zip_pack:shixun_pack args=123,2323 +# 执行示例 bundle exec rake zip_pack:shixun_pack class=Course ids=123,2323 +# 执行示例 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['args'] - homework_ids = ENV['args'].split(",").map(&:to_i) - homeworks = HomeworkCommon.where(id: homework_ids) - 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!("/", "_") + if ENV['class'] && ENV['ids'] + 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 + 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 + folders << new_folder + end + + puts "下载路径: #{folders.join(",")}" + end + end - zipfile_name = "#{OUTPUT_FOLDER}/#{out_file_name}" - Dir.mkdir(File.dirname(zipfile_name)) unless File.exist?(File.dirname(zipfile_name)) + def zip_homework_pdf homeworks, folder + Dir.mkdir(folder) unless File.directory?(folder) - student_works = homework.score_student_works + 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!("/", "_") - if student_works.size > 0 - pdfs = [] - Zip::File.open(zipfile_name, Zip::File::CREATE) do |zip| - student_works.find_each.map 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) + zipfile_name = "#{folder}/#{out_file_name}" + # Dir.mkdir(File.dirname(zipfile_name)) unless File.exist?(File.dirname(zipfile_name)) - zip.get_output_stream('FILE_NOTICE.txt'){|os| os.write("文件重复:#{export.filename}") } - next - end + student_works = homework.score_student_works + + if student_works.size > 0 + pdfs = [] + Zip::File.open(zipfile_name, Zip::File::CREATE) do |zip| + student_works.find_each.map 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) + + zip.get_output_stream('FILE_NOTICE.txt'){|os| os.write("文件重复:#{export.filename}") } + next end end - zipfile = zipfile_name - else - zipfile = {:message => "no file"} end - puts "out: #{zipfile}" - + zipfile = zipfile_name + 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'] @@ -61,7 +88,4 @@ namespace :zip_pack do end end - def filename_for_content_disposition(name) - request.env['HTTP_USER_AGENT'] =~ %r{MSIE|Trident|Edge} ? ERB::Util.url_encode(name) : name - end end \ No newline at end of file