class Admins::ShixunSettingsController < Admins::BaseController def index default_sort('created_at', 'desc') shixun_settings = Admins::ShixunSettingsQuery.call(params) @editing_shixuns = shixun_settings.where(status:0).size @pending_shixuns = shixun_settings.where(status:1).size @processed_shixuns = shixun_settings.where(status:2).size @closed_shixuns = shixun_settings.where(status:3).size @sort_json = { can_copy: params[:can_copy].present? ? params[:can_copy] : false, webssh: params[:webssh].present? ? params[:webssh] : "0", hidden: params[:hidden].present? ? params[:hidden] : false, homepage_show: params[:homepage_show].present? ? params[:homepage_show] : false, task_pass: params[:task_pass].present? ? params[:task_pass] : false, code_hidden: params[:code_hidden].present? ? params[:code_hidden] : false, vip: params[:vip].present? ? params[:vip] : false } @shixuns_type_check = MirrorRepository.pluck(:type_name,:id) @shixun_tags = TagRepertoire.order("name asc").pluck(:name,:id) @params_page = params[:page] || 1 @shixun_settings = paginate shixun_settings.preload(:user,:tag_repertoires) respond_to do |format| format.js format.html format.xls{ filename = "实训详情_#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}.xls" export_url = if params[:base_data].present? shixun_base_list_xls(shixun_settings) else shixun_list_xls(shixun_settings) end send_data(export_url, :type => 'application/octet-stream', :filename => filename_for_content_disposition(filename)) } end end def update @shixun = Shixun.find_by(id:params[:id]) @page_no = params[:page_no] || "1" @shixun_tags = TagRepertoire.order("name asc").pluck(:name,:id) tag_ids = params[:tag_repertoires] if tag_ids.present? @shixun&.shixun_tag_repertoires.delete_all tag_repertoire_ids = @shixun&.tag_repertoires&.pluck(:id) tag_ids.each do |id| unless tag_repertoire_ids.include?(id) tag_repertoire = @shixun.shixun_tag_repertoires.new(shixun_id:@shixun.id,tag_repertoire_id:id) tag_repertoire.save! end end else unless @shixun.update_attributes(setting_params) redirect_to admins_shixun_settings_path flash[:danger] = "更新失败" end end end private def shixun_list_xls shixuns xls_report = StringIO.new book = Spreadsheet::Workbook.new sheet1 = book.create_worksheet :name => "sheet" blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10 sheet1.row(0).default_format = blue sheet1.row(0).concat(["实训ID","实训名称","技术平台", "Fork源", "实践任务","选择题任务","挑战人数", "通关人数", "状态","创建者", "单位", "职业", "关卡序号","关卡名称","技能标签"]) count_row = 1 shixuns.includes(:fork_shixuns, :myshixuns, :mirror_repositories, challenges: [:challenge_tags], user: [user_extension: :school]).find_each do |shixun| sheet1[count_row, 0] = shixun.identifier sheet1[count_row, 1] = shixun.name sheet1[count_row, 2] = shixun.mirror_repositories.select{|mr| mr.main_type == "1"}.first&.type_name sheet1[count_row, 3] = shixun.fork_identifier sheet1[count_row, 4] = shixun.challenges.select{|c| c.st == 0}.size sheet1[count_row, 5] = shixun.challenges.select{|c| c.st == 1}.size sheet1[count_row, 6] = shixun.myshixuns_count sheet1[count_row, 7] = shixun.myshixuns.select{|m| m.status == 1}.size sheet1[count_row, 8] = shixun.shixun_status sheet1[count_row, 9] = shixun.user.show_real_name sheet1[count_row, 10] = shixun.user.school_name sheet1[count_row, 11] = shixun.user.identity shixun.challenges.each do |challenge| sheet1[count_row, 12] = "第#{challenge.position}关" sheet1[count_row, 13] = challenge.subject sheet1[count_row, 14] = challenge.tags_show count_row += 1 end count_row += 1 end book.write xls_report xls_report.string end def shixun_base_list_xls shixuns xls_report = StringIO.new book = Spreadsheet::Workbook.new sheet1 = book.create_worksheet :name => "sheet" blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10 sheet1.row(0).default_format = blue sheet1.row(0).concat(["实训ID","实训名称","技术平台", "Fork源", "状态","创建者", "单位", "职业", "关卡序号","关卡名称"]) count_row = 1 shixuns.includes(:mirror_repositories, :challenges, user: [user_extension: :school]).find_each do |shixun| sheet1[count_row, 0] = shixun.identifier sheet1[count_row, 1] = shixun.name sheet1[count_row, 2] = shixun.mirror_repositories.select{|mr| mr.main_type == "1"}.first&.type_name sheet1[count_row, 3] = shixun.fork_from sheet1[count_row, 4] = shixun.shixun_status sheet1[count_row, 5] = shixun.user.show_real_name sheet1[count_row, 6] = shixun.user.school_name sheet1[count_row, 7] = shixun.user.identity shixun.challenges.each do |challenge| sheet1[count_row, 8] = "第#{challenge.position}关" sheet1[count_row, 9] = challenge.subject count_row += 1 end count_row += 1 end book.write xls_report xls_report.string end def setting_params params.permit(:use_scope,:excute_time,:close,:status,:can_copy,:webssh,:hidden,:homepage_show,:task_pass,:code_hidden,:vip,:page_no,:id,tag_repertoires:[]) end end