diff --git a/app/controllers/managements_controller.rb b/app/controllers/managements_controller.rb index eb3c37c9..deff1526 100644 --- a/app/controllers/managements_controller.rb +++ b/app/controllers/managements_controller.rb @@ -3310,83 +3310,79 @@ end end end - all_user_ids = User.where(:status => 1).pluck(:id) + users = User.where(nil) if params[:trial] == "-1" - apply = ApplyAction.where(:container_type => "TrialAuthorization").pluck(:user_id) - apply_id = apply.blank? ? -1 : "(" + apply.join(",") + ")" - apply_user_id = User.where("status = 1 and certification = 0 and id not in #{apply_id} ").pluck(:id) + users = users.where(status: 1, certification: 0) + .joins('LEFT JOIN apply_actions aa ON aa.user_id = users.id AND aa.container_type = "TrialAuthorization"') + .where('aa.user_id IS NULL') elsif params[:trial] == "-2" - apply_user_id = all_user_ids + users = users.where(status: 1) elsif params[:trial] == "0" - apply_user_id = ApplyAction.where(:status => 0).pluck(:user_id) + users = users.joins('LEFT JOIN apply_actions apply ON apply.user_id = users.id').where(apply_actions: { status: 0 }) elsif params[:trial] == "3" - time = Time.at(Time.now.to_i - 86400) - user_cer = UserDayCertification.where("created_at > '#{time}'").pluck(:user_id) - cer_id = user_cer.blank? ? "(-1)" : "(" + user_cer.map{|a| a.user_id}.join(",") + ")" - apply_user_id = User.where("status = 1 and certification != 1 and id in #{cer_id} ").pluck(:id) + users = users.joins('LEFT JOIN user_day_certifications udc ON udc.user_id = users.id') + .where('users.certification != 1').where('udc.created_at > ?', Time.now.ago(1.days)) else - apply_user_id = User.where(:status => 1, :certification => params[:trial]).pluck(:id) + users = users.where(status: 1, certification: params[:trial]) end - if params[:school] == "" - s_user_id = all_user_ids - else - school_ids = School.where("name like '%#{params[:school]}%'").pluck(:id) - s_user_id = UserExtensions.where(:school_id => school_ids).pluck(:user_id) + users = users.joins('LEFT JOIN user_extensions ON user_extensions.user_id = users.id') + .joins('LEFT JOIN schools ON schools.id = user_extensions.school_id') + .joins('LEFT JOIN departments ON departments.id = user_extensions.department_id') + + if params[:school].present? + users = users.where("schools.name LIKE ?", "%#{params[:school]}%") end - if params[:department] == "" - d_user_id = all_user_ids - else - dep_ids = Department.where("name like '%#{params[:department]}%'").pluck(:id) - d_user_id = UserExtensions.where(:department_id => dep_ids).pluck(:user_id) + if params[:department].present? + users = users.where("departments.name LIKE ?", "%#{params[:department]}%") end - ide_user_id = all_user_ids if params[:identity] == "1" || (params[:identity] == "0" && params[:te_technical_title] == "0") || (params[:identity] == "2" && params[:pro_technical_title] == "0") - ide_user_id = UserExtensions.where("identity = #{params[:identity]}").pluck(:user_id) + users = users.where(user_extensions: { identity: params[:identity] }) elsif (params[:identity] == "0" && params[:te_technical_title] != "0") || (params[:identity] == "2" && params[:pro_technical_title] != "0") technical_title = params[:identity] == "0" ? params[:te_technical_title] : params[:pro_technical_title] - ide_user_id = UserExtensions.where("identity = #{params[:identity]} and technical_title = '#{technical_title}'").pluck(:user_id) + users = users.where(user_extensions: { identity: params[:identity], technical_title: technical_title }) end - if params[:student_id] && params[:student_id] != '' - stu_user_id = UserExtensions.where("student_id like '%#{params[:student_id]}%'").pluck(:user_id) - else - stu_user_id = all_user_ids + if params[:student_id].present? + users = users.where('user_extensions.student_id like ?', "%#{params[:student_id]}%") end - user_id = s_user_id & d_user_id & apply_user_id & stu_user_id & ide_user_id - sql = "" - sql = - if params[:research_condition] == "name" - "concat(lastname, firstname) like '%#{params[:research_contents]}%'" - elsif params[:research_condition] == "email" - "mail like '%#{params[:research_contents]}%'" - elsif params[:research_condition] == "phone" - "phone like '%#{params[:research_contents]}%'" - elsif params[:research_condition] == "nickname" - if params[:research_contents].present? - "nickname like '%#{params[:research_contents]}%'" - end - elsif params[:research_condition] == "login" - params[:research_contents].present? ? "login like '%#{params[:research_contents]}%'" : "" - end + if params[:research_contents].present? + keyword = "%#{params[:research_contents]}%" + if params[:research_condition] == "name" + users = users.where('concat(lastname, firstname) like ?', keyword) + elsif params[:research_condition] == "email" + users = users.where("mail like ?", keyword) + elsif params[:research_condition] == "phone" + users = users.where("phone like ?", keyword) + elsif params[:research_condition] == "nickname" + users = users.where("nickname like ?", keyword) + elsif params[:research_condition] == "login" + users = users.where("login like ?", keyword) + end + end + + if params[:province].present? + users = users.where(schools: { province: params[:province] }) + end + + users = users.includes(:apply_actions, user_extensions: [:department, :school]).order("last_login_on desc") - @users = User.where(:id => user_id).where("#{sql}").includes(:apply_actions, user_extensions: [:department, :school]).order("last_login_on desc") - @xls_users = @users.reorder("created_on desc").limit(3000) #导出excel用户 @page = (params['page'] || 1).to_i - @users_count = @users.count + @users_count = users.count @limit = 20 @is_remote = true @users_pages = Paginator.new @users_count, @limit, params['page'] || 1 @offset ||= @users_pages.offset - @users = paginateHelper @users, @limit + @users = paginateHelper users, @limit respond_to do |format| format.js format.xls{ # @export_shixun_task = @export_shixun_task.all + @xls_users = users.reorder("created_on desc").limit(3000) #导出excel用户 filename = "用户列表.xls" send_data(user_list_xls(@xls_users), :type => 'application/octet-stream', :filename => filename_for_content_disposition(filename)) } diff --git a/app/models/school.rb b/app/models/school.rb index d5090023..293ab4b8 100644 --- a/app/models/school.rb +++ b/app/models/school.rb @@ -81,4 +81,10 @@ class School < ActiveRecord::Base courses.id LEFT JOIN user_extensions ON courses.tea_id=user_extensions.user_id WHERE user_extensions.`school_id` = #{self.id}").first.try(:max_update) end + + def self.provinces + Rails.cache.fetch('china_province_cache', expires_in: 1.days) do + School.pluck('distinct province').select(&:present?) + end + end end diff --git a/app/views/managements/users_trial.html.erb b/app/views/managements/users_trial.html.erb index b872ca87..23908eff 100644 --- a/app/views/managements/users_trial.html.erb +++ b/app/views/managements/users_trial.html.erb @@ -19,20 +19,20 @@
- - - @@ -41,6 +41,8 @@ + <%= select_tag :province, options_for_select(School.provinces.unshift(['请选择地区', ''])), class: 'fr winput-200-40'%> +

真实姓名搜索

diff --git a/db/migrate/20190606030046_add_index_to_apply_actions.rb b/db/migrate/20190606030046_add_index_to_apply_actions.rb new file mode 100644 index 00000000..ccbdb03a --- /dev/null +++ b/db/migrate/20190606030046_add_index_to_apply_actions.rb @@ -0,0 +1,5 @@ +class AddIndexToApplyActions < ActiveRecord::Migration + def change + add_index :apply_actions, :user_id + end +end