146 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			146 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
class ZipsController < ApplicationController
 | 
						||
  before_action :require_login, :check_auth
 | 
						||
  before_action :load_homework, only: [:shixun_report]
 | 
						||
  before_action :get_exercise, only: [:export_exercises]
 | 
						||
 | 
						||
  before_action :require_admin_or_teacher
 | 
						||
 | 
						||
  def shixun_report
 | 
						||
    service = BatchExportShixunReportService.new(@homework, @all_student_works)
 | 
						||
    filename_ = filename_for_content_disposition(service.filename)
 | 
						||
    if params[:export].present? && params[:export]
 | 
						||
      normal_status(0,"正在下载中")
 | 
						||
    else
 | 
						||
      set_export_cookies
 | 
						||
      send_file service.zip, filename: filename_, type: 'application/zip'
 | 
						||
    end
 | 
						||
 | 
						||
  rescue BatchExportShixunReportService::Error => ex
 | 
						||
    normal_status(-1, ex.message)
 | 
						||
  end
 | 
						||
 | 
						||
  def export_exercises
 | 
						||
    @request_url = request.base_url
 | 
						||
    exercises = ExportExercisesService.new(@exercise,@ex_users,@request_url)
 | 
						||
 | 
						||
    file_name_ = filename_for_content_disposition(exercises.filename)
 | 
						||
    if params[:export].present? && params[:export]
 | 
						||
      normal_status(0,"正在下载中")
 | 
						||
    else
 | 
						||
      set_export_cookies
 | 
						||
      send_file exercises.ex_zip, filename: file_name_, type: 'application/zip'
 | 
						||
    end
 | 
						||
  rescue Exception => e
 | 
						||
    normal_status(-1, e.message)
 | 
						||
  end
 | 
						||
 | 
						||
  private
 | 
						||
 | 
						||
  def filename_for_content_disposition(name)
 | 
						||
    request.env['HTTP_USER_AGENT'] =~ %r{MSIE|Trident|Edge} ? ERB::Util.url_encode(name) : name
 | 
						||
  end
 | 
						||
 | 
						||
  def require_admin_or_teacher
 | 
						||
    return if current_user.teacher_or_admin?(@course)
 | 
						||
    normal_status(403, '')
 | 
						||
  end
 | 
						||
 | 
						||
  def get_exercise
 | 
						||
    ActiveRecord::Base.transaction do
 | 
						||
      begin
 | 
						||
        @exercise = Exercise.includes(:exercise_users,:exercise_questions).find_by(id:params[:exercise_id])
 | 
						||
        @exercise_status = @exercise.present? ? @exercise.get_exercise_status(current_user) : 1
 | 
						||
        group_id = params[:exercise_group_id]
 | 
						||
        if @exercise.blank?
 | 
						||
          normal_status(-1,"试卷不存在")
 | 
						||
        elsif @exercise_status == 1
 | 
						||
          normal_status(-1,"试卷未发布")
 | 
						||
        else
 | 
						||
          @course = @exercise.course
 | 
						||
          default_ex_users = @exercise.all_exercise_users(current_user.id).exercise_user_committed
 | 
						||
          @ex_users =  default_ex_users   #仅导出已提交的,截止后则是全部为提交的。
 | 
						||
 | 
						||
          #是否评阅
 | 
						||
          if params[:review].present?
 | 
						||
            review_type = params[:review].first.to_i  #已评,则数据为1,未评,则数据为0,前端传过来的为数组
 | 
						||
            if review_type == 1
 | 
						||
              @ex_users = @ex_users.where("subjective_score >= ?",0.0)
 | 
						||
            else
 | 
						||
              @ex_users = @ex_users.where("subjective_score < ?",0.0)
 | 
						||
            end
 | 
						||
          end
 | 
						||
 | 
						||
          #答题状态的选择
 | 
						||
          if params[:commit_status].present? && (params[:commit_status].to_i == 1)
 | 
						||
            @exercise_users_list =  @exercise_users_list.where(commit_status:params[:commit_status])
 | 
						||
          elsif params[:commit_status].present? && (params[:commit_status].to_i == 0)
 | 
						||
            normal_status(-1,"暂无用户提交!")
 | 
						||
          end
 | 
						||
 | 
						||
          #可以分班选择
 | 
						||
          if group_id.present?
 | 
						||
            exercise_students = @course.students.where(course_group_id: group_id)  # 试卷所分班的全部人数
 | 
						||
            user_ids = exercise_students.pluck(:user_id).reject(&:blank?).uniq
 | 
						||
            @ex_users = @ex_users.where(user_id: user_ids)
 | 
						||
          end
 | 
						||
 | 
						||
          #搜索
 | 
						||
          if params[:search].present?
 | 
						||
            @ex_users = @ex_users.joins(user: :user_extension).where("CONCAT(lastname, firstname) like ? OR nickname like ? OR student_id like ?", "%#{params[:search]}%", "%#{params[:search]}%", "%#{params[:search]}%")
 | 
						||
          end
 | 
						||
 | 
						||
          default_ex_users_size = @ex_users&.size
 | 
						||
 | 
						||
          if default_ex_users_size.blank? || default_ex_users_size == 0
 | 
						||
            normal_status(-1,"暂无用户提交")
 | 
						||
          elsif default_ex_users_size > 100
 | 
						||
            normal_status(-2,"100")
 | 
						||
          end
 | 
						||
        end
 | 
						||
      rescue Exception => e
 | 
						||
        uid_logger_error(e.message)
 | 
						||
        tip_exception("导出失败!")
 | 
						||
      end
 | 
						||
    end
 | 
						||
  end
 | 
						||
 | 
						||
  def load_homework
 | 
						||
    @homework = HomeworkCommon.find(params[:homework_common_id])
 | 
						||
    @homework_status = @homework.present? ?  @homework.homework_detail_manual.comment_status : 0
 | 
						||
    if @homework.blank?
 | 
						||
      normal_status(-1,"该作业不存在")
 | 
						||
    elsif @homework_status == 0
 | 
						||
      normal_status(-1,"该作业未发布")
 | 
						||
    else
 | 
						||
      @course   = @homework.course
 | 
						||
      ##7。2 -hs新增
 | 
						||
      @member = @course.course_member(current_user.id)
 | 
						||
 | 
						||
      @all_student_works = @homework.teacher_works(@member).where("work_status > 0")
 | 
						||
      work_status = params[:work_status]
 | 
						||
      group_id = params[:course_group]
 | 
						||
 | 
						||
      unless work_status.blank?
 | 
						||
        @all_student_works = @all_student_works.where(work_status:work_status)
 | 
						||
      end
 | 
						||
 | 
						||
      unless group_id.blank?
 | 
						||
        group_user_ids = @course.students.where(course_group_id: params[:course_group]).pluck(:user_id)
 | 
						||
        @all_student_works = @all_student_works.where(user_id: group_user_ids)
 | 
						||
      end
 | 
						||
 | 
						||
      unless params[:search].blank?
 | 
						||
        @all_student_works = @all_student_works.joins(user: :user_extension).where("CONCAT(lastname, firstname) like ? or nickname like ? 
 | 
						||
                         or student_id like ?", "%#{params[:search]}%", "%#{params[:search]}%", "%#{params[:search]}%")
 | 
						||
      end
 | 
						||
 | 
						||
      student_work_sizes = @all_student_works&.size
 | 
						||
      if student_work_sizes.blank? || student_work_sizes == 0
 | 
						||
        normal_status(-1,"暂无用户提交")
 | 
						||
      elsif student_work_sizes > 100
 | 
						||
        normal_status(-2,"100")
 | 
						||
      end
 | 
						||
    end
 | 
						||
  end
 | 
						||
end
 |