module EducodeSales class Staff < ApplicationRecord belongs_to :user belongs_to :role, optional: true is_impressionable has_many :staff_permissions, dependent: :destroy has_many :permissions, through: :staff_permissions has_many :follow_ups, dependent: :destroy has_many :operation_plans, dependent: :destroy has_many :operation_reports, dependent: :destroy has_many :sale_reports, dependent: :destroy has_many :teacher_follows, dependent: :destroy has_many :teachers, dependent: :destroy has_many :places has_many :businesses, dependent: :destroy has_many :activities, dependent: :destroy has_many :sale_plans, dependent: :destroy has_many :staff_schools, dependent: :destroy has_many :login_histories, dependent: :destroy has_many :staff_school_tags, dependent: :destroy has_many :market_areas, dependent: :destroy has_many :areas, through: :market_areas validates :user_id, uniqueness: { message: '已存在' } # attr_writer :month def last_login_key "login_user_#{self.id}" end def all_permissions ids = Array(self.role&.permissions&.ids) + self.permissions.ids Permission.where(id: ids) end def check_login_status(request) unless Rails.cache.data.get(self.last_login_key) # 第二天还在线访问,记用户登录一次 create_login_history(request) end end def create_login_history(request) # 登录状态保存到当天结束时间后+10分钟 Rails.cache.data.set(self.last_login_key, 1) Rails.cache.data.expireat(self.last_login_key, Time.now.end_of_day.to_i + 600) last_history = self.login_histories.last self.login_histories.create(current_ip: request.remote_ip, last_ip: last_history&.current_ip, last_login_at: last_history&.created_at) end def self.month_list list = [] 24.times do |d| list << ["#{d + 1}个月", d + 1] end 8.times do |d| list << ["#{d + 3}年", (d + 3) * 12] end list end def area_ids self.market_areas.pluck(:area_id) end def month if expired_at.present? && enabled_at.present? (expired_at.year * 12 + expired_at.month) - (enabled_at.year * 12 + enabled_at.month) else nil end end def is_enabled expired_at.present? && enabled_at.present? && expired_at > Time.now && enabled_at < Time.now end end end