class Admins::DepartmentsController < Admins::BaseController helper_method :current_department def index params[:sort_by] ||= 'created_at' params[:sort_direction] ||= 'desc' departments = Admins::DepartmentQuery.call(params) @departments = paginate departments.preload(:school, :member_users) department_ids = @departments.map(&:id) @users_count = UserExtension.where(department_id: department_ids).group(:department_id).count @professional_auth_count = UserExtension.where(department_id: department_ids) .joins(:user).where(users: { professional_certification: true }) .group(:department_id).count end def create department_name = params[:department_name].to_s.strip school = School.find(params[:school_id]) return render_error('部门名称重复') if school.departments.exists?(name: department_name) ActiveRecord::Base.transaction do department = school.departments.create!(name: department_name, is_auth: 1) ApplyAddDepartment.create!(school_id: school.id, status: 1, name: department.name, department_id: department.id, user_id: current_user.id) end render_ok end def edit end def update identifier = update_params.delete(:identifier).presence if identifier && Department.where.not(id: current_department.id).exists?(identifier: identifier) return render_error('统计链接重复', type: :notify) end current_department.update!(update_params.merge(identifier: identifier)) end def destroy ActiveRecord::Base.transaction do current_department.apply_add_departments.update_all(status: 2) user_ids = current_department.user_extensions.pluck(:user_id) if user_ids.present? DeleteDepartmentNotifyJob.perform_later(current_department.id, 0, user_ids) current_department.soft_delete! else current_department.destroy! end end render_delete_success end def merge return render_error('请选择其它部门') if params[:origin_department_id].to_s == params[:department_id].to_s origin_department = Department.find(params[:origin_department_id]) to_department = Department.find(params[:department_id]) return render_error('部门所属单位不相同') if origin_department.school_id != to_department.school_id ActiveRecord::Base.transaction do origin_department.apply_add_departments.delete_all origin_department.user_extensions.update_all(department_id: to_department.id) if to_department.identifier.blank? && origin_department.identifier.present? to_department.update!(identifier: origin_department.identifier) end origin_department.destroy! end render_ok end private def current_department @_current_department ||= Department.find(params[:id]) end def update_params params.require(:department).permit(:name, :identifier, :host_count) end end