order.rb 14 KB

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