diff --git a/app/controllers/courses_controller.rb b/app/controllers/courses_controller.rb index 4a26b3c02..9369ba33f 100644 --- a/app/controllers/courses_controller.rb +++ b/app/controllers/courses_controller.rb @@ -26,18 +26,22 @@ class CoursesController < ApplicationController :base_info, :get_historical_courses, :create_group_by_importing_file, :attahcment_category_list,:export_member_scores_excel, :duplicate_course, :switch_to_teacher, :switch_to_assistant, :switch_to_student, :exit_course, - :informs, :update_informs, :join_excellent_course, :online_learning] + :informs, :update_informs, :join_excellent_course, :online_learning, + :update_task_position, :tasks_list] before_action :teacher_allowed, only: [:update, :destroy, :settings, :search_teacher_candidate, :transfer_to_course_group, :delete_from_course, :search_users, :add_students_by_search, :get_historical_courses, :add_teacher_popup, :add_teacher] before_action :admin_allowed, only: [:set_invite_code_halt, :set_public_or_private, :change_course_admin, - :set_course_group, :create_group_by_importing_file, :update_informs] + :set_course_group, :create_group_by_importing_file, :update_informs, + :update_task_position, :tasks_list] before_action :teacher_or_admin_allowed, only: [:graduation_group_list, :create_graduation_group, :join_graduation_group, :change_course_teacher, :export_member_scores_excel, :course_group_list, :teacher_application_review, :apply_teachers, :delete_course_teacher] before_action :validate_course_name, only: [:create, :update] before_action :find_board, only: :board_list before_action :validate_page_size, only: :mine + before_action :course_tasks, only: [:tasks_list, :update_task_position] + before_action :find_container, only: [:update_task_position] if RUBY_PLATFORM =~ /linux/ require 'simple_xlsx_reader' @@ -1117,6 +1121,44 @@ class CoursesController < ApplicationController render_ok(count: count, courses: courses.select(:id, :name).as_json) end + def tasks_list + case params[:container_type] + when 'shixun_homework' + @tasks = @course.practice_homeworks + when 'common_homework' + @tasks = @course.normal_homeworks + when 'group_homework' + @tasks = @course.group_homeworks + when 'exercise' + @tasks = @course.exercises + when 'poll' + @tasks = @course.polls + when 'graduation_topic' + @tasks = @course.graduation_topics + when 'graduation_task' + @tasks = @course.graduation_tasks + when 'attachment' + @tasks = @course.attachments + else + tip_exception("请指定任务类型") + end + end + + def update_task_position + tip_exception("缺少position参数") if params[:position].blank? + unless params[:position].to_i == @task.position + if params[:position].to_i < @task.position + @tasks.where("position < #{@task.position} and position >= ?", params[:position]).update_all("position = position + 1") + else + @tasks.where("position > #{@task.position} and position <= ?", params[:position]).update_all("position = position - 1") + end + @task.update_attributes(position: params[:position]) + normal_status(0, "移动成功") + else + normal_status(-1, "位置没有变化") + end + end + private # Use callbacks to share common setup or constraints between actions. @@ -1177,6 +1219,48 @@ class CoursesController < ApplicationController end end + def course_tasks + case params[:container_type] + when 'shixun_homework' + @tasks = @course.practice_homeworks + when 'common_homework' + @tasks = @course.normal_homeworks + when 'group_homework' + @tasks = @course.group_homeworks + when 'exercise' + @tasks = @course.exercises + when 'poll' + @tasks = @course.polls + when 'graduation_topic' + @tasks = @course.graduation_topics + when 'graduation_task' + @tasks = @course.graduation_tasks + when 'attachment' + @tasks = @course.attachments + else + tip_exception("请指定任务类型") + end + end + + def find_container + case params[:container_type] + when 'shixun_homework', 'common_homework', 'group_homework' + @task = HomeworkCommon.find_by(id: params[:container_id]) + when 'exercise' + @task = Exercise.find_by(id: params[:container_id]) + when 'poll' + @task = Poll.find_by(id: params[:container_id]) + when 'graduation_topic' + @task = GraduationTopic.find_by(id: params[:container_id]) + when 'graduation_task' + @task = GraduationTask.find_by(id: params[:container_id]) + when 'attachment' + @task = Attachment.find_by(id: params[:container_id]) + else + tip_exception("container_type参数有误") + end + end + def student_act_score group_id, search sql_select = %Q{SELECT cm.*,( SELECT SUM(student_works.work_score) diff --git a/app/controllers/homework_commons_controller.rb b/app/controllers/homework_commons_controller.rb index 5d1733983..eb3576f24 100644 --- a/app/controllers/homework_commons_controller.rb +++ b/app/controllers/homework_commons_controller.rb @@ -37,8 +37,6 @@ class HomeworkCommonsController < ApplicationController @category = @main_category.course_second_categories.find_by(id: params[:category]) tip_exception("子目录id有误") if !@category.present? @homework_commons = @homework_commons.where(course_second_category_id: params[:category]) - elsif @homework_type == 4 - @homework_commons = @homework_commons end @all_count = @homework_commons.size diff --git a/app/models/course.rb b/app/models/course.rb index b7bea6ec0..baed1efe6 100644 --- a/app/models/course.rb +++ b/app/models/course.rb @@ -32,7 +32,12 @@ class Course < ApplicationRecord has_many :teacher_course_members, -> { teachers_and_admin }, class_name: 'CourseMember' has_many :teacher_users, through: :teacher_course_members, source: :user has_many :course_messages, dependent: :destroy + has_many :homework_commons, dependent: :destroy + has_many :normal_homeworks, -> { normals }, class_name: 'HomeworkCommon' + has_many :group_homeworks, -> { groups }, class_name: 'HomeworkCommon' + has_many :practice_homeworks, -> { practices }, class_name: 'HomeworkCommon' + has_many :homework_group_settings has_many :graduation_works, dependent: :destroy diff --git a/app/models/homework_common.rb b/app/models/homework_common.rb index f198a7143..332aff045 100644 --- a/app/models/homework_common.rb +++ b/app/models/homework_common.rb @@ -12,6 +12,7 @@ class HomeworkCommon < ApplicationRecord belongs_to :course, counter_cache: true belongs_to :homework_bank, optional: true + belongs_to :user has_many :homework_challenge_settings, dependent: :destroy has_one :homework_commons_shixun, dependent: :destroy @@ -48,6 +49,9 @@ class HomeworkCommon < ApplicationRecord scope :search_homework_type, lambda {|num| where(homework_type:num)} scope :unified_setting, -> {where("unified_setting = ? ", 1)} + scope :normals, -> {where(homework_type: %i[normal]).order("position desc")} + scope :groups, -> {where(homework_type: %i[group]).order("position desc")} + scope :practices, -> {where(homework_type: %i[practice]).order("position desc")} # 是否显示参考答案 def view_answer identity, user_id diff --git a/app/views/courses/tasks_list.json.jbuilder b/app/views/courses/tasks_list.json.jbuilder new file mode 100644 index 000000000..29de925a6 --- /dev/null +++ b/app/views/courses/tasks_list.json.jbuilder @@ -0,0 +1,7 @@ +json.tasks @tasks.each do |task| + json.user_name task.user.real_name + json.task_id task.id + json.task_name task.name + json.category task.course_second_category&.name + json.position task.position +end \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 4e7b19687..80c4d4237 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -352,6 +352,8 @@ Rails.application.routes.draw do post 'update_informs' get 'online_learning' post 'join_excellent_course' + get 'tasks_list' + post 'update_task_position' end collection do diff --git a/db/migrate/20190820021047_migrate_course_task_position.rb b/db/migrate/20190820021047_migrate_course_task_position.rb new file mode 100644 index 000000000..cf1b633bd --- /dev/null +++ b/db/migrate/20190820021047_migrate_course_task_position.rb @@ -0,0 +1,13 @@ +class MigrateCourseTaskPosition < ActiveRecord::Migration[5.2] + def change + add_column :homework_commons, :position, :integer, :default => 0 + + Course.find_each do |course| + puts course.id + course.practice_homeworks.order("IF(ISNULL(homework_commons.publish_time),0,1), homework_commons.publish_time DESC, + homework_commons.created_at DESC").reverse.each_with_index do |homework, index| + homework.update_columns(position: index + 1) + end + end + end +end