diff --git a/app/controllers/competition_infos_controller.rb b/app/controllers/competition_infos_controller.rb index 1915f1fa7..c6d6a300d 100644 --- a/app/controllers/competition_infos_controller.rb +++ b/app/controllers/competition_infos_controller.rb @@ -1,6 +1,6 @@ class CompetitionInfosController < ApplicationController include ApplicationHelper - before_action :find_competition, only: [:show, :update, :enroll, :upload, :enroll_status, :statistics, :enroll_list, :enroll_update, :enroll_status_update] + before_action :find_competition, only: [:show, :update, :enroll, :upload, :enroll_status, :statistics, :enroll_list, :enroll_update, :enroll_status_update, :upload_enroll_template] before_action :require_admin, only: [:index, :new, :edit, :create] before_action :check_competition_manager, only: [:update, :enroll_status_update] @@ -77,12 +77,12 @@ class CompetitionInfosController < ApplicationController format.xlsx { set_export_cookies competition_users = params[:upload].to_s == "true" ? competition_users.where(status: [2]) : competition_users.where(status: [1,2]) - @table_columns = @competition_info.is_local? ? %w(参赛单位 参赛负责人 职务 军衔 电话 赛区 赛项 课题来源 成员) : %w(参赛单位 参赛负责人 电话 赛区 赛项 课题来源 成员) + @table_columns = @competition_info.is_local? ? %w(ID 参赛单位 参赛负责人 职务 军衔 电话 赛区 赛项 课题来源 成员) : %w(ID 参赛单位 参赛负责人 电话 赛区 赛项 成员) @table_columns = @table_columns + %w(作品下载链接) if params[:upload].to_s == "true" @export_infos = [] competition_users.each do |u| - info_array = @competition_info.is_local? ? [u.org_name, u.leader, u.org_job, u.org_rank, u.phone, u.zone, u.sub_competition, u.subject_source_type == 0 ? "自主提报" : u.subject_source_name, - u.members_to_string] : [u.org_name, u.leader, u.phone, u.zone, u.sub_competition, u.subject_source_type == 0 ? "自主提报" : u.subject_source_name, + info_array = @competition_info.is_local? ? [u.id, u.org_name, u.leader, u.org_job, u.org_rank, u.phone, u.zone, u.sub_competition, u.subject_source_type == 0 ? "自主提报" : u.subject_source_name, + u.members_to_string] : [u.id, u.org_name, u.leader, u.phone, u.zone, u.sub_competition, u.members_to_string] if params[:upload].to_s == "true" info_array = info_array + [u.attachments.blank? ? "" : "#{EduSetting.get('host_name')}/#{download_url(u.attachments.first)}"] @@ -93,6 +93,12 @@ class CompetitionInfosController < ApplicationController export_name = "竞赛作品列表_#{Time.now.strftime('%Y%m%d_%H%M%S')}" if params[:upload].to_s == "true" render xlsx: "#{export_name.strip}", template: "competition_infos/enroll_list.xlsx.axlsx", locals: {table_columns: @table_columns, export_infos: @export_infos} } + format.zip { + competition_users = params[:upload].to_s == "true" ? competition_users.where(status: [2]) : competition_users.where(status: [1,2]) + Rails.logger.info("######_______________########competition_users.size: #{competition_users.size}") + service = Competition::ZipWorkFileService.new(competition_users,"") + send_file service.zip, filename: service.filename, type: 'application/zip' + } end end @@ -129,6 +135,14 @@ class CompetitionInfosController < ApplicationController render_ok end + def upload_enroll_template + competition_user = CompetitionUser.find_by(competition_info: @competition_info.id, user_id: current_user.id) + tip_exception "未报名,请先报名" if competition_user.blank? + tip_exception "附件参数enroll_template_id不能为空" if params[:enroll_template_id].blank? + competition_user.update_attributes!(enroll_template_id: params[:enroll_template_id]) + render_ok + end + def enroll_status @competition_user = CompetitionUser.find_by(competition_info: @competition_info.id, user_id: current_user.id) end @@ -163,12 +177,12 @@ class CompetitionInfosController < ApplicationController def enroll_params params.permit(:org_name, :org_job, :org_rank, :leader, :zone, :sub_competition, :phone, - :subject_source_type, :subject_source_name) + :subject_source_type, :subject_source_name, :enroll_template_id) end def competition_info_params params.require(:competition_info).permit(:title, :zones, :zones_local, :sub_competitions, :identifier, :content, - :video_url, :is_local, :manager_ids, :upload_date, :enroll_date, :guide, :about_us, :banner_url) + :video_url, :is_local, :manager_ids, :upload_date, :enroll_date, :guide, :about_us, :banner_url, :enroll_template) end def find_competition diff --git a/app/services/competition/zip_work_file_service.rb b/app/services/competition/zip_work_file_service.rb new file mode 100644 index 000000000..e670aa530 --- /dev/null +++ b/app/services/competition/zip_work_file_service.rb @@ -0,0 +1,38 @@ +require 'rubygems' +require 'zip' + +class Competition::ZipWorkFileService + + attr_reader :competition_users, :path + + def initialize(competition_users, path) + @competition_users = competition_users + @path = path + end + + def filename + export_name = "提案作品-#{Time.now.strftime('%Y%m%d%H%M%S')}" + "#{export_name.strip}.zip" + end + + def zip + zip_file = Rails.root.join(@path, filename) + Zip::File.open(zip_file, Zip::File::CREATE) do |attach_zip| + if @competition_users.present? + @competition_users.each do |c_user| + next if c_user.attachments.blank? + attach = c_user.attachments.last + attach_local_path = "#{Rails.root}/files/#{attach.disk_directory}/#{attach.disk_filename}" + attach_filename = "#{c_user.id}_#{c_user.leader}_#{attach.filename}" + begin + attach_zip.add(attach_filename, attach_local_path) + rescue => ex + Rails.logger.error("########—————————————2222222#######" + ex.message) + end + end + end + end + zip_file + end + +end \ No newline at end of file diff --git a/app/views/competition_infos/_form.html.erb b/app/views/competition_infos/_form.html.erb index 47dfd508a..655604274 100644 --- a/app/views/competition_infos/_form.html.erb +++ b/app/views/competition_infos/_form.html.erb @@ -32,6 +32,10 @@ <%= form.label :video_url, "视频地址" %> <%= form.text_field :video_url, :style=>'width:800px;' %> +