wx_user.rb 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  1. # encoding:utf-8
  2. #微信用户表
  3. require 'redis'
  4. class WxUser < ActiveRecord::Base
  5. has_paper_trail
  6. self.table_name = "wx_users"
  7. belongs_to :user
  8. #has_many :channel_qrcode_results, :foreign_key => :mp_openid
  9. belongs_to :parent_signup_channel, :foreign_key => :channel_qrcode_id
  10. validates_presence_of :nickname, :unionid
  11. #belongs_to :channel_qrcode
  12. attr_accessor :invite, :v_head, :intro_user
  13. SEX_ENUM= [["未知","0"], ["男性","1"], ["女性", "2"]]
  14. RANK_ENUM= [["普通会员","0"], ["群主","1"], ["店长", "2"]]
  15. COPARTNET_STATE_ENUM = [["否",0],["是",1],["曾经是",2]]
  16. IMG_STORE_PATH = "wx_user"
  17. after_destroy :after_destroy
  18. def invite
  19. wu = WxUser.where("id = ?", invite_id).first
  20. if !wu.blank?
  21. return wu.nickname
  22. end
  23. end
  24. def intro_user
  25. wu = WxUser.where("id = ?", intro_user_id).first
  26. if !wu.blank?
  27. return wu.nickname
  28. end
  29. end
  30. def tel
  31. if self.user_id.to_i >0
  32. u = User.where("id=?",self.user_id).first
  33. return if u.blank?
  34. return u.tel
  35. end
  36. end
  37. def gzhOpenid
  38. if self.id.to_i >0
  39. u = WxUserGongzhonghao.where("wx_user_id=?",self.id).first
  40. return if u.blank?
  41. return u.gzh_open_id
  42. end
  43. return "-"
  44. end
  45. def gzhIsSub
  46. if self.id.to_i >0
  47. u = WxUserGongzhonghao.where("wx_user_id=?",self.id).first
  48. return false if u.blank?
  49. return u.subscribe
  50. end
  51. return false
  52. end
  53. def gzhSubTime
  54. if self.id.to_i >0
  55. u = WxUserGongzhonghao.where("wx_user_id=?",self.id).first
  56. return "-" if u.blank? || u.subscribe_time.blank? || u.subscribe_time == nil
  57. return Time.at(u.subscribe_time) if u.subscribe_time != nil
  58. end
  59. return "-"
  60. end
  61. def gzhUnSubTime
  62. if self.id.to_i >0
  63. u = WxUserGongzhonghao.where("wx_user_id=?",self.id).first
  64. return "-" if u.blank? || u.unsubscribe_time.blank? || u.unsubscribe_time == nil
  65. return Time.at(u.unsubscribe_time) if u.unsubscribe_time != nil
  66. end
  67. return "-"
  68. end
  69. def gzhLastConversationTime
  70. if self.id.to_i >0
  71. u = WxUserGongzhonghao.where("wx_user_id=?",self.id).first
  72. return "-" if u.blank? || u.last_conversation_at.blank? || u.last_conversation_at == nil
  73. return Time.at(u.last_conversation_at) if u.last_conversation_at != nil
  74. end
  75. return "-"
  76. end
  77. rails_admin do
  78. navigation_label '用户管理'
  79. # parent User
  80. weight -300
  81. list do
  82. filters [:id,:user_id,:nickname, :city, :parent_signup_channel, :sale_group, :sale_group_sum]
  83. field :id
  84. field :user_id do
  85. filterable true
  86. end
  87. field :tel
  88. # field :gzhOpenid
  89. field :gzhIsSub, :boolean
  90. field :gzhSubTime
  91. field :gzhUnSubTime
  92. field :gzhLastConversationTime
  93. field :nickname
  94. field :invite_id
  95. field :intro_user_id
  96. field :sex, :enum do
  97. enum do
  98. SEX_ENUM
  99. end
  100. end
  101. field :head do
  102. formatted_value do
  103. bindings[:view].tag(:img,{:src => bindings[:object].get_head_img,
  104. :style => 'width: 100px;height: 100px;cursor: pointer;display: block;max-width: 100px',
  105. :onClick => "javascript:window.open('#{bindings[:object].get_head_img}')"})
  106. end
  107. end
  108. # field :openid
  109. # field :unionid
  110. # field :province
  111. field :city
  112. # field :signup_ip
  113. field :parent_signup_channel
  114. field :show_invite_mode
  115. field :rank, :enum do
  116. enum do
  117. RANK_ENUM
  118. end
  119. end
  120. field :sale_group
  121. field :sale_group_sum
  122. # field :channel_qrcode_id
  123. field :created_at
  124. end
  125. show do
  126. field :id
  127. field :user
  128. field :user_id
  129. field :nickname
  130. field :invite
  131. field :invite_id
  132. field :intro_user
  133. field :intro_user_id
  134. field :sex, :enum do
  135. enum do
  136. SEX_ENUM
  137. end
  138. end
  139. field :head do
  140. formatted_value do
  141. bindings[:view].tag(:img,{:src => bindings[:object].get_head_img,
  142. :style => 'width: 100px;height: 100px;cursor: pointer;display: block;max-width: 100px',
  143. :onClick => "javascript:window.open('#{bindings[:object].get_head_img}')"})
  144. end
  145. end
  146. field :unionid
  147. field :openid
  148. field :gzhOpenid
  149. field :gzhIsSub, :boolean
  150. field :gzhSubTime
  151. field :gzhUnSubTime
  152. field :gzhLastConversationTime
  153. field :province
  154. field :city
  155. field :signup_ip
  156. # field :subscribe
  157. # field :subscribe_time do
  158. # formatted_value do
  159. # (value !=nil || value != 0) ? Time.at(value):Time.now
  160. # end
  161. # end
  162. # field :unsubscribe_time do
  163. # formatted_value do
  164. # (value !=nil || value != 0) ? Time.at(value):Time.now
  165. # end
  166. # end
  167. # field :last_conversation_at do
  168. # formatted_value do
  169. # (value !=nil || value != 0) ? Time.at(value):Time.now
  170. # end
  171. # end
  172. # field :channel_qrcode_id
  173. field :invite_qrcode_url
  174. field :show_invite_mode
  175. field :rank, :enum do
  176. enum do
  177. RANK_ENUM
  178. end
  179. end
  180. field :parent_signup_channel
  181. field :sale_group
  182. field :sale_group_sum
  183. field :created_at
  184. end
  185. edit do
  186. field :user_id
  187. field :nickname
  188. # field :unionid
  189. field :city
  190. field :country
  191. field :province
  192. field :sex, :enum do
  193. enum do
  194. SEX_ENUM
  195. end
  196. end
  197. field :v_head, :file_upload do
  198. pretty_value do
  199. bindings[:view].tag(:img, {:src => bindings[:object].get_head_img, :class => 'preview'})
  200. end
  201. end
  202. # field :subscribe
  203. # field :unsubscribe_time, :datetime do
  204. # formatted_value do
  205. # (value.blank?) ? Time.at(0) : Time.at(value)
  206. # end
  207. # end
  208. # field :subscribe_time, :datetime do
  209. # formatted_value do
  210. # (value.blank?) ? Time.at(0) : Time.at(value)
  211. # end
  212. # end
  213. # field :last_conversation_at
  214. field :invite_id
  215. field :signup_ip
  216. field :channel_qrcode_id
  217. field :invite_qrcode_url
  218. field :show_invite_mode
  219. field :rank, :enum do
  220. enum do
  221. RANK_ENUM
  222. end
  223. end
  224. end
  225. end
  226. def get_head_img
  227. url = "http://#{Ali::Oss::CDN_URL_FOR_HOST}/#{self.head}"
  228. return url
  229. end
  230. def v_head=file
  231. unless file.blank?
  232. clear_head_img
  233. file_name = "#{UUID.new.generate[0...8].downcase}.jpg"
  234. file_path = "#{IMG_STORE_PATH}/#{file_name}"
  235. Ali::Oss.store(Ali::Oss::BUCKET_NAME_PUBLIC_READ, file_path, file.read)
  236. self.head = file_path
  237. self.save
  238. end
  239. end
  240. def clear_head_img
  241. file_path = "#{self.head}"
  242. Ali::Oss.delete_object(Ali::Oss::BUCKET_NAME_PUBLIC_READ, file_path)
  243. end
  244. def after_destroy
  245. clear_head_img
  246. end
  247. end