From b2b5edd745c1d249b29ef05bce284599faf87bf5 Mon Sep 17 00:00:00 2001 From: p31729568 Date: Tue, 12 Nov 2019 17:33:18 +0800 Subject: [PATCH] laboratory rep tag --- app/controllers/home_controller.rb | 15 +---------- app/controllers/shixuns_controller.rb | 17 +----------- app/controllers/subjects_controller.rb | 2 +- app/models/laboratory.rb | 36 ++++++++++++++++++++++++++ app/views/shixuns/menus.json.jbuilder | 16 +----------- 5 files changed, 40 insertions(+), 46 deletions(-) diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index ba07d42c9..65a1d345a 100644 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -11,20 +11,7 @@ class HomeController < ApplicationController end # 目录分级 - repertoires = Repertoire.includes(sub_repertoires: :tag_repertoires).order("updated_at asc") - @rep_list = [] - repertoires.each do |rep| - - sub_rep_list = [] - rep.sub_repertoires.each do |sub_rep| - tag_rep_list = [] - sub_rep.tag_repertoires.each do |tag_rep| - tag_rep_list << {tag_id: tag_rep.id, tag_name: tag_rep.name} - end - sub_rep_list << {sub_rep_id: sub_rep.id, sub_rep_name: sub_rep.name, tag_rep_list: tag_rep_list} - end - @rep_list << {rep_id: rep.id, rep_name: rep.name, sub_rep_list: sub_rep_list} - end + @rep_list = current_laboratory.shixun_repertoires shixuns = current_laboratory.shixuns subjects = current_laboratory.subjects diff --git a/app/controllers/shixuns_controller.rb b/app/controllers/shixuns_controller.rb index c1676fbe9..15ee2a712 100644 --- a/app/controllers/shixuns_controller.rb +++ b/app/controllers/shixuns_controller.rb @@ -154,22 +154,7 @@ class ShixunsController < ApplicationController ## 获取顶部菜单 def menus - where_sql = ShixunTagRepertoire.where("shixun_tag_repertoires.tag_repertoire_id = tag_repertoires.id") - - # 云上实验室过滤 - unless current_laboratory.main_site? - where_sql = where_sql.joins('JOIN laboratory_shixuns ls ON ls.shixun_id = shixun_tag_repertoires.shixun_id') - end - where_sql = where_sql.select('1').to_sql - tags = TagRepertoire.where("EXISTS(#{where_sql})").distinct.includes(sub_repertoire: :repertoire) - - @tags_map = tags.group_by(&:sub_repertoire) - @sub_reps_map = @tags_map.keys.group_by(&:repertoire) - - # @repertoires = Repertoire.includes(sub_repertoires: [:tag_repertoires]).order("updated_at asc") - # respond_with @repertoires - - render_json + @repertoires = current_laboratory.shixun_repertoires end ## 实训详情 diff --git a/app/controllers/subjects_controller.rb b/app/controllers/subjects_controller.rb index b76db8a20..c1a8b15cd 100644 --- a/app/controllers/subjects_controller.rb +++ b/app/controllers/subjects_controller.rb @@ -11,7 +11,7 @@ class SubjectsController < ApplicationController include SubjectsHelper def index - @tech_system = Repertoire.where(nil).order("updated_at desc") + @tech_system = current_laboratory.subject_repertoires select = params[:select] # 路径导航类型 reorder = params[:order] || "publish_time" search = params[:search] diff --git a/app/models/laboratory.rb b/app/models/laboratory.rb index 672294b63..0c32114b0 100644 --- a/app/models/laboratory.rb +++ b/app/models/laboratory.rb @@ -47,6 +47,42 @@ class Laboratory < ApplicationRecord main_site? ? Subject.all : Subject.joins(:laboratory_subjects).where(laboratory_subjects: { laboratory_id: id }) end + def shixun_repertoires + where_sql = ShixunTagRepertoire.where("shixun_tag_repertoires.tag_repertoire_id = tag_repertoires.id") + + # 云上实验室过滤 + unless main_site? + where_sql = where_sql.joins("JOIN laboratory_shixuns ls ON ls.shixun_id = shixun_tag_repertoires.shixun_id "\ + "AND ls.laboratory_id = #{id}") + end + where_sql = where_sql.select('1').to_sql + tags = TagRepertoire.where("EXISTS(#{where_sql})").distinct.includes(sub_repertoire: :repertoire) + + tags_map = tags.group_by(&:sub_repertoire) + sub_reps_map = tags_map.keys.group_by(&:repertoire) + + sub_reps_map.keys.sort_by(&:updated_at).reverse.map do |repertoire| + repertoire_hash = repertoire.as_json(only: %i[id name]) + repertoire_hash[:sub_repertoires] = + sub_reps_map[repertoire].sort_by(&:updated_at).reverse.map do |sub_repertoire| + sub_repertoire_hash = sub_repertoire.as_json(only: %i[id name]) + sub_repertoire_hash[:tags] = tags_map[sub_repertoire].sort_by(&:updated_at).reverse.map { |tag| tag.as_json(only: %i[id name]) } + sub_repertoire_hash + end + repertoire_hash + end + end + + def subject_repertoires + exist_sql = Subject.where('subjects.repertoire_id = repertoires.id') + + unless main_site? + exist_sql = exist_sql.joins(:laboratory_subjects).where(laboratory_subjects: { laboratory_id: id }) + end + + Repertoire.where("EXISTS(#{exist_sql.select('1').to_sql})").order(updated_at: :desc).distinct + end + # 是否为主站 def main_site? id == 1 diff --git a/app/views/shixuns/menus.json.jbuilder b/app/views/shixuns/menus.json.jbuilder index 491ba5f05..5f107da3a 100644 --- a/app/views/shixuns/menus.json.jbuilder +++ b/app/views/shixuns/menus.json.jbuilder @@ -30,19 +30,5 @@ # end # end -json.array! @sub_reps_map.keys.sort_by(&:updated_at).reverse do |rep| - json.extract! rep, :id, :name - - json.sub_repertoires do - json.array! @sub_reps_map[rep].sort_by(&:updated_at).reverse do |sub_rep| - json.extract! sub_rep, :id, :name - - json.tags do - json.array! @tags_map[sub_rep].sort_by(&:updated_at).reverse do |tag| - json.extract! tag, :id, :name - end - end - end - end -end +json.array! @repertoires