Exemple #1
0
 def edit(self):
     id = int(self.get_argument('id'))
     partner = Partner.mgr(ismaster=1).one(id)
     factories = Factory.mgr().Q().data()
     self.render('data/partner_edit.html',
                 partner=partner,
                 factories=factories)
 def merge_partner(self, basics):
     if not basics:
         return None
     for i in basics:
         partner = Partner.mgr().Q().filter(partner_id=i['partner_id'])[0] 
         if not partner: #a partner_id in Scope but not in Partner 
             i['factory_id'] = None
         else:
             i['factory_id'] = partner['factory_id']
     factory_id_list = [i['factory_id'] for i in basics if i['factory_id'] != None]
     factory_id_list = list(set(factory_id_list))
     # merge factory
     result = []
     dft = {'bfree_user': 0, 'bfree_down': 0, 'bpay_down': 0, 'new_user_run': 0, 'visits': 0, 'imei': 0, 'cfree_user': 0, 
         'bfee': 0.0, 'cfee': 0.0, 'pay_user': 0, 'user_retention': 0, 'new_user_visit': 0, 'user_run': 0, 'cpay_user': 0,
         'cfree_down': 0, 'bpay_user': 0, 'batch_pv': 0, 'user_visit': 0, 'batch_fee': 0.0, 'active_user_visit': 0, 'cpay_down': 0, 
         'batch_uv': 0 }
     for i in factory_id_list:
         res = {}
         res = copy.deepcopy(dft)
         res['factory_id'] = i
         result.append(copy.deepcopy(res))
     for res in result:
         for i in basics:
             if res['factory_id'] == i['factory_id']:
                 for item in dft:
                     res[item] += i[item]
     return result       
Exemple #3
0
 def list(self):
     id = int(self.get_argument('id', 0))
     factory_id = int(self.get_argument('factory_id', 0))
     partner_id = int(self.get_argument('partner_id', 0))
     page = int(self.get_argument('pageNum', 1))
     psize = int(self.get_argument('numPerPage', 20))
     q = Partner.mgr().Q()
     count = q.count()
     page_count = (count + psize - 1) / psize
     id and q.filter(id=id)
     factory_id and q.filter(factory_id=factory_id)
     partner_id and q.filter(partner_id=partner_id)
     partners = q[(page - 1) * psize:page * psize]
     for i in partners:
         i.factory = Factory.mgr().one(i.factory_id)
     factories = Factory.mgr().Q().data()
     self.render('data/partner_list.html',
                 partner_id=partner_id,
                 factory_id=factory_id,
                 page=page,
                 psize=psize,
                 count=count,
                 page_count=page_count,
                 partners=partners,
                 factories=factories)
Exemple #4
0
 def get_all_factstat(self, mode, start, end):
     key = '%s_%s_%s_%s' % (self.lfactstat, mode, start, end)
     #res = self.cache.get(key)
     #if not res:
     factory_list = Factory.mgr().Q().data()
     res = {}
     for i in factory_list:
         partner_list = Partner.mgr().Q().filter(factory_id=i.id)[:]
         scopeid_list = []
         for p in partner_list:
             scope = Scope.mgr().Q().filter(platform_id=6,
                                            run_id='',
                                            plan_id='',
                                            partner_id=p.partner_id,
                                            version_name='',
                                            product_name='')[0]
             if scope:
                 scopeid_list.append(scope.id)
         basic = BasicStat.mgr().get_data_by_multi_scope(scopeid_list,
                                                         mode=mode,
                                                         start=start,
                                                         end=end)
         res[i.id] = basic
     #self.cache.set(key,res,1800)
     return res
Exemple #5
0
 def delete(self):
     id = int(self.get_argument('id'))
     partner = Partner.mgr(ismaster=1).one(id)
     partner2 = Partnerv2.mgr(ismaster=True).Q().filter(
         partner_id=partner['partner_id'])
     partner.delete()
     for i in partner2:
         i.delete()
     self.json2dwz('200', 'forward', 'dlist', forwardUrl='partner/list')
Exemple #6
0
 def merge_partner(self, basics):
     if not basics:
         return None
     for i in basics:
         partner = Partner.mgr().Q().filter(partner_id=i['partner_id'])[0]
         if not partner:  #a partner_id in Scope but not in Partner
             i['factory_id'] = None
         else:
             i['factory_id'] = partner['factory_id']
     factory_id_list = [
         i['factory_id'] for i in basics if i['factory_id'] != None
     ]
     factory_id_list = list(set(factory_id_list))
     # merge factory
     result = []
     dft = {
         'bfree_user': 0,
         'bfree_down': 0,
         'bpay_down': 0,
         'new_user_run': 0,
         'visits': 0,
         'imei': 0,
         'cfree_user': 0,
         'bfee': 0.0,
         'cfee': 0.0,
         'pay_user': 0,
         'user_retention': 0,
         'new_user_visit': 0,
         'user_run': 0,
         'cpay_user': 0,
         'cfree_down': 0,
         'bpay_user': 0,
         'batch_pv': 0,
         'user_visit': 0,
         'batch_fee': 0.0,
         'active_user_visit': 0,
         'cpay_down': 0,
         'batch_uv': 0
     }
     for i in factory_id_list:
         res = {}
         res = copy.deepcopy(dft)
         res['factory_id'] = i
         result.append(copy.deepcopy(res))
     for res in result:
         for i in basics:
             if res['factory_id'] == i['factory_id']:
                 for item in dft:
                     res[item] += i[item]
     return result
Exemple #7
0
 def save(self):
     id = int(self.get_argument('pid', 0))
     #id = int(self.get_argument('id',0))
     #factory_id = int(self.get_argument('factory_id'))
     partner_id = int(self.get_argument('partner_id'))
     factory_name = self.get_argument('factory_name')
     factory = Factory.mgr().Q().filter(name=factory_name)
     factory_id = factory[0]['id']
     if id:
         p = Partner.mgr(ismaster=True).Q().filter(id=id)[0]
         p2 = Partnerv2.mgr(ismaster=True).Q().filter(
             factory_id=p['factory_id'])[0]
     else:
         p = Partner.new()
         p2 = Partnerv2.new()
     p.factory_id, p.partner_id = factory_id, partner_id
     p2.factory_id, p2.partner_id = factory_id, partner_id
     p = p.save()
     p2.save()
     self.json2dwz('200',
                   'closeCurrent',
                   'dlist',
                   forwardUrl='partner/list?id=%s' % p.id)
