class ZipsController < ApplicationController
before_action :require_login
before_action :load_homework , only : [ :shixun_report ]
before_action :get_exercise , only : [ :export_exercises ]
before_action :require_admin_or_teacher
def shixun_report
# student_work_ids = Array.wrap(params[:student_work_ids])
# service = BatchExportShixunReportService.new(@homework, @student_work_ids)
service = BatchExportShixunReportService . new ( @homework , @all_student_works )
filename = filename_for_content_disposition ( service . filename )
send_file service . zip , filename : filename , type : 'application/zip'
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 )
send_file exercises . ex_zip , filename : file_name , type : 'application/zip'
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 . get_exercise_status ( current_user . id )
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 student_id like ? " , " % #{ 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 ] )
@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 ]
if work_status . present?
@all_student_works = @all_student_works . where ( work_status : work_status )
end
if group_id . present?
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 student_id like ?" , " % #{ 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