order.rb 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457
  1. #encoding=UTF-8
  2. require 'json'
  3. require 'rest-client'
  4. class Order < ActiveRecord::Base
  5. has_paper_trail
  6. self.table_name = 'orders'
  7. validates_presence_of :wx_user_id,:total_price,:order_id
  8. #belongs_to :user, :foreign_key => :user_id
  9. belongs_to :wx_user,:foreign_key => :wx_user_id
  10. belongs_to :depart_record, :foreign_key => :depart
  11. has_many :order_details
  12. has_many :base_details
  13. # has_and_belongs_to_many :products, join_table: :order_details
  14. # before_save :before_save
  15. after_update :patch_send_product
  16. after_create :import_orders
  17. def import_orders
  18. # 更新order信息
  19. od = Order.where("id = ?", self.id).first
  20. if od.source=="sys"
  21. od.status="processing"
  22. od.order_type=0
  23. od.pick_way=0
  24. od.has_commission=false
  25. end
  26. wxUser = WxUser.where("id = ?", od.wx_user_id).first
  27. unless wxUser.blank?
  28. od.depart=wxUser.depart
  29. od.user_id=wxUser.user_id
  30. end
  31. od.save
  32. end
  33. def before_save
  34. unless self.express_company.nil?
  35. if self.express_company.length>0
  36. express = ExpressCompany.where("express_company = ?", self.express_company).first
  37. if !express.blank?
  38. self.express_code = express.express_code
  39. end
  40. end
  41. end
  42. wxUser = WxUser.where("id = ?", self.wx_user_id).first
  43. if !wxUser.blank?
  44. self.depart=wxUser.depart
  45. self.user_id=wxUser.user_id
  46. end
  47. end
  48. scope :所有订单, -> {}
  49. scope :未支付, -> { where("status=?","unpay") }
  50. scope :已关闭, -> { where("status=?","closed") }
  51. scope :处理中, -> { where("status=?","processing") }
  52. scope :待收货, -> { where("status=?","dispatch") }
  53. scope :已完成, -> { where("status=?","complete") }
  54. def patch_send_product
  55. if self.status=="processing" && self.source!="sys"
  56. #发放未发放赠品
  57. url = "#{CONFIG_FILE["api_host"]}/railsadmin/recharge/award/#{self.id}"
  58. p url
  59. open(url)
  60. end
  61. end
  62. def after_update
  63. test_redis = Redis.new(:host=>"r-wz9dtt12y12ns2b97gpd.redis.rds.aliyuncs.com",:db=>"0",:user=>"root",:password=>"Fohow123!@#")
  64. redis = Redis.new(:host=>"r-wz9dtt12y12ns2b97gpd.redis.rds.aliyuncs.com",:db=>"0",:user=>"root",:password=>"Fohow123!@#")
  65. orderKey= format("order_model.GetOrderByOId:%s",self.order_id)
  66. redis.del(orderKey)
  67. test_redis.del(orderKey)
  68. end
  69. STATUS_ENUM = [["未支付","unpay"],["已关闭","closed"],["待确认","unconfirmed"],["处理中","processing"],["已完成","complete"],["待收货","dispatch"],["已退款","refunded"]]
  70. TYPE_ENUM = [["普通",0],["秒杀",1],["店长",2],["积分",3],["赠品",4]]
  71. EXP_ENUM = []
  72. DEPART_ENUM= [["部门1",1], ["部门2",2], ["部门3", 3], ["部门4", 4], ["部门5", 5]]
  73. expressCompanys = ExpressCompany.order("id asc")
  74. expressCompanys.each do |exp|
  75. a=[exp.express_company,exp.express_company]
  76. EXP_ENUM.push(a)
  77. end
  78. PAY_WAY_ENUM = [
  79. ["微信支付","weixinpay"],
  80. ["提货券支付","balance"],
  81. ["积分支付","cent"],
  82. ]
  83. PICK_WAY_ENUM = [
  84. ["快递运输",0],
  85. ["门店自提",1],
  86. ]
  87. SOURCE_ENUM = [["小程序","xcx"],["公众号","gzh"],["外部系统","sys"]]
  88. def user_tel
  89. linkUser = User.where("id = ?", self.user_id).first
  90. if !linkUser.blank?
  91. if linkUser.is_black_user
  92. return linkUser.tel + " 【黑名单】"
  93. else
  94. return linkUser.tel
  95. end
  96. else
  97. return "不存在"
  98. end
  99. end
  100. def w_user
  101. if !wx_user.blank?
  102. return wx_user.nickname
  103. else
  104. return "--"
  105. end
  106. end
  107. def merchant
  108. tmp = "-"
  109. prod = Product.where("id = ?", self.product_id).first
  110. if !prod.blank?
  111. merchant = Merchant.where("id = ?", prod.merchant_id).first
  112. if !merchant.blank?
  113. tmp = merchant.name
  114. end
  115. end
  116. return tmp
  117. end
  118. def total_price_format
  119. total_price_f = self.total_price!=0 ? (self.total_price/100.0) :0
  120. return total_price_f.to_s
  121. end
  122. def paied_price_format
  123. case self.pay_way
  124. when "weixinpay"
  125. paied_price_f = self.paied_price!=0 ? ((self.paied_price)/100.0) :0
  126. return paied_price_f.to_s # + "元"
  127. when "balance"
  128. paied_price_f = self.paied_price!=0 ? ((self.paied_price)/100.0) :0
  129. return paied_price_f.to_s #+ "提货券"
  130. when "integral"
  131. paied_price_f = self.paied_price!=0 ? ((self.paied_price)/100.0) :0
  132. return paied_price_f.to_s #+ "提货券"
  133. end
  134. end
  135. def cent_price_format
  136. paied_price_f = self.cent_price!=0 ? ((self.cent_price)/100.0) :0
  137. return paied_price_f.to_s #+ "提货券"
  138. end
  139. def coupon_price_format
  140. coupon_price_f = self.coupon_price!=0 ? ((self.coupon_price)/100.0) :0
  141. return coupon_price_f.to_s
  142. end
  143. rails_admin do
  144. navigation_label '商品管理'
  145. weight -240
  146. =begin
  147. configure :products do
  148. inverse_of :order_details
  149. end
  150. =end
  151. list do
  152. scopes [nil,:未支付,:已关闭,:处理中,:待收货,:已完成]
  153. filters [:order_id,:status,:pay_way,:receive_time,:wx_user_id,:paied_time,:depart]
  154. field :id do
  155. visible false
  156. end
  157. field :order_id do
  158. filterable true
  159. end
  160. field :pick_way, :enum do
  161. enum do
  162. PICK_WAY_ENUM
  163. end
  164. end
  165. #field :order_id
  166. field :order_type, :enum do
  167. filterable true
  168. enum do
  169. TYPE_ENUM
  170. end
  171. end
  172. field :user_id do
  173. visible false
  174. filterable true
  175. end
  176. field :wx_user_id do
  177. visible true
  178. filterable true
  179. end
  180. field :wx_user
  181. field :user_tel do
  182. # visible false
  183. end
  184. field :total_price do
  185. visible false
  186. end
  187. field :freight do
  188. visible true
  189. label "运费(元)"
  190. formatted_value do
  191. value!=0 ? (value/100.0):0
  192. end
  193. end
  194. field :total_price_format do
  195. visible true
  196. end
  197. field :total_price_format do
  198. visible true
  199. end
  200. field :coupon_price_format
  201. field :cent_price_format
  202. field :paied_price_format do
  203. visible true
  204. end
  205. field :trade_no do
  206. visible false
  207. end
  208. field :status, :enum do
  209. enum do
  210. STATUS_ENUM
  211. end
  212. end
  213. field :pay_way, :enum do
  214. enum do
  215. PAY_WAY_ENUM
  216. end
  217. end
  218. field :source, :enum do
  219. visible false
  220. enum do
  221. SOURCE_ENUM
  222. end
  223. end
  224. field :paied_at do
  225. formatted_value do
  226. (value == 0 || value == nil) ? Time.at(0) : Time.at(value)
  227. end
  228. end
  229. field :paied_time do
  230. visible false
  231. end
  232. field :contact
  233. field :tel
  234. field :address
  235. field :express_company
  236. field :express_order_no
  237. field :dispatch_time
  238. field :receive_time do
  239. # visible false
  240. end
  241. field :order_remark do
  242. visible false
  243. end
  244. #field :order_details
  245. field :remark
  246. field :depart do
  247. visible false
  248. filterable true
  249. end
  250. field :depart_record
  251. field :pv do
  252. formatted_value do # used in form views
  253. value.to_f / 100
  254. end
  255. end
  256. field :created_at do
  257. visible false
  258. end
  259. end
  260. show do
  261. field :id
  262. field :order_id
  263. field :pick_way, :enum do
  264. enum do
  265. PICK_WAY_ENUM
  266. end
  267. end
  268. field :wx_user
  269. field :wx_user_id
  270. field :freight do
  271. visible true
  272. label "运费(元)"
  273. formatted_value do
  274. value!=0 ? (value/100.0):0
  275. end
  276. end
  277. field :coupon_price_format
  278. field :cent_price_format
  279. field :paied_price_format
  280. field :buy_price
  281. field :trade_no
  282. field :status, :enum do
  283. enum do
  284. STATUS_ENUM
  285. end
  286. end
  287. field :pay_way, :enum do
  288. enum do
  289. PAY_WAY_ENUM
  290. end
  291. end
  292. field :source, :enum do
  293. enum do
  294. SOURCE_ENUM
  295. end
  296. end
  297. field :paied_at do
  298. formatted_value do
  299. (value == 0 || value == nil) ? Time.at(0) : Time.at(value)
  300. end
  301. end
  302. field :tel
  303. field :address
  304. field :contact
  305. field :express_company
  306. field :express_order_no
  307. field :remark
  308. field :order_remark
  309. field :dispatch_time
  310. field :receive_time
  311. field :depart do
  312. visible false
  313. filterable true
  314. end
  315. field :pv do
  316. formatted_value do # used in form views
  317. value.to_f / 100
  318. end
  319. end
  320. field :depart_record
  321. field :order_details
  322. field :created_at
  323. field :updated_at
  324. end
  325. edit do
  326. field :order_id
  327. field :pick_way, :enum do
  328. enum do
  329. PICK_WAY_ENUM
  330. end
  331. end
  332. field :wx_user_id
  333. field :user_id
  334. field :total_price
  335. field :paied_price
  336. field :paied_at
  337. field :buy_price
  338. field :paied_price
  339. field :cent_price
  340. field :freight
  341. field :trade_no
  342. field :status, :enum do
  343. enum do
  344. STATUS_ENUM
  345. end
  346. end
  347. field :pay_way, :enum do
  348. enum do
  349. PAY_WAY_ENUM
  350. end
  351. end
  352. field :source, :enum do
  353. enum do
  354. SOURCE_ENUM
  355. end
  356. end
  357. field :order_type, :enum do
  358. enum do
  359. TYPE_ENUM
  360. end
  361. end
  362. field :tel
  363. field :address
  364. field :contact
  365. #field :express_company
  366. field :express_company, :enum do
  367. enum do
  368. EXP_ENUM
  369. end
  370. end
  371. field :express_order_no
  372. field :remark
  373. field :order_remark
  374. field :dispatch_time
  375. # field :depart
  376. # field :products
  377. end
  378. export do
  379. include_all_fields
  380. field :freight do
  381. visible true
  382. label "运费(元)"
  383. formatted_value do
  384. value!=0 ? (value/100.0):0
  385. end
  386. end
  387. field :status, :enum do
  388. enum do
  389. STATUS_ENUM
  390. end
  391. end
  392. field :pay_way, :enum do
  393. enum do
  394. PAY_WAY_ENUM
  395. end
  396. end
  397. field :source, :enum do
  398. enum do
  399. SOURCE_ENUM
  400. end
  401. end
  402. field :paied_at do
  403. formatted_value do
  404. (value == 0 || value == nil) ? Time.at(0) : Time.at(value)
  405. end
  406. end
  407. end
  408. end
  409. end