order.rb 12 KB

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