From fc64faa030a9f87729513559760c5e5037125f68 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 28 Jun 2019 13:51:57 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/courses_controller.rb | 842 +++++++++++++------------- 1 file changed, 421 insertions(+), 421 deletions(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index c35b7911..a74e1fc8 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -1177,18 +1177,18 @@ class CoursesController < ApplicationController def export_course_member_excel q = params[:name] ? "#{params[:name].strip}" : "" filename="#{@course.teacher.show_real_name.to_s }_#{@course.name}_#{l(:excel_member_list)}" - # if params[:group_id] && params[:group_id] != "0" && params[:group_id] != "-1" - # group = CourseGroup.find params[:group_id] - # unless group.nil? - # @all_members = searchmember_by_name(student_homework_score(group.id,0,0,"desc"), q) - # filename="#{@course.teacher.show_real_name.to_s }_#{@course.name}_#{group.name}_#{l(:excel_member_list)}" - # end - # elsif params[:group_id] && params[:group_id] == "0" - # @all_members = searchmember_by_name(student_homework_score(-1, 0, 10,"desc"), q) - # filename="#{@course.teacher.show_real_name.to_s }_#{@course.name}_未分班_#{l(:excel_member_list)}" - # else - # @all_members = searchmember_by_name(student_homework_score(0, 0, 10,"desc"), q) - # end + if params[:group_id] && params[:group_id] != "0" && params[:group_id] != "-1" + group = CourseGroup.find params[:group_id] + unless group.nil? + @all_members = searchmember_by_name(student_homework_score(group.id,0,0,"desc"), q) + filename="#{@course.teacher.show_real_name.to_s }_#{@course.name}_#{group.name}_#{l(:excel_member_list)}" + end + elsif params[:group_id] && params[:group_id] == "0" + @all_members = searchmember_by_name(student_homework_score(-1, 0, 10,"desc"), q) + filename="#{@course.teacher.show_real_name.to_s }_#{@course.name}_未分班_#{l(:excel_member_list)}" + else + @all_members = searchmember_by_name(student_homework_score(0, 0, 10,"desc"), q) + end @homeworks = @course.homework_commons.where("publish_time <= '#{Time.now}'").order("publish_time asc, created_at asc") @exercises = @course.exercises.where("publish_time <= '#{Time.now}'").order("publish_time asc, created_at asc") @@ -2381,431 +2381,431 @@ class CoursesController < ApplicationController def member_to_xls homeworks, exercises, tasks, course, members, groups 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 - # #sheet1.row(0).concat([l(:excel_user_id),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_mail),l(:excel_class),l(:excel_f_score),l(:excel_commit_time)]) + sheet1 = book.create_worksheet :name => "总成绩" + blue = Spreadsheet::Format.new :color => :blue, :weight => :bold, :size => 10 + #sheet1.row(0).default_format = blue + #sheet1.row(0).concat([l(:excel_user_id),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_mail),l(:excel_class),l(:excel_f_score),l(:excel_commit_time)]) teacher_co = (searchTeacherAndAssistant course).map{|member| member.user.show_real_name}.join('、') - # sheet1[0,0] = "课程编号" - # sheet1[0,1] = course.id - # sheet1[1,0] = "课程名称" - # sheet1[1,1] = course.name - # sheet1[2,0] = "教师团队" - # sheet1[2,1] = teacher_co - # sheet1[3,0] = "主讲教师" - # sheet1[3,1] = course.teacher.show_real_name - # sheet1[4,0] = "排名" - # sheet1[4,1] = "学生姓名" - # sheet1[4,2] = "昵称" - # sheet1[4,3] = "邮箱" - # sheet1[4,4] = "学号" - # sheet1[4,5] = "分班" - # current_col = 5 - # homeworks.where(:homework_type => 4).each do |homework| - # sheet1[4,current_col+=1] = "#{homework.name}" - # end - # for i in 0 ... homeworks.where(:homework_type => 1).size - # sheet1[4,current_col+=1] = "普通作业第"+(i+1).to_s+"次" - # end - # for i in 0 ... homeworks.where(:homework_type => 3).size - # sheet1[4,current_col+=1] = "分组作业第"+(i+1).to_s+"次" - # end - # for i in 0 ... exercises.size - # sheet1[4,current_col+=1] = "试卷第"+(i+1).to_s+"次" - # end - # for i in 0 ... tasks.size - # sheet1[4,current_col+=1] = "毕设任务第"+(i+1).to_s+"次" - # end - # - # sheet1[4,current_col+=1] = "实训作业总得分" - # sheet1[4,current_col+=1] = "普通作业总得分" - # sheet1[4,current_col+=1] = "分组作业总得分" - # sheet1[4,current_col+=1] = "试卷总得分" - # if tasks.count > 0 - # sheet1[4,current_col+=1] = "毕设任务总得分" - # end - # #sheet1[6,homeworks.count+6] = "社区得分" - # sheet1[4,current_col+=1] = "总得分" - # count_row = 5 - # members.each_with_index do |member, i| - # column = 0 - # sheet1[count_row,column]= i+1 - # sheet1[count_row,column+=1] = member.user.show_real_name - # sheet1[count_row,column+=1] = member.user.login - # sheet1[count_row,column+=1] = member.user.mail - # sheet1[count_row,column+=1] = member.user.user_extensions.student_id - # sheet1[count_row,column+=1] = member.course_group_id == 0 ? "暂无" : member.course_group.name - # # current_col = 5 - # shixun_score = 0 - # homeworks.where(:homework_type => 4).includes(:score_student_works).each do |homework| - # student_works = homework.score_student_works.select{|work| work.user_id == member.user.id} - # if student_works.empty? - # sheet1[count_row,column+=1] = 0 - # else - # work_score = student_works.first.work_score.nil? ? 0 : student_works.first.work_score - # sheet1[count_row,column+=1] = work_score < 0 ? 0 : work_score.round(1) - # shixun_score += work_score < 0 ? 0 : work_score.round(1) - # end - # # current_col += 1 - # end - # common_score = 0 - # homeworks.where(:homework_type => 1).includes(:score_student_works).each do |homework| - # student_works = homework.score_student_works.select{|work| work.user_id == member.user.id} - # if student_works.empty? - # sheet1[count_row,column+=1] = 0 - # else - # work_score = student_works.first.work_score.nil? ? 0 : student_works.first.work_score - # sheet1[count_row,column+=1] = work_score < 0 ? 0 : work_score.round(1) - # common_score += work_score < 0 ? 0 : work_score.round(1) - # end - # # current_col += 1 - # end - # group_score = 0 - # homeworks.where(:homework_type => 3).includes(:score_student_works).each do |homework| - # student_works = homework.score_student_works.select{|work| work.user_id == member.user.id} - # if student_works.empty? - # sheet1[count_row,column+=1] = 0 - # else - # work_score = student_works.first.work_score.nil? ? 0 : student_works.first.work_score - # sheet1[count_row,column+=1] = work_score < 0 ? 0 : work_score.round(1) - # group_score += work_score < 0 ? 0 : work_score.round(1) - # end - # # current_col += 1 - # end - # exercise_score = 0 - # exercises.includes(:score_exercise_users).each do |exercise| - # exercise_user = exercise.score_exercise_users.select{|work| work.user_id == member.user.id} - # if exercise_user.empty? - # sheet1[count_row,column+=1] = 0 - # else - # work_score = exercise_user.first.score.nil? ? 0 : exercise_user.first.score - # sheet1[count_row,column+=1] = work_score < 0 ? 0 : work_score.round(1) - # exercise_score += work_score < 0 ? 0 : work_score.round(1) - # end - # # current_col += 1 - # end - # - # graduation_score = 0 - # tasks.includes(:graduation_works).each do |task| - # graduation_works = task.graduation_works.where("user_id = #{member.user.id}") - # if graduation_works.empty? - # sheet1[count_row,column+=1] = 0 - # else - # work_score = graduation_works.first.work_score.nil? ? 0 : graduation_works.first.work_score - # sheet1[count_row,column+=1] = work_score < 0 ? 0 : work_score.round(1) - # graduation_score += work_score < 0 ? 0 : work_score.round(1) - # end - # # current_col += 1 - # end - # - # sum = shixun_score + common_score + group_score + exercise_score + graduation_score - # sheet1[count_row,column+=1] = shixun_score - # sheet1[count_row,column+=1] = common_score - # sheet1[count_row,column+=1] = group_score - # sheet1[count_row,column+=1] = exercise_score - # if tasks.count > 0 - # sheet1[count_row,column+=1] = graduation_score - # end - # sheet1[count_row,column+=1] = sum.round(1) - # count_row += 1 - # end - # - # if course.course_groups.count > 0 - # sheet = book.create_worksheet :name => "分班信息" - # sheet.row(0).concat(["课程编号", course.id]) - # sheet.row(1).concat(["课程名称", course.name]) - # sheet.row(2).concat(["教师团队", teacher_co]) - # sheet.row(3).concat(["主讲教师", course.teacher.show_real_name]) - # sheet.row(4).concat(["序号", "分班名称", "邀请码", "学生数量"]) - # current_row = 5 - # course.course_groups.includes(:members).each do |course_group| - # sheet[current_row,0]= current_row - 4 - # sheet[current_row,1]= course_group.name - # sheet[current_row,2]= course_group.invite_code - # sheet[current_row,3]= course_group.members.size - # current_row += 1 - # end - # end - # - # sheet2 = book.create_worksheet :name => "活跃度" - # sheet2[0,0] = "课程编号" - # sheet2[0,1] = course.id - # sheet2[1,0] = "课程名称" - # sheet2[1,1] = course.name - # sheet2[2,0] = "教师团队" - # sheet2[2,1] = teacher_co - # sheet2[3,0] = "主讲教师" - # sheet2[3,1] = course.teacher.show_real_name - # sheet2.row(4).concat(["排名","学生姓名","昵称","学号","分班","作业完成数(*10)","试卷完成数(*10)","问卷完成数(*7)","资源发布数(*5)","帖子发布数(*2)","帖子回复数(*1)","作业回复数(*1)","活跃度"]) - # act_members = members - # act_members.each do |member| - # member[:act_score] = ((member.homework_num.to_i + member.graduation_num.to_i) * 10) + (member.exercise_num.to_i * 10) + (member.poll_num.to_i * 7) + (member.resource_num.to_i * 5) + (member.message_num.to_i * 2) + member.message_reply_num.to_i + member.homework_journal_num.to_i - # end - # act_members = act_members.sort do |a, b| - # [b[:act_score]] <=> [a[:act_score]] - # end - # count_row = 5 - # act_members.each_with_index do |act_member, index| - # sheet2[count_row,0]= index + 1 - # sheet2[count_row,1] = act_member.user.show_real_name - # sheet2[count_row,2] = act_member.user.login - # sheet2[count_row,3] = act_member.user.user_extensions.student_id - # sheet2[count_row,4] = act_member.course_group_id == 0 ? "暂无" : act_member.course_group.name - # sheet2[count_row,5]= act_member.homework_num.to_i + act_member.graduation_num.to_i - # sheet2[count_row,6]= act_member.exercise_num - # sheet2[count_row,7]= act_member.poll_num - # sheet2[count_row,8]= act_member.resource_num - # sheet2[count_row,9]= act_member.message_num - # sheet2[count_row,10]= act_member.message_reply_num - # sheet2[count_row,11]= act_member.homework_journal_num - # sheet2[count_row,12]= act_member.act_score - # count_row += 1 - # end - - homeworks.where(:homework_type => 4).includes(:score_student_works).each_with_index do |home, i| - sheet = book.create_worksheet :name => "#{home.name}" - sheet[0,0] = "课程编号" - sheet[0,1] = course.id - sheet[1,0] = "课程名称" - sheet[1,1] = course.name - sheet[2,0] = "教师团队" - sheet[2,1] = teacher_co - sheet[3,0] = "主讲教师" - sheet[3,1] = course.teacher.show_real_name - sheet[3,0] = "作业批次" - sheet[3,1] = "第#{i+1}次" - sheet[3,0] = "作业名称" - sheet[3,1] = home.name - sheet.row(4).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),"分班",l(:excel_homework_des),l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)]) - count_row = 5 - items = home.score_student_works - # if items.count == 0 && home.publish_time < Time.now && !course.is_end - # update_shixun_work_status home - # items = StudentWork.where("work_status != 0 and homework_common_id = #{home.id}").order("work_score desc") - # end - items.each_with_index do |stu, j| - sheet[count_row,0]= j + 1 - sheet[count_row,1] = stu.user.show_real_name - sheet[count_row,2] = stu.user.login - sheet[count_row,3] = stu.user.user_extensions.student_id - sheet[count_row,4] = member_group_name course.members, stu.user_id - sheet[count_row,5] = strip_html stu.description - sheet[count_row,6] = stu.late_penalty - sheet[count_row,7] = stu.work_score.nil? ? l(:label_without_score) : stu.work_score.round(1) - sheet[count_row,8] = format_time(stu.commit_time) - count_row += 1 - end - end - - homeworks.where(:homework_type => 1).each_with_index do |home, i| - sheet = book.create_worksheet :name => "普通作业第#{i+1}次" - sheet[0,0] = "课程编号" - sheet[0,1] = course.id - sheet[1,0] = "课程名称" - sheet[1,1] = course.name - sheet[2,0] = "教师团队" - sheet[2,1] = teacher_co - sheet[3,0] = "主讲教师" - sheet[3,1] = course.teacher.show_real_name - sheet[3,0] = "作业批次" - sheet[3,1] = "第#{i+1}次" - sheet[3,0] = "作业名称" - sheet[3,1] = home.name - if home.anonymous_comment ==0 - sheet.row(4).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_homework_des), - l(:excel_t_score),l(:excel_ta_score), l(:excel_n_score),l(:excel_a_penalty),l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)]) - else - sheet.row(4).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_homework_des), - l(:excel_t_score),l(:excel_ta_score),l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)]) - end - count_row = 5 - items = home.score_student_works - items.each_with_index do |stu, j| - sheet[count_row,0]= j + 1 - sheet[count_row,1] = stu.user.show_real_name - sheet[count_row,2] = stu.user.login - sheet[count_row,3] = stu.user.user_extensions.student_id - sheet[count_row,4] = strip_html stu.description - sheet[count_row,5] = stu.teacher_score.nil? ? l(:label_without_score) : stu.teacher_score.round(1) - sheet[count_row,6] = stu.teaching_asistant_score.nil? ? l(:label_without_score) : stu.teaching_asistant_score.round(1) - if home.anonymous_comment ==0 - sheet[count_row,7] = stu.student_score.nil? ? l(:label_without_score) : stu.student_score.round(1) - sheet[count_row,8] = (home.teacher_priority == 1 && !stu.teacher_score.nil?) ? 0 : stu.absence_penalty - sheet[count_row,9] = (home.teacher_priority == 1 && !stu.teacher_score.nil?) ? 0 : stu.late_penalty - sheet[count_row,10] = stu.work_score.nil? ? l(:label_without_score) : stu.work_score.round(1) - sheet[count_row,11] = format_time(stu.commit_time) + sheet1[0,0] = "课程编号" + sheet1[0,1] = course.id + sheet1[1,0] = "课程名称" + sheet1[1,1] = course.name + sheet1[2,0] = "教师团队" + sheet1[2,1] = teacher_co + sheet1[3,0] = "主讲教师" + sheet1[3,1] = course.teacher.show_real_name + sheet1[4,0] = "排名" + sheet1[4,1] = "学生姓名" + sheet1[4,2] = "昵称" + sheet1[4,3] = "邮箱" + sheet1[4,4] = "学号" + sheet1[4,5] = "分班" + current_col = 5 + homeworks.where(:homework_type => 4).each do |homework| + sheet1[4,current_col+=1] = "#{homework.name}" + end + for i in 0 ... homeworks.where(:homework_type => 1).size + sheet1[4,current_col+=1] = "普通作业第"+(i+1).to_s+"次" + end + for i in 0 ... homeworks.where(:homework_type => 3).size + sheet1[4,current_col+=1] = "分组作业第"+(i+1).to_s+"次" + end + for i in 0 ... exercises.size + sheet1[4,current_col+=1] = "试卷第"+(i+1).to_s+"次" + end + for i in 0 ... tasks.size + sheet1[4,current_col+=1] = "毕设任务第"+(i+1).to_s+"次" + end + + sheet1[4,current_col+=1] = "实训作业总得分" + sheet1[4,current_col+=1] = "普通作业总得分" + sheet1[4,current_col+=1] = "分组作业总得分" + sheet1[4,current_col+=1] = "试卷总得分" + if tasks.count > 0 + sheet1[4,current_col+=1] = "毕设任务总得分" + end + #sheet1[6,homeworks.count+6] = "社区得分" + sheet1[4,current_col+=1] = "总得分" + count_row = 5 + members.each_with_index do |member, i| + column = 0 + sheet1[count_row,column]= i+1 + sheet1[count_row,column+=1] = member.user.show_real_name + sheet1[count_row,column+=1] = member.user.login + sheet1[count_row,column+=1] = member.user.mail + sheet1[count_row,column+=1] = member.user.user_extensions.student_id + sheet1[count_row,column+=1] = member.course_group_id == 0 ? "暂无" : member.course_group.name + # current_col = 5 + shixun_score = 0 + homeworks.where(:homework_type => 4).each do |homework| + student_works = homework.score_student_works.find_by_user_id(member.user.id) + if student_works.nil? + sheet1[count_row,column+=1] = 0 else - sheet[count_row,7] = (home.teacher_priority == 1 && !stu.teacher_score.nil?) ? 0 : stu.late_penalty - sheet[count_row,8] = stu.work_score.nil? ? l(:label_without_score) : stu.work_score.round(1) - sheet[count_row,9] = format_time(stu.commit_time) + work_score = student_works.work_score.nil? ? 0 : student_works.work_score + sheet1[count_row,column+=1] = work_score < 0 ? 0 : work_score.round(1) + shixun_score += work_score < 0 ? 0 : work_score.round(1) end - count_row += 1 - end - - end - - homeworks.where(:homework_type => 3).each_with_index do |home, i| - sheet = book.create_worksheet :name => "分组作业第#{i+1}次" - sheet[0,0] = "课程编号" - sheet[0,1] = course.id - sheet[1,0] = "课程名称" - sheet[1,1] = course.name - sheet[2,0] = "教师团队" - sheet[2,1] = teacher_co - sheet[3,0] = "主讲教师" - sheet[3,1] = course.teacher.show_real_name - sheet[3,0] = "作业批次" - sheet[3,1] = "第#{i+1}次" - sheet[3,0] = "作业名称" - sheet[3,1] = home.name - - if home.anonymous_comment ==0 - sheet.row(4).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_group_member),l(:excel_homework_des), - l(:excel_t_score),l(:excel_ta_score),l(:excel_n_score),l(:excel_a_penalty),l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)]) - else - sheet.row(4).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_group_member),l(:excel_homework_des), - l(:excel_t_score),l(:excel_ta_score),l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)]) + # current_col += 1 end - count_row = 5 - items = home.score_student_works - items.each_with_index do |stu, j| - sheet[count_row,0] = j + 1 - sheet[count_row,1] = stu.user.show_real_name - sheet[count_row,2] = stu.user.login - sheet[count_row,3] = stu.user.user_extensions.student_id - sheet[count_row,4] = get_group_member_names home.student_works.where(:group_id => stu.group_id).pluck(:user_id) - sheet[count_row,5] = strip_html stu.description - sheet[count_row,6] = stu.teacher_score.nil? ? l(:label_without_score) : stu.teacher_score.round(1) - sheet[count_row,7] = stu.teaching_asistant_score.nil? ? l(:label_without_score) : stu.teaching_asistant_score.round(1) - if home.anonymous_comment ==0 - sheet[count_row,8] = stu.student_score.nil? ? l(:label_without_score) : stu.student_score.round(1) - sheet[count_row,9] = (home.teacher_priority == 1 && !stu.teacher_score.nil?) ? 0 : stu.absence_penalty - sheet[count_row,10] = (home.teacher_priority == 1 && !stu.teacher_score.nil?) ? 0 : stu.late_penalty - sheet[count_row,11] = stu.work_score.nil? ? l(:label_without_score) : stu.work_score.round(1) - sheet[count_row,12] = format_time(stu.commit_time) + common_score = 0 + homeworks.where(:homework_type => 1).each do |homework| + student_works = homework.score_student_works.find_by_user_id(member.user.id) + if student_works.nil? + sheet1[count_row,column+=1] = 0 else - sheet[count_row,8] = (home.teacher_priority == 1 && !stu.teacher_score.nil?) ? 0 : stu.late_penalty - sheet[count_row,9] = stu.work_score.nil? ? l(:label_without_score) : stu.work_score.round(1) - sheet[count_row,10] = format_time(stu.commit_time) + work_score = student_works.work_score.nil? ? 0 : student_works.work_score + sheet1[count_row,column+=1] = work_score < 0 ? 0 : work_score.round(1) + common_score += work_score < 0 ? 0 : work_score.round(1) end - count_row += 1 - end - end - - exercises.each_with_index do |exercise, i| - sheet = book.create_worksheet :name => "试卷第#{i+1}次" - sheet[0,0] = "课程编号" - sheet[0,1] = course.id - sheet[1,0] = "课程名称" - sheet[1,1] = course.name - sheet[3,0] = "教师团队" - sheet[3,1] = teacher_co - sheet[3,0] = "主讲教师" - sheet[3,1] = course.teacher.show_real_name - sheet[3,0] = "试卷批次" - sheet[3,1] = "第#{i+1}次" - sheet[3,0] = "试卷名称" - sheet[3,1] = exercise.exercise_name - - sheet.row(4).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_objective_score),l(:excel_subjective_score),l(:excel_f_score),l(:excel_answer_time)]) - count_row = 5 - items = exercise.score_exercise_users - items.each_with_index do |stu, j| - sheet[count_row,0] = j + 1 - sheet[count_row,1] = stu.user.show_real_name - sheet[count_row,2] = stu.user.login - sheet[count_row,3] = stu.user.user_extensions.student_id - sheet[count_row,4] = stu.objective_score == -1 ? "0.0" : format("%.1f",stu.objective_score) - sheet[count_row,5] = stu.subjective_score == -1 ? "0.0" : format("%.1f",stu.subjective_score) - sheet[count_row,6] = stu.score.nil? ? '--' : stu.score.round(1) - sheet[count_row,7] = stu.commit_status == 0 ? l(:excel_no_answer) : format_time(stu.start_at) - count_row += 1 + # current_col += 1 end - end - - tasks.each_with_index do |task, i| - sheet = book.create_worksheet :name => "毕设任务第#{i+1}次" - sheet[0,0] = "课程编号" - sheet[0,1] = course.id - sheet[1,0] = "课程名称" - sheet[1,1] = course.name - sheet[2,0] = "教师团队" - sheet[2,1] = teacher_co - sheet[3,0] = "主讲教师" - sheet[3,1] = course.teacher.show_real_name - sheet[3,0] = "作业批次" - sheet[3,1] = "第#{i+1}次" - sheet[3,0] = "作业名称" - sheet[3,1] = task.name - sheet.row(4).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id)]) - if task.task_type == 2 - sheet.row(4).concat([l(:excel_group_member)]) - end - sheet.row(4).concat([l(:excel_homework_des), l(:excel_t_score)]) - if task.cross_comment - sheet.row(4).concat(["交叉评分"]) - end - sheet.row(4).concat([l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)]) - count_row = 5 - items = task.graduation_works.where("work_status != 0").order("work_score desc") - items.each_with_index do |stu, j| - column = 0 - sheet[count_row,column]= j + 1 - sheet[count_row,column+=1] = stu.user.show_real_name - sheet[count_row,column+=1] = stu.user.login - sheet[count_row,column+=1] = stu.user.user_extensions.student_id - if task.task_type == 2 - sheet[count_row,column+=1] = get_group_member_names task.graduation_works.where(:group_id => stu.group_id).pluck(:user_id) - end - sheet[count_row,column+=1] = strip_html stu.description - sheet[count_row,column+=1] = stu.teacher_score.nil? ? l(:label_without_score) : stu.teacher_score.round(1) - if task.cross_comment - sheet[count_row,column+=1] = stu.cross_score.nil? ? l(:label_without_score) : stu.cross_score.round(1) + group_score = 0 + homeworks.where(:homework_type => 3).each do |homework| + student_works = homework.score_student_works.find_by_user_id(member.user.id) + if student_works.nil? + sheet1[count_row,column+=1] = 0 + else + work_score = student_works.work_score.nil? ? 0 : student_works.work_score + sheet1[count_row,column+=1] = work_score < 0 ? 0 : work_score.round(1) + group_score += work_score < 0 ? 0 : work_score.round(1) end - sheet[count_row,column+=1] = stu.late_penalty - sheet[count_row,column+=1] = stu.work_score.nil? ? l(:label_without_score) : stu.work_score.round(1) - sheet[count_row,column+=1] = format_time(stu.commit_time) - count_row += 1 + # current_col += 1 end -=begin - if task.task_type == 1 - if task.cross_comment - sheet.row(4).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_homework_des), - l(:excel_t_score),"交叉评分",l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)]) + exercise_score = 0 + exercises.each do |exercise| + exercise_user = exercise.score_exercise_users.find_by_user_id(member.user.id) + if exercise_user.nil? + sheet1[count_row,column+=1] = 0 else - sheet.row(4).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_homework_des), - l(:excel_t_score),l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)]) + work_score = exercise_user.score.nil? ? 0 : exercise_user.score + sheet1[count_row,column+=1] = work_score < 0 ? 0 : work_score.round(1) + exercise_score += work_score < 0 ? 0 : work_score.round(1) end - else - if task.cross_comment - sheet.row(4).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_group_member),l(:excel_homework_des), - l(:excel_t_score),"交叉评分",l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)]) + # current_col += 1 + end + + graduation_score = 0 + tasks.each do |task| + graduation_works = task.graduation_works.where("user_id = #{member.user.id}") + if graduation_works.empty? + sheet1[count_row,column+=1] = 0 else - sheet.row(4).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_group_member),l(:excel_homework_des), - l(:excel_t_score),l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)]) - end - count_row = 5 - items = task.graduation_works.order("work_score desc") - items.each_with_index do |stu, j| - column = 0 - sheet[count_row,column]= j + 1 - sheet[count_row,column+1] = stu.user.show_name - sheet[count_row,column+1] = stu.user.login - sheet[count_row,column+1] = stu.user.user_extensions.student_id - sheet[count_row,column+1] = strip_html stu.description - sheet[count_row,column+1] = stu.teacher_score.nil? ? l(:label_without_score) : stu.teacher_score.round(2) - if task.cross_comment - sheet[count_row,column+1] = stu.cross_score.nil? ? l(:label_without_score) : stu.cross_score.round(2) - end - sheet[count_row,column+1] = stu.late_penalty - sheet[count_row,column+1] = stu.work_score.nil? ? l(:label_without_score) : stu.work_score.round(2) - sheet[count_row,column+1] = format_time(stu.commit_time) - count_row += 1 + work_score = graduation_works.first.work_score.nil? ? 0 : graduation_works.first.work_score + sheet1[count_row,column+=1] = work_score < 0 ? 0 : work_score.round(1) + graduation_score += work_score < 0 ? 0 : work_score.round(1) end + # current_col += 1 + end + + sum = shixun_score + common_score + group_score + exercise_score + graduation_score + sheet1[count_row,column+=1] = shixun_score + sheet1[count_row,column+=1] = common_score + sheet1[count_row,column+=1] = group_score + sheet1[count_row,column+=1] = exercise_score + if tasks.count > 0 + sheet1[count_row,column+=1] = graduation_score + end + sheet1[count_row,column+=1] = sum.round(1) + count_row += 1 + end + + if course.course_groups.count > 0 + sheet = book.create_worksheet :name => "分班信息" + sheet.row(0).concat(["课程编号", course.id]) + sheet.row(1).concat(["课程名称", course.name]) + sheet.row(2).concat(["教师团队", teacher_co]) + sheet.row(3).concat(["主讲教师", course.teacher.show_real_name]) + sheet.row(4).concat(["序号", "分班名称", "邀请码", "学生数量"]) + current_row = 5 + course.course_groups.includes(:members).each do |course_group| + sheet[current_row,0]= current_row - 4 + sheet[current_row,1]= course_group.name + sheet[current_row,2]= course_group.invite_code + sheet[current_row,3]= course_group.members.size + current_row += 1 end -=end end + sheet2 = book.create_worksheet :name => "活跃度" + sheet2[0,0] = "课程编号" + sheet2[0,1] = course.id + sheet2[1,0] = "课程名称" + sheet2[1,1] = course.name + sheet2[2,0] = "教师团队" + sheet2[2,1] = teacher_co + sheet2[3,0] = "主讲教师" + sheet2[3,1] = course.teacher.show_real_name + sheet2.row(4).concat(["排名","学生姓名","昵称","学号","分班","作业完成数(*10)","试卷完成数(*10)","问卷完成数(*7)","资源发布数(*5)","帖子发布数(*2)","帖子回复数(*1)","作业回复数(*1)","活跃度"]) + act_members = members + act_members.each do |member| + member[:act_score] = ((member.homework_num.to_i + member.graduation_num.to_i) * 10) + (member.exercise_num.to_i * 10) + (member.poll_num.to_i * 7) + (member.resource_num.to_i * 5) + (member.message_num.to_i * 2) + member.message_reply_num.to_i + member.homework_journal_num.to_i + end + act_members = act_members.sort do |a, b| + [b[:act_score]] <=> [a[:act_score]] + end + count_row = 5 + act_members.each_with_index do |act_member, index| + sheet2[count_row,0]= index + 1 + sheet2[count_row,1] = act_member.user.show_real_name + sheet2[count_row,2] = act_member.user.login + sheet2[count_row,3] = act_member.user.user_extensions.student_id + sheet2[count_row,4] = act_member.course_group_id == 0 ? "暂无" : act_member.course_group.name + sheet2[count_row,5]= act_member.homework_num.to_i + act_member.graduation_num.to_i + sheet2[count_row,6]= act_member.exercise_num + sheet2[count_row,7]= act_member.poll_num + sheet2[count_row,8]= act_member.resource_num + sheet2[count_row,9]= act_member.message_num + sheet2[count_row,10]= act_member.message_reply_num + sheet2[count_row,11]= act_member.homework_journal_num + sheet2[count_row,12]= act_member.act_score + count_row += 1 + end + +# homeworks.where(:homework_type => 4).includes(:score_student_works).each_with_index do |home, i| +# sheet = book.create_worksheet :name => "#{home.name}" +# sheet[0,0] = "课程编号" +# sheet[0,1] = course.id +# sheet[1,0] = "课程名称" +# sheet[1,1] = course.name +# sheet[2,0] = "教师团队" +# sheet[2,1] = teacher_co +# sheet[3,0] = "主讲教师" +# sheet[3,1] = course.teacher.show_real_name +# sheet[3,0] = "作业批次" +# sheet[3,1] = "第#{i+1}次" +# sheet[3,0] = "作业名称" +# sheet[3,1] = home.name +# sheet.row(4).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),"分班",l(:excel_homework_des),l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)]) +# count_row = 5 +# items = home.score_student_works +# # if items.count == 0 && home.publish_time < Time.now && !course.is_end +# # update_shixun_work_status home +# # items = StudentWork.where("work_status != 0 and homework_common_id = #{home.id}").order("work_score desc") +# # end +# items.each_with_index do |stu, j| +# sheet[count_row,0]= j + 1 +# sheet[count_row,1] = stu.user.show_real_name +# sheet[count_row,2] = stu.user.login +# sheet[count_row,3] = stu.user.user_extensions.student_id +# sheet[count_row,4] = member_group_name course.members, stu.user_id +# sheet[count_row,5] = strip_html stu.description +# sheet[count_row,6] = stu.late_penalty +# sheet[count_row,7] = stu.work_score.nil? ? l(:label_without_score) : stu.work_score.round(1) +# sheet[count_row,8] = format_time(stu.commit_time) +# count_row += 1 +# end +# end +# +# homeworks.where(:homework_type => 1).each_with_index do |home, i| +# sheet = book.create_worksheet :name => "普通作业第#{i+1}次" +# sheet[0,0] = "课程编号" +# sheet[0,1] = course.id +# sheet[1,0] = "课程名称" +# sheet[1,1] = course.name +# sheet[2,0] = "教师团队" +# sheet[2,1] = teacher_co +# sheet[3,0] = "主讲教师" +# sheet[3,1] = course.teacher.show_real_name +# sheet[3,0] = "作业批次" +# sheet[3,1] = "第#{i+1}次" +# sheet[3,0] = "作业名称" +# sheet[3,1] = home.name +# if home.anonymous_comment ==0 +# sheet.row(4).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_homework_des), +# l(:excel_t_score),l(:excel_ta_score), l(:excel_n_score),l(:excel_a_penalty),l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)]) +# else +# sheet.row(4).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_homework_des), +# l(:excel_t_score),l(:excel_ta_score),l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)]) +# end +# count_row = 5 +# items = home.score_student_works +# items.each_with_index do |stu, j| +# sheet[count_row,0]= j + 1 +# sheet[count_row,1] = stu.user.show_real_name +# sheet[count_row,2] = stu.user.login +# sheet[count_row,3] = stu.user.user_extensions.student_id +# sheet[count_row,4] = strip_html stu.description +# sheet[count_row,5] = stu.teacher_score.nil? ? l(:label_without_score) : stu.teacher_score.round(1) +# sheet[count_row,6] = stu.teaching_asistant_score.nil? ? l(:label_without_score) : stu.teaching_asistant_score.round(1) +# if home.anonymous_comment ==0 +# sheet[count_row,7] = stu.student_score.nil? ? l(:label_without_score) : stu.student_score.round(1) +# sheet[count_row,8] = (home.teacher_priority == 1 && !stu.teacher_score.nil?) ? 0 : stu.absence_penalty +# sheet[count_row,9] = (home.teacher_priority == 1 && !stu.teacher_score.nil?) ? 0 : stu.late_penalty +# sheet[count_row,10] = stu.work_score.nil? ? l(:label_without_score) : stu.work_score.round(1) +# sheet[count_row,11] = format_time(stu.commit_time) +# else +# sheet[count_row,7] = (home.teacher_priority == 1 && !stu.teacher_score.nil?) ? 0 : stu.late_penalty +# sheet[count_row,8] = stu.work_score.nil? ? l(:label_without_score) : stu.work_score.round(1) +# sheet[count_row,9] = format_time(stu.commit_time) +# end +# count_row += 1 +# end +# +# end +# +# homeworks.where(:homework_type => 3).each_with_index do |home, i| +# sheet = book.create_worksheet :name => "分组作业第#{i+1}次" +# sheet[0,0] = "课程编号" +# sheet[0,1] = course.id +# sheet[1,0] = "课程名称" +# sheet[1,1] = course.name +# sheet[2,0] = "教师团队" +# sheet[2,1] = teacher_co +# sheet[3,0] = "主讲教师" +# sheet[3,1] = course.teacher.show_real_name +# sheet[3,0] = "作业批次" +# sheet[3,1] = "第#{i+1}次" +# sheet[3,0] = "作业名称" +# sheet[3,1] = home.name +# +# if home.anonymous_comment ==0 +# sheet.row(4).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_group_member),l(:excel_homework_des), +# l(:excel_t_score),l(:excel_ta_score),l(:excel_n_score),l(:excel_a_penalty),l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)]) +# else +# sheet.row(4).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_group_member),l(:excel_homework_des), +# l(:excel_t_score),l(:excel_ta_score),l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)]) +# end +# count_row = 5 +# items = home.score_student_works +# items.each_with_index do |stu, j| +# sheet[count_row,0] = j + 1 +# sheet[count_row,1] = stu.user.show_real_name +# sheet[count_row,2] = stu.user.login +# sheet[count_row,3] = stu.user.user_extensions.student_id +# sheet[count_row,4] = get_group_member_names home.student_works.where(:group_id => stu.group_id).pluck(:user_id) +# sheet[count_row,5] = strip_html stu.description +# sheet[count_row,6] = stu.teacher_score.nil? ? l(:label_without_score) : stu.teacher_score.round(1) +# sheet[count_row,7] = stu.teaching_asistant_score.nil? ? l(:label_without_score) : stu.teaching_asistant_score.round(1) +# if home.anonymous_comment ==0 +# sheet[count_row,8] = stu.student_score.nil? ? l(:label_without_score) : stu.student_score.round(1) +# sheet[count_row,9] = (home.teacher_priority == 1 && !stu.teacher_score.nil?) ? 0 : stu.absence_penalty +# sheet[count_row,10] = (home.teacher_priority == 1 && !stu.teacher_score.nil?) ? 0 : stu.late_penalty +# sheet[count_row,11] = stu.work_score.nil? ? l(:label_without_score) : stu.work_score.round(1) +# sheet[count_row,12] = format_time(stu.commit_time) +# else +# sheet[count_row,8] = (home.teacher_priority == 1 && !stu.teacher_score.nil?) ? 0 : stu.late_penalty +# sheet[count_row,9] = stu.work_score.nil? ? l(:label_without_score) : stu.work_score.round(1) +# sheet[count_row,10] = format_time(stu.commit_time) +# end +# count_row += 1 +# end +# end +# +# exercises.each_with_index do |exercise, i| +# sheet = book.create_worksheet :name => "试卷第#{i+1}次" +# sheet[0,0] = "课程编号" +# sheet[0,1] = course.id +# sheet[1,0] = "课程名称" +# sheet[1,1] = course.name +# sheet[3,0] = "教师团队" +# sheet[3,1] = teacher_co +# sheet[3,0] = "主讲教师" +# sheet[3,1] = course.teacher.show_real_name +# sheet[3,0] = "试卷批次" +# sheet[3,1] = "第#{i+1}次" +# sheet[3,0] = "试卷名称" +# sheet[3,1] = exercise.exercise_name +# +# sheet.row(4).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_objective_score),l(:excel_subjective_score),l(:excel_f_score),l(:excel_answer_time)]) +# count_row = 5 +# items = exercise.score_exercise_users +# items.each_with_index do |stu, j| +# sheet[count_row,0] = j + 1 +# sheet[count_row,1] = stu.user.show_real_name +# sheet[count_row,2] = stu.user.login +# sheet[count_row,3] = stu.user.user_extensions.student_id +# sheet[count_row,4] = stu.objective_score == -1 ? "0.0" : format("%.1f",stu.objective_score) +# sheet[count_row,5] = stu.subjective_score == -1 ? "0.0" : format("%.1f",stu.subjective_score) +# sheet[count_row,6] = stu.score.nil? ? '--' : stu.score.round(1) +# sheet[count_row,7] = stu.commit_status == 0 ? l(:excel_no_answer) : format_time(stu.start_at) +# count_row += 1 +# end +# end +# +# tasks.each_with_index do |task, i| +# sheet = book.create_worksheet :name => "毕设任务第#{i+1}次" +# sheet[0,0] = "课程编号" +# sheet[0,1] = course.id +# sheet[1,0] = "课程名称" +# sheet[1,1] = course.name +# sheet[2,0] = "教师团队" +# sheet[2,1] = teacher_co +# sheet[3,0] = "主讲教师" +# sheet[3,1] = course.teacher.show_real_name +# sheet[3,0] = "作业批次" +# sheet[3,1] = "第#{i+1}次" +# sheet[3,0] = "作业名称" +# sheet[3,1] = task.name +# sheet.row(4).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id)]) +# if task.task_type == 2 +# sheet.row(4).concat([l(:excel_group_member)]) +# end +# sheet.row(4).concat([l(:excel_homework_des), l(:excel_t_score)]) +# if task.cross_comment +# sheet.row(4).concat(["交叉评分"]) +# end +# sheet.row(4).concat([l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)]) +# count_row = 5 +# items = task.graduation_works.where("work_status != 0").order("work_score desc") +# items.each_with_index do |stu, j| +# column = 0 +# sheet[count_row,column]= j + 1 +# sheet[count_row,column+=1] = stu.user.show_real_name +# sheet[count_row,column+=1] = stu.user.login +# sheet[count_row,column+=1] = stu.user.user_extensions.student_id +# if task.task_type == 2 +# sheet[count_row,column+=1] = get_group_member_names task.graduation_works.where(:group_id => stu.group_id).pluck(:user_id) +# end +# sheet[count_row,column+=1] = strip_html stu.description +# sheet[count_row,column+=1] = stu.teacher_score.nil? ? l(:label_without_score) : stu.teacher_score.round(1) +# if task.cross_comment +# sheet[count_row,column+=1] = stu.cross_score.nil? ? l(:label_without_score) : stu.cross_score.round(1) +# end +# sheet[count_row,column+=1] = stu.late_penalty +# sheet[count_row,column+=1] = stu.work_score.nil? ? l(:label_without_score) : stu.work_score.round(1) +# sheet[count_row,column+=1] = format_time(stu.commit_time) +# count_row += 1 +# end +# =begin +# if task.task_type == 1 +# if task.cross_comment +# sheet.row(4).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_homework_des), +# l(:excel_t_score),"交叉评分",l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)]) +# else +# sheet.row(4).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_homework_des), +# l(:excel_t_score),l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)]) +# end +# else +# if task.cross_comment +# sheet.row(4).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_group_member),l(:excel_homework_des), +# l(:excel_t_score),"交叉评分",l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)]) +# else +# sheet.row(4).concat([l(:excel_rank),l(:excel_user_name),l(:excel_nickname),l(:excel_student_id),l(:excel_group_member),l(:excel_homework_des), +# l(:excel_t_score),l(:excel_l_penalty),l(:excel_f_score),l(:excel_commit_time)]) +# end +# count_row = 5 +# items = task.graduation_works.order("work_score desc") +# items.each_with_index do |stu, j| +# column = 0 +# sheet[count_row,column]= j + 1 +# sheet[count_row,column+1] = stu.user.show_name +# sheet[count_row,column+1] = stu.user.login +# sheet[count_row,column+1] = stu.user.user_extensions.student_id +# sheet[count_row,column+1] = strip_html stu.description +# sheet[count_row,column+1] = stu.teacher_score.nil? ? l(:label_without_score) : stu.teacher_score.round(2) +# if task.cross_comment +# sheet[count_row,column+1] = stu.cross_score.nil? ? l(:label_without_score) : stu.cross_score.round(2) +# end +# sheet[count_row,column+1] = stu.late_penalty +# sheet[count_row,column+1] = stu.work_score.nil? ? l(:label_without_score) : stu.work_score.round(2) +# sheet[count_row,column+1] = format_time(stu.commit_time) +# count_row += 1 +# end +# end +# =end +# end + book.write xls_report xls_report.string end