From 69c8b92dd1dbb75a4ab93d5f8aae7c018f02415b Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Tue, 9 Jul 2019 11:36:45 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E9=80=89=E7=94=A8=E5=AE=9E=E8=AE=AD?= =?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 --- .../homework_commons_controller.rb | 76 ++++++++++++++----- 1 file changed, 55 insertions(+), 21 deletions(-) diff --git a/app/controllers/homework_commons_controller.rb b/app/controllers/homework_commons_controller.rb index cdbfac5bc..a04e00865 100644 --- a/app/controllers/homework_commons_controller.rb +++ b/app/controllers/homework_commons_controller.rb @@ -822,38 +822,72 @@ class HomeworkCommonsController < ApplicationController # 选用实训 def shixuns - search = params[:search] - type = params[:type] - # 超级管理员用户显示所有未隐藏的实训、非管理员显示所有已发布的实训(对本单位公开且未隐藏未关闭) - if current_user.admin? - @shixuns = Shixun.unhidden - else - none_shixun_ids = ShixunSchool.where("school_id != #{current_user.school_id}").pluck(:shixun_id) + @main_catrgory = @course.course_modules.where(module_type: "shixun_homework") + @homework_category = @main_catrgory.take.course_second_categories + + ## 我的实训 + @shixuns = + if params[:order_by] == 'mine' + current_user.my_shixuns + else + Shixun.unhidden + end + + ## 方向 + if params[:tag_level].present? && params[:tag_id].present? + @shixuns = @shixuns.filter_tag(params[:tag_level].to_i, params[:tag_id].to_i) + case params[:tag_level].to_i + when 1 #大类 + @search_tags = Repertoire.find(params[:tag_id].to_i).name + when 2 #子类 + @search_tags = SubRepertoire.find(params[:tag_id].to_i).name + when 3 #tag + tag = TagRepertoire.find(params[:tag_id].to_i) + @search_tags = "#{tag.sub_repertoire.name} / #{tag.name}" + end + end - @shixuns = Shixun.where.not(id: none_shixun_ids).unhidden + ## 搜索关键字创建者、实训名称、院校名称 + if params[:keyword].present? + keyword = params[:keyword].strip + @shixuns = @shixuns.joins(user: [user_extenison: :school]). + where("schools.name like '%#{keyword}%' + or concat(lastname, firstname) like '%#{keyword}%' + or shixuns.name like '%#{keyword.split(" ").join("%")}%'").distinct end - # 实训的所有标签 - @tags = TagRepertoire.select([:id, :name]).joins(:shixuns).where(shixuns: {id: @shixuns}).distinct + ## 筛选 状态 + if params[:status].present? && params[:status].to_i != 0 + params[:status] = [0, 1] if params[:status].to_i == 1 + @shixuns = @shixuns.where(status: params[:status]) + end - if params[:search] && params[:search].strip != "" - @shixuns = @shixuns.joins(:user).where("shixuns.name like ? or concat(users.lastname, users.firstname) like ?", - "%#{search}%", "%#{search}%").distinct + ## 筛选 难度 + if params[:diff].present? && params[:diff].to_i != 0 + @shixuns = @shixuns.where(trainee: params[:diff]) end - unless type.blank? || type == "all" - @shixuns = @shixuns.joins(:shixun_tag_repertoires).where(shixun_tag_repertoires: {tag_repertoire_id: type}).distinct + ## 排序参数 + bsort = params[:sort] || 'desc' + case params[:order_by] || 'myshixuns_count' + when 'new' + @shixuns = @shixuns.order("shixuns.status = 2 desc, shixuns.created_at #{bsort}") + when 'hot' + @shixuns = @shixuns.order("shixuns.status = 2 desc, myshixuns_count #{bsort}") + when 'mine' + @shixuns = @shixuns.order("shixuns.created_at #{bsort}") + else + @shixuns = @shixuns.order("shixuns.status = 2 desc, myshixuns_count #{bsort}") end - @shixuns = @shixuns.select([:id, :name, :status, :myshixuns_count, :identifier]).reorder("shixuns.created_at desc") - @shixuns_count = @shixuns.size + + @total_count = @shixuns.count ## 分页参数 - page = params[:page] || 1 - @shixuns = @shixuns.page(page).per(10) + page = params[:page] || 1 + limit = params[:limit] || 15 - @main_catrgory = @course.course_modules.where(module_type: "shixun_homework") - @homework_category = @main_catrgory.take.course_second_categories + @shixuns = @shixuns.includes(:tag_repertoires, :challenges).page(page).per(limit) end def create_shixun_homework From da58ff267c67cd5f87397fd81e247861d86c4bd4 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Tue, 9 Jul 2019 15:01:21 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E9=80=89=E7=94=A8=E5=AE=9E=E8=AE=AD?= =?UTF-8?q?=E7=9A=84=E6=8E=A5=E5=8F=A3=E6=94=B9=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../homework_commons_controller.rb | 19 +++++-------------- .../homework_commons/shixuns.json.jbuilder | 19 +++++++++++-------- 2 files changed, 16 insertions(+), 22 deletions(-) diff --git a/app/controllers/homework_commons_controller.rb b/app/controllers/homework_commons_controller.rb index 3afb32982..29d530ebb 100644 --- a/app/controllers/homework_commons_controller.rb +++ b/app/controllers/homework_commons_controller.rb @@ -827,7 +827,7 @@ class HomeworkCommonsController < ApplicationController ## 我的实训 @shixuns = if params[:order_by] == 'mine' - current_user.my_shixuns + current_user.my_shixuns.unhidden else Shixun.unhidden end @@ -855,12 +855,6 @@ class HomeworkCommonsController < ApplicationController or shixuns.name like '%#{keyword.split(" ").join("%")}%'").distinct end - ## 筛选 状态 - if params[:status].present? && params[:status].to_i != 0 - params[:status] = [0, 1] if params[:status].to_i == 1 - @shixuns = @shixuns.where(status: params[:status]) - end - ## 筛选 难度 if params[:diff].present? && params[:diff].to_i != 0 @shixuns = @shixuns.where(trainee: params[:diff]) @@ -868,25 +862,22 @@ class HomeworkCommonsController < ApplicationController ## 排序参数 bsort = params[:sort] || 'desc' - case params[:order_by] || 'myshixuns_count' - when 'new' - @shixuns = @shixuns.order("shixuns.status = 2 desc, shixuns.created_at #{bsort}") + case params[:order_by] || 'hot' when 'hot' - @shixuns = @shixuns.order("shixuns.status = 2 desc, myshixuns_count #{bsort}") + @shixuns = @shixuns.order("myshixuns_count #{bsort}") when 'mine' @shixuns = @shixuns.order("shixuns.created_at #{bsort}") else - @shixuns = @shixuns.order("shixuns.status = 2 desc, myshixuns_count #{bsort}") + @shixuns = @shixuns.order("myshixuns_count #{bsort}") end - @total_count = @shixuns.count ## 分页参数 page = params[:page] || 1 limit = params[:limit] || 15 - @shixuns = @shixuns.includes(:tag_repertoires, :challenges).page(page).per(limit) + @shixuns = @shixuns.includes(:challenges, user: [user_extension: :school]).page(page).per(limit) end def create_shixun_homework diff --git a/app/views/homework_commons/shixuns.json.jbuilder b/app/views/homework_commons/shixuns.json.jbuilder index 129a0b6d3..8bfeea562 100644 --- a/app/views/homework_commons/shixuns.json.jbuilder +++ b/app/views/homework_commons/shixuns.json.jbuilder @@ -1,12 +1,15 @@ -json.tags @tags do |tag| - json.tag_id tag.id - json.tag_name tag.name +json.shixun_list @shixuns do |shixun| + json.shixun_identifier shixun.identifier + json.name shixun.name + json.creator shixun.user&.full_name + json.creator_login shixun.user&.login + json.school shixun.user&.school_name + json.myshixuns_count shixun.myshixuns_count + json.level level_to_s(shixun.trainee) + json.challenge_tags shixun.challenge_tags_name end -json.shixun_list do - json.partial! 'shixuns/choose_shixun', locals: {shixuns: @shixuns} -end - -json.shixuns_count @shixuns_count +json.shixuns_count @total_count +json.search_tags @search_tags json.partial! 'homework_commons/second_category', locals: {main_catrgory: @main_catrgory, homework_category: @homework_category} \ No newline at end of file From 48cfc3f39dd56dabfcd080010cd23c95a92571d7 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Tue, 9 Jul 2019 17:18:06 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E9=80=89=E7=94=A8=E5=AE=9E=E8=AE=AD?= =?UTF-8?q?=E8=B7=AF=E5=BE=84=E7=9A=84=E5=BC=B9=E6=A1=86=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../homework_commons_controller.rb | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/app/controllers/homework_commons_controller.rb b/app/controllers/homework_commons_controller.rb index 29d530ebb..e662525f1 100644 --- a/app/controllers/homework_commons_controller.rb +++ b/app/controllers/homework_commons_controller.rb @@ -927,6 +927,64 @@ class HomeworkCommonsController < ApplicationController @subjects = @subjects.page(page).per(10) @subjects = @subjects.includes(:shixuns) + + @tags = Repertoire.where(nil).order("updated_at desc") + select = params[:select] # 路径导航类型 + reorder = params[:order] || "myshixun_count" + search = params[:search] + + ## 分页参数 + page = params[:page] || 1 + limit = params[:limit] || 15 + offset = (page.to_i-1) * limit + + # 最热排序 + if reorder == "myshixun_count" + if select + @subjects = Subject.find_by_sql("SELECT subjects.id, subjects.name, subjects.stages_count, subjects.repertoire_id, subjects.status, + subjects.shixuns_count, sum(shixuns.myshixuns_count) AS myshixun_member_count FROM subjects join stage_shixuns + on stage_shixuns.subject_id = subjects.id join shixuns on shixuns.id = stage_shixuns.shixun_id where + subjects`.`hidden` = 0 AND `subjects`.`status` = 2 AND `subjects`.`name` like '%#{search}%' + AND `subjects`.`repertoire_id` = #{select} GROUP BY subjects.id ORDER BY myshixun_member_count DESC") + else + @subjects = Subject.find_by_sql("SELECT subjects.id, subjects.name, subjects.stages_count, subjects.repertoire_id, subjects.status, + subjects.shixuns_count, sum(shixuns.myshixuns_count) AS myshixun_member_count FROM subjects join stage_shixuns + on stage_shixuns.subject_id = subjects.id join shixuns on shixuns.id = stage_shixuns.shixun_id where + `subjects`.`hidden` = 0 AND `subjects`.`status` = 2 AND `subjects`.`name` like '%#{search}%' + GROUP BY subjects.id ORDER BY myshixun_member_count DESC") + end + else + # 我的路径 + if reorder == "mine" + mine_subject_id = StageShixun.find_by_sql("select DISTINCT(subject_id) from stage_shixuns where shixun_id in + (select distinct(shixun_id) from myshixuns where user_id=#{current_user.id})").map(&:subject_id) + manage_subject_id = SubjectMember.where(user_id: current_user.id).pluck(:subject_id) + total_subject_id = (mine_subject_id + manage_subject_id).uniq + @subjects = Subject.where(id: total_subject_id) + end + + # 类型 + if select + @subjects = @subjects.where(repertoire_id: select) + end + + if search.present? + @subjects = @subjects.where("name like ?", "%#{search}%") + end + + # 排序 + order_str = reorder == "publish_time" ? "status = 2 desc, publish_time asc" : "updated_at desc" + @subjects = @subjects.reorder(order_str) + end + + @total_count = @subjects.size + + if reorder != "myshixun_count" + @subjects = @subjects.page(page).per(limit).includes(:shixuns) + else + @subjects = @subjects[offset, limit] + + end end def create_subject_homework From 0dbb4c6c540daae66c3019dd6ae40541e0d815e1 Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Wed, 10 Jul 2019 10:09:30 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E9=80=89=E7=94=A8=E5=AE=9E=E8=AE=AD?= =?UTF-8?q?=E8=AF=BE=E7=A8=8B=E7=9A=84=E5=BC=B9=E6=A1=86=E6=94=B9=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../homework_commons_controller.rb | 49 ++++++------------- app/models/subject.rb | 5 ++ .../homework_commons/subjects.json.jbuilder | 6 ++- 3 files changed, 26 insertions(+), 34 deletions(-) diff --git a/app/controllers/homework_commons_controller.rb b/app/controllers/homework_commons_controller.rb index e662525f1..7b61f8d4e 100644 --- a/app/controllers/homework_commons_controller.rb +++ b/app/controllers/homework_commons_controller.rb @@ -829,7 +829,13 @@ class HomeworkCommonsController < ApplicationController if params[:order_by] == 'mine' current_user.my_shixuns.unhidden else - Shixun.unhidden + if current_user.admin? + Shixun.unhidden + else + none_shixun_ids = ShixunSchool.where("school_id != #{current_user.school_id}").pluck(:shixun_id) + + @shixuns = Shixun.where.not(id: none_shixun_ids).unhidden + end end ## 方向 @@ -903,34 +909,10 @@ class HomeworkCommonsController < ApplicationController # 选用实训课程 def subjects - search = params[:search] - type = params[:type] - # 显示所有未隐藏的、已发布的实训课程 - @subjects = Subject.select([:id, :name, :status, :repertoire_id]).visible.unhidden - - @tags = Repertoire.select([:id, :name]).where(id: @subjects.pluck(:repertoire_id).uniq).order("updated_at desc") - - if params[:search] && params[:search].strip != "" - @subjects = @subjects.joins(:user).where("subjects.name like ? or concat(users.lastname, users.firstname) like ?", - "%#{search}%", "%#{search}%") - end - - unless type.blank? || type == "all" - @subjects = @subjects.where(repertoire_id: type) - end - - @subjects = @subjects.reorder("subjects.created_at desc") - @subjects_count = @subjects.size - - ## 分页参数 - page = params[:page] || 1 - @subjects = @subjects.page(page).per(10) - - @subjects = @subjects.includes(:shixuns) - @tags = Repertoire.where(nil).order("updated_at desc") select = params[:select] # 路径导航类型 reorder = params[:order] || "myshixun_count" + sort = params[:sort] || "desc" search = params[:search] ## 分页参数 @@ -941,17 +923,17 @@ class HomeworkCommonsController < ApplicationController # 最热排序 if reorder == "myshixun_count" if select - @subjects = Subject.find_by_sql("SELECT subjects.id, subjects.name, subjects.stages_count, subjects.repertoire_id, subjects.status, + @subjects = Subject.find_by_sql("SELECT subjects.id, subjects.user_id, subjects.name, subjects.stages_count, subjects.repertoire_id, subjects.status, subjects.shixuns_count, sum(shixuns.myshixuns_count) AS myshixun_member_count FROM subjects join stage_shixuns on stage_shixuns.subject_id = subjects.id join shixuns on shixuns.id = stage_shixuns.shixun_id where subjects`.`hidden` = 0 AND `subjects`.`status` = 2 AND `subjects`.`name` like '%#{search}%' - AND `subjects`.`repertoire_id` = #{select} GROUP BY subjects.id ORDER BY myshixun_member_count DESC") + AND `subjects`.`repertoire_id` = #{select} GROUP BY subjects.id ORDER BY myshixun_member_count #{sort}") else - @subjects = Subject.find_by_sql("SELECT subjects.id, subjects.name, subjects.stages_count, subjects.repertoire_id, subjects.status, + @subjects = Subject.find_by_sql("SELECT subjects.id, subjects.user_id, subjects.name, subjects.stages_count, subjects.repertoire_id, subjects.status, subjects.shixuns_count, sum(shixuns.myshixuns_count) AS myshixun_member_count FROM subjects join stage_shixuns on stage_shixuns.subject_id = subjects.id join shixuns on shixuns.id = stage_shixuns.shixun_id where `subjects`.`hidden` = 0 AND `subjects`.`status` = 2 AND `subjects`.`name` like '%#{search}%' - GROUP BY subjects.id ORDER BY myshixun_member_count DESC") + GROUP BY subjects.id ORDER BY myshixun_member_count #{sort}") end else # 我的路径 @@ -973,17 +955,18 @@ class HomeworkCommonsController < ApplicationController end # 排序 - order_str = reorder == "publish_time" ? "status = 2 desc, publish_time asc" : "updated_at desc" + order_str = "updated_at #{sort}" @subjects = @subjects.reorder(order_str) end @total_count = @subjects.size if reorder != "myshixun_count" - @subjects = @subjects.page(page).per(limit).includes(:shixuns) + @subjects = @subjects.page(page).per(limit).includes(:shixuns, user: [user_extension: :school]) else @subjects = @subjects[offset, limit] - + subject_ids = @subjects.pluck(:id) + @subjects = Subject.where(id: subject_ids).order("field(id,#{subject_ids.join(',')})").includes(:shixuns, user: [user_extension: :school]) end end diff --git a/app/models/subject.rb b/app/models/subject.rb index ced610377..115eecd49 100644 --- a/app/models/subject.rb +++ b/app/models/subject.rb @@ -88,4 +88,9 @@ class Subject < ApplicationRecord def published? status == 2 end + + def shixun_tags + challenges = Challenge.where(shixun_id: shixuns.unhidden) + @tags = ChallengeTag.where(challenge_id: challenges).pluck(:name).uniq + end end \ No newline at end of file diff --git a/app/views/homework_commons/subjects.json.jbuilder b/app/views/homework_commons/subjects.json.jbuilder index ea63f2125..257fcc9d5 100644 --- a/app/views/homework_commons/subjects.json.jbuilder +++ b/app/views/homework_commons/subjects.json.jbuilder @@ -6,8 +6,12 @@ end json.subject_list @subjects do |subject| json.subject_id subject.id json.subject_name subject.name + json.challenge_tags subject.shixun_tags json.shixun_count subject.shixuns.unhidden.size json.myshixun_count subject.shixuns.pluck(:myshixuns_count).sum + json.creator subject.user&.full_name + json.creator_login subject.user&.login + json.school subject.user&.school_name end -json.subjects_count @subjects_count \ No newline at end of file +json.subjects_count @total_count \ No newline at end of file