Exemple #8
0
 def get_all_partner_fee_daily(self, mode, start, end):
     res = {}
     partner_list = Partner.mgr().Q().data()
     for p in partner_list:
         scope = Scope.mgr().Q().filter(platform_id=6,
                                        run_id='',
                                        plan_id='',
                                        partner_id=p.partner_id,
                                        version_name='',
                                        product_name='')[0]
         if scope:
             recharge = BasicStat.mgr().get_recharge_by_multi_scope(
                 [scope.id], mode=mode, start=start, end=end)
             #fee = int(recharge['consumefee']) + int(recharge['msgfee'])
             fee = float(recharge['consumefee']) + recharge['msgfee']
             res[p.partner_id] = fee
     return res
Exemple #9
0
    def index(self):
        platform_id = int(self.get_argument('platform_id', 6))
        run_id = int(self.get_argument('run_id', 0))
        plan_id = int(self.get_argument('plan_id', 0))
        factory_id = int(self.get_argument('factory_id', 0))
        version_name = self.get_argument('version_name', '').replace('__', '.')
        product_name = self.get_argument('product_name', '')
        page = int(self.get_argument('pageNum', 1))
        psize = int(self.get_argument('numPerPage', 20))
        query_mode = self.get_argument('query_mode', '')
        group = self.get_argument('group', '')
        order_field = self.get_argument('orderField', 'user_run')
        tody = self.get_date(1) + datetime.timedelta(days=1)
        yest = tody - datetime.timedelta(days=1)
        start = tody - datetime.timedelta(days=30)
        # factory
        q = Factory.mgr().Q()
        group and q.filter(group=group)
        factory_list = self.filter_factory(q[:], query_mode)
        if factory_id == 0 and factory_list:
            factory_id = factory_list[0].id
        partner_list = Partner.mgr().Q().filter(factory_id=factory_id)[:]
        # scope list
        scopeid_list = []
        for i in partner_list:
            scope = Scope.mgr().Q().filter(platform_id=platform_id,
                                           run_id=run_id,
                                           plan_id=plan_id,
                                           partner_id=i.partner_id,
                                           version_name=version_name,
                                           product_name=product_name)[0]
            if scope:
                scopeid_list.append(scope.id)
        # basic stat
        basics = []
        dft = dict([(i, 0) for i in BasicStat._fields])
        if query_mode == 'basic':
            start = self.get_argument('start', '')
            date = self.get_argument('date', '')
            action = self.get_argument('action', '')
            if not start:
                start = tody - datetime.timedelta(days=7)
            else:
                start = datetime.datetime.strptime(start, '%Y-%m-%d')
            _start, days = start, []
            while _start < tody:
                _end = _start + datetime.timedelta(days=1)
                basic = BasicStat.mgr().get_data_by_multi_scope(scopeid_list,
                                                                mode='day',
                                                                start=_start,
                                                                end=_end)
                basic['title'] = _start.strftime('%m-%d')
                basics.append(basic)
                days.append(_start)
                _start = _end
            # for chart
            x_axis = ['%s' % i.strftime('%m-%d') for i in days]
            results = {}
            excludes = ('id', 'scope_id', 'mode', 'time', 'bfee', 'cfee',
                        'recharge', 'uptime', 'batch_fee', 'batch_pv',
                        'batch_uv')
            for k in [i for i in BasicStat._fields if i not in excludes]:
                results[k] = {
                    'title': BasicStat._fieldesc[k],
                    'data': ','.join([str(i.get(k, 0)) for i in basics])
                }
            for i in basics:
                i['feesum'] = float(i['consumefee']) + i['msgfee']
            fee_list = [i['feesum'] for i in basics]
            m_fee = '%.1f' % (sum(fee_list) / len(fee_list))
            p_fee = max(fee_list)
            # mean and peak
            basic_m = BasicStat.mgr().get_data_by_multi_scope(scopeid_list,
                                                              'day',
                                                              start,
                                                              tody,
                                                              ismean=True)
            basic_p = BasicStat.mgr().get_peak_by_multi_scope(
                scopeid_list, 'day', start, tody)
            basic_m['feesum'], basic_p['feesum'] = m_fee, p_fee
            basic_m['title'], basic_p['title'] = '每日平均', '历史峰值'
            basics.extend([basic_m, basic_p])
            if action == 'export':
                excel_title = [('title', '时间'), ('user_run', '启动用户'),
                               ('new_user_run', '新增启动用户'),
                               ('user_visit', '访问用户'),
                               ('new_user_visit', '新增访问用户'),
                               ('pay_user', '付费用户'),
                               ('active_user_visit', '活跃用户'),
                               ('visits', '访问PV'), ('cpay_down', '章付费数'),
                               ('bpay_down', '本付费数'), ('cpay_user', '章付费用户'),
                               ('bpay_user', '本付费用户'), ('cfree_down', '章免费数'),
                               ('bfree_down', '本免费数'), ('cfree_user', '章免费用户'),
                               ('bfree_user', '本免费用户'), ('cfee', '章月饼消费'),
                               ('bfee', '本月饼消费')]
                #('batch_fee','批量订购阅饼消费'),('batch_pv','批量订购PV'),('batch_uv','批量订购UV')]
                xls = Excel().generate(excel_title, basics, 1)
                filename = 'factstat_%s.xls' % (yest.strftime('%Y-%m-%d'))
                self.set_header('Content-Disposition',
                                'attachment;filename=%s' % filename)
                self.finish(xls)
            else:
                self.render('data/factstat.html',
                            platform_id=platform_id,
                            run_id=run_id,
                            plan_id=plan_id,
                            factory_id=factory_id,
                            version_name=version_name,
                            product_name=product_name,
                            query_mode=query_mode,
                            basics=basics,
                            start=start.strftime('%Y-%m-%d'),
                            date=yest.strftime('%Y-%m-%d'),
                            factory_list=factory_list,
                            x_axis=x_axis,
                            results=results)

        elif query_mode == 'product':
            page = int(self.get_argument('pageNum', 1))
            psize = int(self.get_argument('numPerPage', 20))
            start = self.get_argument('start', '')
            date = self.get_argument('date', '')
            action = self.get_argument('action', '')
            if start != date:
                if not start:
                    start = tody - datetime.timedelta(days=2)
                else:
                    start = datetime.datetime.strptime(start, '%Y-%m-%d')
                if not date:
                    date = yest
                else:
                    date = datetime.datetime.strptime(date, '%Y-%m-%d')
                end = date + datetime.timedelta(days=1)

                scopeid_list = []
                scopeid_product = {}
                if factory_id == -1:
                    partnerid_list = [0]
                else:
                    partnerid_list = [i.partner_id for i in partner_list]
                for i in partnerid_list:
                    if product_name != '':
                        scopes = Scope.mgr().Q().filter(
                            platform_id=platform_id,
                            run_id=run_id,
                            plan_id=plan_id,
                            partner_id=i,
                            version_name=version_name,
                            product_name=product_name).extra(
                                "product_name<>''")
                    else:
                        scopes = Scope.mgr().Q().filter(
                            platform_id=platform_id,
                            run_id=run_id,
                            plan_id=plan_id,
                            partner_id=i,
                            version_name=version_name).extra(
                                "product_name<>''")
                        #if len(scopes) > 200 and action != 'export':#limit scope longth, for a better performance, user normally do not review multi-days product detail
                        #scopes = scopes[0:200]
                    for scope in scopes:
                        scopeid_list.append(scope.id)
                        scopeid_product[scope.id] = scope.product_name
                #result = BasicStat.mgr().get_multi_days_model_data(scopeid_list,'day',start,end,page,psize,order_field)
                result = BasicStat.mgr().get_multi_days_model_data(
                    scopeid_list, 'day', start, end)
                count, model_list = result['count'], result['list']
                for model in model_list:
                    model['product_name'] = scopeid_product[model['scope_id']]
                    model['time'] = model['time'].strftime('%Y-%m-%d')
                model_list = self.cumulative_stat_by_keys(
                    model_list, 'time', 'product_name')
                model_list = self.bubblesort(model_list, 'product_name')
                model_list = self.bubblesort_asc(model_list, 'time')
                count = len(model_list)
                if action == 'export':
                    title = [
                        ('product_name', '机型'), ('time', '时间'),
                        ('user_run', '启动用户'), ('new_user_run', '新增启动用户'),
                        ('user_visit', '访问用户'), ('new_user_visit', '新增访问用户'),
                        ('pay_user', '付费用户'), ('active_user_visit', '活跃用户'),
                        ('visits', '访问PV'), ('cpay_down', '按章付费数'),
                        ('bpay_down', '按本付费数'), ('cpay_user', '按章付费用户'),
                        ('bpay_user', '按本付费用户'), ('cfree_down', '按章免费数'),
                        ('bfree_down', '按本免费数'), ('cfree_user', '按章免费用户'),
                        ('bfree_user', '按本免费用户')
                    ]
                    xls = Excel().generate(title, model_list, 1)
                    filename = 'factstat_product_%s.xls' % (
                        yest.strftime('%Y-%m-%d'))
                    self.set_header('Content-Disposition',
                                    'attachment;filename=%s' % filename)
                    self.finish(xls)
                else:
                    model_list = model_list[(page - 1) * psize:page * psize]
                    self.render('data/factstat_product.html',
                                count=count,
                                psize=psize,
                                page=page,
                                factory_id=factory_id,
                                query_mode=query_mode,
                                product_name=product_name,
                                basics=model_list,
                                start=start.strftime('%Y-%m-%d'),
                                date=date.strftime('%Y-%m-%d'),
                                factory_list=factory_list,
                                order_field=order_field)
            else:
                if not start:
                    start = yest
                else:
                    start = datetime.datetime.strptime(start, '%Y-%m-%d')
                if not date:
                    date = yest
                else:
                    date = datetime.datetime.strptime(date, '%Y-%m-%d')
                scopeid_list = []
                scopeid_product = {}
                if factory_id == -1:
                    partnerid_list = [0]
                else:
                    partnerid_list = [i.partner_id for i in partner_list]
                for i in partnerid_list:
                    if not product_name:
                        scopes = Scope.mgr().Q().filter(
                            platform_id=platform_id,
                            run_id=run_id,
                            plan_id=plan_id,
                            partner_id=i,
                            version_name=version_name).extra(
                                "product_name<>''")
                    else:
                        scopes = Scope.mgr().Q().filter(
                            platform_id=platform_id,
                            run_id=run_id,
                            plan_id=plan_id,
                            partner_id=i,
                            version_name=version_name,
                            product_name=product_name)
                    for scope in scopes:
                        scopeid_list.append(scope.id)
                        scopeid_product[scope.id] = scope.product_name
                result = BasicStat.mgr().get_all_model_data(
                    scopeid_list, 'day', yest, tody)
                count, model_list = result['count'], result['list'][:]
                for model in model_list:
                    model['product_name'] = scopeid_product[model['scope_id']]
                    model['time'] = start.strftime('%Y-%m-%d')

                #find key_list
                if not model_list:
                    tmp = []
                else:
                    tmp = model_list[0].keys()
                key_list = [
                    i for i in tmp
                    if i not in ('scope_id', 'time', 'product_name')
                ]

                #find product_name_list
                tmp = []
                for model in model_list:
                    tmp.append(model['product_name'])
                tmp_set = set(tmp)
                product_name_list = [i for i in tmp_set]
                #get dft res_list
                res_list = []
                for i in product_name_list:
                    res_model = {}
                    res_model['product_name'] = i
                    res_model['time'] = start.strftime('%Y-%m-%d')
                    for key in key_list:
                        res_model[key] = 0
                    res_list.append(res_model)
                #Cumulative data
                for model in model_list:
                    for res in res_list:
                        if res['product_name'] == model['product_name']:
                            for key in key_list:
                                res[key] += model[key]

                count = len(res_list)
                res_list = self.bubblesort(res_list, order_field)
                if action == 'export':
                    title = [
                        ('product_name', '机型'), ('time', '时间'),
                        ('user_run', '启动用户'), ('new_user_run', '新增启动用户'),
                        ('user_visit', '访问用户'), ('new_user_visit', '新增访问用户'),
                        ('pay_user', '付费用户'), ('active_user_visit', '活跃用户'),
                        ('visits', '访问PV'), ('cpay_down', '按章付费数'),
                        ('bpay_down', '按本付费数'), ('cpay_user', '按章付费用户'),
                        ('bpay_user', '按本付费用户'), ('cfree_down', '按章免费数'),
                        ('bfree_down', '按本免费数'), ('cfree_user', '按章免费用户'),
                        ('bfree_user', '按本免费用户')
                    ]
                    xls = Excel().generate(title, res_list, 1)
                    filename = 'factstat_product_%s.xls' % (
                        yest.strftime('%Y-%m-%d'))
                    self.set_header('Content-Disposition',
                                    'attachment;filename=%s' % filename)
                    self.finish(xls)
                else:
                    res_list = res_list[(page - 1) * psize:page * psize]
                    self.render('data/factstat_product_singleday.html',
                                count=count,
                                psize=psize,
                                page=page,
                                factory_id=factory_id,
                                query_mode=query_mode,
                                product_name=product_name,
                                basics=res_list,
                                start=start.strftime('%Y-%m-%d'),
                                date=date.strftime('%Y-%m-%d'),
                                factory_list=factory_list,
                                order_field=order_field)

        elif query_mode == 'fact' or query_mode == 'business':
            basics = []
            count = len(factory_list)
            all_stats = Service.inst().stat.get_all_factstat('day', yest, tody)
            acc_stats = {}
            for i in factory_list:
                basic = all_stats.get(i.id, None)
                if basic:
                    for k in basic:
                        acc_stats[k] = basic[k] + acc_stats.get(k, 0)
                    basic['title'] = i.name
                    basics.append(basic)

            acc_stats['title'] = '总计'
            basics.sort(cmp=lambda x, y: cmp(x[order_field], y[order_field]),
                        reverse=True)
            basics = basics[(page - 1) * psize:page * psize]
            if basics:
                basics += [acc_stats]
            groups = Factory.mgr().all_groups()
            self.render('data/factstat_fact.html',
                        count=count,
                        psize=psize,
                        page=page,
                        query_mode=query_mode,
                        basics=basics,
                        factory_id=factory_id,
                        factory_list=factory_list,
                        start=None,
                        product_name='',
                        date=yest.strftime('%Y-%m-%d'),
                        order_field=order_field,
                        group=group,
                        groups=groups)

        elif query_mode == 'factory_sum':
            start = self.get_argument('start', '')
            if not start:
                start = tody - datetime.timedelta(days=7)
            else:
                start = datetime.datetime.strptime(start, '%Y-%m-%d')
            #factory sum stat
            fact_sums = []
            acc_fact_sum = {}
            fact_list = [long(i.id) for i in factory_list]
            _start, days = start, []
            while _start < tody:
                _end = _start + datetime.timedelta(days=1)
                #for the user who access other people's factory sum stat
                if len(fact_list) == 0:
                    _start = _end
                    continue

                fact_sum = {}
                in_vals = ','.join(["'%s'" % i for i in fact_list])
                sql = """
                SELECT SUM(visits) AS visits,SUM(imei) AS imei,SUM(user_run) AS user_run,SUM(new_user_run) AS new_user_run,
                SUM(user_visit) AS user_visit, SUM(new_user_visit) AS new_user_visit,SUM(active_user_visit) AS active_user_visit, 
                SUM(user_retention) AS user_retention,SUM(pay_user) AS pay_user, SUM(cpay_down) AS cpay_down, SUM(cfree_down) AS cfree_down,
                SUM(bpay_down) AS bpay_down, SUM(bfree_down) AS bfree_down,SUM(cpay_user) AS cpay_user, SUM(cfree_user) AS cfree_user, 
                SUM(bpay_user) AS bpay_user, SUM(bfree_user) AS bfree_user, SUM(bpay_user) AS bpay_user,SUM(bfree_user) AS bfree_user, SUM(cfee) AS cfee, 
                SUM(bfee) AS bfee FROM factory_sum_stat WHERE time = '%s' AND factory_id IN (%s) """ % (
                    _start, in_vals)
                q = FactorySumStat.mgr().raw(sql)
                if q[0]['visits'] == None:
                    fact_sum = dict([(i, 0) for i in FactorySumStat._fields])
                else:
                    fact_sum = q[0]
                for k in fact_sum:
                    acc_fact_sum[k] = fact_sum[k] + acc_fact_sum.get(k, 0)
                fact_sum['title'] = _start.strftime('%Y-%m-%d')
                fact_sums.append(fact_sum)
                days.append(_start)
                _start = _end
            acc_fact_sum['title'] = '总计'
            fact_sums.append(acc_fact_sum)
            #for charts
            x_axis = ['%s' % i.strftime('%m-%d') for i in days]
            results = {}
            excludes = ('id', 'time', 'factory_id', 'visits', 'imei', 'bfee',
                        'cfee', 'uptime')
            for k in [i for i in FactorySumStat._fields if i not in excludes]:
                results[k] = {
                    'title': FactorySumStat._fieldesc[k],
                    'data':
                    ','.join([str(i.get(k, 0)) for i in fact_sums[:-1]])
                }

            #render
            count = len(days) * len(factory_list)
            groups = Factory.mgr().all_groups()
            self.render('data/factstat_sum.html',
                        count=count,
                        psize=psize,
                        page=page,
                        query_mode=query_mode,
                        results=results,
                        x_axis=x_axis,
                        fact_sums=fact_sums,
                        factory_id=factory_id,
                        factory_list=factory_list,
                        product_name='',
                        start=start.strftime('%Y-%m-%d'),
                        date=yest.strftime('%Y-%m-%d'),
                        order_field=order_field,
                        group=group,
                        groups=groups)

        elif query_mode == 'recharge_log':
            page = int(self.get_argument('pageNum', 1))
            psize = int(self.get_argument('numPerPage', 20))
            phone = self.get_argument('phone', '')

            tody = self.get_date(0)
            start = self.get_argument('start', '')
            end = self.get_argument('end', '')
            if not start:
                start = tody - datetime.timedelta(days=30)
                start = start.strftime('%Y-%m-%d')
            if not end:
                end = tody.strftime('%Y-%m-%d')

            #user...
            user = self.get_current_user()
            query_count = QueryTimeCount.mgr().get_user_today_query_count(
                user['name'], tody.strftime('%Y-%m-%d'))
            if user:
                qt = QueryTimeCount.new()
                qt.user = user['name']
                qt.save()

            if query_count <= Query_Limit_Count or user['name'] == 'admin':
                data = Service.inst().fill_recharge_log_info(phone, start, end)
                recharge_log = data['res']
                if not recharge_log:
                    recharge_log = []
                recharge_log[(page - 1) * psize:page * psize]
                is_show = True
            else:
                recharge_log = []
                is_show = False
            count = len(recharge_log)
            self.render('data/factstat_recharge_log.html',
                        count=count,
                        psize=psize,
                        page=page,
                        recharge_log=recharge_log,
                        start=start,
                        date=end,
                        query_mode=query_mode,
                        phone=phone,
                        is_show=is_show)

        elif query_mode == 'consume_log':
            page = int(self.get_argument('pageNum', 1))
            psize = int(self.get_argument('numPerPage', 20))
            usr = self.get_argument('usr', '')

            tody = self.get_date(0)
            start = self.get_argument('start', '')
            end = self.get_argument('end', '')

            #user...
            user = self.get_current_user()
            query_count = QueryTimeCount.mgr().get_user_today_query_count(
                user['name'], tody.strftime('%Y-%m-%d'))
            if user:
                qt = QueryTimeCount.new()
                qt.user = user['name']
                qt.save()
            dft = {
                'obj': [],
                'page': {
                    u'totalPage': 0,
                    u'endPage': 0,
                    u'totals': 0,
                    u'startPage': 1,
                    u'perPages': 20,
                    u'currentPage': 1
                }
            }
            obj = []
            if query_count <= Query_Limit_Count or user['name'] == 'admin':
                if not usr:
                    data = dft
                else:
                    data = Service.inst().fill_consume_log_info(
                        usr, page, psize)

                obj = data['obj']
                count = data['page']['totals']
                page = data['page']['currentPage']
                psize = data['page']['perPages']
                if not obj:
                    obj = []
                is_show = True
            else:
                obj = []
                count = 0
                page = 1
                psize = psize
                is_show = False
            self.render('data/factstat_consume_log.html',
                        count=count,
                        psize=psize,
                        page=page,
                        obj=obj,
                        query_mode=query_mode,
                        is_show=is_show,
                        usr=usr)
 def arpu_multi_days(self, mode):
     platform_id = int(self.get_argument('platform_id',6))
     run_id = int(self.get_argument('run_id',0))
     plan_id = int(self.get_argument('plan_id',0))
     partner_id = int(self.get_argument('partner_id',0))
     version_name = self.get_argument('version_name','').replace('__','.')
     product_name = self.get_argument('product_name','')
     # scope 
     scope = Scope.mgr().Q().filter(platform_id=platform_id,run_id=run_id,plan_id=plan_id,
                   partner_id=partner_id,version_name=version_name,product_name=product_name)[0]
     tody = self.get_date(1) + datetime.timedelta(days=1)
     yest = tody - datetime.timedelta(days=1)
     days = [tody-datetime.timedelta(days=i) for i in range(7 if mode=='week' else 30,0,-1)]
     start = self.get_argument('start','')
     action = self.get_argument('action','')
     if start:
         start = datetime.datetime.strptime(start,'%Y-%m-%d')
     elif mode == 'week':
         start = tody - datetime.timedelta(days=7)
     else:
         start = tody - datetime.timedelta(days=30)
     delta = tody - start
     days = [start+datetime.timedelta(days=i) for i in range(delta.days)]
     basics = []
     
     # scope list
     all_fact_id = Factory.mgr().get_all_factory()
     scopeid_list = []
     for fact_id in all_fact_id:
         partner_list = Partner.mgr().Q().filter(factory_id=fact_id['id'])[:]
         for i in partner_list:
             scope2 = Scope.mgr().Q().filter(platform_id=platform_id,run_id=run_id,plan_id=plan_id, 
                 partner_id=i.partner_id,version_name=version_name,product_name=product_name)[0]
             if scope2:
                 scopeid_list.append(scope2.id)
     
     if scope:
         for i in days:
             dft = dict([(j,0) for j in BasicStat._fields])
             s = BasicStat.mgr().Q(time=i).filter(scope_id=scope.id,mode='day',time=i)[0] or dft
             recharge = BasicStat.mgr().get_recharge_by_multi_scope_one_day(scopeid_list, i, mode='day')
             arpu_7days_stat = Arpu7DaysArpuStat.mgr().get_arpu_7days_stat(i)[0]
             arpu_30days_stat = Arpu30DaysArpuFeeStat.mgr().get_arpu_30_days_stat(i)[0]
             arpu_90days_stat = Arpu90DaysArpuFeeStat.mgr().get_arpu_90_days_stat(i)[0]
             s['title'] = i.strftime('%Y-%m-%d')
             s['recharge'] = recharge
             s['arpu_30days'],s['arpu_90days'] = 0,0
             # 7 days arpu and new_user_visit
             if arpu_7days_stat:
                 s['new_user_visit'] = arpu_7days_stat['new_user_visit']
                 if arpu_7days_stat['new_user_visit'] == 0:
                     s['arpu_7days'] = 0
                     s['one_week_fee'] = 0
                 else:
                     s['arpu_7days'] = '%.03f' % (arpu_7days_stat['one_week_fee']/arpu_7days_stat['new_user_visit'])
                     s['one_week_fee'] = arpu_7days_stat['one_week_fee']
             else:
                 s['new_user_visit'] = 0
                 s['arpu_7days'] = 0
                 s['one_week_fee'] = 0
             #30 days arpu
             if arpu_30days_stat:
                 if s['new_user_visit'] != 0:
                     s['arpu_30days'] = '%0.3f' % (arpu_30days_stat['thirty_days_fee']/s['new_user_visit'])
             else:
                 s['arpu_30days'] = 0
             #90 days arpu
             if arpu_90days_stat:
                 if s['new_user_visit'] != 0:
                     s['arpu_90days'] = '%0.3f' % (arpu_90days_stat['ninety_days_fee']/s['new_user_visit'])
             else:
                 s['arpu_90days'] = 0
             # arpu
             if s['cpay_user'] != 0:
                 s['arpu'] = '%.03f' % (s['recharge']/s['user_run'])
             else:
                 s['arpu'] = 0
             basics.append(s)
     x_axis = ['%s'%i.strftime('%m-%d') for i in days] 
     results = {}
     arpu_list = []
     excludes = ('id','scope_id','mode','time','recharge','uptime','bfree_down','visits','cfree_user','bfee','imei','user_retention','cfee','batch_uv',
         'pay_user','cfree_down','bpay_user','batch_pv','user_visit','batch_fee','active_user_visit','cpay_down','bfree_user','bpay_down')
     for k in [i for i in BasicStat._fields if i not in excludes]:
         results[k] ={'title':BasicStat._fieldesc[k],'data':','.join([str(i.get(k,0)) for i in basics])}
     for basic in basics:
         arpu_list.append(basic['arpu'])
     arpu_data = ','.join(arpu_list)
     results['arpu'] = {'data':arpu_data,'title':'arpu'}
     self.render('data/arpu.html',
                 platform_id=platform_id,run_id=run_id,plan_id=plan_id,partner_id=partner_id,
                 version_name=version_name,product_name=product_name,date=yest.strftime('%Y-%m-%d'),
                 run_list=self.run_list(),plan_list=self.plan_list(),mode=mode,x_axis=x_axis,
                 basics=basics,results=results,start=start.strftime('%Y-%m-%d')
                 )
    def index(self):
        platform_id = int(self.get_argument('platform_id',6))
        run_id = int(self.get_argument('run_id',0))
        plan_id = int(self.get_argument('plan_id',0))
        factory_id = int(self.get_argument('factory_id',0))
        version_name = self.get_argument('version_name','').replace('__','.')
        product_name = self.get_argument('product_name','')
        page = int(self.get_argument('pageNum',1))
        psize = int(self.get_argument('numPerPage',20))
        query_mode = self.get_argument('query_mode','')
        group = self.get_argument('group','')
        order_field = self.get_argument('orderField','user_run')
        tody = self.get_date(1) + datetime.timedelta(days=1)
        yest = tody - datetime.timedelta(days=1)
        start = tody - datetime.timedelta(days=30)
        # factory
        q = Factory.mgr().Q()
        group and q.filter(group=group)
        factory_list = self.filter_factory(q[:],query_mode)
        if factory_id == 0 and factory_list:
            factory_id = factory_list[0].id
        partner_list = Partner.mgr().Q().filter(factory_id=factory_id)[:]
        # scope list
        scopeid_list = []
        for i in partner_list:
            scope = Scope.mgr().Q().filter(platform_id=platform_id,run_id=run_id,plan_id=plan_id,
                      partner_id=i.partner_id,version_name=version_name,product_name=product_name)[0]
            if scope:
                scopeid_list.append(scope.id)
        # basic stat
        basics = []
        dft = dict([(i,0) for i in BasicStat._fields])
        if query_mode == 'basic':
            start = self.get_argument('start','')
            date = self.get_argument('date','')
            action = self.get_argument('action','')
            if not start:
                start = tody - datetime.timedelta(days=7)
            else:
                start = datetime.datetime.strptime(start,'%Y-%m-%d') 
            _start,days = start,[]
            while _start < tody:
                _end = _start + datetime.timedelta(days=1)
                basic = BasicStat.mgr().get_data_by_multi_scope(scopeid_list,mode='day',start=_start,end=_end)
                basic['title'] = _start.strftime('%m-%d')
                basics.append(basic)
                days.append(_start)
                _start = _end
            # for chart
            x_axis = ['%s'%i.strftime('%m-%d') for i in days]
            results = {}
            excludes = ('id','scope_id','mode','time','bfee','cfee','recharge','uptime','batch_fee','batch_pv','batch_uv')
            for k in [i for i in BasicStat._fields if i not in excludes]:
                results[k] ={'title':BasicStat._fieldesc[k],'data':','.join([str(i.get(k,0)) for i in basics])}
            for i in basics:
                i['feesum'] = float(i['consumefee'])+i['msgfee']
            fee_list = [i['feesum'] for i in basics]
            m_fee = '%.1f'%(sum(fee_list)/len(fee_list))
            p_fee = max(fee_list)
            # mean and peak
            basic_m = BasicStat.mgr().get_data_by_multi_scope(scopeid_list,'day',start,tody,ismean=True)
            basic_p = BasicStat.mgr().get_peak_by_multi_scope(scopeid_list,'day',start,tody)
            basic_m['feesum'],basic_p['feesum'] = m_fee,p_fee
            basic_m['title'],basic_p['title'] = '每日平均','历史峰值'
            basics.extend([basic_m,basic_p])
            if action == 'export':  
                excel_title = [('title','时间'),('user_run','启动用户'),('new_user_run','新增启动用户'),
                ('user_visit','访问用户'),('new_user_visit','新增访问用户'),('pay_user','付费用户'),
                ('active_user_visit','活跃用户'),('visits','访问PV'),
                ('cpay_down','章付费数'),('bpay_down','本付费数'),
                ('cpay_user','章付费用户'),('bpay_user','本付费用户'),
                ('cfree_down','章免费数'),('bfree_down','本免费数'),
                ('cfree_user','章免费用户'),('bfree_user','本免费用户'),
                ('cfee','章月饼消费'),('bfee','本月饼消费')]
                #('batch_fee','批量订购阅饼消费'),('batch_pv','批量订购PV'),('batch_uv','批量订购UV')]
                xls = Excel().generate(excel_title,basics,1) 
                filename = 'factstat_%s.xls' % (yest.strftime('%Y-%m-%d'))
                self.set_header('Content-Disposition','attachment;filename=%s'%filename)
                self.finish(xls)
            else:
                self.render('data/factstat.html',
                        platform_id=platform_id,run_id=run_id,plan_id=plan_id,factory_id=factory_id,
                        version_name=version_name,product_name=product_name,query_mode=query_mode,
                        basics=basics,start=start.strftime('%Y-%m-%d'),date=yest.strftime('%Y-%m-%d'),
                        factory_list=factory_list,x_axis=x_axis,results=results
                        )

        elif query_mode == 'product':
            page = int(self.get_argument('pageNum',1))
            psize = int(self.get_argument('numPerPage',20))
            start = self.get_argument('start','')
            date = self.get_argument('date','')
            action = self.get_argument('action','')
            if start != date:
                if not start:
                    start = tody - datetime.timedelta(days=2)
                else:
                    start = datetime.datetime.strptime(start,'%Y-%m-%d')
                if not date:
                    date = yest
                else:
                    date = datetime.datetime.strptime(date,'%Y-%m-%d')
                end = date + datetime.timedelta(days=1)
            
                scopeid_list = []
                scopeid_product = {}
                if factory_id == -1:
                    partnerid_list = [0]
                else:
                    partnerid_list = [i.partner_id for i in partner_list]
                for i in partnerid_list:
                    if product_name != '':
                        scopes = Scope.mgr().Q().filter(platform_id=platform_id,run_id=run_id,plan_id=plan_id,
                                    partner_id=i,version_name=version_name,product_name=product_name).extra("product_name<>''")
                    else:
                        scopes = Scope.mgr().Q().filter(platform_id=platform_id,run_id=run_id,plan_id=plan_id,
                                    partner_id=i,version_name=version_name).extra("product_name<>''")
                        #if len(scopes) > 200 and action != 'export':#limit scope longth, for a better performance, user normally do not review multi-days product detail
                            #scopes = scopes[0:200]
                    for scope in scopes:
                        scopeid_list.append(scope.id)
                        scopeid_product[scope.id] = scope.product_name
                #result = BasicStat.mgr().get_multi_days_model_data(scopeid_list,'day',start,end,page,psize,order_field)
                result = BasicStat.mgr().get_multi_days_model_data(scopeid_list,'day',start,end)
                count,model_list = result['count'],result['list']
                for model in model_list:
                    model['product_name'] = scopeid_product[model['scope_id']]
                    model['time'] = model['time'].strftime('%Y-%m-%d') 
                model_list = self.cumulative_stat_by_keys(model_list,'time','product_name')
                model_list = self.bubblesort(model_list,'product_name')
                model_list = self.bubblesort_asc(model_list,'time')
                count = len(model_list)
                if action == 'export':
                    title = [('product_name','机型'),('time','时间'),('user_run','启动用户'),('new_user_run','新增启动用户'),('user_visit','访问用户'),
                        ('new_user_visit','新增访问用户'),('pay_user','付费用户'),('active_user_visit','活跃用户'),('visits','访问PV'),('cpay_down','按章付费数'),
                        ('bpay_down','按本付费数'),('cpay_user','按章付费用户'),('bpay_user','按本付费用户'),('cfree_down','按章免费数'),('bfree_down','按本免费数'),
                        ('cfree_user','按章免费用户'),('bfree_user','按本免费用户')]
                    xls = Excel().generate(title,model_list,1)
                    filename = 'factstat_product_%s.xls' % (yest.strftime('%Y-%m-%d'))
                    self.set_header('Content-Disposition','attachment;filename=%s'%filename)
                    self.finish(xls)
                else:
                    model_list = model_list[(page-1)*psize:page*psize]  
                    self.render('data/factstat_product.html',
                        count=count,psize=psize,page=page,factory_id=factory_id,
                        query_mode=query_mode,product_name=product_name,basics=model_list,
                        start=start.strftime('%Y-%m-%d'),date=date.strftime('%Y-%m-%d'),
                        factory_list=factory_list, order_field=order_field
                        )
            else:
                if not start:
                    start = yest
                else:
                    start = datetime.datetime.strptime(start,'%Y-%m-%d')
                if not date:
                    date = yest
                else:
                    date = datetime.datetime.strptime(date,'%Y-%m-%d')
                scopeid_list = []
                scopeid_product = {}
                if factory_id == -1:
                    partnerid_list = [0]
                else:
                    partnerid_list = [i.partner_id for i in partner_list]
                for i in partnerid_list:
                    if not product_name:
                        scopes = Scope.mgr().Q().filter(platform_id=platform_id,run_id=run_id,plan_id=plan_id,
                        partner_id=i,version_name=version_name).extra("product_name<>''")
                    else:
                        scopes = Scope.mgr().Q().filter(platform_id=platform_id,run_id=run_id,plan_id=plan_id,
                        partner_id=i,version_name=version_name,product_name=product_name)
                    for scope in scopes:
                        scopeid_list.append(scope.id)
                        scopeid_product[scope.id] = scope.product_name
                result = BasicStat.mgr().get_all_model_data(scopeid_list,'day',yest,tody)
                count,model_list = result['count'],result['list'][:]
                for model in model_list:
                    model['product_name'] = scopeid_product[model['scope_id']]
                    model['time'] = start.strftime('%Y-%m-%d') 
                 
                #find key_list
                if not model_list:
                    tmp = []
                else:
                    tmp = model_list[0].keys()
                key_list = [i for i in tmp if i not in ('scope_id','time','product_name')]
                
                #find product_name_list
                tmp = []
                for model in model_list:
                    tmp.append(model['product_name'])
                tmp_set = set(tmp)
                product_name_list = [i for i in tmp_set]
                #get dft res_list
                res_list = []
                for i in product_name_list:
                    res_model = {}
                    res_model['product_name'] = i
                    res_model['time'] = start.strftime('%Y-%m-%d')
                    for key in key_list:
                        res_model[key] = 0
                    res_list.append(res_model)
                #Cumulative data 
                for model in model_list:
                    for res in res_list:
                        if res['product_name'] == model['product_name']:
                            for key in key_list:
                                res[key] += model[key]
                
                count = len(res_list)
                res_list = self.bubblesort(res_list,order_field)
                if action == 'export': 
                    title = [('product_name','机型'),('time','时间'),('user_run','启动用户'),('new_user_run','新增启动用户'),('user_visit','访问用户'),
                    ('new_user_visit','新增访问用户'),('pay_user','付费用户'),('active_user_visit','活跃用户'),('visits','访问PV'),('cpay_down','按章付费数'),
                    ('bpay_down','按本付费数'),('cpay_user','按章付费用户'),('bpay_user','按本付费用户'),('cfree_down','按章免费数'),('bfree_down','按本免费数'),
                    ('cfree_user','按章免费用户'),('bfree_user','按本免费用户')]
                    xls = Excel().generate(title,res_list,1)
                    filename = 'factstat_product_%s.xls' % (yest.strftime('%Y-%m-%d'))
                    self.set_header('Content-Disposition','attachment;filename=%s'%filename)
                    self.finish(xls)
                else:
                    res_list = res_list[(page-1)*psize:page*psize]
                    self.render('data/factstat_product_singleday.html',
                        count=count,psize=psize,page=page,factory_id=factory_id,
                        query_mode=query_mode,product_name=product_name,basics=res_list,
                        start=start.strftime('%Y-%m-%d'),date=date.strftime('%Y-%m-%d'),
                        factory_list=factory_list, order_field=order_field
                        )
             
        elif query_mode == 'fact' or query_mode == 'business':
            basics = []
            count = len(factory_list)
            all_stats = Service.inst().stat.get_all_factstat('day',yest,tody)
            acc_stats = {}
            for i in factory_list:
                basic = all_stats.get(i.id,None)
                if basic:
                    for k in basic:
                        acc_stats[k] = basic[k] + acc_stats.get(k,0)
                    basic['title'] = i.name
                    basics.append(basic)
             
            acc_stats['title'] = '总计'
            basics.sort(cmp=lambda x,y:cmp(x[order_field],y[order_field]),reverse=True)
            basics= basics[(page-1)*psize:page*psize]
            if basics:
                basics += [acc_stats]
            groups = Factory.mgr().all_groups()
            self.render('data/factstat_fact.html',
                    count=count,psize=psize,page=page,query_mode=query_mode,basics=basics,
                    factory_id=factory_id,factory_list=factory_list,start=None,product_name='',
                    date=yest.strftime('%Y-%m-%d'),order_field=order_field,group=group,groups=groups
                    )
        
        elif query_mode == 'factory_sum':
            start = self.get_argument('start','')
            if not start:
                start = tody - datetime.timedelta(days=7)
            else: 
                start = datetime.datetime.strptime(start,'%Y-%m-%d') 
            #factory sum stat
            fact_sums=[]
            acc_fact_sum={}
            fact_list = [long(i.id) for i in factory_list]
            _start,days = start,[]
            while _start < tody:
                _end = _start + datetime.timedelta(days=1)
                #for the user who access other people's factory sum stat
                if len(fact_list) == 0:
                    _start = _end
                    continue
                
                fact_sum = {}
                in_vals = ','.join(["'%s'"%i for i in fact_list])
                sql = """
                SELECT SUM(visits) AS visits,SUM(imei) AS imei,SUM(user_run) AS user_run,SUM(new_user_run) AS new_user_run,
                SUM(user_visit) AS user_visit, SUM(new_user_visit) AS new_user_visit,SUM(active_user_visit) AS active_user_visit, 
                SUM(user_retention) AS user_retention,SUM(pay_user) AS pay_user, SUM(cpay_down) AS cpay_down, SUM(cfree_down) AS cfree_down,
                SUM(bpay_down) AS bpay_down, SUM(bfree_down) AS bfree_down,SUM(cpay_user) AS cpay_user, SUM(cfree_user) AS cfree_user, 
                SUM(bpay_user) AS bpay_user, SUM(bfree_user) AS bfree_user, SUM(bpay_user) AS bpay_user,SUM(bfree_user) AS bfree_user, SUM(cfee) AS cfee, 
                SUM(bfee) AS bfee FROM factory_sum_stat WHERE time = '%s' AND factory_id IN (%s) """ % (_start,in_vals)
                q = FactorySumStat.mgr().raw(sql)
                if q[0]['visits'] == None:
                    fact_sum = dict([(i,0) for i in FactorySumStat._fields])
                else:
                    fact_sum = q[0]
                for k in fact_sum:
                    acc_fact_sum[k] = fact_sum[k] + acc_fact_sum.get(k,0)
                fact_sum['title'] = _start.strftime('%Y-%m-%d')
                fact_sums.append(fact_sum)
                days.append(_start)
                _start = _end
            acc_fact_sum['title'] = '总计'
            fact_sums.append(acc_fact_sum)
            #for charts
            x_axis = ['%s'%i.strftime('%m-%d') for i in days]
            results = {}
            excludes = ('id','time','factory_id','visits','imei','bfee','cfee','uptime')
            for k in [i for i in FactorySumStat._fields if i not in excludes]: 
                results[k] ={'title':FactorySumStat._fieldesc[k],'data':','.join([str(i.get(k,0)) for i in fact_sums[:-1]])}
            
            #render
            count = len(days)*len(factory_list)
            groups = Factory.mgr().all_groups()
            self.render('data/factstat_sum.html',
                count=count,psize=psize,page=page,query_mode=query_mode,results=results,x_axis=x_axis,fact_sums=fact_sums,
                factory_id=factory_id,factory_list=factory_list,product_name='',start=start.strftime('%Y-%m-%d'),
                date=yest.strftime('%Y-%m-%d'),order_field=order_field,group=group,groups=groups
                )

        elif query_mode == 'recharge_log':
            page = int(self.get_argument('pageNum',1))
            psize = int(self.get_argument('numPerPage',20))
            phone = self.get_argument('phone','')
            
            tody = self.get_date(0)
            start = self.get_argument('start','')
            end = self.get_argument('end','')
            if not start:
                start = tody - datetime.timedelta(days=30)
                start = start.strftime('%Y-%m-%d')
            if not end: 
                end = tody.strftime('%Y-%m-%d')

            #user...
            user = self.get_current_user()
            query_count = QueryTimeCount.mgr().get_user_today_query_count(user['name'],tody.strftime('%Y-%m-%d'))
            if user:
                qt = QueryTimeCount.new()
                qt.user = user['name']
                qt.save()
            
            if query_count<=Query_Limit_Count or user['name']=='admin':
                data = Service.inst().fill_recharge_log_info(phone,start,end)
                recharge_log = data['res']
                if not recharge_log:
                    recharge_log = []
                recharge_log[(page-1)*psize:page*psize]
                is_show = True
            else:
                recharge_log = [] 
                is_show = False
            count = len(recharge_log)
            self.render('data/factstat_recharge_log.html',
                    count=count,psize=psize,page=page,recharge_log=recharge_log,start=start,date=end,
                    query_mode=query_mode,phone=phone,is_show=is_show
                    )

        elif query_mode == 'consume_log':
            page = int(self.get_argument('pageNum',1))
            psize = int(self.get_argument('numPerPage',20))
            usr = self.get_argument('usr','')

            tody = self.get_date(0)
            start = self.get_argument('start','')
            end = self.get_argument('end','')

            #user...
            user = self.get_current_user()
            query_count = QueryTimeCount.mgr().get_user_today_query_count(user['name'],tody.strftime('%Y-%m-%d'))
            if user:
                qt = QueryTimeCount.new()
                qt.user = user['name']
                qt.save()
            dft = {'obj':[],'page':{u'totalPage': 0, u'endPage': 0, u'totals': 0, u'startPage': 1, u'perPages': 20, u'currentPage': 1}}
            obj = [] 
            if query_count<=Query_Limit_Count or user['name']=='admin':
                if not usr:
                    data = dft
                else:
                    data = Service.inst().fill_consume_log_info(usr,page,psize)
                
                obj = data['obj']
                count = data['page']['totals']
                page = data['page']['currentPage']
                psize = data['page']['perPages']
                if not obj:
                    obj = []
                is_show = True
            else:
                obj = []
                count = 0
                page = 1
                psize = psize
                is_show = False
            self.render('data/factstat_consume_log.html',
                count=count,psize=psize,page=page,obj=obj,query_mode=query_mode,is_show=is_show,usr=usr
                )