# encoding:utf-8 #微信用户表 class WxUser < ActiveRecord::Base has_paper_trail self.table_name = "wx_users" belongs_to :user #has_many :channel_qrcode_results, :foreign_key => :mp_openid belongs_to :parent_signup_channel, :foreign_key => :channel_qrcode_id validates_presence_of :nickname, :unionid #belongs_to :channel_qrcode attr_accessor :invite, :v_head, :intro_user SEX_ENUM= [["未知","0"], ["男性","1"], ["女性", "2"]] COPARTNET_STATE_ENUM = [["否",0],["是",1],["曾经是",2]] IMG_STORE_PATH = "wx_user" after_destroy :after_destroy def invite wu = WxUser.where("id = ?", invite_id).first if !wu.blank? return wu.nickname end end def intro_user wu = WxUser.where("id = ?", intro_user_id).first if !wu.blank? return wu.nickname end end def tel if self.user_id.to_i >0 u = User.where("id=?",self.user_id).first return if u.blank? return u.tel end end def gzhOpenid if self.id.to_i >0 u = WxUserGongzhonghao.where("wx_user_id=?",self.id).first return if u.blank? return u.gzh_open_id end return "-" end def gzhIsSub if self.id.to_i >0 u = WxUserGongzhonghao.where("wx_user_id=?",self.id).first return false if u.blank? return u.subscribe end return false end def gzhSubTime if self.id.to_i >0 u = WxUserGongzhonghao.where("wx_user_id=?",self.id).first return "-" if u.blank? || u.subscribe_time.blank? || u.subscribe_time == nil return Time.at(u.subscribe_time) if u.subscribe_time != nil end return "-" end def gzhUnSubTime if self.id.to_i >0 u = WxUserGongzhonghao.where("wx_user_id=?",self.id).first return "-" if u.blank? || u.unsubscribe_time.blank? || u.unsubscribe_time == nil return Time.at(u.unsubscribe_time) if u.unsubscribe_time != nil end return "-" end def gzhLastConversationTime if self.id.to_i >0 u = WxUserGongzhonghao.where("wx_user_id=?",self.id).first return "-" if u.blank? || u.last_conversation_at.blank? || u.last_conversation_at == nil return Time.at(u.last_conversation_at) if u.last_conversation_at != nil end return "-" end rails_admin do navigation_label '用户管理' # parent User weight -300 list do filters [:id,:user_id,:nickname, :city, :parent_signup_channel, :sale_group, :sale_group_sum] field :id field :user_id do filterable true end field :tel # field :gzhOpenid field :gzhIsSub, :boolean field :gzhSubTime field :gzhUnSubTime field :gzhLastConversationTime field :nickname field :invite_id field :intro_user_id field :sex, :enum do enum do SEX_ENUM end end field :head do formatted_value do bindings[:view].tag(:img,{:src => bindings[:object].get_head_img, :style => 'width: 100px;height: 100px;cursor: pointer;display: block;max-width: 100px', :onClick => "javascript:window.open('#{bindings[:object].get_head_img}')"}) end end # field :openid # field :unionid # field :province field :city # field :signup_ip field :parent_signup_channel field :show_invite_mode field :sale_group field :sale_group_sum # field :channel_qrcode_id field :created_at end show do field :id field :user field :user_id field :nickname field :invite field :invite_id field :intro_user field :intro_user_id field :sex, :enum do enum do SEX_ENUM end end field :head do formatted_value do bindings[:view].tag(:img,{:src => bindings[:object].get_head_img, :style => 'width: 100px;height: 100px;cursor: pointer;display: block;max-width: 100px', :onClick => "javascript:window.open('#{bindings[:object].get_head_img}')"}) end end field :unionid field :openid field :gzhOpenid field :gzhIsSub, :boolean field :gzhSubTime field :gzhUnSubTime field :gzhLastConversationTime field :province field :city field :signup_ip # field :subscribe # field :subscribe_time do # formatted_value do # (value !=nil || value != 0) ? Time.at(value):Time.now # end # end # field :unsubscribe_time do # formatted_value do # (value !=nil || value != 0) ? Time.at(value):Time.now # end # end # field :last_conversation_at do # formatted_value do # (value !=nil || value != 0) ? Time.at(value):Time.now # end # end # field :channel_qrcode_id field :invite_qrcode_url field :show_invite_mode field :parent_signup_channel field :sale_group field :sale_group_sum field :created_at end edit do field :user_id field :nickname # field :unionid field :city field :country field :province field :sex, :enum do enum do SEX_ENUM end end field :v_head, :file_upload do pretty_value do bindings[:view].tag(:img, {:src => bindings[:object].get_head_img, :class => 'preview'}) end end # field :subscribe # field :unsubscribe_time, :datetime do # formatted_value do # (value.blank?) ? Time.at(0) : Time.at(value) # end # end # field :subscribe_time, :datetime do # formatted_value do # (value.blank?) ? Time.at(0) : Time.at(value) # end # end # field :last_conversation_at field :invite_id field :signup_ip field :channel_qrcode_id field :invite_qrcode_url #field :show_invite_mode end end def get_head_img url = "http://#{Ali::Oss::CDN_URL_FOR_HOST}/#{self.head}" return url end def v_head=file unless file.blank? clear_head_img file_name = "#{UUID.new.generate[0...8].downcase}.jpg" file_path = "#{IMG_STORE_PATH}/#{file_name}" Ali::Oss.store(Ali::Oss::BUCKET_NAME_PUBLIC_READ, file_path, file.read) self.head = file_path self.save end end def clear_head_img file_path = "#{self.head}" Ali::Oss.delete_object(Ali::Oss::BUCKET_NAME_PUBLIC_READ, file_path) end def after_destroy clear_head_img end end