| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- # encoding:utf-8
- class ZtReportController < BaseController
- before_filter :authenticate_admin_user!
- def xccj
- render :layout => false
- end
- def fanhongbao
- time_0125 = Time.new(2017, 1, 27, 20, 0, 0)
- #合体成功总金额单位:分
- @success_total = 0
- records = ZtFanhongbaoRecord.where("state=?", 1)
- records.each do |record|
- @success_total += record.first_num*100 + record.last_num*10
- end
- #合体总次数
- @total_times = records.length#ZtFanhongbaoRecord.where("state=?", 1).length
- #绑定金额 balance
- @total_balance = Balance.where("source=? or source=?", "new_year_fanhongbao_", "new_year_fhb_2017").sum("count")
- #提现金额(金额小于50元的)
- @take_cash_total = Balance.where("source=? and count > -10000 and created_at > ?", "extract", time_0125).sum("count")
- #新增关注用户
- @new_wx_sub_users = WxUser.where("created_at > ? and subscribe = ?", time_0125, true).length
- #新注册用户
- @new_users = User.where("created_at>? and tel != ''", time_0125).length
- #新增绑定身份证用户
- @binding_id = User.where("created_at>? and identity_card != ''", time_0125).length
- #新增绑卡用户
- @binding_card = UserBankcard.where("created_at>?", time_0125).length
- render :layout => false
- end
- def share_info
- # sql = "select sum(first_num*100 + last_num*10) as total from d5c_zt_fanhongbao_records where state=1"
- # @success_total = ZtFanhongbaoRecord.find_by_sql(sql).first.total
- time_0125 = Time.new(2017, 1, 27, 20, 0, 0)
- #参与总人数
- @total_size = ZtFanhongbaoRecord.group("launcher_id").all.length
- #成功人数
- @success_size = ZtFanhongbaoRecord.where("state=?", 1).group("launcher_id").length
-
- #合体次数用满的人数
- # @full_time_people = ZtFanhongbaoRecord.where("state=?", 1).group("")
- #分享朋友圈
- @share_timeline = 0 #ShareInfo.where("share_code=? and share_to=?", "spring_szhb", "timeline").length
- #分享人或群
- @share_group = 0#ShareInfo.where("share_code=? and share_to=?", "spring_szhb", "group").length
- ShareInfo.where("share_code=?", "spring_szhb").each do |item|
- if item.share_to == "group"
- @share_group += 1
- elsif item.share_to == "timeline"
- @share_timeline += 1
- end
- end
- #分享人数
- @share_people = ShareInfo.where("share_code=?", "spring_szhb").group("wx_user_id").length
- end
- def top10
- #发起用户合体次数top10
- sql = "select count(*) as c, launcher_id, d5c_wx_users.nickname, d5c_wx_users.user_id from d5c_zt_fanhongbao_records
- left join d5c_wx_users on d5c_wx_users.id = launcher_id
- where state=1 group by launcher_id order by c DESC limit 10"
- @launch_top_10 = ZtFanhongbaoRecord.find_by_sql(sql)
- #被邀请合体次数top10
- sql = "select count(*) as c, partner_id, d5c_wx_users.nickname, d5c_wx_users.user_id from d5c_zt_fanhongbao_records
- left join d5c_wx_users on d5c_wx_users.id = partner_id
- where state=1 group by partner_id order by c DESC limit 10"
- @partner_top_10 = ZtFanhongbaoRecord.find_by_sql(sql)
-
- @money_top_10 = []
- sql = "select sum(count) as total, d5c_balances.user_id, d5c_users.nickname, d5c_users.tel from d5c_balances left join d5c_users on d5c_users.id = d5c_balances.user_id where (source='new_year_fanhongbao_' or source='new_year_fhb_2017') group by user_id order by total DESC limit 50"
- @money_top_10 = Balance.find_by_sql(sql)
- end
- def fhb_day
- @list = []
- ZtFanhongbaoRecord.select("date_format(open_time, '%Y-%m-%d') date, date_format(open_time, '%d') day, count(*) as c, sum(last_num*10 + first_num*100)/100 as total")
- .where("state=1")
- .group("day").order("day").each do |item|
- # p "*********** #{item.day}, #{item.c}, #{item.total}"
- @list << {:day => item.date, :count => item.c, :total => item.total}
- end
- @bk_list = []
- UserBankcard.select("date_format(created_at, '%Y-%m-%d') date, date_format(created_at, '%d') day, count(*) as c")
- .where("created_at > '2017-01-27'")
- .group("day").order("day").each do |item|
- @bk_list << {:day => item.date, :count => item.c}
- end
- end
- def kj_infos
- id = params[:id] || 0
- @act_infos =[]
- if id == 0
- # sql = "select id, title, purchase_price, open_ad_code, banner_ad_code, stock from d5c_zt_kj_infos where state = 1"
- sql = "select id,title from d5c_zt_kj_infos where state = 1"
- acts = ZtKjInfo.find_by_sql(sql)
- # p "----------------------------------------------------------------------------"
- # # p acts
- # p "----------------------------------------------------------------------------"
- acts.each do |u|
- act_info = get_act_statistic_info_by_act_id(u.id)
- @act_infos << act_info
- end
- else
- act_id = id.to_i
- act_info = get_act_statistic_info_by_act_id(act_id)
- @act_infos << act_info
- end
- render :layout => false
- end
- # 通过活动id 获取该活动统计信息
- def get_act_statistic_info_by_act_id(act_id)
- act = ZtKjInfo.where("id = ?", act_id).first
- if !act.blank?
- order_sql = "select id from d5c_zt_kj_orders where act_id = #{act_id}"
- join_user_count = ZtKjOrder.find_by_sql(order_sql).count()
- reduce_sql = "select id from d5c_zt_kj_reduces where act_id = #{act_id}"
- kj_count = ZtKjReduce.find_by_sql(reduce_sql).count()
- unit_price = 0
- success_kj_sql = "select id from d5c_zt_kj_orders where act_id = #{act_id} and left_price = #{act.min_price}"
- success_kj_count = ZtKjOrder.find_by_sql(success_kj_sql).count()
- # 成功下单数
- success_order_sql = "select id from d5c_zt_kj_orders where act_id = #{act_id} and left_price = #{act.min_price} and (status = 'processing' or status = 'complete' or status = 'dispatch')"
- success_order_count = ZtKjOrder.find_by_sql(success_order_sql).count()
- # 总成本
- cost = act.purchase_price * success_order_count
- # 分享朋友圈统计
- share_timeline_count = ShareInfo.where("relate_parent = ? and share_to = ? and share_code = ?", act.id, "timeline", "bargain_activity").count()
- share_group_count = ShareInfo.where("relate_parent = ? and share_to = ? and share_code = ?", act.id, "group", "bargain_activity").count()
- click_open_ad_count = 0
- show_open_ad_count = 0
- if !act.open_ad_code.blank?
- ad_items = get_ad_items_by_ad_position_code(act.open_ad_code)
- if !ad_items.blank?
- ad_items.each do |ad_item|
- click_count = get_click_times_by_ad_item(ad_item)
- click_open_ad_count = click_open_ad_count + click_count
- show_count = get_show_times_by_ad_item(ad_item)
- show_open_ad_count = show_open_ad_count + show_count
- end
- end
- end
- click_banner_ad_count = 0
- if !act.banner_ad_code.blank?
- ad_items = get_ad_items_by_ad_position_code(act.banner_ad_code)
- if !ad_items.blank?
- ad_items.each do |ad_item|
- click_count = get_click_times_by_ad_item(ad_item)
- click_banner_ad_count = click_banner_ad_count + click_count
- end
- end
- end
- unit_price = cost/((click_open_ad_count + click_banner_ad_count) * 1.0)
- unit_price = format("%.2f",unit_price).to_f
- act_info = Hash.new
- act_info = Hash[:title => act.title, :count => act.stock, :join_user_count => join_user_count, :kj_count =>kj_count, :show_open_ad_count => show_open_ad_count, :click_open_ad_count => click_open_ad_count, :click_banner_ad_count => click_banner_ad_count, :cost => cost, :unit_price => unit_price, :success_kj_count => success_kj_count, :success_order_count => success_order_count, :share_timeline_count => share_timeline_count, :share_group_count => share_group_count]
- return act_info
- end
- end
- # 通过广告位标识符获取所有广告项
- def get_ad_items_by_ad_position_code(code)
- ad_position = AdPosition.where("code = ?", code).first
- if !ad_position.blank?
- id = ad_position.id
- sql = "select id from d5c_ad_items where ad_position_id = #{id}"
- ad_items = AdItem.find_by_sql(sql)
- if !ad_items.blank?
- return ad_items
- end
- end
- end
- #通过广告项获取点击次数
- def get_click_times_by_ad_item(item)
- count = 0
- AdItemClickStatistic.select("ad_item_id, click_times").where("ad_item_id = ?", item.id).each do |u|
- count = count + u.click_times
- end
- return count
- end
- # 通过广告项获取展示次数
- def get_show_times_by_ad_item(item)
- count = 0
- AdItemShowStatistic.select("ad_item_id, show_times").where("ad_item_id = ?", item.id).each do |u|
- count = count + u.show_times
- end
- return count
- end
- end
|