From 9bde634789e6c2877f3de7f5fcbbb6585d9ade77 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Thu, 5 Mar 2020 01:19:58 +0800 Subject: [PATCH 01/28] =?UTF-8?q?=E8=AF=BE=E5=A0=82=E7=AD=BE=E5=88=B0?= =?UTF-8?q?=E5=8A=A8=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/weapps/courses_controller.rb | 20 +++++++++++++++++--- app/models/course_activity.rb | 9 +++++---- app/models/course_attendance.rb | 9 ++++++++- 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/app/controllers/weapps/courses_controller.rb b/app/controllers/weapps/courses_controller.rb index a0ee59971..2fa3e0693 100644 --- a/app/controllers/weapps/courses_controller.rb +++ b/app/controllers/weapps/courses_controller.rb @@ -8,18 +8,32 @@ class Weapps::CoursesController < Weapps::BaseController def course_activities @course = current_course - homework_commons = @course.homework_commons.where(homework_type: ["practice", "normal"]).homework_published + member = @course.course_members.find_by(user_id: current_user.id, is_active: 1) + + # 签到数据 + attendances = @course.course_attendances + current_date = Date.current + current_end_time = Time.current.strftime("%H:%M:%S") + if @user_course_identity == Course::STUDENT + attendances = attendances.joins(:course_attendance_groups).where(course_attendance_groups: {course_group_id: member.try(:course_group_id).to_i}) + .where("attendance_date < '#{current_date}' or (attendance_date = '#{current_date}' and start_time < '#{current_end_time}')") + end + attendance_ids = attendances.blank? ? "(-1)" : "(" + attendances.pluck(:id).join(",") + ")" + + homework_commons = @course.homework_commons.where(homework_type: ["practice", "normal"]).homework_published if (@user_course_identity == Course::STUDENT && member.try(:course_group_id).to_i == 0) || @user_course_identity > Course::STUDENT homework_commons = homework_commons.unified_setting elsif @user_course_identity == Course::STUDENT - not_homework_ids = @course.homework_group_settings.none_published.where("course_group_id = #{member.try(:course_group_id)}").pluck(:homework_common_id) + not_homework_ids = @course.homework_group_settings.none_published.where("course_group_id = #{member.try(:course_group_id)}") + .pluck(:homework_common_id) homework_commons = homework_commons.where.not(id: not_homework_ids) end homework_ids = homework_commons.blank? ? "(-1)" : "(" + homework_commons.pluck(:id).join(",") + ")" activities = @course.course_activities.where("course_act_type in ('Course', 'CourseMessage') or - (course_act_type = 'HomeworkCommon' and course_act_id in #{homework_ids})").order("id desc") + (course_act_type = 'HomeworkCommon' and course_act_id in #{homework_ids}) or + (course_act_type = 'CourseAttendance' and course_act_id in #{attendance_ids})").order("id desc") @activities_count = activities.size @activities = paginate activities.includes(:course_act, user: :user_extension) end diff --git a/app/models/course_activity.rb b/app/models/course_activity.rb index d9930596c..e31da31a8 100644 --- a/app/models/course_activity.rb +++ b/app/models/course_activity.rb @@ -2,10 +2,11 @@ class CourseActivity < ApplicationRecord belongs_to :course_act, polymorphic: true belongs_to :course belongs_to :user - belongs_to :exercise - belongs_to :poll - belongs_to :course_message - belongs_to :homework_common + belongs_to :exercise, optional: true + belongs_to :poll, optional: true + belongs_to :course_message, optional: true + belongs_to :homework_common, optional: true + belongs_to :course_attendance, optional: true # after_create :add_course_lead diff --git a/app/models/course_attendance.rb b/app/models/course_attendance.rb index 72a09750c..1b1d1ed2f 100644 --- a/app/models/course_attendance.rb +++ b/app/models/course_attendance.rb @@ -9,13 +9,15 @@ class CourseAttendance < ApplicationRecord has_many :course_attendance_groups, dependent: :destroy has_many :course_member_attendances, dependent: :destroy + has_one :course_act, class_name: 'CourseActivity', as: :course_act, dependent: :destroy + validates :name, presence: true validates :mode, presence: true validates :attendance_date, presence: true validates :start_time, presence: true validates :end_time, presence: true - after_create :generate_attendance_code + after_create :generate_attendance_code, :act_as_course_activity # 正常签到人数 def normal_count @@ -43,6 +45,11 @@ class CourseAttendance < ApplicationRecord a_start_time < Time.current && Time.current < a_end_time end + #课程动态公共表记录 + def act_as_course_activity + CourseActivity.create(user_id: user_id, course_id: course_id, course_act: self) + end + # 延迟生成邀请码 def attendance_code return generate_attendance_code From e88c4f3d535c03babc3585f94414a5cad1541480 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Thu, 5 Mar 2020 01:25:32 +0800 Subject: [PATCH 02/28] =?UTF-8?q?=E8=AF=BE=E5=A0=82=E7=AD=BE=E5=88=B0?= =?UTF-8?q?=E5=8A=A8=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/application_controller.rb | 2 +- app/controllers/weapps/attendances_controller.rb | 2 +- app/controllers/weapps/courses_controller.rb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index b7a74cbc1..90a5e494e 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -321,7 +321,7 @@ class ApplicationController < ActionController::Base end if !User.current.logged? && Rails.env.development? - User.current = User.find 3117 + User.current = User.find 1 end diff --git a/app/controllers/weapps/attendances_controller.rb b/app/controllers/weapps/attendances_controller.rb index 49c5c412d..da305bf8b 100644 --- a/app/controllers/weapps/attendances_controller.rb +++ b/app/controllers/weapps/attendances_controller.rb @@ -14,7 +14,7 @@ class Weapps::AttendancesController < ApplicationController group_ids.each do |group_id| @course.course_attendance_groups.create!(course_group_id: group_id, course_attendance: attendance) end - CreateStudentAttendanceRecordJob.perform_now(attendance.id, group_ids) + CreateStudentAttendanceRecordJob.perform_later(attendance.id, group_ids) else @course.course_attendance_groups.create!(course_group_id: 0, course_attendance: attendance) CreateStudentAttendanceRecordJob.perform_later(attendance.id, [0]) diff --git a/app/controllers/weapps/courses_controller.rb b/app/controllers/weapps/courses_controller.rb index 2fa3e0693..e1ceb6fd3 100644 --- a/app/controllers/weapps/courses_controller.rb +++ b/app/controllers/weapps/courses_controller.rb @@ -16,7 +16,7 @@ class Weapps::CoursesController < Weapps::BaseController current_date = Date.current current_end_time = Time.current.strftime("%H:%M:%S") if @user_course_identity == Course::STUDENT - attendances = attendances.joins(:course_attendance_groups).where(course_attendance_groups: {course_group_id: member.try(:course_group_id).to_i}) + attendances = attendances.joins(:course_attendance_groups).where(course_attendance_groups: {course_group_id: [member.try(:course_group_id).to_i, 0]}) .where("attendance_date < '#{current_date}' or (attendance_date = '#{current_date}' and start_time < '#{current_end_time}')") end attendance_ids = attendances.blank? ? "(-1)" : "(" + attendances.pluck(:id).join(",") + ")" From 6b7a7f38b8be7c01243fc62c3b141580e0297af3 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Thu, 5 Mar 2020 01:29:39 +0800 Subject: [PATCH 03/28] =?UTF-8?q?=E7=94=A8=E6=88=B7=E8=BF=90=E7=94=A8?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=8C=89=E7=85=A7=E7=94=A8=E6=88=B7=E6=95=B0?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user_schools_statistics_controller.rb | 2 +- .../admins/user_schools_statistic_query.rb | 66 ++++--------------- 2 files changed, 13 insertions(+), 55 deletions(-) diff --git a/app/controllers/admins/user_schools_statistics_controller.rb b/app/controllers/admins/user_schools_statistics_controller.rb index 4269804df..a4680d5a2 100644 --- a/app/controllers/admins/user_schools_statistics_controller.rb +++ b/app/controllers/admins/user_schools_statistics_controller.rb @@ -9,7 +9,7 @@ class Admins::UserSchoolsStatisticsController < Admins::BaseController end def index - default_sort('finish_challenge_count', 'desc') + default_sort('cnt', 'desc') total_count, schools = Admins::UserSchoolsStatisticQuery.call(params) @schools = paginate schools, total_count: total_count diff --git a/app/queries/admins/user_schools_statistic_query.rb b/app/queries/admins/user_schools_statistic_query.rb index a29f07afd..1427bbbcd 100644 --- a/app/queries/admins/user_schools_statistic_query.rb +++ b/app/queries/admins/user_schools_statistic_query.rb @@ -3,15 +3,15 @@ class Admins::UserSchoolsStatisticQuery < ApplicationQuery attr_reader :params - sort_columns :study_challenge_count, :finish_challenge_count, :study_shixun_count, :finish_shixun_count, - default_by: :finish_challenge_count, default_direction: :desc + sort_columns :cnt, + default_by: :cnt, default_direction: :desc def initialize(params) @params = params end def call - schools = School.all + schools = School if params[:province].present? schools = schools.where("province like ?", "%#{params[:province]}%") end @@ -21,15 +21,15 @@ class Admins::UserSchoolsStatisticQuery < ApplicationQuery end total = schools.count + Rails.logger.info("######:#{total}") # 根据排序字段进行查询 - #schools = query_by_sort_column(schools, params[:sort_by]) + schools = query_by_sort_column(schools.group(:id), params[:sort_by]) #schools = custom_sort(schools, params[:sort_by], params[:sort_direction]) - # schools = schools.limit(page_size).offset(offset).to_a - # 查询并组装其它数据 schools = package_other_data(schools) - + Rails.logger.info("######:#{total}") + Rails.logger.info("######:#{schools.inspect}") [total, schools] end @@ -83,56 +83,14 @@ class Admins::UserSchoolsStatisticQuery < ApplicationQuery schools end - def query_by_sort_column(users, sort_by_column) - base_query_column = 'users.*' + def query_by_sort_column(schools, sort_by_column) + #base_query_column = 'schools.*' case sort_by_column.to_s - when 'study_shixun_count' then - users = - if time_range.present? - users.joins("LEFT JOIN myshixuns ON myshixuns.user_id = users.id "\ - "AND myshixuns.updated_at BETWEEN '#{time_range.min}' AND '#{time_range.max}'") - else - users.left_joins(:myshixuns) - end - - users.select("#{base_query_column}, COUNT(*) study_shixun_count") - when 'finish_shixun_count' then - users = - if time_range.present? - users.joins("LEFT JOIN myshixuns ON myshixuns.user_id = users.id AND myshixuns.status = 1 AND "\ - "myshixuns.updated_at BETWEEN '#{time_range.min}' AND '#{time_range.max}'") - else - users.joins('LEFT JOIN myshixuns ON myshixuns.user_id = users.id AND myshixuns.status = 1') - end - - users.select("#{base_query_column}, COUNT(*) finish_shixun_count") - when 'study_challenge_count' then - users = - if time_range.present? - users.joins('LEFT JOIN myshixuns ON myshixuns.user_id = users.id') - .joins("LEFT JOIN games ON games.myshixun_id = myshixuns.id "\ - "AND games.status IN (0,1,2) AND games.updated_at BETWEEN '#{time_range.min}' AND '#{time_range.max}'") - else - users.joins('LEFT JOIN myshixuns ON myshixuns.user_id = users.id') - .joins("LEFT JOIN games ON games.myshixun_id = myshixuns.id AND games.status IN (0,1,2)") - end - - users.select("#{base_query_column}, COUNT(*) study_challenge_count") - when 'finish_challenge_count' then - users = - if time_range.present? - users#.joins('LEFT JOIN myshixuns ON myshixuns.user_id = users.id') - .joins("LEFT JOIN games ON games.user_id = users.id "\ - "AND games.status = 2 AND games.updated_at BETWEEN '#{time_range.min}' AND '#{time_range.max}'") - else - users#.joins('LEFT JOIN myshixuns ON myshixuns.user_id = users.id') - .joins("LEFT JOIN games ON games.user_id = users.id AND games.status = 2") - end - - users.select("#{base_query_column}, COUNT(*) finish_challenge_count") + when 'cnt' then + schools.left_joins(:user_extensions).select("schools.*, count(*) cnt").order("cnt desc") else - users + schools end end From 903f5d21a8ad813cb31ce9f9168b7a6efad76955 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Thu, 5 Mar 2020 01:31:26 +0800 Subject: [PATCH 04/28] =?UTF-8?q?=E5=8E=BB=E9=99=A4=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/queries/admins/user_schools_statistic_query.rb | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/queries/admins/user_schools_statistic_query.rb b/app/queries/admins/user_schools_statistic_query.rb index 1427bbbcd..d68c0b825 100644 --- a/app/queries/admins/user_schools_statistic_query.rb +++ b/app/queries/admins/user_schools_statistic_query.rb @@ -21,15 +21,12 @@ class Admins::UserSchoolsStatisticQuery < ApplicationQuery end total = schools.count - Rails.logger.info("######:#{total}") # 根据排序字段进行查询 schools = query_by_sort_column(schools.group(:id), params[:sort_by]) #schools = custom_sort(schools, params[:sort_by], params[:sort_direction]) schools = schools.limit(page_size).offset(offset).to_a # 查询并组装其它数据 schools = package_other_data(schools) - Rails.logger.info("######:#{total}") - Rails.logger.info("######:#{schools.inspect}") [total, schools] end From 2d0ac4d76542fac74fd2919667e4cdf2ed603110 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Thu, 5 Mar 2020 11:00:04 +0800 Subject: [PATCH 05/28] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=99=A2=E6=A0=A1?= =?UTF-8?q?=E8=AF=84=E6=B5=8B=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/tasks/sync_evaluate.rake | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/lib/tasks/sync_evaluate.rake b/lib/tasks/sync_evaluate.rake index f82d73126..14dc39b50 100644 --- a/lib/tasks/sync_evaluate.rake +++ b/lib/tasks/sync_evaluate.rake @@ -2,16 +2,18 @@ desc "同步学院或者单位评测数" namespace :sync_evaluate do task outpus_count: :environment do - School.find_each do |school| - puts school.id - evaluate_count = Game.find_by_sql("select sum(g.evaluate_count) as e_count from games g, user_extensions ue where - g.user_id = ue.user_id and ue.school_id = '#{school.id}'").first.try(:e_count) + School.find_in_batches(batch_size: 500) do |school| + Parallel.each_with_index(school, in_processes: 4) do |s| + puts "school_id:#{s.id}" + evaluate_count = Game.find_by_sql("select sum(g.evaluate_count) as e_count from games g, user_extensions ue where + g.user_id = ue.user_id and ue.school_id = '#{s.id}'").first.try(:e_count) - report = SchoolReport.find_or_initialize_by(school_id: school.id) - report.school_name = school.name - report.shixun_evaluate_count = evaluate_count + report = SchoolReport.find_or_initialize_by(school_id: s.id) + report.school_name = s.name + report.shixun_evaluate_count = evaluate_count - report.save + report.save + end end end end \ No newline at end of file From f31a4c35286458642c44ec9b095cbf2b732fd3ff Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Thu, 5 Mar 2020 11:31:46 +0800 Subject: [PATCH 06/28] =?UTF-8?q?=E7=AD=BE=E5=88=B0=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/weapps/attendances_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/weapps/attendances_controller.rb b/app/controllers/weapps/attendances_controller.rb index da305bf8b..09f2ddddb 100644 --- a/app/controllers/weapps/attendances_controller.rb +++ b/app/controllers/weapps/attendances_controller.rb @@ -66,8 +66,8 @@ class Weapps::AttendancesController < ApplicationController @leave_count = 0 @absence_count = 0 else - @normal_count = @course.course_member_attendances.where(course_attendance_id: student_attendance_ids, attendance_status: "NORMAL").size - @leave_count = @course.course_member_attendances.where(course_attendance_id: student_attendance_ids, attendance_status: "LEAVE").size + @normal_count = @course.course_member_attendances.where(course_member_id: member&.id, course_attendance_id: student_attendance_ids, attendance_status: "NORMAL").size + @leave_count = @course.course_member_attendances.where(course_member_id: member&.id, course_attendance_id: student_attendance_ids, attendance_status: "LEAVE").size @absence_count = student_attendance_ids.uniq.size - @normal_count - @leave_count end From cbcbd292ab789fa34c2b4e6c87c31e6be374af7f Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Thu, 5 Mar 2020 12:02:56 +0800 Subject: [PATCH 07/28] =?UTF-8?q?=E7=AD=BE=E5=88=B0=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/application_controller.rb | 2 +- app/controllers/weapps/attendances_controller.rb | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 90a5e494e..b7a74cbc1 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -321,7 +321,7 @@ class ApplicationController < ActionController::Base end if !User.current.logged? && Rails.env.development? - User.current = User.find 1 + User.current = User.find 3117 end diff --git a/app/controllers/weapps/attendances_controller.rb b/app/controllers/weapps/attendances_controller.rb index 09f2ddddb..29903f297 100644 --- a/app/controllers/weapps/attendances_controller.rb +++ b/app/controllers/weapps/attendances_controller.rb @@ -68,7 +68,8 @@ class Weapps::AttendancesController < ApplicationController else @normal_count = @course.course_member_attendances.where(course_member_id: member&.id, course_attendance_id: student_attendance_ids, attendance_status: "NORMAL").size @leave_count = @course.course_member_attendances.where(course_member_id: member&.id, course_attendance_id: student_attendance_ids, attendance_status: "LEAVE").size - @absence_count = student_attendance_ids.uniq.size - @normal_count - @leave_count + # 旷课只统计历史签到的 + @absence_count = @course.course_member_attendances.where(course_member_id: member&.id, course_attendance_id: @history_attendances.pluck(:id), attendance_status: "ABSENCE").size end @all_history_count = @history_attendances.size From e48006e62d10770fa2d0eeb14466d30fb44971f8 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Thu, 5 Mar 2020 12:16:54 +0800 Subject: [PATCH 08/28] =?UTF-8?q?=E5=AD=A6=E7=94=9F=E7=AD=BE=E5=88=B0?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/application_controller.rb | 2 +- .../weapps/attendances_controller.rb | 61 ++++++++++--------- 2 files changed, 34 insertions(+), 29 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index b7a74cbc1..90a5e494e 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -321,7 +321,7 @@ class ApplicationController < ActionController::Base end if !User.current.logged? && Rails.env.development? - User.current = User.find 3117 + User.current = User.find 1 end diff --git a/app/controllers/weapps/attendances_controller.rb b/app/controllers/weapps/attendances_controller.rb index 29903f297..6d65219f0 100644 --- a/app/controllers/weapps/attendances_controller.rb +++ b/app/controllers/weapps/attendances_controller.rb @@ -44,36 +44,41 @@ class Weapps::AttendancesController < ApplicationController def student_attendances # tip_exception("学生身份的签到列表") if @user_course_identity != Course::STUDENT member = @course.students.find_by(user_id: current_user.id) - current_date = Date.current - current_end_time = Time.current.strftime("%H:%M:%S") - - # 先算出该学生所在分班的签到id - # 分班id为0 表示签到不限制分班 - group_ids = [member&.course_group_id.to_i, 0] - all_attendance_ids = @course.course_attendance_groups.where(course_group_id: group_ids).pluck(:course_attendance_id) - - @history_attendances = @course.course_attendances.where(id: all_attendance_ids.uniq). - where("attendance_date < '#{current_date}' or (attendance_date = '#{current_date}' and end_time < '#{current_end_time}')").order("id desc") - @current_attendance = @course.course_attendances.where(id: all_attendance_ids.uniq). - where("attendance_date = '#{current_date}' and start_time <= '#{current_end_time}' and end_time > '#{current_end_time}'") - @history_count = @history_attendances.size - - student_attendance_ids = @history_attendances.pluck(:id) - student_attendance_ids += @current_attendance.present? ? @current_attendance.pluck(:id) : [] + if member.present? + current_date = Date.current + current_end_time = Time.current.strftime("%H:%M:%S") + + # 先算出该学生所在分班的签到id + # 分班id为0 表示签到不限制分班 + group_ids = [member&.course_group_id.to_i, 0] + all_attendance_ids = @course.course_attendance_groups.where(course_group_id: group_ids).pluck(:course_attendance_id) + + # 学生的历史签到只统计加入课堂后创建的签到 + history_attendance_ids = member.course_member_attendances.where(course_id: @course.id).pluck(:course_attendance_id) + + @history_attendances = @course.course_attendances.where(id: history_attendance_ids.uniq). + where("attendance_date < '#{current_date}' or (attendance_date = '#{current_date}' and end_time < '#{current_end_time}')").order("id desc") + @current_attendance = @course.course_attendances.where(id: all_attendance_ids.uniq). + where("attendance_date = '#{current_date}' and start_time <= '#{current_end_time}' and end_time > '#{current_end_time}'") + @history_count = @history_attendances.size + + student_attendance_ids = @history_attendances.pluck(:id) + student_attendance_ids += @current_attendance.present? ? @current_attendance.pluck(:id) : [] + + if student_attendance_ids.uniq.blank? + @normal_count = 0 + @leave_count = 0 + @absence_count = 0 + else + @normal_count = @course.course_member_attendances.where(course_member_id: member&.id, course_attendance_id: student_attendance_ids, attendance_status: "NORMAL").size + @leave_count = @course.course_member_attendances.where(course_member_id: member&.id, course_attendance_id: student_attendance_ids, attendance_status: "LEAVE").size + # 旷课只统计历史签到的 + @absence_count = @course.course_member_attendances.where(course_member_id: member&.id, course_attendance_id: @history_attendances.pluck(:id), attendance_status: "ABSENCE").size + end - if student_attendance_ids.uniq.blank? - @normal_count = 0 - @leave_count = 0 - @absence_count = 0 - else - @normal_count = @course.course_member_attendances.where(course_member_id: member&.id, course_attendance_id: student_attendance_ids, attendance_status: "NORMAL").size - @leave_count = @course.course_member_attendances.where(course_member_id: member&.id, course_attendance_id: student_attendance_ids, attendance_status: "LEAVE").size - # 旷课只统计历史签到的 - @absence_count = @course.course_member_attendances.where(course_member_id: member&.id, course_attendance_id: @history_attendances.pluck(:id), attendance_status: "ABSENCE").size + @all_history_count = @history_attendances.size + @history_attendances = paginate @history_attendances.includes(:course_member_attendances) end - - @all_history_count = @history_attendances.size - @history_attendances = paginate @history_attendances.includes(:course_member_attendances) end def show From 55fa24917975e57392d5a84edb81fde1f3d547ce Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Thu, 5 Mar 2020 12:31:01 +0800 Subject: [PATCH 09/28] =?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/student_join_attendance_record_job.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/jobs/student_join_attendance_record_job.rb b/app/jobs/student_join_attendance_record_job.rb index f1b33c492..a7a5d285d 100644 --- a/app/jobs/student_join_attendance_record_job.rb +++ b/app/jobs/student_join_attendance_record_job.rb @@ -10,7 +10,7 @@ class StudentJoinAttendanceRecordJob < ApplicationJob current_end_time = Time.current.strftime("%H:%M:%S") group_ids = member.course_group_id == 0 ? [0] : [member.course_group_id, 0] - current_attendance_ids = course.course_attendances.joins(:course_attendance_groups).where(course_group_id: group_ids). + current_attendance_ids = course.course_attendances.joins(:course_attendance_groups).where(course_attendance_groups: {course_group_id: group_ids}). where("(attendance_date = '#{current_date}' and start_time <= '#{current_end_time}' and end_time > '#{current_end_time}') or (attendance_date > '#{current_date}')").pluck(:id) From 21b094c13ce31ba62da121e922a81bd27fd4809f Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Thu, 5 Mar 2020 13:00:24 +0800 Subject: [PATCH 10/28] =?UTF-8?q?=E8=BF=90=E8=90=A5=E9=93=BE=E6=8E=A5?= =?UTF-8?q?=E5=8E=BB=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/application_controller.rb | 8 +++++++- app/views/users/get_navigation_info.json.jbuilder | 2 +- lib/tasks/sync_evaluate.rake | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 90a5e494e..3ee75fbe5 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -70,7 +70,13 @@ class ApplicationController < ActionController::Base # 实训的访问权限 def shixun_access_allowed if !current_user.shixun_permission(@shixun) - tip_exception(403, "..") + if @shixun.user_scope == 1 + school_id = @shixun.shixun_schools.first&.school_id + name = School.find_by(id: school_id)&.name + tip_exception(-5, "当前实训只对#{name}等单位开放") + else + tip_exception(403, "..") + end end end diff --git a/app/views/users/get_navigation_info.json.jbuilder b/app/views/users/get_navigation_info.json.jbuilder index a0f10677c..8af3691f3 100644 --- a/app/views/users/get_navigation_info.json.jbuilder +++ b/app/views/users/get_navigation_info.json.jbuilder @@ -42,7 +42,7 @@ json.top do # 云上实验室管理权限 laboratory_user = current_laboratory.laboratory_users.exists?(user_id: @user&.id) || @user&.admin_or_business? - json.laboratory_user laboratory_user + # json.laboratory_user laboratory_user json.laboratory_admin_url laboratory_user ? "/cooperative" : nil end diff --git a/lib/tasks/sync_evaluate.rake b/lib/tasks/sync_evaluate.rake index 14dc39b50..89885b089 100644 --- a/lib/tasks/sync_evaluate.rake +++ b/lib/tasks/sync_evaluate.rake @@ -3,7 +3,7 @@ desc "同步学院或者单位评测数" namespace :sync_evaluate do task outpus_count: :environment do School.find_in_batches(batch_size: 500) do |school| - Parallel.each_with_index(school, in_processes: 4) do |s| + Parallel.each_with_index(school, in_processes: 5) do |s| puts "school_id:#{s.id}" evaluate_count = Game.find_by_sql("select sum(g.evaluate_count) as e_count from games g, user_extensions ue where g.user_id = ue.user_id and ue.school_id = '#{s.id}'").first.try(:e_count) From d8f4c415b8d70179ebb908cc27225292fb5c23da Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Thu, 5 Mar 2020 13:06:31 +0800 Subject: [PATCH 11/28] =?UTF-8?q?=E8=BF=98=E5=8E=9F=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/application_controller.rb | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 3ee75fbe5..59ec88fc7 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -70,14 +70,17 @@ class ApplicationController < ActionController::Base # 实训的访问权限 def shixun_access_allowed if !current_user.shixun_permission(@shixun) - if @shixun.user_scope == 1 - school_id = @shixun.shixun_schools.first&.school_id - name = School.find_by(id: school_id)&.name - tip_exception(-5, "当前实训只对#{name}等单位开放") - else - tip_exception(403, "..") - end + tip_exception(403, "..") end + # if !current_user.shixun_permission(@shixun) + # if @shixun.user_scope == 1 + # school_id = @shixun.shixun_schools.first&.school_id + # name = School.find_by(id: school_id)&.name + # tip_exception(-5, "当前实训只对#{name}等单位开放") + # else + # tip_exception(403, "..") + # end + # end end def admin_or_business? From 34dfcd51d44f38b12d7cdd847671609a128d11e3 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Thu, 5 Mar 2020 13:42:36 +0800 Subject: [PATCH 12/28] =?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/homework_end_update_score_job.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/jobs/homework_end_update_score_job.rb b/app/jobs/homework_end_update_score_job.rb index 4ba4502fc..dec13cc36 100644 --- a/app/jobs/homework_end_update_score_job.rb +++ b/app/jobs/homework_end_update_score_job.rb @@ -22,7 +22,7 @@ class HomeworkEndUpdateScoreJob < ApplicationJob challenge_settings = homework.homework_challenge_settings myshixuns.find_each(batch_size: 100) do |myshixun| work = student_works.select{|work| work.user_id == myshixun.user_id}.first - if work && myshixun && (work.update_time.nil? || work.update_time < myshixun.updated_at) + if work.present? && myshixun games = myshixun.games.where(challenge_id: challenge_settings.pluck(:challenge_id)) HomeworksService.new.update_myshixun_work_score work, myshixun, games, homework, challenge_settings end From 509aefbdb361f23758dd1e1770cd5038cb32ad53 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Thu, 5 Mar 2020 13:51:10 +0800 Subject: [PATCH 13/28] tiaoz --- app/jobs/student_join_attendance_record_job.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/jobs/student_join_attendance_record_job.rb b/app/jobs/student_join_attendance_record_job.rb index a7a5d285d..28935f771 100644 --- a/app/jobs/student_join_attendance_record_job.rb +++ b/app/jobs/student_join_attendance_record_job.rb @@ -21,7 +21,9 @@ class StudentJoinAttendanceRecordJob < ApplicationJob CourseMemberAttendance.bulk_insert(*attrs) do |worker| current_attendance_ids.each do |attendance_id| - worker.add same_attrs.merge(course_attendance_id: attendance_id) + unless course.course_member_attendances.where(course_member_id: member_id, course_attendance_id: attendance_id).exists? + worker.add same_attrs.merge(course_attendance_id: attendance_id) + end end end end From 572b35be76f5e73683c1ce83e65a573a321cbfa9 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Thu, 5 Mar 2020 14:25:04 +0800 Subject: [PATCH 14/28] =?UTF-8?q?=E7=AD=BE=E5=88=B0=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E7=9A=84=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../weapps/attendances_controller.rb | 4 ++-- .../course_member_attendances_controller.rb | 21 +++++++++++++++---- .../index.json.jbuilder | 11 ++++++++-- 3 files changed, 28 insertions(+), 8 deletions(-) diff --git a/app/controllers/weapps/attendances_controller.rb b/app/controllers/weapps/attendances_controller.rb index 6d65219f0..2ed1d2b14 100644 --- a/app/controllers/weapps/attendances_controller.rb +++ b/app/controllers/weapps/attendances_controller.rb @@ -14,10 +14,10 @@ class Weapps::AttendancesController < ApplicationController group_ids.each do |group_id| @course.course_attendance_groups.create!(course_group_id: group_id, course_attendance: attendance) end - CreateStudentAttendanceRecordJob.perform_later(attendance.id, group_ids) + CreateStudentAttendanceRecordJob.perform_now(attendance.id, group_ids) else @course.course_attendance_groups.create!(course_group_id: 0, course_attendance: attendance) - CreateStudentAttendanceRecordJob.perform_later(attendance.id, [0]) + CreateStudentAttendanceRecordJob.perform_now(attendance.id, [0]) end render_ok({attendance_id: attendance.id}) end diff --git a/app/controllers/weapps/course_member_attendances_controller.rb b/app/controllers/weapps/course_member_attendances_controller.rb index 0b3044dab..a7d6ee1f9 100644 --- a/app/controllers/weapps/course_member_attendances_controller.rb +++ b/app/controllers/weapps/course_member_attendances_controller.rb @@ -4,13 +4,26 @@ class Weapps::CourseMemberAttendancesController < ApplicationController def index attendance = CourseAttendance.find params[:attendance_id] + if attendance.course_attendance_groups.first&.course_group_id.to_i == 0 + @members = attendance.course.students + else + @members = attendance.course.students.where(course_group_id: attendance.course_attendance_groups.pluck(:course_group_id)) + end @member_attendances = attendance.course_member_attendances if params[:group_ids].present? - @member_attendances = @member_attendances.joins(:course_member).where(course_members: {course_group_id: params[:group_ids]}) + @members = @members.where(course_group_id: params[:group_ids]) + end + + if params[:attendance_status].present? + @members = @members.joins(:course_member_attendances).where(course_member_attendances: {course_attendance_id: attendance.id, attendance_status: params[:attendance_status]}) end - @member_attendances = @member_attendances.where(attendance_status: params[:attendance_status]) if params[:attendance_status].present? - @member_attendances = @member_attendances.joins(user: :user_extension).order("attendance_status=1 desc, course_member_attendances.updated_at desc, user_extensions.student_id asc") - @member_attendances = paginate @member_attendances.preload(user: :user_extension) + + @members = @members.joins(:course_member_attendances).order("attendance_status=1 desc, course_member_attendances.updated_at desc") + @members = paginate @members.preload(user: :user_extension).uniq + + # @member_attendances = @member_attendances.where(attendance_status: params[:attendance_status]) if params[:attendance_status].present? + # @member_attendances = @member_attendances.joins(user: :user_extension).order("attendance_status=1 desc, course_member_attendances.updated_at desc, user_extensions.student_id asc") + # @member_attendances = paginate @member_attendances.preload(user: :user_extension) end def create diff --git a/app/views/weapps/course_member_attendances/index.json.jbuilder b/app/views/weapps/course_member_attendances/index.json.jbuilder index d6d953af8..30d3e721e 100644 --- a/app/views/weapps/course_member_attendances/index.json.jbuilder +++ b/app/views/weapps/course_member_attendances/index.json.jbuilder @@ -1,5 +1,12 @@ -json.member_attendances @member_attendances.each do |member| - json.(member, :user_id, :attendance_status) +# json.member_attendances @member_attendances.each do |member| +# json.(member, :user_id, :attendance_status) +# json.user_name member.user&.real_name +# json.student_id member.user&.student_id +# end + +json.member_attendances @members.each do |member| + json.(member, :user_id) json.user_name member.user&.real_name json.student_id member.user&.student_id + json.attendance_status @member_attendances.select{|attendance| attendance.course_member_id == member.id}.first&.attendance_status || "ABSENCE" end \ No newline at end of file From 304ae69f4e5e5d5a1f3800457c774e635b82cd3e Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Thu, 5 Mar 2020 15:28:09 +0800 Subject: [PATCH 15/28] =?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/application_controller.rb | 2 +- app/jobs/student_join_attendance_record_job.rb | 2 ++ app/models/course_attendance.rb | 2 +- app/models/course_member.rb | 3 +++ 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 59ec88fc7..c50c2a185 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -330,7 +330,7 @@ class ApplicationController < ActionController::Base end if !User.current.logged? && Rails.env.development? - User.current = User.find 1 + User.current = User.find 3117 end diff --git a/app/jobs/student_join_attendance_record_job.rb b/app/jobs/student_join_attendance_record_job.rb index 28935f771..5e9f1ee08 100644 --- a/app/jobs/student_join_attendance_record_job.rb +++ b/app/jobs/student_join_attendance_record_job.rb @@ -13,6 +13,8 @@ class StudentJoinAttendanceRecordJob < ApplicationJob current_attendance_ids = course.course_attendances.joins(:course_attendance_groups).where(course_attendance_groups: {course_group_id: group_ids}). where("(attendance_date = '#{current_date}' and start_time <= '#{current_end_time}' and end_time > '#{current_end_time}') or (attendance_date > '#{current_date}')").pluck(:id) + all_group_attendance_ids = course.course_attendances.joins(:course_attendance_groups).where(course_attendance_groups: {course_group_id: 0}) + member.course_member_attendances.where.not(course_attendance_id: all_group_attendance_ids+current_attendance_ids).delete_all attrs = %i[course_attendance_id user_id course_member_id course_id course_group_id created_at updated_at] diff --git a/app/models/course_attendance.rb b/app/models/course_attendance.rb index 1b1d1ed2f..1bd96fc29 100644 --- a/app/models/course_attendance.rb +++ b/app/models/course_attendance.rb @@ -11,7 +11,7 @@ class CourseAttendance < ApplicationRecord has_one :course_act, class_name: 'CourseActivity', as: :course_act, dependent: :destroy - validates :name, presence: true + validates :name, presence: true, length: { maximum: 60, too_long: "不能超过60个字符" } validates :mode, presence: true validates :attendance_date, presence: true validates :start_time, presence: true diff --git a/app/models/course_member.rb b/app/models/course_member.rb index ec326a7ca..e62a4151e 100644 --- a/app/models/course_member.rb +++ b/app/models/course_member.rb @@ -24,6 +24,9 @@ class CourseMember < ApplicationRecord # after_destroy :delete_works # after_create :work_operation after_create :create_attendance_record + after_commit :create_attendance_record + + private def create_attendance_record StudentJoinAttendanceRecordJob.perform_later(id) From 6b22c5254911c324e318f99fcced8d5a6022aa9f Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Thu, 5 Mar 2020 16:17:44 +0800 Subject: [PATCH 16/28] =?UTF-8?q?=E7=AD=BE=E5=88=B0=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/application_controller.rb | 2 +- .../weapps/attendances_controller.rb | 7 ++++--- app/helpers/weapps/attendances_helper.rb | 6 +++--- app/models/course_group.rb | 2 ++ .../weapps/attendances/show.json.jbuilder | 21 ++++++++++++++++--- 5 files changed, 28 insertions(+), 10 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index c50c2a185..59ec88fc7 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -330,7 +330,7 @@ class ApplicationController < ActionController::Base end if !User.current.logged? && Rails.env.development? - User.current = User.find 3117 + User.current = User.find 1 end diff --git a/app/controllers/weapps/attendances_controller.rb b/app/controllers/weapps/attendances_controller.rb index 2ed1d2b14..fc379d16e 100644 --- a/app/controllers/weapps/attendances_controller.rb +++ b/app/controllers/weapps/attendances_controller.rb @@ -90,12 +90,13 @@ class Weapps::AttendancesController < ApplicationController @_is_current_attendance = @attendance.current_attendance? if @attendance.course_attendance_groups.first&.course_group_id.to_i == 0 - @groups = @course.course_groups + @group_ids = @course.course_groups.pluck(:id) + [0] else - @groups = @course.course_groups.where(id: @attendance.course_attendance_groups.pluck(:course_group_id)) + @group_ids = @attendance.course_attendance_groups.pluck(:course_group_id) end - @groups = @groups.includes(:course_members) if @_is_current_attendance + @groups = @course.course_groups.where(id: @group_ids) + @course_members = @course.students if @_is_current_attendance @all_attendances = @attendance.course_member_attendances end diff --git a/app/helpers/weapps/attendances_helper.rb b/app/helpers/weapps/attendances_helper.rb index 30591c149..e0223ad74 100644 --- a/app/helpers/weapps/attendances_helper.rb +++ b/app/helpers/weapps/attendances_helper.rb @@ -5,9 +5,9 @@ module Weapps::AttendancesHelper st_attendance.present? ? st_attendance.attendance_status : "ABSENCE" end - def group_attendance_count attendances, group - course_member_ids = group.course_members.pluck(:id) - attendances.select{|attendance| course_member_ids.include?(attendance.course_member_id) && attendance.attendance_status == "NORMAL"}.size + def group_attendance_count attendances, member_ids + # course_member_ids = group.course_members.pluck(:id) + attendances.select{|attendance| member_ids.include?(attendance.course_member_id) && attendance.attendance_status == "NORMAL"}.size end def history_member_count member_attendances, status, attendance_id diff --git a/app/models/course_group.rb b/app/models/course_group.rb index 5bd27804f..79bc6fcab 100644 --- a/app/models/course_group.rb +++ b/app/models/course_group.rb @@ -9,6 +9,8 @@ class CourseGroup < ApplicationRecord has_many :homework_group_settings, :dependent => :destroy scope :by_group_ids, lambda { |ids| where(id: ids)} + has_many :course_attendance_groups, dependent: :destroy + validates :name, length: { maximum: 60, too_long: "不能超过60个字符" } validates_uniqueness_of :name, scope: :course_id, message: "不能创建相同名称的分班" diff --git a/app/views/weapps/attendances/show.json.jbuilder b/app/views/weapps/attendances/show.json.jbuilder index 54d3e870a..1eb73347e 100644 --- a/app/views/weapps/attendances/show.json.jbuilder +++ b/app/views/weapps/attendances/show.json.jbuilder @@ -9,7 +9,22 @@ json.attendance_date @attendance.attendance_date.strftime("%Y/%m/%d") json.start_time @attendance.start_time.strftime("%H:%M") json.end_time @attendance.end_time.strftime("%H:%M") -json.course_groups @groups do |group| - json.(group, :id, :name, :course_members_count) - json.attendance_count group_attendance_count(@all_attendances, group) if @_is_current_attendance +# json.course_groups @group_ids do |group| +# json.(group, :id, :name, :course_members_count) +# json.attendance_count group_attendance_count(@all_attendances, group) if @_is_current_attendance +# end + +json.course_groups @group_ids do |group_id| + if group_id != 0 + group = @groups.select{|group| group.id == group_id}.first + json.(group, :id, :name, :course_members_count) + else + json.id 0 + json.name "未分班" + json.course_members_count @course.none_group_count + end + if @_is_current_attendance + member_ids = @course_members.select{|member| member.course_group_id == group_id}.map(&:id) + json.attendance_count group_attendance_count(@all_attendances, member_ids) + end end \ No newline at end of file From 81c2d27f9f388fddf0a96bc0757ee2b000783819 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Thu, 5 Mar 2020 16:34:26 +0800 Subject: [PATCH 17/28] =?UTF-8?q?=E7=AD=BE=E5=88=B0=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/weapps/attendances_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/weapps/attendances_controller.rb b/app/controllers/weapps/attendances_controller.rb index fc379d16e..d584072c2 100644 --- a/app/controllers/weapps/attendances_controller.rb +++ b/app/controllers/weapps/attendances_controller.rb @@ -9,7 +9,7 @@ class Weapps::AttendancesController < ApplicationController def create ActiveRecord::Base.transaction do attendance = @course.course_attendances.create!(create_params.merge(user_id: current_user.id)) - unless params[:group_ids].blank? + unless params[:group_ids].blank? || @course.course_groups.where(id: params[:group_ids]).count == @course.course_groups.count group_ids = @course.charge_group_ids(current_user) & params[:group_ids].map(&:to_i) group_ids.each do |group_id| @course.course_attendance_groups.create!(course_group_id: group_id, course_attendance: attendance) From 45dc521d6bd53d666837fb47d8c4ede3dabc95bf Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Thu, 5 Mar 2020 16:47:40 +0800 Subject: [PATCH 18/28] =?UTF-8?q?=E7=AD=BE=E5=88=B0=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/course_member.rb | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/app/models/course_member.rb b/app/models/course_member.rb index e62a4151e..21221e7e9 100644 --- a/app/models/course_member.rb +++ b/app/models/course_member.rb @@ -26,11 +26,6 @@ class CourseMember < ApplicationRecord after_create :create_attendance_record after_commit :create_attendance_record - private - - def create_attendance_record - StudentJoinAttendanceRecordJob.perform_later(id) - end def delete_works if self.role == "STUDENT" @@ -166,4 +161,11 @@ class CourseMember < ApplicationRecord end teachers end + + private + + def create_attendance_record + StudentJoinAttendanceRecordJob.perform_later(id) + end + end From efd6a31903a0299a4f0404b86fd7d6f63f9b8242 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Thu, 5 Mar 2020 20:30:58 +0800 Subject: [PATCH 19/28] =?UTF-8?q?=E7=AD=BE=E5=88=B0=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/jobs/student_join_attendance_record_job.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/jobs/student_join_attendance_record_job.rb b/app/jobs/student_join_attendance_record_job.rb index 5e9f1ee08..32807bbec 100644 --- a/app/jobs/student_join_attendance_record_job.rb +++ b/app/jobs/student_join_attendance_record_job.rb @@ -13,7 +13,7 @@ class StudentJoinAttendanceRecordJob < ApplicationJob current_attendance_ids = course.course_attendances.joins(:course_attendance_groups).where(course_attendance_groups: {course_group_id: group_ids}). where("(attendance_date = '#{current_date}' and start_time <= '#{current_end_time}' and end_time > '#{current_end_time}') or (attendance_date > '#{current_date}')").pluck(:id) - all_group_attendance_ids = course.course_attendances.joins(:course_attendance_groups).where(course_attendance_groups: {course_group_id: 0}) + all_group_attendance_ids = course.course_attendances.joins(:course_attendance_groups).where(course_attendance_groups: {course_group_id: 0}).pluck(:id) member.course_member_attendances.where.not(course_attendance_id: all_group_attendance_ids+current_attendance_ids).delete_all attrs = %i[course_attendance_id user_id course_member_id course_id course_group_id created_at updated_at] From 9a1a51e1eeecfe76d4dc27c491bc5e7a30504fb5 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Thu, 5 Mar 2020 20:47:23 +0800 Subject: [PATCH 20/28] =?UTF-8?q?=E5=88=87=E6=8D=A2=E8=BA=AB=E4=BB=BD?= =?UTF-8?q?=E6=97=B6=E8=AE=B0=E5=BD=95=E5=88=86=E7=8F=ADid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/courses_controller.rb | 6 +++++- app/models/course.rb | 2 ++ app/models/teacher_group_record.rb | 4 ++++ app/models/user.rb | 2 ++ .../20200305123517_create_teacher_group_records.rb | 13 +++++++++++++ spec/models/teacher_group_record_spec.rb | 5 +++++ 6 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 app/models/teacher_group_record.rb create mode 100644 db/migrate/20200305123517_create_teacher_group_records.rb create mode 100644 spec/models/teacher_group_record_spec.rb diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index ef6a30d35..c97be34fb 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -747,6 +747,7 @@ class CoursesController < ApplicationController ActiveRecord::Base.transaction do course_student.destroy! course_teacher.update!(is_active: 1) + TeacherCourseGroup.create!(user_id: current_user.id, course_id: @course.id, group_id: course_student.course_group_id) CourseDeleteStudentDeleteWorksJob.perform_later(@course.id, [current_user.id]) end normal_status(0, "切换成功") @@ -766,6 +767,7 @@ class CoursesController < ApplicationController ActiveRecord::Base.transaction do course_student.destroy! course_teacher.update!(is_active: 1) + TeacherCourseGroup.create!(user_id: current_user.id, course_id: @course.id, group_id: course_student.course_group_id) CourseDeleteStudentDeleteWorksJob.perform_later(@course.id, [current_user.id]) end normal_status(0, "切换成功") @@ -788,7 +790,9 @@ class CoursesController < ApplicationController course_student.update_attributes!(is_active: 1) else # 学生身份不存在则创建 - CourseMember.create!(user_id: current_user.id, role: 4, course_id: @course.id) + course_group_id = @course.teacher_course_groups.find_by(user_id: current_user.id)&.group_id.to_i + course_group_id = @course.course_groups.find_by(id: course_group_id)&.id.to_i + CourseMember.create!(user_id: current_user.id, role: 4, course_id: @course.id, course_group_id: course_group_id) CourseAddStudentCreateWorksJob.perform_later(@course.id, [current_user.id]) end normal_status(0, "切换成功") diff --git a/app/models/course.rb b/app/models/course.rb index 5ae7f9484..7e795ff04 100644 --- a/app/models/course.rb +++ b/app/models/course.rb @@ -95,6 +95,8 @@ class Course < ApplicationRecord has_many :course_attendance_groups has_many :course_member_attendances + has_many :teacher_course_groups, dependent: :destroy + validate :validate_sensitive_string scope :hidden, ->(is_hidden = true) { where(is_hidden: is_hidden) } diff --git a/app/models/teacher_group_record.rb b/app/models/teacher_group_record.rb new file mode 100644 index 000000000..2dc9a392d --- /dev/null +++ b/app/models/teacher_group_record.rb @@ -0,0 +1,4 @@ +class TeacherGroupRecord < ApplicationRecord + belongs_to :user + belongs_to :course +end diff --git a/app/models/user.rb b/app/models/user.rb index b3a1da84d..bdd7fc42a 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -160,6 +160,8 @@ class User < ApplicationRecord has_many :examination_banks, dependent: :destroy has_many :examination_intelligent_settings, dependent: :destroy + has_many :teacher_course_groups, dependent: :destroy + # Groups and active users scope :active, lambda { where(status: STATUS_ACTIVE) } diff --git a/db/migrate/20200305123517_create_teacher_group_records.rb b/db/migrate/20200305123517_create_teacher_group_records.rb new file mode 100644 index 000000000..68ec11a2d --- /dev/null +++ b/db/migrate/20200305123517_create_teacher_group_records.rb @@ -0,0 +1,13 @@ +class CreateTeacherGroupRecords < ActiveRecord::Migration[5.2] + def change + create_table :teacher_group_records do |t| + t.references :user + t.references :course + t.integer :group_id + + t.timestamps + end + + add_index :teacher_group_records, [:user_id, :course_id], unique: true + end +end diff --git a/spec/models/teacher_group_record_spec.rb b/spec/models/teacher_group_record_spec.rb new file mode 100644 index 000000000..bf200329d --- /dev/null +++ b/spec/models/teacher_group_record_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe TeacherGroupRecord, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end From e90381efaa07306a962c27f58760549939bdcfa3 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Thu, 5 Mar 2020 20:57:02 +0800 Subject: [PATCH 21/28] =?UTF-8?q?=E5=88=87=E6=8D=A2=E8=BA=AB=E4=BB=BD?= =?UTF-8?q?=E6=97=B6=E8=AE=B0=E5=BD=95=E5=88=86=E7=8F=ADid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/courses_controller.rb | 6 +++--- app/models/course.rb | 2 +- app/models/user.rb | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index c97be34fb..ba00b0a5c 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -747,7 +747,7 @@ class CoursesController < ApplicationController ActiveRecord::Base.transaction do course_student.destroy! course_teacher.update!(is_active: 1) - TeacherCourseGroup.create!(user_id: current_user.id, course_id: @course.id, group_id: course_student.course_group_id) + TeacherGroupRecord.create!(user_id: current_user.id, course_id: @course.id, group_id: course_student.course_group_id) CourseDeleteStudentDeleteWorksJob.perform_later(@course.id, [current_user.id]) end normal_status(0, "切换成功") @@ -767,7 +767,7 @@ class CoursesController < ApplicationController ActiveRecord::Base.transaction do course_student.destroy! course_teacher.update!(is_active: 1) - TeacherCourseGroup.create!(user_id: current_user.id, course_id: @course.id, group_id: course_student.course_group_id) + TeacherGroupRecord.create!(user_id: current_user.id, course_id: @course.id, group_id: course_student.course_group_id) CourseDeleteStudentDeleteWorksJob.perform_later(@course.id, [current_user.id]) end normal_status(0, "切换成功") @@ -790,7 +790,7 @@ class CoursesController < ApplicationController course_student.update_attributes!(is_active: 1) else # 学生身份不存在则创建 - course_group_id = @course.teacher_course_groups.find_by(user_id: current_user.id)&.group_id.to_i + course_group_id = @course.teacher_group_records.find_by(user_id: current_user.id)&.group_id.to_i course_group_id = @course.course_groups.find_by(id: course_group_id)&.id.to_i CourseMember.create!(user_id: current_user.id, role: 4, course_id: @course.id, course_group_id: course_group_id) CourseAddStudentCreateWorksJob.perform_later(@course.id, [current_user.id]) diff --git a/app/models/course.rb b/app/models/course.rb index 7e795ff04..2c76f9579 100644 --- a/app/models/course.rb +++ b/app/models/course.rb @@ -95,7 +95,7 @@ class Course < ApplicationRecord has_many :course_attendance_groups has_many :course_member_attendances - has_many :teacher_course_groups, dependent: :destroy + has_many :teacher_group_records, dependent: :destroy validate :validate_sensitive_string diff --git a/app/models/user.rb b/app/models/user.rb index bdd7fc42a..7e60983d1 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -160,7 +160,7 @@ class User < ApplicationRecord has_many :examination_banks, dependent: :destroy has_many :examination_intelligent_settings, dependent: :destroy - has_many :teacher_course_groups, dependent: :destroy + has_many :teacher_group_records, dependent: :destroy # Groups and active users scope :active, lambda { where(status: STATUS_ACTIVE) } From 4d853aac7fce3e2fa4c4dca127a02b83eeac67cd Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Thu, 5 Mar 2020 21:01:24 +0800 Subject: [PATCH 22/28] =?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 | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index ba00b0a5c..f82775235 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -747,7 +747,12 @@ class CoursesController < ApplicationController ActiveRecord::Base.transaction do course_student.destroy! course_teacher.update!(is_active: 1) - TeacherGroupRecord.create!(user_id: current_user.id, course_id: @course.id, group_id: course_student.course_group_id) + teacher_course_record = @course.teacher_group_records.find_by(user_id: current_user.id) + if teacher_course_record.present? + teacher_course_record.update!(group_id: course_student.course_group_id) + else + TeacherGroupRecord.create!(user_id: current_user.id, course_id: @course.id, group_id: course_student.course_group_id) + end CourseDeleteStudentDeleteWorksJob.perform_later(@course.id, [current_user.id]) end normal_status(0, "切换成功") @@ -767,7 +772,12 @@ class CoursesController < ApplicationController ActiveRecord::Base.transaction do course_student.destroy! course_teacher.update!(is_active: 1) - TeacherGroupRecord.create!(user_id: current_user.id, course_id: @course.id, group_id: course_student.course_group_id) + teacher_course_record = @course.teacher_group_records.find_by(user_id: current_user.id) + if teacher_course_record.present? + teacher_course_record.update!(group_id: course_student.course_group_id) + else + TeacherGroupRecord.create!(user_id: current_user.id, course_id: @course.id, group_id: course_student.course_group_id) + end CourseDeleteStudentDeleteWorksJob.perform_later(@course.id, [current_user.id]) end normal_status(0, "切换成功") From 1ba5860d5a8c41d99d855cc3017737d07ee433ae Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Thu, 5 Mar 2020 21:53:35 +0800 Subject: [PATCH 23/28] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../weapps/course_member_attendances_controller.rb | 1 + app/views/shixuns/_top.json.jbuilder | 2 +- .../weapps/course_member_attendances/index.json.jbuilder | 4 +++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/controllers/weapps/course_member_attendances_controller.rb b/app/controllers/weapps/course_member_attendances_controller.rb index a7d6ee1f9..7e315fc85 100644 --- a/app/controllers/weapps/course_member_attendances_controller.rb +++ b/app/controllers/weapps/course_member_attendances_controller.rb @@ -19,6 +19,7 @@ class Weapps::CourseMemberAttendancesController < ApplicationController end @members = @members.joins(:course_member_attendances).order("attendance_status=1 desc, course_member_attendances.updated_at desc") + @members_count = @members.uniq.count @members = paginate @members.preload(user: :user_extension).uniq # @member_attendances = @member_attendances.where(attendance_status: params[:attendance_status]) if params[:attendance_status].present? diff --git a/app/views/shixuns/_top.json.jbuilder b/app/views/shixuns/_top.json.jbuilder index 130706649..362cfd15b 100644 --- a/app/views/shixuns/_top.json.jbuilder +++ b/app/views/shixuns/_top.json.jbuilder @@ -13,7 +13,7 @@ json.identifier shixun.identifier json.name shixun.name json.stu_num shixun.myshixuns_count json.experience shixun.all_score -json.diffcult diff_to_s(shixun.trainee) +json.diffcult level_to_s(shixun.trainee) json.score_info shixun.shixun_preference_info # todo: 这块可以改成只显示实训的平均分,不用每次都去取每种星的分数了。 json.is_jupyter shixun.is_jupyter # 用于是否显示导航栏中的'背景知识' diff --git a/app/views/weapps/course_member_attendances/index.json.jbuilder b/app/views/weapps/course_member_attendances/index.json.jbuilder index 30d3e721e..cec70b3fe 100644 --- a/app/views/weapps/course_member_attendances/index.json.jbuilder +++ b/app/views/weapps/course_member_attendances/index.json.jbuilder @@ -9,4 +9,6 @@ json.member_attendances @members.each do |member| json.user_name member.user&.real_name json.student_id member.user&.student_id json.attendance_status @member_attendances.select{|attendance| attendance.course_member_id == member.id}.first&.attendance_status || "ABSENCE" -end \ No newline at end of file +end + +json.members_count @members_count \ No newline at end of file From 37b081213cd68090f32399b6e393607b6ea304de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com> Date: Thu, 5 Mar 2020 22:23:41 +0800 Subject: [PATCH 24/28] =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/react/src/modules/tpm/NewHeader.js | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/public/react/src/modules/tpm/NewHeader.js b/public/react/src/modules/tpm/NewHeader.js index 4efb6202b..96291f49b 100644 --- a/public/react/src/modules/tpm/NewHeader.js +++ b/public/react/src/modules/tpm/NewHeader.js @@ -1217,11 +1217,11 @@ submittojoinclass=(value)=>{ <%= link_to '注册', user_join_path, :className => "ml5" %> */} { user===undefined? - + this.educoderlogin()} className="mr5 color-white">登录 注册 - :user.login===""? + :user.login===""? this.educoderlogin()} className="mr5 color-white">登录 注册 @@ -1268,9 +1268,18 @@ submittojoinclass=(value)=>{ } {/*href="https://www.educoder.net/login"*/} +
- {/*{ loadHeader()}*/} - {showSearchOpentype===true?"":this.props.user&&this.props.user.main_site===true?this.showSearchOpen(e)}> + {/*/!*{ loadHeader()}*!/padding-top: 16px!important;*/} + {showSearchOpentype===true?"":this.props.user&&this.props.user.main_site===true?this.showSearchOpen(e)}> {/*"/images/educoder/icon/search.svg" */} From 1c387598f7b9d6f7e508854c4d5f2b873b6a44dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com> Date: Thu, 5 Mar 2020 22:34:39 +0800 Subject: [PATCH 25/28] =?UTF-8?q?=E8=B0=83=E5=9B=9E=E5=8E=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/react/src/modules/tpm/NewHeader.js | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/public/react/src/modules/tpm/NewHeader.js b/public/react/src/modules/tpm/NewHeader.js index 96291f49b..4efb6202b 100644 --- a/public/react/src/modules/tpm/NewHeader.js +++ b/public/react/src/modules/tpm/NewHeader.js @@ -1217,11 +1217,11 @@ submittojoinclass=(value)=>{ <%= link_to '注册', user_join_path, :className => "ml5" %> */} { user===undefined? - + this.educoderlogin()} className="mr5 color-white">登录 注册 - :user.login===""? + :user.login===""? this.educoderlogin()} className="mr5 color-white">登录 注册 @@ -1268,18 +1268,9 @@ submittojoinclass=(value)=>{
} {/*href="https://www.educoder.net/login"*/} -
- {/*/!*{ loadHeader()}*!/padding-top: 16px!important;*/} - {showSearchOpentype===true?"":this.props.user&&this.props.user.main_site===true?this.showSearchOpen(e)}> + {/*{ loadHeader()}*/} + {showSearchOpentype===true?"":this.props.user&&this.props.user.main_site===true?this.showSearchOpen(e)}> {/*"/images/educoder/icon/search.svg" */} From 6ec1b6006894eda1d8e197c10b3681ed6c48f2fc Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 6 Mar 2020 00:25:51 +0800 Subject: [PATCH 26/28] =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E8=BA=AB=E4=BB=BD=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/homework_common.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/homework_common.rb b/app/models/homework_common.rb index 7a19fb82c..2b8a2e118 100644 --- a/app/models/homework_common.rb +++ b/app/models/homework_common.rb @@ -104,7 +104,7 @@ class HomeworkCommon < ApplicationRecord end def user_work user_id - work = self.student_works.find_by_user_id(user_id) || StudentWork.create!(homework_common_id: id, user_id: user_id) + work = self.student_works.find_by_user_id(user_id) # || StudentWork.create!(homework_common_id: id, user_id: user_id) end # 是否在补交阶段内 From 6a90d611c2d7fc8ccd5b32cba39d18fe3fe8384a Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Fri, 6 Mar 2020 09:42:38 +0800 Subject: [PATCH 27/28] =?UTF-8?q?=E6=90=9C=E7=B4=A2=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/queries/weapps/subject_query.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/queries/weapps/subject_query.rb b/app/queries/weapps/subject_query.rb index b50c2a104..0a3c9beb2 100644 --- a/app/queries/weapps/subject_query.rb +++ b/app/queries/weapps/subject_query.rb @@ -19,6 +19,11 @@ class Weapps::SubjectQuery < ApplicationQuery subjects = subjects.joins(:sub_discipline_containers).where(sub_discipline_containers: {container_type: "Subject"}) end + # 搜索 + if params[:keyword].present? + subjects = subjects.where("subjects.name like '%#{params[:keyword]}%'") + end + subjects = subjects.left_joins(:shixuns, :repertoire).select('subjects.id, subjects.name, subjects.excellent, subjects.stages_count, subjects.status, subjects.homepage_show, subjects.shixuns_count, subjects.repertoire_id, subjects.updated_at, IFNULL(sum(shixuns.myshixuns_count), 0) myshixuns_count') .group('subjects.id').order("subjects.homepage_show #{sort_type}, #{order_type} #{sort_type}") From 52aad5dcbfac54bf404d0de393cb628b9d9b14ce Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Fri, 6 Mar 2020 11:12:31 +0800 Subject: [PATCH 28/28] =?UTF-8?q?=E5=88=87=E6=8D=A2=E8=BA=AB=E4=BB=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/homework_common.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/homework_common.rb b/app/models/homework_common.rb index 2b8a2e118..7da7a177d 100644 --- a/app/models/homework_common.rb +++ b/app/models/homework_common.rb @@ -104,7 +104,7 @@ class HomeworkCommon < ApplicationRecord end def user_work user_id - work = self.student_works.find_by_user_id(user_id) # || StudentWork.create!(homework_common_id: id, user_id: user_id) + work = StudentWork.find_by(homework_common_id: id, user_id: user_id) || StudentWork.create!(homework_common_id: id, user_id: user_id) end # 是否在补交阶段内