You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.6 KiB
53 lines
1.6 KiB
class Weapps::ShixunSearchService < ApplicationService
|
|
|
|
attr_reader :params, :laboratory
|
|
|
|
def initialize(params, laboratory)
|
|
@params = params
|
|
@laboratory = laboratory
|
|
end
|
|
|
|
def call
|
|
# 全部实训/我的实训
|
|
type = params[:type] || "all"
|
|
shixuns = laboratory.shixuns.published.no_jupyter
|
|
|
|
if type == "mine"
|
|
shixuns = shixuns.where(id: User.current.shixuns)
|
|
else
|
|
# 超级管理员用户显示所有未隐藏的实训、非管理员显示所有已发布的实训(对本单位公开且未隐藏未关闭)
|
|
if User.current.admin? || User.current.business? || !User.current.school_id
|
|
shixuns = shixuns.where(hidden: 0)
|
|
else
|
|
shixun_ids = ShixunSchool.where(school_id: User.current.school_id).pluck(:shixun_id)
|
|
shixun_ids = shixun_ids.reject(&:blank?).length == 0 ? -1 : shixun_ids.join(",")
|
|
|
|
shixuns = shixuns.where("use_scope = 0 or shixuns.id in (#{shixun_ids})").unhidden.publiced.or(shixuns.where(id: User.current.shixuns))
|
|
end
|
|
end
|
|
|
|
## 筛选 难度
|
|
if params[:diff].present? && params[:diff].to_i != 0
|
|
shixuns = shixuns.where(trainee: params[:diff])
|
|
end
|
|
|
|
unless params[:keyword].blank?
|
|
keyword = params[:keyword].strip
|
|
shixuns = shixuns.joins(:user).
|
|
where("concat(lastname, firstname) like :keyword or shixuns.name like :keyword",
|
|
keyword: "%#{keyword}%", name: "%#{keyword.split(" ").join("%")}%").distinct
|
|
end
|
|
|
|
shixuns.order("#{sort_str} #{order_str}")
|
|
end
|
|
|
|
private
|
|
|
|
def order_str
|
|
params[:order] || "desc"
|
|
end
|
|
|
|
def sort_str
|
|
params[:sort] || "myshixuns_count"
|
|
end
|
|
end |