From 4e07aa9ccfb0011c5aaf1acfc21d305d2c8dd03b Mon Sep 17 00:00:00 2001
From: cxt <853663049@qq.com>
Date: Tue, 10 Mar 2020 16:45:44 +0800
Subject: [PATCH] =?UTF-8?q?=E5=8C=BF=E8=AF=84=E4=BD=9C=E4=B8=9A=E7=9A=84?=
 =?UTF-8?q?=E5=AD=A6=E7=94=9F=E8=AF=84=E9=98=85=E6=95=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/controllers/student_works_controller.rb          |  9 ++++++---
 app/models/homework_common.rb                        |  1 +
 app/models/student_work.rb                           | 12 +++++++++++-
 app/models/student_works_score.rb                    |  1 +
 app/views/homework_commons/works_list.json.jbuilder  |  4 +++-
 ..._add_homework_common_id_to_student_works_score.rb |  5 +++++
 ...310082003_migrate_student_works_score_homework.rb |  7 +++++++
 7 files changed, 34 insertions(+), 5 deletions(-)
 create mode 100644 db/migrate/20200310081817_add_homework_common_id_to_student_works_score.rb
 create mode 100644 db/migrate/20200310082003_migrate_student_works_score_homework.rb

diff --git a/app/controllers/student_works_controller.rb b/app/controllers/student_works_controller.rb
index 8c2c4fda1..6c9de071d 100644
--- a/app/controllers/student_works_controller.rb
+++ b/app/controllers/student_works_controller.rb
@@ -374,6 +374,7 @@ class StudentWorksController < ApplicationController
         new_score.comment = params[:comment] if params[:comment] && params[:comment].strip != ""
         new_score.user_id = current_user.id
         new_score.student_work_id = @work.id
+        new_score.homework_common_id = @work.homework_common_id
 
         # 如果作品是未提交的状态则更新为已提交
         if @user_course_identity < Course::STUDENT && !new_score.score.nil? && @work.work_status == 0
@@ -553,8 +554,10 @@ class StudentWorksController < ApplicationController
         # 分数不为空的历史评阅都置为失效
         @work.student_works_scores.where.not(score: nil).update_all(is_invalid: 1)
         reviewer_role = @user_course_identity == Course::ASSISTANT_PROFESSOR ? 2 : 1
-        new_score = StudentWorksScore.new(student_work_id: @work.id, score: params[:score].to_f, comment: "使用调分功能调整了作业最终成绩:#{params[:comment]}",
-                                            user_id: current_user.id, reviewer_role: reviewer_role, is_ultimate: 1)
+        new_score = StudentWorksScore.new(student_work_id: @work.id, score: params[:score].to_f,
+                                          comment: "使用调分功能调整了作业最终成绩:#{params[:comment]}",
+                                          homework_common_id: @work.homework_common_id, user_id: current_user.id,
+                                          reviewer_role: reviewer_role, is_ultimate: 1)
         new_score.save!
 
         # 如果作品是未提交的状态则更新为已提交
@@ -844,7 +847,7 @@ class StudentWorksController < ApplicationController
   def add_score_to_member student_work, homework, new_score
     student_works = homework.student_works.where("group_id = #{student_work.group_id} and id != #{student_work.id} and ultimate_score = 0")
     student_works.each do |st_work|
