order.rb 12 KB

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