order.rb 12 KB

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