class GraduationTasksController < ApplicationController before_action :require_login, :check_auth, except: [:index] before_action :find_course, except: [:edit, :update, :settings, :update_settings, :tasks_list, :show, :show_comment, :cross_comment_setting, :assign_works, :commit_comment_setting, :sonar] before_action :find_task, only: [:edit, :update, :settings, :update_settings, :tasks_list, :show, :show_comment, :cross_comment_setting, :assign_works, :commit_comment_setting, :sonar] before_action :user_course_identity before_action :task_publish, only: [:show, :show_comment, :tasks_list, :settings] before_action :teacher_allowed, only: [:new, :create, :edit, :update, :set_public,:multi_destroy, :publish_task, :end_task, :update_settings, :add_to_bank, :cross_comment_setting, :assign_works, :commit_comment_setting] before_action :require_id_params, only: [:set_public ,:multi_destroy, :publish_task, :end_task, :add_to_bank] before_action :valid_params, only: [:update_settings] before_action :allow_cross_comment, only: [:cross_comment_setting, :assign_works, :commit_comment_setting] include ExportHelper def index search = "#{params[:search].to_s.strip.downcase}" order = params[:order] page = params[:page] ? params[:page].to_i : 1 default_order = "IF(ISNULL(graduation_tasks.publish_time),0,1), graduation_tasks.publish_time DESC, graduation_tasks.created_at DESC" @identity = current_user.course_identity(@course) if @identity < Course::STUDENT @tasks = @course.graduation_tasks.where("graduation_tasks.name like ?", "%#{search}%") else @tasks = @course.graduation_tasks.where("graduation_tasks.name like ? and publish_time <= '#{Time.now}'", "%#{search}%") end if order.present? && order != "all" if @course.is_end @tasks = @tasks.none elsif order.to_i == 4 # 补交 @tasks = @tasks.where("status > 1 and allow_late = 1 and (late_time is null or late_time > '#{Time.now}')") else @tasks = @tasks.where(status: order) end end @member = @course.course_members.find_by(user_id: current_user.id, is_active: 1) @all_count = @course.graduation_tasks.size @published_count = @course.graduation_tasks.where("publish_time <= '#{Time.now}'").size @task_count = @tasks.size @tasks = @tasks.reorder("#{default_order}").page(page).per(15).includes(:graduation_works) end # 任务问答 def show @attachments = @task.attachments @current_user = current_user end # 毕设任务列表 def tasks_list # 搜索栏数据 @current_user = current_user # 分页参数 page = params[:page] || 1 limit = params[:limit] || 20 @work = @task.graduation_works.where(user_id: current_user.id) @students = @course.students @assign_power = @user_course_identity < Course::STUDENT && @task.cross_comment && @task.comment_status == 2 #end_time @task.allow_late ? @task.late_time : @task.end_time # 任务发布的情况下: 是老师身份或者任务已截止的情况下公开任务了作品设置的学生也能查看其他人的作品 if @task.published? && (@user_course_identity < Course::STUDENT || (@user_course_identity == Course::STUDENT && @work.present? && @work.take.work_status > 0 && ((!@task.allow_late && @task.status > 1) || (@task.allow_late && @task.late_time && @task.late_time < Time.now)) && (@task.open_work || @task.open_score))) _tasks_list # 排序 rorder = params[:order].blank? ? "update_time" : params[:order] b_order = params[:b_order].blank? ? "desc" : params[:b_order] if rorder == "update_time" || rorder == "work_score" @work_list = @work_list.order("graduation_works.#{rorder} #{b_order}") elsif rorder == "student_id" @work_list = @work_list.joins(user: :user_extension).order("user_extensions.#{rorder} #{b_order}") end @view_work = @task.open_work || @user_course_identity < Course::STUDENT @work_count = @work_list.count @work_excel = @work_list @work_list = @work_list.page(page).per(limit) if params[:format] == "xlsx" complete_works = @work_excel.where("work_status > 0").size if @user_course_identity >= Course::STUDENT tip_exception(403, "无权限操作") elsif complete_works == 0 normal_status(-1,"暂无用户提交") elsif params[:export].present? && params[:export] normal_status(0,"正在下载中") else respond_to do |format| format.xlsx{ set_export_cookies graduation_work_to_xlsx(@work_excel,@task,current_user) task_export_name_ = "#{current_user.real_name}_#{@course.name}_#{@task.name}_#{Time.now.strftime('%Y%m%d_%H%M%S')}" render xlsx: "#{task_export_name_.strip}",template: "graduation_tasks/tasks_list.xlsx.axlsx",locals: {table_columns:@head_cells_column, task_users:@task_cells_column} } end end elsif params[:format] == "zip" if @user_course_identity >= Course::STUDENT tip_exception(403, "无权限操作") else zip_works = @work_excel.where("work_status > 0") status = checkfileSize(zip_works) if status == 0 if params[:export].present? && params[:export] normal_status(0,"正在下载中") else respond_to do |format| format.zip{ set_export_cookies zipfile = zip_homework_common @task, zip_works file = decode64(zipfile[0][:base64file]) send_file "#{OUTPUT_FOLDER}/#{file}", filename: filename_for_content_disposition(file), type: 'application/zip' } end end else normal_status(status,status == -2 ? "500M" : "无附件可下载") end end end else @work_list = !@task.published? ? [] : @work @view_work = false @work_count = @work_list.count @all_work_count = @work_list.count if params[:format] == "xlsx" || params[:format] == "zip" normal_status(-1,"毕设任务未发布") end end end # 评论列表接口、 包含一级和二级评论的获取 def show_comment @page = params[:page] || 1 @limit = params[:limit] || 10 @parent = params[:parent_id] @current_user = current_user @messages = @task.journals_for_messages @messages_count = @messages.count if @parent @messages = @messages.where(m_parent_id: @parent).order("created_on asc") else @messages = @messages.parent_comment.order("created_on desc") end @messages = @messages.page(@page).per(@limit) end def create ActiveRecord::Base.transaction do begin @graduation_task = GraduationTask.new(graduation_task_params) @graduation_task.course_id = @course.id @graduation_task.user_id = current_user.id @graduation_task.base_on_project = @graduation_task.task_type == 2 ? 1 : 0 if @graduation_task.save! # 为学生创建作品 @graduation_task.create_work_list Attachment.associate_container(params[:attachment_ids], @graduation_task.id, @graduation_task.class) if params[:attachment_ids] end rescue Exception => e uid_logger(e.message) tip_exception(e.message) raise ActiveRecord::Rollback end end end def new left_banner_content = @course.course_modules.search_by_module_type("graduation") if left_banner_content.present? banner = left_banner_content.first.course_second_categories.last @left_banner_id = banner.id @left_banner_name = banner.name else normal_status(-1,"左侧导航不存在!") end end def edit left_banner_content = @course.course_modules.search_by_module_type("graduation") if left_banner_content.present? banner = left_banner_content.first.course_second_categories.last @left_banner_id = banner.id @left_banner_name = banner.name end end def update ActiveRecord::Base.transaction do begin @task.update_attributes(graduation_task_params) Attachment.associate_container(params[:attachment_ids], @task.id, @task.class) if params[:attachment_ids] normal_status(0, "更新成功") rescue Exception => e uid_logger(e.message) tip_exception(e.message) raise ActiveRecord::Rollback end end end # 代码检测 def sonar tip_exception(403, "无权限访问") unless current_user.admin_or_business? _tasks_list @work_list = @work_list.where("work_status > 0") person_list = @work_list.map do |work| o = { name: "#{work.user&.real_name}", uid: "#{work.user&.student_id}", downloadUrl: '' } attachment = work.attachments.last if attachment o[:downloadUrl] = "#{edu_setting('host_name')}"+download_url(attachment) end o end filename = "#{@task.name}_#{Time.now.strftime('%Y%m%d%H%M%S')}.json" json = File.open("/tmp/#{filename}", "w+") json.puts(person_list.to_json) json.close send_file json.path, filename: filename end # 设为公开 def set_public tip_exception("仅公开课堂才能公开毕设任务") if @course.is_public == 0 tasks = @course.graduation_tasks.where(id: params[:task_ids]) tasks.update_all(is_public: 1) normal_status(0, "更新成功") end # 删除多个任务 def multi_destroy ActiveRecord::Base.transaction do begin tasks = @course.graduation_tasks.where(id: params[:task_ids]) tasks.destroy_all # 这些写是因为model中的关联删除无法删除is_delete=0的作品 GraduationWork.where(graduation_work_id: tasks.pluck(:id)).destroy_all normal_status(0, "删除成功") rescue Exception => e uid_logger(e.message) tip_exception(e.message) raise ActiveRecord::Rollback end end end # 加入题库 def add_to_bank ActiveRecord::Base.transaction do begin tasks = @course.graduation_tasks.where(id: params[:task_ids]) tasks.each do |task| task_bank = current_user.gtask_banks.find_by(graduation_task_id: task.id) # 已加入的更新,未加入的新建 if task_bank.present? task_bank.update_attributes(name: task.name, description: task.description, course_list_id: @course.course_list_id, min_num: task.min_num, max_num: task.max_num, base_on_project: task.base_on_project) task_bank.attachments.destroy_all else task_bank = GtaskBank.new(name: task.name, description: task.description, user_id: current_user.id, task_type: task.task_type, quotes: 1, graduation_task_id: task.id, min_num: task.min_num, max_num: task.max_num, base_on_project: task.base_on_project, course_list_id: @course.course_list_id) task_bank.save! task.update_attributes!(gtask_bank_id: task_bank.id) end task.attachments.each do |attachment| att = attachment.copy att.author_id = task_bank.user_id att.copy_from = attachment.id task_bank.attachments << att end end normal_status(0,"加入题库成功") rescue Exception => e uid_logger(e.message) tip_exception(e.message) raise ActiveRecord::Rollback end end end def publish_task tip_exception("缺少截止时间参数") if params[:end_time].blank? tip_exception("截止时间必须晚于当前时间") if params[:end_time] <= strf_time(Time.now) tip_exception("截止时间不能晚于课堂结束时间(#{@course.end_date.end_of_day.strftime("%Y-%m-%d %H:%M")})") if @course.end_date.present? && params[:end_time] > strf_time(@course.end_date.end_of_day) # ActiveRecord::Base.transaction do begin tasks = @course.graduation_tasks.where(id: params[:task_ids], status: 0). where("publish_time is null or publish_time > '#{Time.now}'") tasks.each do |task| task.publish_time = Time.now task.status = 1 task.end_time = params[:end_time] # 补交结束时间 task.late_time = Time.at(task.end_time.to_i + 30*24*3600) if task.allow_late && task.late_time.nil? task.save! GraduationTaskPublishNotifyJob.perform_later(task.id) task.act_as_course_activity end normal_status(0, "发布成功") rescue Exception => e uid_logger(e.message) tip_exception(e.message) raise ActiveRecord::Rollback end # end end def end_task ActiveRecord::Base.transaction do begin tasks = @course.graduation_tasks.where(id: params[:task_ids], status: 1) tasks.each do |task| task.end_time = Time.now task.status = 2 task.save! end normal_status(0, "更新成功") rescue Exception => e uid_logger(e.message) tip_exception(e.message) raise ActiveRecord::Rollback end end end def settings @current_user = current_user end def update_settings ActiveRecord::Base.transaction do begin unless @course.is_end # 分组设置 已有提交作品或关联项目的,则“基于项目实施”不能修改, 已有提交作品的人数限制的范围只能扩大,不能缩小 if @task.task_type == 2 @task.min_num = @task.student_commit_works ? (params[:min_num].to_i > @task.min_num ? @task.min_num : params[:min_num]) : params[:min_num] @task.max_num = @task.student_commit_works ? (params[:max_num].to_i < @task.max_num ? @task.max_num : params[:max_num]) : params[:max_num] unless @task.student_relate_projects tip_exception("base_on_project参数不能为空") if params[:base_on_project].blank? @task.base_on_project = params[:base_on_project].to_i end end # 发布设置 if @task.status == 0 tip_exception("发布时间不能为空") if params[:publish_time].blank? tip_exception("截止时间不能为空") if params[:end_time].blank? tip_exception("发布时间不能早于当前时间") if params[:publish_time].to_time <= Time.now tip_exception("截止时间不能早于当前时间") if params[:end_time].to_time <= Time.now tip_exception("截止时间必须晚于发布时间") if params[:publish_time].to_time >= params[:end_time].to_time tip_exception("截止时间不能晚于课堂结束时间(#{@course.end_date.end_of_day.strftime("%Y-%m-%d %H:%M")})") if @course.end_date.present? && params[:end_time].to_time > @course.end_date.end_of_day @task.publish_time = params[:publish_time] @task.end_time = params[:end_time] if @task.publish_time <= Time.now @task.status = 1 send_tiding = true end elsif @task.status < 2 tip_exception("截止时间不能为空") if params[:end_time].blank? tip_exception("截止时间不能早于当前时间") if params[:end_time] <= Time.now.strftime("%Y-%m-%d %H:%M:%S") tip_exception("截止时间不能晚于课堂结束时间(#{@course.end_date.end_of_day.strftime("%Y-%m-%d %H:%M")})") if @course.end_date.present? && params[:end_time] > strf_time(@course.end_date.end_of_day) @task.end_time = params[:end_time] end # 补交设置 # @task.allow_late = params[:allow_late] # @task.late_penalty = params[:allow_late].to_i == 1 ? params[:late_penalty] : 0 current_late_penalty = @task.late_penalty if params[:allow_late].to_i == 1 tip_exception("补交结束时间不能为空") if params[:late_time].blank? tip_exception("补交结束时间不能早于截止时间") if params[:late_time] <= @task.end_time tip_exception("补交结束时间不能晚于课堂结束时间(#{@course.end_date.end_of_day.strftime("%Y-%m-%d %H:%M")})") if @course.end_date.present? && params[:late_time] > strf_time(@course.end_date.end_of_day) tip_exception("迟交扣分应为正整数") if params[:late_penalty] && params[:late_penalty].to_i < 0 @task.allow_late = true @task.late_time = params[:late_time] @task.late_penalty = params[:late_penalty].to_i else @task.allow_late = false @task.late_penalty = 0 end # 迟交扣分有变动则更新迟交学生的成绩 if @task.late_penalty != current_late_penalty @task.graduation_works.where(work_status: 2).each do |work| work.late_penalty = @task.late_penalty work.save! end end # 评分设置 unless @task.cross_comment && @task.comment_time && @task.comment_time < Time.now @task.cross_comment = params[:cross_comment].to_i tip_exception("评阅时间不能为空") if @task.cross_comment && params[:comment_time].blank? tip_exception("评阅时间应当大于截止时间") if @task.cross_comment && params[:comment_time] <= @task.end_time @task.comment_time = @task.cross_comment ? params[:comment_time] : nil @task.comment_status = 2 if @task.cross_comment && @task.comment_status == 0 @task.graduation_work_comment_assignations.destroy_all if !@task.cross_comment # 去掉评阅设置 # @task.comment_num = @task.cross_comment ? params[:comment_num].to_i : 3 # @task.comment_status = @task.cross_comment ? params[:comment_status] : 0 # if @task.cross_comment && params[:comment_status].to_i == 4 # tip_exception("评阅数不能为空") if params[:comment_num].blank? # tip_exception("评阅数应大于0") if params[:comment_num].to_i < 1 # # @course.graduation_groups.each_with_index do |group, index| # ass_group = @task.graduation_task_group_assignations.find_by(graduation_group_id: group.id) # if ass_group.present? && params[:comment_group][index].present? && params[:comment_group][index] != "0" # ass_group.update_attributes(assign_graduation_group_id: params[:comment_group][index]) # else # @task.graduation_task_group_assignations << GraduationTaskGroupAssignation.new(graduation_group_id: group.id, # assign_graduation_group_id: params[:comment_group][index]) # end # end # end end # 公开设置 @task.open_work = params[:open_work] ? params[:open_work].to_i : 0 @task.open_score = params[:open_score] ? params[:open_score].to_i : 0 @task.save! if send_tiding GraduationTaskPublishNotifyJob.perform_later(@task.id) @task.act_as_course_activity end normal_status(0, "更新成功") else tip_exception("课堂已结束不能再更新") end rescue Exception => e uid_logger(e.message) tip_exception(e.message) raise ActiveRecord::Rollback end end end def cross_comment_setting @comment_status = params[:comment_status] || (@task.cross_comment ? @task.comment_status : 2) group_ids = @course.charge_group_ids(current_user) @course_groups = @course.course_groups.where(id: group_ids) # 如果传了分班id则取合集 group_ids = group_ids & params[:group_ids].map(&:to_i) unless params[:group_ids].blank? page = params[:page] ? params[:page].to_i : 1 limit = params[:limit] ? params[:limit].to_i : 10 # 取所有课堂的作品 if group_ids.sort == @course.course_groups.pluck(:id).sort @work_list = @task.graduation_works else @work_list = @task.graduation_works.joins("join course_members on graduation_works.user_id=course_members.user_id"). where(course_members: {course_group_id: group_ids}) end @user_count = @work_list.size @work_list = @work_list.page(page).per(limit).includes(user: [:user_extension]) @students = @course.students.where(user_id: @work_list.pluck(:user_id)) end def assign_works tip_exception("请先选择作品") if params[:work_ids].blank? tip_exception("请指定要分配的老师或答辩组") if params[:user_ids].blank? && params[:graduation_group_ids].blank? ActiveRecord::Base.transaction do begin works = @task.graduation_works.where(id: params[:work_ids]) # 手动分配:分配给老师 if !params[:user_ids].blank? @task.update_attributes(comment_status: 2) works.each do |work| # 之前分配的老师但现在未分配时需要删除 work.graduation_work_comment_assignations.where.not(user_id: params[:user_ids]).destroy_all @course.teachers.where(user_id: params[:user_ids]).pluck(:user_id).uniq.each do |user_id| unless work.graduation_work_comment_assignations.exists?(user_id: user_id) GraduationWorkCommentAssignation.create!(graduation_task_id: @task.id, graduation_work_id: work.id, user_id: user_id) end end end # 答辩组分配:分配答辩组 elsif !params[:graduation_group_ids].blank? @task.update_attributes(comment_status: 4) works.each do |work| work.graduation_task_group_assignations.where.not(graduation_group_id: params[:graduation_group_ids]).destroy_all @course.graduation_groups.where(id: params[:graduation_group_ids]).pluck(:id).uniq.each do |graduation_group_id| unless work.graduation_task_group_assignations.exists?(graduation_group_id: graduation_group_id) GraduationTaskGroupAssignation.create!(graduation_task_id: @task.id, graduation_work_id: work.id, graduation_group_id: graduation_group_id) end end end end normal_status("分配成功") rescue Exception => e uid_logger(e.message) tip_exception(e.message) raise ActiveRecord::Rollback end end end def commit_comment_setting tip_exception("type参数有误") if params[:type].blank? || !["commit", "cancel"].include?(params[:type]) ActiveRecord::Base.transaction do begin # 提交弹框 # if params[:type] == "commit" # tip_exception("comment_status参数有误") if params[:comment_status].blank? || ![2, 4].include?(params[:comment_status].to_i) # @task.update_attributes(comment_status: params[:comment_status]) # if params[:comment_status].to_i == 2 # @task.temporary_graduation_work_comment_assignations.update_all(temporary: 0) # 临时数据转正 # @task.delete_graduation_work_comment_assignations.destroy_all # 删除置了删除位的数据 # @task.graduation_task_group_assignations.destroy_all # 删除答辩组分配数据 # else # @task.temporary_graduation_task_group_assignations.update_all(temporary: 0) # @task.delete_graduation_task_group_assignations.destroy_all # @task.graduation_work_comment_assignations.destroy_all # # GraduationTaskCrossCommentJob.perform_later(@task.id) # end # else # # 取消时删除临时数据,恢复删除位数据 # @task.temporary_graduation_work_comment_assignations.destroy_all # 删除临时数据 # @task.delete_graduation_work_comment_assignations.update_all(temporary: 0) # 恢复置了删除位的数据 # # @task.temporary_graduation_task_group_assignations.destroy_all # 删除临时数据 # @task.delete_graduation_task_group_assignations.update_all(temporary: 0) # 恢复置了删除位的数据 # end normal_status("操作成功") rescue Exception => e uid_logger(e.message) tip_exception(e.message) raise ActiveRecord::Rollback end end end private def find_task begin @task = GraduationTask.find(params[:id]) @course = @task.course rescue Exception => e uid_logger(e.message) tip_exception("id不存在") end end # 未发布时非老师角色不能访问,发布后非课堂成员不能访问未公开的任务 def task_publish if (@user_course_identity >= Course::STUDENT && @task.status < 1) || (@user_course_identity > Course::STUDENT && (@course.is_public == 0 || !@task.is_public)) tip_exception(-1,"任务还未发布,无法查看") end end def graduation_task_params tip_exception("类型参数不能为空") if params[:task_type].blank? tip_exception("名称不能为空") if params[:name].blank? tip_exception("名称不能超过60个字符") if params[:name].length > 60 #6.11 -hs tip_exception("描述不能为空") if params[:description].blank? params.require(:graduation_task).permit(:task_type, :name, :description) end def require_id_params tip_exception("请至少选择一个毕设任务") if params[:task_ids].blank? tip_exception("批量设置不能超过15个") if params[:task_ids].length > 15 end def valid_params if @task.task_type == 2 tip_exception("最小人数不能为空") if params[:min_num].blank? tip_exception("最大人数不能为空") if params[:max_num].blank? tip_exception("最小人数不能少于1") if params[:min_num].to_i <= 0 tip_exception("最大人数不能小于最小人数要求") if params[:min_num].to_i > params[:max_num].to_i end end def allow_cross_comment tip_exception("请先开启交叉评阅再设置") unless @task.cross_comment end def _tasks_list # 如有有分班则看分班内的学生,否则看所有学生的作品 user_ids = if @user_course_identity < Course::STUDENT @course.teacher_group_user_ids(current_user.id) else course_group_id = @course.course_member(current_user.id).course_group_id @course.students.where(course_group_id: course_group_id).pluck(:user_id) end @work_list = @task.graduation_works.where(user_id: user_ids).includes(user: [:user_extension]) @all_work_count = @work_list.count @teachers = @course.teachers.where.not(user_id: current_user.id).includes(:user) # 教师评阅搜索 0: 未评, 1 已评 unless params[:teacher_comment].blank? graduation_work_ids = GraduationWorkScore.where(graduation_work_id: @work_list.map(&:id)).pluck(:graduation_work_id) if params[:teacher_comment].to_i == 0 @work_list = @work_list.where("work_status != 0") elsif params[:teacher_comment].to_i == 1 @work_list = @work_list.where("work_status != 0").where(id: graduation_work_ids) end end # 作品状态 0: 未提交, 1 按时提交, 2 延迟提交 unless params[:task_status].blank? @work_list = @work_list.where(work_status: params[:task_status]) end # 分班情况 unless params[:course_group].blank? group_user_ids = @course.students.where(course_group_id: params[:course_group]).pluck(:user_id) # 有分组只可能是老师身份查看列表 @work_list = @work_list.where(user_id: group_user_ids) end # 只看我的交叉评阅 unless params[:cross_comment].blank? graduation_work_id = @task.graduation_work_comment_assignations.where(:user_id =>current_user.id) .pluck(:graduation_work_id).uniq if @task.graduation_work_comment_assignations @work_list = @task.graduation_works.where(id: graduation_work_id) end # 组员、组长作品的筛选 if @task.task_type == 2 && !params[:member_work].blank? if params[:member_work].to_i == 1 @work_list = @work_list.where("user_id = commit_user_id") elsif params[:member_work].to_i == 0 @work_list = @work_list.where("user_id != commit_user_id") end end # 输入姓名和学号搜索 # TODO user_extension 如果修改 请调整 unless params[:search].blank? @work_list = @work_list.joins(user: :user_extension).where("concat(lastname, firstname) like ? or student_id like ?", "%#{params[:search]}%", "%#{params[:search]}%") end end # # def graduation_work_to_xls items # xls_report = StringIO.new # book = Spreadsheet::Workbook.new # sheet1 = book.create_worksheet :name => "学生成绩" # blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10 # sheet1.row(0).default_format = blue # course = @task.course # count_row = 1 # list = 0 # if @task.task_type == 1 # if @task.cross_comment # sheet1.row(0).concat(["学生id","真实姓名", "登录名", "学号", "电子邮箱", "分班", "作品描述", "教师评分","交叉评分", "迟交扣分", # "成绩", "更新时间"]) # else # sheet1.row(0).concat(["学生id", "真实姓名", "登录名", "学号", "电子邮箱", "分班", "作品描述", "教师评分", "迟交扣分", # "成绩", "更新时间"]) # end # items.each do |work| # sheet1[count_row,list] = work.user.id # sheet1[count_row,list+=1] = work.user.full_name # sheet1[count_row,list+=1] = work.user.login # sheet1[count_row,list+=1] = work.user.student_id # sheet1[count_row,list+=1] = work.user.mail # sheet1[count_row,list+=1] = work.class_grouping_name # sheet1[count_row,list+=1] = strip_html work.description if work.description # sheet1[count_row,list+=1] = work.teacher_score.nil? ? "未评分" : work.teacher_score.round(1) # if @task.cross_comment # sheet1[count_row,list+=1] = work.cross_score.nil? ? "未评分" : work.cross_score.round(1) # end # sheet1[count_row,list+=1] = work.late_penalty # sheet1[count_row,list+=1] = work.respond_to?("work_score") ? work.work_score.nil? ? "未评分" : work.work_score.round(1) : "未评分" # sheet1[count_row,list+=1] = format_time(work.update_time) # count_row += 1 # list = 0 # end # elsif @task.task_type == 2 # if @task.cross_comment # sheet1.row(0).concat(["分组", "组员","分班", "作品描述", "教师评分","交叉评分","迟交扣分", "成绩", "更新时间"]) # else # sheet1.row(0).concat(["分组", "组员","分班", "作品描述", "教师评分", "迟交扣分", "成绩", "更新时间"]) # end # items.each do |work| # sheet1[count_row,list] = work.group_id # sheet1[count_row,list+=1] = work.user.full_name # sheet1[count_row,list+=1] = work.class_grouping_name # sheet1[count_row,list+=1] = strip_html work.description if work.description # sheet1[count_row,list+=1] = work.teacher_score.nil? ? "未评分" : work.teacher_score.round(1) # if @task.cross_comment # sheet1[count_row,list+=1] = work.cross_score.nil? ? "未评分" : work.cross_score.round(1) # end # sheet1[count_row,list+=1] = work.late_penalty # sheet1[count_row,list+=1] = work.respond_to?("work_score") ? work.work_score.nil? ? "未评分" : work.work_score.round(1) : "未评分" # sheet1[count_row,list+=1] = format_time(work.update_time) # count_row += 1 # list = 0 # end # end # book.write xls_report # xls_report.string # end end