-      st_score = StudentWorksScore.new(user_id: new_score.user_id, score: new_score.score,
+      st_score = StudentWorksScore.new(user_id: new_score.user_id, score: new_score.score, homework_common_id: homework.id,
                                        reviewer_role: new_score.reviewer_role, comment: new_score.comment)
 
       score = StudentWorksScore.where(user_id: new_score.user_id, student_work_id: st_work.id, reviewer_role: new_score.reviewer_role).last
diff --git a/app/models/homework_common.rb b/app/models/homework_common.rb
index 7da7a177d..a6a919981 100644
--- a/app/models/homework_common.rb
+++ b/app/models/homework_common.rb
@@ -6,6 +6,7 @@ class HomeworkCommon < ApplicationRecord
   has_many :student_works, -> { where(is_delete: 0) }
   has_many :score_student_works, -> { where("is_delete = 0 and work_status != 0").order("work_score desc") }, class_name: "StudentWork"
   has_one :homework_detail_manual, dependent: :destroy
+  has_many :student_works_scores
 
   # 分组作业的设置
   has_one :homework_detail_group, dependent: :destroy
diff --git a/app/models/student_work.rb b/app/models/student_work.rb
index a4ae63f04..462e06adc 100644
--- a/app/models/student_work.rb
+++ b/app/models/student_work.rb
@@ -46,7 +46,17 @@ class StudentWork < ApplicationRecord
 
   # 匿评次数
   def student_comment_num
-    homework_common.homework_detail_manual.comment_status > 2 ? self.student_works_scores.select{|score| score.reviewer_role == 3}.group_by(&:user_id).count : 0
+    homework_common.homework_detail_manual.comment_status > 2 && work_status > 0 ? self.student_works_scores.select{|score| score.reviewer_role == 3}.group_by(&:user_id).count : 0
+  end
+
+  # 学生评阅作品数
+  def user_comment_num
+    if homework_common.homework_detail_manual.comment_status > 2 && work_status > 0
+      count = homework_common.student_works_scores.select{|score| score.reviewer_role == 3 && score.user_id == user_id}.group_by(&:student_work_id).count
+    else
+     count = 0
+    end
+    count
   end
 
   # 匿评申诉总条数
diff --git a/app/models/student_works_score.rb b/app/models/student_works_score.rb
index a193d4e77..c978d10a8 100644
--- a/app/models/student_works_score.rb
+++ b/app/models/student_works_score.rb
@@ -2,6 +2,7 @@ class StudentWorksScore < ApplicationRecord
   #appeal_status: 0:正常;1:申诉中,2:撤销申诉;3:申诉成功;4:申诉被拒绝;5:申诉失效
   belongs_to :student_work
   belongs_to :user
+  belongs_to :homework_common, optional: true
   has_many :journals_for_messages, -> { order('created_on desc') }, as: :jour, dependent: :destroy
   has_one :student_works_scores_appeal, dependent: :destroy
   has_many :tidings, as: :container, dependent: :destroy
diff --git a/app/views/homework_commons/works_list.json.jbuilder b/app/views/homework_commons/works_list.json.jbuilder
index 9fb2d6971..4faea3474 100644
--- a/app/views/homework_commons/works_list.json.jbuilder
+++ b/app/views/homework_commons/works_list.json.jbuilder
@@ -63,6 +63,7 @@ elsif @user_course_identity == Course::STUDENT
 
     if @homework.anonymous_comment
       json.student_comment_count @work.student_comment_num
+      json.user_comment_count @work.user_comment_num
       json.absence_penalty @work.absence_penalty
     end
 
@@ -147,7 +148,8 @@ elsif @homework.homework_type == "group" || @homework.homework_type == "normal"
 
       # 作品匿评条数
       if @homework.anonymous_comment
-        json.student_comment_count @homework_detail_manual.comment_status > 2 ? work.student_comment_num : 0
+        json.student_comment_count @homework_detail_manual.comment_status > 2 && work.work_status > 0 ? work.student_comment_num : 0
+        json.user_comment_count @homework_detail_manual.comment_status > 2 && work.work_status > 0 ? work.user_comment_num : 0
         json.absence_penalty work.absence_penalty
       end
 
diff --git a/db/migrate/20200310081817_add_homework_common_id_to_student_works_score.rb b/db/migrate/20200310081817_add_homework_common_id_to_student_works_score.rb
new file mode 100644
index 000000000..bef02e7e1
--- /dev/null
+++ b/db/migrate/20200310081817_add_homework_common_id_to_student_works_score.rb
@@ -0,0 +1,5 @@
+class AddHomeworkCommonIdToStudentWorksScore < ActiveRecord::Migration[5.2]
+  def change
+    add_column :student_works_scores, :homework_common_id, :integer, default: 0, index: true
+  end
+end
diff --git a/db/migrate/20200310082003_migrate_student_works_score_homework.rb b/db/migrate/20200310082003_migrate_student_works_score_homework.rb
new file mode 100644
index 000000000..3b8c1c10d
--- /dev/null
+++ b/db/migrate/20200310082003_migrate_student_works_score_homework.rb
@@ -0,0 +1,7 @@
+class MigrateStudentWorksScoreHomework < ActiveRecord::Migration[5.2]
+  def change
+    StudentWorksScore.includes(:student_work).find_each do |score|
+      score.update_column("homework_common_id", score.student_work&.homework_common_id)
+    end
+  end
+end