Merge branch 'dev_aliyun' of https://bdgit.educoder.net/Hjqreturn/educoder into dev_aliyun
commit
5366784807
@ -0,0 +1,10 @@
|
||||
class ShixunListsController < ApplicationController
|
||||
def index
|
||||
@results = ShixunSearchService.call(search_params)
|
||||
end
|
||||
|
||||
private
|
||||
def search_params
|
||||
params.permit(:keyword, :type, :page, :per_page, :order, :type, :status, :diff)
|
||||
end
|
||||
end
|
@ -0,0 +1,56 @@
|
||||
class ShixunSearchService < ApplicationService
|
||||
include ElasticsearchAble
|
||||
|
||||
attr_reader :params
|
||||
|
||||
def initialize(params)
|
||||
@params = params
|
||||
end
|
||||
|
||||
def call
|
||||
# 全部实训/我的实训
|
||||
type = params[:type] || "all"
|
||||
# 状态:已发布/未发布
|
||||
status = params[:status] || "all"
|
||||
|
||||
# 超级管理员用户显示所有未隐藏的实训、非管理员显示所有已发布的实训(对本单位公开且未隐藏未关闭)
|
||||
if type == "mine"
|
||||
@shixuns = User.current.shixuns.none_closed
|
||||
else
|
||||
if User.current.admin? || User.current.business?
|
||||
@shixuns = Shixun.none_closed.where(hidden: 0)
|
||||
else
|
||||
none_shixun_ids = ShixunSchool.where("school_id != #{current_user.school_id}").pluck(:shixun_id)
|
||||
|
||||
@shixuns = Shixun.where.not(id: none_shixun_ids).none_closed.where(hidden: 0)
|
||||
end
|
||||
end
|
||||
|
||||
unless status == "all"
|
||||
@shixuns = status == "published" ? @shixuns.where(status: 2) : @shixuns.where(status: [0, 1])
|
||||
end
|
||||
|
||||
## 筛选 难度
|
||||
if params[:diff].present? && params[:diff].to_i != 0
|
||||
@shixuns = @shixuns.where(trainee: params[:diff])
|
||||
end
|
||||
|
||||
Shixun.search(keyword, search_options)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def search_options
|
||||
model_options = {
|
||||
includes: Shixun.searchable_includes
|
||||
}
|
||||
model_options.merge!(where: { id: @shixuns.pluck(:id) })
|
||||
model_options.merge!(order: {"myshixuns_count" => sort_str})
|
||||
model_options.merge!(default_options)
|
||||
model_options
|
||||
end
|
||||
|
||||
def sort_str
|
||||
params[:order] || "desc"
|
||||
end
|
||||
end
|
@ -0,0 +1,23 @@
|
||||
json.shixuns_count @results.total_count
|
||||
|
||||
json.shixun_list do
|
||||
json.array! @results.with_highlights(multiple: true) do |obj, highlights|
|
||||
puts obj
|
||||
json.merge! obj.to_searchable_json
|
||||
json.challenge_names obj.challenges.pluck(:subject)
|
||||
|
||||
# 去除开头标点符号
|
||||
reg = /^[,。?:;‘’!“”—……、]/
|
||||
highlights[:description]&.first&.sub!(reg, '')
|
||||
highlights[:content]&.first&.sub!(reg, '')
|
||||
|
||||
json.title highlights.delete(:name)&.join('...') || obj.searchable_title
|
||||
json.description highlights[:description]&.join('...') || obj.description
|
||||
|
||||
json.content highlights
|
||||
json.level level_to_s(obj.trainee)
|
||||
json.subjects obj.subjects.uniq do |subject|
|
||||
json.(subject, :id, :name)
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in new issue