order.rb 14 KB

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