order.rb 12 KB

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