From e09625df9458409ac00e32f384788305c9feca2a Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Thu, 4 Jul 2019 17:43:31 +0800 Subject: [PATCH 01/16] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E8=AF=BE=E5=A0=82?= =?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 | 2 +- .../course_add_student_create_works_job.rb | 30 +++++++++++++++++++ .../course_delete_student_delete_works_job.rb | 7 +++++ app/models/course_member.rb | 6 ++-- config/sidekiq.yml | 1 + ...ourse_add_student_create_works_job_spec.rb | 5 ++++ ...se_delete_student_delete_works_job_spec.rb | 5 ++++ 7 files changed, 52 insertions(+), 4 deletions(-) create mode 100644 app/jobs/course_add_student_create_works_job.rb create mode 100644 app/jobs/course_delete_student_delete_works_job.rb create mode 100644 spec/jobs/course_add_student_create_works_job_spec.rb create mode 100644 spec/jobs/course_delete_student_delete_works_job_spec.rb diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index d1ab595e5..d6a86ff50 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -711,7 +711,7 @@ class CoursesController < ApplicationController student_ids = [] user_ids.each do |user_id| - existing_course_member = CourseMember.find_by(user_id: user_id.to_i, course_id: @course.id) + existing_course_member = @course.course_members.find_by(user_id: user_id.to_i) new_student = CourseMember.new(user_id: user_id.to_i, course_id: @course.id, course_group_id: course_group_id, role: 4) if existing_course_member.present? diff --git a/app/jobs/course_add_student_create_works_job.rb b/app/jobs/course_add_student_create_works_job.rb new file mode 100644 index 000000000..41c3065a1 --- /dev/null +++ b/app/jobs/course_add_student_create_works_job.rb @@ -0,0 +1,30 @@ +# 学生加入课堂时创建相关任务作品 +class CourseAddStudentCreateWorksJob < ApplicationJob + queue_as :course_member + + def perform(course_id, student_ids) + course = Course.find_by(id: course_id) + return if course.blank? + + # 如果之前存在相关作品,则更新is_delete字段 + student_works = StudentWork.joins(:homework_common).where(user_id: student_ids, homework_commons: {course_id: course.id}) + student_works.update_all(is_delete: 0) + + exercise_users = ExerciseUser.joins(:exercise).where(user_id: student_ids, exercises: {course_id: course.id}) + exercise_users.update_all(is_delete: 0) + + poll_users = PollUser.joins(:poll).where(user_id: student_ids, polls: {course_id: course.id}) + poll_users.update_all(is_delete: 0) + + graduation_works = course.graduation_works.where(user_id: student_ids) + graduation_works.update_all(is_delete: 0) + + attrs = %i[homework_common_id user_id created_at updated_at] + + StudentWork.bulk_insert(*attrs) do |worker| + student_ids.each do |teacher| + worker.add same_attrs.merge(user_id: teacher.user_id) + end + end + end +end diff --git a/app/jobs/course_delete_student_delete_works_job.rb b/app/jobs/course_delete_student_delete_works_job.rb new file mode 100644 index 000000000..2eb3fb60e --- /dev/null +++ b/app/jobs/course_delete_student_delete_works_job.rb @@ -0,0 +1,7 @@ +class CourseDeleteStudentDeleteWorksJob < ApplicationJob + queue_as :course_member + + def perform(*args) + # Do something later + end +end diff --git a/app/models/course_member.rb b/app/models/course_member.rb index 7db681e67..87d4ffe88 100644 --- a/app/models/course_member.rb +++ b/app/models/course_member.rb @@ -52,13 +52,13 @@ class CourseMember < ApplicationRecord def recover_works course = self.course - student_works = StudentWork.where(user_id: self.user_id, homework_common_id: course.homework_commons) + student_works = StudentWork.joins(:homework_common).where(user_id: self.user_id, homework_commons: {course_id: course.id}) student_works.update_all(is_delete: 0) - exercise_users = ExerciseUser.where(user_id: self.user_id, exercise_id: course.exercises) + exercise_users = ExerciseUser.joins(:exercise).where(user_id: self.user_id, exercises: {course_id: course.id}) exercise_users.update_all(is_delete: 0) - poll_users = PollUser.where(user_id: self.user_id, poll_id: course.polls) + poll_users = PollUser.joins(:poll).where(user_id: self.user_id, polls: {course_id: course.id}) poll_users.update_all(is_delete: 0) graduation_works = course.graduation_works.where(user_id: self.user_id) diff --git a/config/sidekiq.yml b/config/sidekiq.yml index 5bd9dad23..93e89b4dc 100644 --- a/config/sidekiq.yml +++ b/config/sidekiq.yml @@ -5,4 +5,5 @@ - [default, 3] - [score, 4] - [evaluation_comment, 5] + - [course_member, 6] - [notify, 100] \ No newline at end of file diff --git a/spec/jobs/course_add_student_create_works_job_spec.rb b/spec/jobs/course_add_student_create_works_job_spec.rb new file mode 100644 index 000000000..5466f830c --- /dev/null +++ b/spec/jobs/course_add_student_create_works_job_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe CourseAddStudentCreateWorksJob, type: :job do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/jobs/course_delete_student_delete_works_job_spec.rb b/spec/jobs/course_delete_student_delete_works_job_spec.rb new file mode 100644 index 000000000..71ad3b1dc --- /dev/null +++ b/spec/jobs/course_delete_student_delete_works_job_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe CourseDeleteStudentDeleteWorksJob, type: :job do + pending "add some examples to (or delete) #{__FILE__}" +end From 20657ff933180557e7d20eb746c6a45bda9e4662 Mon Sep 17 00:00:00 2001 From: SylorHuang Date: Fri, 5 Jul 2019 10:47:15 +0800 Subject: [PATCH 02/16] fix bug --- app/services/batch_export_shixun_report_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/batch_export_shixun_report_service.rb b/app/services/batch_export_shixun_report_service.rb index 90c8fb2af..2c294395d 100644 --- a/app/services/batch_export_shixun_report_service.rb +++ b/app/services/batch_export_shixun_report_service.rb @@ -36,7 +36,7 @@ class BatchExportShixunReportService rescue => ex Rails.logger.error(ex.message) - zip.get_output_stream('FILE_NOTICE.txt'){|os| os.write('文件重复') } + zip.get_output_stream('FILE_NOTICE.txt'){|os| os.write("文件重复:#{export.filename}") } next end end From 6628269df16274745bd24d3680bca631ceb0d4a7 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 5 Jul 2019 10:52:47 +0800 Subject: [PATCH 03/16] =?UTF-8?q?=E4=BD=9C=E5=93=81=E9=99=84=E4=BB=B6?= =?UTF-8?q?=E7=9A=84=E5=AF=BC=E5=87=BA=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/export_helper.rb | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/app/helpers/export_helper.rb b/app/helpers/export_helper.rb index a23cb8a65..839686f5b 100644 --- a/app/helpers/export_helper.rb +++ b/app/helpers/export_helper.rb @@ -487,6 +487,8 @@ module ExportHelper zipfile_name = "#{output_path}/#{rename_zipfile}" + # 同名文件重命名时用 + index = 1 Dir.mkdir(File.dirname(zipfile_name)) unless File.exist?(File.dirname(zipfile_name)) Zip::File.open(zipfile_name, Zip::File::CREATE) do |zipfile| files_paths.each do |filename| @@ -496,7 +498,11 @@ module ExportHelper begin zipfile.add(rename_file, filename) rescue Exception => e - zipfile.get_output_stream('FILE_NOTICE.txt'){|os| os.write "该作品中有重复命名文件,请通过文件名学号和姓名信息进入该作业详细界面手动下载"} + rename_file = rename_same_file(rename_file, index) + index += 1 + zipfile.add(rename_file, filename) + + # zipfile.get_output_stream('FILE_NOTICE.txt'){|os| os.write "该作品中有重复命名文件,请通过文件名学号和姓名信息进入该作业详细界面手动下载"} next end end @@ -516,4 +522,11 @@ module ExportHelper def format_sheet_name name name = name.gsub(":", "-") end + + def rename_same_file(name, index) + basename = File.basename(name, ".*") + new_basename = basename + "_" + index.to_s + extname = File.extname(name) + new_basename + extname + end end From 1ab39388137209d5941c953d01bdd69a6799beaf Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 5 Jul 2019 10:54:07 +0800 Subject: [PATCH 04/16] =?UTF-8?q?=E8=AE=A1=E7=AE=97=E7=BC=BA=E8=AF=84?= =?UTF-8?q?=E6=88=90=E7=BB=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/jobs/homework_absence_penalty_calculation_job.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/jobs/homework_absence_penalty_calculation_job.rb b/app/jobs/homework_absence_penalty_calculation_job.rb index 87f78f311..6e80f2330 100644 --- a/app/jobs/homework_absence_penalty_calculation_job.rb +++ b/app/jobs/homework_absence_penalty_calculation_job.rb @@ -11,7 +11,7 @@ class HomeworkAbsencePenaltyCalculationJob < ApplicationJob homework_common.student_works.where("work_status != 0").each do |student_work| absence_penalty_count = student_work.user.student_works_evaluation_distributions.where(student_work_id: work_ids).count - - student_work.user.student_works_scores.where(student_work_id: work_ids, reviewer_role: 3).group_by(:student_work_id).count + student_work.user.student_works_scores.where(student_work_id: work_ids, reviewer_role: 3).group_by(&:student_work_id).count student_work.absence_penalty = absence_penalty_count > 0 ? absence_penalty_count * homework_detail_manual.absence_penalty : 0 student_work.save From 4b49571ab58b3b6651626d71f7dc505bc62c36e0 Mon Sep 17 00:00:00 2001 From: SylorHuang Date: Fri, 5 Jul 2019 11:31:45 +0800 Subject: [PATCH 05/16] fix bug --- app/controllers/exercises_controller.rb | 40 ++----------------------- app/controllers/polls_controller.rb | 2 -- 2 files changed, 3 insertions(+), 39 deletions(-) diff --git a/app/controllers/exercises_controller.rb b/app/controllers/exercises_controller.rb index e6f9876bc..49dd7edb9 100644 --- a/app/controllers/exercises_controller.rb +++ b/app/controllers/exercises_controller.rb @@ -477,10 +477,8 @@ class ExercisesController < ApplicationController params_end_time = params[:end_time].to_time end - if exercise_status == 2 && @exercise.publish_time != params_publish_time - normal_status(-1,"已发布,不允许修改发布时间") - elsif exercise_status == 3 && (@exercise.end_time != params_end_time || @exercise.publish_time != params_publish_time) - normal_status(-1,"已截止,不允许修改时间") + if (exercise_status != 1) && (@exercise.publish_time != params_publish_time) + normal_status(-1,"已发布/已截止,不允许修改发布时间") elsif params_publish_time.present? && params_end_time.present? && params_end_time < params_publish_time normal_status(-1,"截止时间不能小于发布时间") else @@ -523,12 +521,7 @@ class ExercisesController < ApplicationController end # exercise_end_time = t[:end_time].present? ? t[:end_time].to_time : nil exercise_group = exercise_groups.find_in_exercise_group("course_group_id",course_id) #判断该分班是否存在 - if exercise_group.present? && exercise_group.first.end_time <= Time.now && - (exercise_end_time != exercise_group.first.end_time || exercise_publish_time != exercise_group.first.publish_time) #已截止且时间改变的,则提示错误 - error_count += 1 - end - if exercise_group.present? && exercise_group.first.publish_time < - Time.now && exercise_publish_time != exercise_group.first.publish_time + if exercise_group.present? && (exercise_group.first.publish_time < Time.now) && (exercise_publish_time != exercise_group.first.publish_time) error_count += 1 end if error_count == 0 @@ -1639,36 +1632,9 @@ class ExercisesController < ApplicationController @answer_committed_user = @exercise.exercise_users.exercise_commit_users(current_user.id)&.first if @answer_committed_user.blank? normal_status(404,"答题用户不存在") - # elsif @exercise.get_exercise_status(current_user.id) == 2 && @answer_committed_user.commit_status == 1 #当试卷截止时,会自动提交 - # normal_status(-1,"提交错误,试卷用户已提交!") end end - # def commit_user_exercise - # @exercise_user_current = @exercise.exercise_users.exercise_commit_users(@exercise_current_user_id)&.first #查找当前用户是否有过答题 - # if @user_course_identity == Course::STUDENT - # if @exercise_user_current.present? - # if @exercise.time > 0 && @exercise_user_current.start_at.present? && (@exercise_user_current.commit_status == 0) && - # ((@exercise_user_current.start_at + (@exercise.time.to_i + 1).minutes) < Time.now) - # #当前用户存在,且已回答,且试卷时间已过,且未提交,则自动提交。最好是前端控制 - # objective_score = calculate_student_score(@exercise,current_user)[:total_score] - # subjective_score = @exercise_user_current.subjective_score < 0.0 ? 0.0 : @exercise_user_current.subjective_score - # total_score = objective_score + subjective_score - # commit_option = { - # :status => 1, - # :commit_status => 1, - # :end_at => Time.now, - # :objective_score => objective_score, - # :score => total_score, - # :subjective_score => subjective_score - # } - # @exercise_user_current.update_attributes(commit_option) - # normal_status(0,"已交卷成功!") - # end - # end - # end - # end - #打回重做时的初步判断 def check_exercise_status @exercise_users = @exercise.all_exercise_users(current_user.id).commit_exercise_by_status(1) #当前教师所在分班的全部已提交的学生数 diff --git a/app/controllers/polls_controller.rb b/app/controllers/polls_controller.rb index 57bbc9769..64827b375 100644 --- a/app/controllers/polls_controller.rb +++ b/app/controllers/polls_controller.rb @@ -1282,8 +1282,6 @@ class PollsController < ApplicationController else normal_status(-1,"请选择分班!") end - # elsif (@poll.poll_status != 1) && (params[:publish_time].to_time != @poll.publish_time) && (@user_course_identity > Course::CREATOR) - # normal_status(-1,"已发布/已截止的不能修发布时间!") #课堂管理员和超级管理员才有权限 end end From 8d2a90a94702ab4b4cc27442b2baafbacf9f68b9 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 5 Jul 2019 14:13:54 +0800 Subject: [PATCH 06/16] =?UTF-8?q?=E5=AD=A6=E7=94=9F=E5=8A=A0=E5=85=A5?= =?UTF-8?q?=E8=AF=BE=E5=A0=82=E5=92=8C=E9=80=80=E5=87=BA=E8=AF=BE=E5=A0=82?= =?UTF-8?q?=E6=97=B6=E7=9A=84=E6=95=B0=E6=8D=AE=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/courses_controller.rb | 13 +++++- .../course_add_student_create_works_job.rb | 41 ++++++++++++++++++- .../course_delete_student_delete_works_job.rb | 16 +++++++- app/models/course_member.rb | 4 +- 4 files changed, 66 insertions(+), 8 deletions(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index d6a86ff50..d7b039e02 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -548,6 +548,7 @@ class CoursesController < ApplicationController course_teacher = CourseMember.find_by(user_id: current_user.id, role: %i[CREATOR PROFESSOR ASSISTANT_PROFESSOR], course_id: @course.id) course_student.destroy! course_teacher.update_attributes(is_active: 1) if course_teacher.present? && !course_teacher.is_active + CourseDeleteStudentDeleteWorksJob.perform_later(@course.id, [current_user.id]) normal_status(0, "退出成功") end @@ -684,11 +685,16 @@ class CoursesController < ApplicationController ActiveRecord::Base.transaction do begin students = params[:students] + student_ids = [] students.each do |student| - course_member = CourseMember.find_by!(id: student[:course_member_id].to_i, course_id: @course.id) - course_member.destroy! + course_member = CourseMember.find_by(id: student[:course_member_id].to_i, course_id: @course.id) + if course_member.present? + student_ids << course_member.user_id + course_member.destroy! + end end + CourseDeleteStudentDeleteWorksJob.perform_later(@course.id, student_ids) if student_ids.present? normal_status(0, "操作成功") rescue => e uid_logger(e.message) @@ -720,6 +726,7 @@ class CoursesController < ApplicationController else new_student.is_active = 0 if existing_course_member.is_active new_student.save! + student_ids << user_id end else new_student.save! @@ -727,6 +734,7 @@ class CoursesController < ApplicationController end end + CourseAddStudentCreateWorksJob.perform_later(@course.id, student_ids) if student_ids.present? TeacherInviteJoinCourseNotifyJob.perform_later(current_user.id, @course.id, 10, student_ids) if student_ids.present? normal_status(0, "添加成功") rescue => e @@ -868,6 +876,7 @@ class CoursesController < ApplicationController new_student.course_group_id = course_group.id if course_group.present? new_student.save! + CourseAddStudentCreateWorksJob.perform_later(course.id, [current_user.id]) StudentJoinCourseNotifyJob.perform_later(current_user.id, course.id) end end diff --git a/app/jobs/course_add_student_create_works_job.rb b/app/jobs/course_add_student_create_works_job.rb index 41c3065a1..1631b5b77 100644 --- a/app/jobs/course_add_student_create_works_job.rb +++ b/app/jobs/course_add_student_create_works_job.rb @@ -22,8 +22,45 @@ class CourseAddStudentCreateWorksJob < ApplicationJob attrs = %i[homework_common_id user_id created_at updated_at] StudentWork.bulk_insert(*attrs) do |worker| - student_ids.each do |teacher| - worker.add same_attrs.merge(user_id: teacher.user_id) + student_ids.each do |user_id| + same_attrs = {user_id: user_id} + course.homework_commons.where(homework_type: %i[normal group practice]).each do |homework| + next if homework.student_works.where(user_id: user_id).any? + worker.add same_attrs.merge(homework_common_id: homework.id) + end + end + end + + attrs = %i[exercise_id user_id created_at updated_at] + ExerciseUser.bulk_insert(*attrs) do |worker| + student_ids.each do |user_id| + same_attrs = {user_id: user_id} + course.exercises.each do |exercise| + next if exercise.exercise_users.where(user_id: user_id).any? + worker.add same_attrs.merge(exercise_id: exercise.id) + end + end + end + + attrs = %i[poll_id user_id created_at updated_at] + PollUser.bulk_insert(*attrs) do |worker| + student_ids.each do |user_id| + same_attrs = {user_id: user_id} + course.polls.each do |poll| + next if poll.poll_users.where(user_id: user_id).any? + worker.add same_attrs.merge(poll_id: poll.id) + end + end + end + + attrs = %i[graduation_task_id user_id course_id created_at updated_at] + GraduationWork.bulk_insert(*attrs) do |worker| + student_ids.each do |user_id| + same_attrs = {user_id: user_id, course_id: course.id} + course.graduation_tasks.each do |task| + next if task.graduation_works.where(user_id: user_id).any? + worker.add same_attrs.merge(graduation_task_id: task.id) + end end end end diff --git a/app/jobs/course_delete_student_delete_works_job.rb b/app/jobs/course_delete_student_delete_works_job.rb index 2eb3fb60e..9bdb93b87 100644 --- a/app/jobs/course_delete_student_delete_works_job.rb +++ b/app/jobs/course_delete_student_delete_works_job.rb @@ -1,7 +1,19 @@ class CourseDeleteStudentDeleteWorksJob < ApplicationJob queue_as :course_member - def perform(*args) - # Do something later + def perform(course_id, student_ids) + course = Course.find_by(id: course_id) + return if course.blank? + course = self.course + student_works = StudentWork.joins(:homework_common).where(user_id: student_ids, homework_commons: {course_id: course.id}) + student_works.update_all(is_delete: 1) + + exercise_users = ExerciseUser.joins(:exercise).where(user_id: student_ids, exercises: {course_id: course.id}) + exercise_users.update_all(is_delete: 1) + + poll_users = PollUser.joins(:poll).where(user_id: student_ids, polls: {course_id: course.id}) + poll_users.update_all(is_delete: 1) + + course.graduation_works.where(user_id: student_ids).update_all(is_delete: 1) end end diff --git a/app/models/course_member.rb b/app/models/course_member.rb index 87d4ffe88..52c13dbbf 100644 --- a/app/models/course_member.rb +++ b/app/models/course_member.rb @@ -20,8 +20,8 @@ class CourseMember < ApplicationRecord # 未分班 scope :ungroup_students, -> { where(course_group_id: 0, role: 4) } - after_destroy :delete_works - after_create :work_operation + # after_destroy :delete_works + # after_create :work_operation def delete_works if self.role == "STUDENT" course = self.course From 8828a04432d1e934e06b3ed785a14793516134fd Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 5 Jul 2019 14:17:50 +0800 Subject: [PATCH 07/16] =?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/jobs/course_delete_student_delete_works_job.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/jobs/course_delete_student_delete_works_job.rb b/app/jobs/course_delete_student_delete_works_job.rb index 9bdb93b87..c12762fbe 100644 --- a/app/jobs/course_delete_student_delete_works_job.rb +++ b/app/jobs/course_delete_student_delete_works_job.rb @@ -4,7 +4,7 @@ class CourseDeleteStudentDeleteWorksJob < ApplicationJob def perform(course_id, student_ids) course = Course.find_by(id: course_id) return if course.blank? - course = self.course + student_works = StudentWork.joins(:homework_common).where(user_id: student_ids, homework_commons: {course_id: course.id}) student_works.update_all(is_delete: 1) From b70179d967f1ea40c98f91d7482289cc7545c662 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 5 Jul 2019 14:36:20 +0800 Subject: [PATCH 08/16] =?UTF-8?q?=E6=95=B4=E7=BB=84=E5=90=8C=E8=AF=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/student_works_controller.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/controllers/student_works_controller.rb b/app/controllers/student_works_controller.rb index 5d14a43ea..ef12e5650 100644 --- a/app/controllers/student_works_controller.rb +++ b/app/controllers/student_works_controller.rb @@ -730,19 +730,19 @@ class StudentWorksController < ApplicationController student_works.each do |st_work| st_score = StudentWorksScore.new(user_id: new_score.user_id, score: new_score.score, reviewer_role: new_score.reviewer_role, comment: new_score.comment) - st_work.student_works_scores << st_score - score = StudentWorksScore.where(user_id: new_score.user_id, student_work_id: st_work.id).last + score = StudentWorksScore.where(user_id: new_score.user_id, student_work_id: st_work.id, reviewer_role: new_score.reviewer_role).last # 该用户的历史评阅无效 score.update_column('is_invalid', true) if score.present? && score.score.present? + st_work.student_works_scores << st_score if new_score.reviewer_role == 1 - st_work.teacher_score = new_score.score + st_work.teacher_score = new_score.score if new_score.score.present? elsif new_score.reviewer_role == 2 if homework.homework_detail_manual.ta_mode == 1 - st_work.teaching_asistant_score = new_score.ta_score st_work.id + st_work.teaching_asistant_score = new_score.ta_score st_work.id if new_score.score.present? else - st_work.teaching_asistant_score = new_score.score + st_work.teaching_asistant_score = new_score.score if new_score.score.present? end else st_work.student_score = student_work.student_score From cedb27368ec4314152ff267bd9c042fe357f3413 Mon Sep 17 00:00:00 2001 From: SylorHuang Date: Fri, 5 Jul 2019 14:40:34 +0800 Subject: [PATCH 09/16] fix bug --- app/controllers/zips_controller.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/controllers/zips_controller.rb b/app/controllers/zips_controller.rb index 4089e5231..78151a78a 100644 --- a/app/controllers/zips_controller.rb +++ b/app/controllers/zips_controller.rb @@ -21,7 +21,10 @@ class ZipsController < ApplicationController file_name = filename_for_content_disposition(exercises.filename) - send_file exercises.ex_zip, filename: file_name, type: 'application/zip' + Rails.logger.info("################___________file_name________________###########{file_name}") + Rails.logger.info("################___________exercises.filename________________###########{exercises.filename}") + + send_file exercises.ex_zip, filename: file_name.encode(Encoding.default_external, 'gb2312'), type: 'application/zip' rescue Exception => e normal_status(-1, e.message) end From 83043baf61bbf95c7cc10d01f1c322f56b066ad8 Mon Sep 17 00:00:00 2001 From: SylorHuang Date: Fri, 5 Jul 2019 14:43:10 +0800 Subject: [PATCH 10/16] fix bug --- app/controllers/zips_controller.rb | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/app/controllers/zips_controller.rb b/app/controllers/zips_controller.rb index 78151a78a..67c8c74f7 100644 --- a/app/controllers/zips_controller.rb +++ b/app/controllers/zips_controller.rb @@ -10,7 +10,9 @@ class ZipsController < ApplicationController service = BatchExportShixunReportService.new(@homework, @all_student_works) filename = filename_for_content_disposition(service.filename) - send_file service.zip, filename: filename, type: 'application/zip' + Rails.logger.info("################___________file_name________________###########{filename}") + Rails.logger.info("################___________service.filename________________###########{service.filename}") + send_file service.zip, filename: filename.encode(Encoding.default_external, 'gb2312'), type: 'application/zip' rescue BatchExportShixunReportService::Error => ex normal_status(-1, ex.message) end @@ -21,10 +23,7 @@ class ZipsController < ApplicationController file_name = filename_for_content_disposition(exercises.filename) - Rails.logger.info("################___________file_name________________###########{file_name}") - Rails.logger.info("################___________exercises.filename________________###########{exercises.filename}") - - send_file exercises.ex_zip, filename: file_name.encode(Encoding.default_external, 'gb2312'), type: 'application/zip' + send_file exercises.ex_zip, filename: file_name, type: 'application/zip' rescue Exception => e normal_status(-1, e.message) end From 495c8d653e40abcf6f4c5f4b575da973f7c271a6 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 5 Jul 2019 14:48:32 +0800 Subject: [PATCH 11/16] =?UTF-8?q?=E5=8A=A9=E6=95=99=E8=AF=84=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/student_works_controller.rb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/controllers/student_works_controller.rb b/app/controllers/student_works_controller.rb index ef12e5650..c85474a10 100644 --- a/app/controllers/student_works_controller.rb +++ b/app/controllers/student_works_controller.rb @@ -334,7 +334,6 @@ class StudentWorksController < ApplicationController ActiveRecord::Base.transaction do begin # 没传score则取上次评分成绩 - score = StudentWorksScore.where(user_id: current_user.id, student_work_id: @work.id).last new_score = StudentWorksScore.new new_score.score = params[:score].blank? ? score.try(:score) : params[:score].to_f new_score.comment = params[:comment] if params[:comment] && params[:comment].strip != "" @@ -348,7 +347,9 @@ class StudentWorksController < ApplicationController @work.update_attributes(group_id: @homework.max_group_id) if @homework.homework_type == "group" end - new_score.reviewer_role = @user_course_identity == Course::STUDENT ? 3 : @user_course_identity == Course::ASSISTANT_PROFESSOR ? 2 : 1 + reviewer_role = @user_course_identity == Course::STUDENT ? 3 : @user_course_identity == Course::ASSISTANT_PROFESSOR ? 2 : 1 + new_score.reviewer_role = reviewer_role + score = StudentWorksScore.where(user_id: current_user.id, student_work_id: @work.id, reviewer_role: reviewer_role).last if new_score.save! Attachment.associate_container(params[:attachment_ids], new_score.id, new_score.class) @@ -740,7 +741,7 @@ class StudentWorksController < ApplicationController st_work.teacher_score = new_score.score if new_score.score.present? elsif new_score.reviewer_role == 2 if homework.homework_detail_manual.ta_mode == 1 - st_work.teaching_asistant_score = new_score.ta_score st_work.id if new_score.score.present? + st_work.teaching_asistant_score = new_score.ta_score st_work.id else st_work.teaching_asistant_score = new_score.score if new_score.score.present? end From f6ae3f329328c1c99104af77506dc22c6b3efbe6 Mon Sep 17 00:00:00 2001 From: SylorHuang Date: Fri, 5 Jul 2019 15:04:21 +0800 Subject: [PATCH 12/16] fixbug --- app/controllers/homework_commons_controller.rb | 2 +- app/controllers/zips_controller.rb | 5 ++--- app/helpers/export_helper.rb | 15 +++++++++++---- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/app/controllers/homework_commons_controller.rb b/app/controllers/homework_commons_controller.rb index 519c05c62..d09609bdc 100644 --- a/app/controllers/homework_commons_controller.rb +++ b/app/controllers/homework_commons_controller.rb @@ -208,7 +208,7 @@ class HomeworkCommonsController < ApplicationController student_work_to_xlsx(@work_excel,@homework) exercise_export_name = current_user.real_name + "_" + @course.name + "_" + @homework.name + "_" + Time.now.strftime('%Y%m%d_%H%M%S') - render xlsx: "#{exercise_export_name.strip.first(30)}",template: "homework_commons/works_list.xlsx.axlsx",locals: + render xlsx: "#{exercise_export_name.encode('UTF-8', 'gb2312', {:invalid => :replace, :undef => :replace, :replace => ' '}).strip.first(30)}",template: "homework_commons/works_list.xlsx.axlsx",locals: {table_columns: @work_head_cells,task_users: @work_cells_column} } end diff --git a/app/controllers/zips_controller.rb b/app/controllers/zips_controller.rb index 67c8c74f7..2b70b9b27 100644 --- a/app/controllers/zips_controller.rb +++ b/app/controllers/zips_controller.rb @@ -10,9 +10,8 @@ class ZipsController < ApplicationController service = BatchExportShixunReportService.new(@homework, @all_student_works) filename = filename_for_content_disposition(service.filename) - Rails.logger.info("################___________file_name________________###########{filename}") - Rails.logger.info("################___________service.filename________________###########{service.filename}") - send_file service.zip, filename: filename.encode(Encoding.default_external, 'gb2312'), type: 'application/zip' + + send_file service.zip, filename: filename, type: 'application/zip' rescue BatchExportShixunReportService::Error => ex normal_status(-1, ex.message) end diff --git a/app/helpers/export_helper.rb b/app/helpers/export_helper.rb index 839686f5b..7f64a99cd 100644 --- a/app/helpers/export_helper.rb +++ b/app/helpers/export_helper.rb @@ -40,10 +40,17 @@ module ExportHelper works.includes(user: :user_extension, student_works_scores: :user).each_with_index do |w, index| w_user = w.user w_1 = (index + 1) - w_2 = w_user.login - w_3 = w_user.real_name - w_3_1 = w_user.mail - w_4 = w_user.student_id.present? ? w_user.student_id : "--" + if w_user.present? + w_2 = w_user&.login + w_3 = w_user&.real_name + w_3_1 = w_user&.mail + w_4 = w_user.student_id.present? ? w_user.student_id : "--" + else + w_2 = "--" + w_3 = "--" + w_3_1 = "--" + w_4 = "--" + end course_name = course.students.find_by(user_id: w.user_id).try(:course_group_name) w_5 = course_name.present? ? course_name : "--" #0: 未提交, 1 按时提交, 2 延迟提交 From bcc66261c61f00e9c89a8412a1dbcc2764bcc711 Mon Sep 17 00:00:00 2001 From: SylorHuang Date: Fri, 5 Jul 2019 15:09:03 +0800 Subject: [PATCH 13/16] fix bug --- app/controllers/homework_commons_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/homework_commons_controller.rb b/app/controllers/homework_commons_controller.rb index d09609bdc..d47ce609c 100644 --- a/app/controllers/homework_commons_controller.rb +++ b/app/controllers/homework_commons_controller.rb @@ -208,7 +208,7 @@ class HomeworkCommonsController < ApplicationController student_work_to_xlsx(@work_excel,@homework) exercise_export_name = current_user.real_name + "_" + @course.name + "_" + @homework.name + "_" + Time.now.strftime('%Y%m%d_%H%M%S') - render xlsx: "#{exercise_export_name.encode('UTF-8', 'gb2312', {:invalid => :replace, :undef => :replace, :replace => ' '}).strip.first(30)}",template: "homework_commons/works_list.xlsx.axlsx",locals: + render xlsx: "#{exercise_export_name.encode("GBK", :invalid => :replace, :undef => :replace, :replace => " ").strip.first(30)}",template: "homework_commons/works_list.xlsx.axlsx",locals: {table_columns: @work_head_cells,task_users: @work_cells_column} } end From 76646a3fbcd723f1aa58c5157afa8ee357e14b09 Mon Sep 17 00:00:00 2001 From: SylorHuang Date: Fri, 5 Jul 2019 15:12:00 +0800 Subject: [PATCH 14/16] =?UTF-8?q?xlsx=E4=B8=8B=E8=BD=BD=E4=B9=B1=E7=A0=81?= =?UTF-8?q?=E8=A7=A3=E5=86=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/homework_commons_controller.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/controllers/homework_commons_controller.rb b/app/controllers/homework_commons_controller.rb index d47ce609c..794ccb228 100644 --- a/app/controllers/homework_commons_controller.rb +++ b/app/controllers/homework_commons_controller.rb @@ -208,9 +208,11 @@ class HomeworkCommonsController < ApplicationController student_work_to_xlsx(@work_excel,@homework) exercise_export_name = current_user.real_name + "_" + @course.name + "_" + @homework.name + "_" + Time.now.strftime('%Y%m%d_%H%M%S') - render xlsx: "#{exercise_export_name.encode("GBK", :invalid => :replace, :undef => :replace, :replace => " ").strip.first(30)}",template: "homework_commons/works_list.xlsx.axlsx",locals: + render xlsx: "#{exercise_export_name.encode(Encoding.default_external,"UTF-8", :invalid => :replace, :undef => :replace, :replace => " ").strip.first(30)}",template: "homework_commons/works_list.xlsx.axlsx",locals: {table_columns: @work_head_cells,task_users: @work_cells_column} } + + # .encode(Encoding.default_external, 'gb2312') end end elsif params[:format] == "zip" From 61f36ea2379deeabac7792e922872502e58d4a1f Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 5 Jul 2019 15:17:01 +0800 Subject: [PATCH 15/16] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E7=BC=BA=E8=AF=84?= =?UTF-8?q?=E6=89=A3=E5=88=86=E7=9A=84=E8=AE=A1=E7=AE=97=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/tasks/homework_evaluation.rake | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/tasks/homework_evaluation.rake b/lib/tasks/homework_evaluation.rake index 56c46179c..757b07877 100644 --- a/lib/tasks/homework_evaluation.rake +++ b/lib/tasks/homework_evaluation.rake @@ -60,9 +60,9 @@ namespace :homework_evaluation do HomeworkAnonymousAppealStartNotifyJob.perform_later(homework_common.id) else homework_detail_manual.update_column('comment_status', 5) + # 没有申诉阶段则直接计算缺评扣分 否则申诉结束时才计算 + HomeworkAbsencePenaltyCalculationJob.perform_later(homework_common.id) end - - HomeworkAbsencePenaltyCalculationJob.perform_later(homework_common.id) end end end @@ -71,5 +71,8 @@ namespace :homework_evaluation do task :end_appeal => :environment do homework_detail_manuals = HomeworkDetailManual.where("appeal_time <= '#{Time.now}' and homework_detail_manuals.comment_status = 4") homework_detail_manuals.update_all(:comment_status => 5) + homework_detail_manuals.each do |homework_detail_manual| + HomeworkAbsencePenaltyCalculationJob.perform_later(homework_detail_manual.homework_common_id) + end end end From 425a32680adbd8e7caa04804045ef0927adc8fa3 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 5 Jul 2019 15:35:37 +0800 Subject: [PATCH 16/16] =?UTF-8?q?=E6=95=99=E5=B8=88=E5=88=97=E8=A1=A8?= =?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 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index d7b039e02..0679e5619 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -284,7 +284,7 @@ class CoursesController < ApplicationController @is_admin = @user_course_identity < Course::PROFESSOR - @applications= CourseMessage.unhandled_join_course_requests_by_course(@course) + @applications = @is_admin ? CourseMessage.unhandled_join_course_requests_by_course(@course) : CourseMessage.none page = params[:page] || 1 limit = params[:limit] || 20