def __init__(self, master=None): Frame.__init__(self, master) self.__excel = Excel("") self.grid() self.e1 = StringVar() self.e2 = StringVar() self.e3 = StringVar() self.e4 = StringVar() self.eResult = StringVar() self.createWidgets() logging.basicConfig(filename='excel.txt', level=logging.INFO, filemode='w')
def recommendation(self): page = int(self.get_argument('pageNum', 1)) psize = int(self.get_argument('numPerPage', 100)) tody = self.get_date(1) + datetime.timedelta(days=1) start = self.get_argument('start', '') appid = self.get_argument('appid', '') action = self.get_argument('action', '') type = self.get_argument('type', '') yest = tody - datetime.timedelta(days=1) if not start: start = tody - datetime.timedelta(days=7) else: start = datetime.datetime.strptime(start, '%Y-%m-%d') end = yest count, stats = 0, [] stats = [] _start, days = start, [] while _start <= end: _end = _start + datetime.timedelta(days=1) stat, appids = Recommendation.mgr( ).get_recommendation_one_day_stat(_start, appid) stat = self.data_process(stat, appids, _start) stat = self.bubblesort(stat, 'download') stats.extend(stat) days.append(_start) _start = _end for stat in stats: stat['time'] = stat['time'].strftime('%Y-%m-%d') stats = Service.inst().fill_app_info(stats) count = len(stats) if action == 'export': title = [('time', '时间'), ('appid', 'appid'), ('appname', 'app名字'), ('download', '下载'), ('install', '安装')] xls = Excel().generate(title, stats, 1) filename = 'recommendation_%s.xls' % (yest.strftime('%Y-%m-%d')) self.set_header('Content-Disposition', 'attachment;filename=%s' % filename) self.finish(xls) else: stats = stats[(page - 1) * psize:page * psize] self.render('data/recommendation.html', appid=appid, type=type, date=yest.strftime('%Y-%m-%d'), start=start.strftime('%Y-%m-%d'), page=page, psize=psize, count=count, stats=stats)
def wapbookstat(self): partner_id = int(self.get_argument('partner_id', 0)) wap_type = self.get_argument('wap_type', '') charge_type = self.get_argument('charge_type', '') page = int(self.get_argument('pageNum', 1)) psize = int(self.get_argument('numPerPage', 100)) tody = self.get_date(1) + datetime.timedelta(days=1) yest = tody - datetime.timedelta(days=1) action = self.get_argument('action', '') start = yest.strftime('%Y-%m-%d') count, stats = 0, [] stats = WapBookStat.mgr().get_wap_book_stat(time=start) if wap_type: stats = stats.filter(wap_type=wap_type) if partner_id != 0: stats = stats.filter(partner_id=partner_id) if charge_type: if charge_type == 'book': charge_type = '10' elif charge_type == 'chapter': charge_type = '20' stats = stats.filter(charge_type=charge_type) stats = Service.inst().fill_book_info(stats) count = len(stats) if action == 'export': title = [('book_id', '书ID'), ('name', '书名'), ('author', '作者'), ('cp', '版权'), ('category_0', '类别'), ('category_1', '子类'), ('wap_type', 'wap类型'), ('charge_type', '计费类型'), ('state', '状态'), ('fee', '月饼消费'), ('pay_down', '付费订购数'), ('pay_user', '付费用户数'), ('visit_uv', '访问UV'), ('login_uv', '登陆UV'), ('visit', '访问PV'), ('read_pv', '阅读PV')] xls = Excel().generate(title, stats, 1) filename = 'book_%s.xls' % (yest.strftime('%Y-%m-%d')) self.set_header('Content-Disposition', 'attachment;filename=%s' % filename) self.finish(xls) else: stats = stats[(page - 1) * psize:page * psize] self.render('data/wap_book_stat.html', wap_type=wap_type, charge_type=charge_type, page=page, psize=psize, date=start, stats=stats, partner_id=partner_id, count=count)
def excel(books, start): title = [('time', '时间'), ('book_id', '书ID'), ('name', '书名'), ('author', '作者'), ('cp', '版权'), ('category_0', '类别'), ('category_1', '子类'), ('state', '状态'), ('charge_type', '计费类型'), ('fee', '收益'), ('pay_down', '付费下载数'), ('pay_user', '付费下载用户数'), ('free_down', '免费下载数'), ('free_user', '免费下载用户数'), ('pv', '简介访问数'), ('uv', '简介访问人数')] books = bubblesortdesc(books) data = books start = start.strftime('%Y-%m-%d') filename = "%s.xls" % (start) f = open(filename, 'wb') f.write(Excel().generate(title, data)) f.close() return filename
def charge_by_book(self): plan_id = int(self.get_argument('plan_id', 0)) partner_id = int(self.get_argument('partner_id', 0)) page = int(self.get_argument('pageNum', 1)) psize = int(self.get_argument('numPerPage', 100)) order_field = self.get_argument('orderField', 'uv') assert order_field in ('pay_user', 'free_user', 'fee', 'uv', 'e_val', 'e_val_1wk', 'e_val_4wk') action = self.get_argument('action', '') book_ids = self.get_argument('book_ids', '') bookid_list = [i for i in book_ids.split(',') if i] count, books = 0, [] q = EValueCharegeByBook.mgr().get_all_data(bookid_list) count = len(q) if action == 'export': res = q.orderby(order_field, 'DESC') else: res = q.orderby(order_field, 'DESC')[(page - 1) * psize:page * psize] books = Service.inst().fill_book_info(res) e_val_fields = ['e_val', 'e_val_1wk', 'e_val_4wk'] for book in books: book['fee'] = '%.0f' % float(book['fee']) for i in e_val_fields: if book[i] == None: book[i] = 0 if action == 'export': title = [('book_id', '书ID'), ('name', '书名'), ('fee', '本月饼消费'), ('free_user', '免费用户数'), ('pay_user', '付费用户数'), ('uv', 'UV'), ('e_val', 'E值'), ('e_val_1wk', '一周E值'), ('e_val_4wk', '四周E值')] xls = Excel().generate(title, books, 1) filename = 'evalue_book.xls' self.set_header('Content-Disposition', 'attachment;filename=%s' % filename) self.finish(xls) else: self.render('data/e_value_charge_by_book.html', plan_id=plan_id, partner_id=partner_id, book_ids=book_ids, page=page, psize=psize, books=books, count=count, order_field=order_field)
def index(self): plan_id = int(self.get_argument('plan_id', 0)) partner_id = int(self.get_argument('partner_id', 0)) page = int(self.get_argument('pageNum', 1)) psize = int(self.get_argument('numPerPage', 100)) order_field = self.get_argument('orderField', 'usnum') charge_type = self.get_argument('charge_type', '') assert order_field in ('cpay_user', 'cpay_user_percentage', 'cfee', 'ARPU', 'usnum') action = self.get_argument('action', '') book_ids = self.get_argument('book_ids', '') bookid_list = [i for i in book_ids.split(',') if i] startpoint = self.get_argument('startpoint', '书架') count, books = 0, [] q = EValue.mgr().get_all_data(bookid_list, startpoint) count = len(q) if action == 'export': res = q.orderby(order_field, 'DESC') else: res = q.orderby(order_field, 'DESC')[(page - 1) * psize:page * psize] books = Service.inst().fill_book_info_by_bid(res) # pagination if action == 'export': title = [('bid', '书ID'), ('name', '书名'), ('cfee', '章月饼消费'), ('usnum', '总人数'), ('cpay_user', '付费人数'), ('cpay_user_percentage', '付费人数/总人数'), ('ARPU', 'ARPU')] xls = Excel().generate(title, books, 1) filename = 'evalue_chapter.xls' self.set_header('Content-Disposition', 'attachment;filename=%s' % filename) self.finish(xls) else: self.render('data/e_value.html', plan_id=plan_id, partner_id=partner_id, book_ids=book_ids, startpoint=startpoint, page=page, psize=psize, charge_type=charge_type, books=books, count=count, order_field=order_field)
def baoyue_stat(self): page = int(self.get_argument('pageNum', 1)) psize = int(self.get_argument('numPerPage', 100)) partner_id = int(self.get_argument('partner_id', 0)) version_name = self.get_argument('version_name', '') action = self.get_argument('action', '') tody = self.get_date(1) + datetime.timedelta(days=1) start = self.get_argument('start', '') yest = tody - datetime.timedelta(days=1) if not start: start = tody - datetime.timedelta(days=7) else: start = datetime.datetime.strptime(start, '%Y-%m-%d') end = yest count, stats = 0, [] stats = OperaBaoyueSum.mgr().get_all_stat(start, end) if partner_id: stats = stats.filter(partner_id=partner_id) if version_name: stats = stats.filter(versionname=version_name) if action == 'export': title = [('ds', '日期'), ('partner_id', '渠道'), ('versionname', '版本'), ('orderpv', '订购次数'), ('orderuv', '订购人数'), ('renewtimes', '续订次数'), ('rechargingnum', '主账号消费'), ('giftrechargingnum', '副账号消费')] xls = Excel().generate(title, stats, 1) filename = 'qiandao_basic_%s.xls' % (yest.strftime('%Y-%m-%d')) self.set_header('Content-Disposition', 'attachment;filename=%s' % filename) self.finish(xls) else: count = len(stats) stats = stats[(page - 1) * psize:page * psize] self.render('data/baoyue_stat.html', partner_id=partner_id, version_name=version_name, date=yest.strftime('%Y-%m-%d'), start=start.strftime('%Y-%m-%d'), page=page, psize=psize, count=count, stats=stats)
def startpoint(self): plan_id = int(self.get_argument('plan_id', 0)) partner_id = int(self.get_argument('partner_id', 0)) page = int(self.get_argument('pageNum', 1)) psize = int(self.get_argument('numPerPage', 100)) order_field = self.get_argument('orderField', 'shujia') assert order_field in ('shucheng', 'shujia', 'dabao') action = self.get_argument('action', '') book_ids = self.get_argument('book_ids', '') bookid_list = [i for i in book_ids.split(',') if i] count, books = 0, [] q = EValueStartPointAll.mgr().get_all_data(bookid_list) count = len(q) if action == 'export': res = q.orderby(order_field, 'DESC') else: res = q.orderby(order_field, 'DESC')[(page - 1) * psize:page * psize] books = Service.inst().fill_book_info_by_bid(res) if action == 'export': title = [('bid', '书ID'), ('name', '书名'), ('shucheng', '书城'), ('shujia', '书架'), ('dabao', '打包'), ('top1', 'top1'), ('top2', 'top2'), ('top3', 'top3'), ('top4', 'top4'), ('top5', 'top5'), ('top6', 'top6'), ('top7', 'top7'), ('top8', 'top8'), ('top9', 'top9'), ('top10', 'top10')] xls = Excel().generate(title, books, 1) filename = 'evalue_startpoint.xls' self.set_header('Content-Disposition', 'attachment;filename=%s' % filename) self.finish(xls) else: self.render('data/e_value_startpoint.html', plan_id=plan_id, partner_id=partner_id, book_ids=book_ids, page=page, psize=psize, books=books, count=count, order_field=order_field)
def get_data_message(path,sheetname,idx=None): #initial index into list _headername = [] #store message data _alldata = [] _excel = Excel(path) if idx is None: _mactch_column_name = compareData.get_match_columns(sheetname) for columnname in _mactch_column_name: _curcells = _excel.convert_col2header(sheetname,columnname) _headername.append(_curcells) else: _indexCols = idx.split(',') _mactch_column_name = compareData.get_match_columns(sheetname, _indexCols) for columnname in _indexCols: _curcells = _excel.convert_col2header(sheetname, columnname) _headername.append(_curcells) _cursheet = _excel.get_sheet(sheetname) for _row in range(2, _cursheet.max_row+1): _rowdata = [] for _column in _headername: _cellname = "{}{}".format(_column, _row) #get current cell line number and line column _cellvalue = _cursheet[_cellname].value _cellvalue = str(_cellvalue).upper() _rowdata.append(_cellvalue.strip()) #upper all values _alldata.append(_rowdata) for _item in _alldata[::-1]: if _item in _alldata: _getcount = _alldata.count(_item) _item.append(_getcount) return _alldata
def max_cid_max_fee(self): plan_id = int(self.get_argument('plan_id', 0)) partner_id = int(self.get_argument('partner_id', 0)) page = int(self.get_argument('pageNum', 1)) psize = int(self.get_argument('numPerPage', 100)) order_field = self.get_argument('orderField', 'maxfee') assert order_field in ('maxcid', 'maxfee') action = self.get_argument('action', '') book_ids = self.get_argument('book_ids', '') bookid_list = [i for i in book_ids.split(',') if i] count, books = 0, [] q = EValueMaxCidMaxFee.mgr().get_all_data(bookid_list) count = len(q) if action == 'export': res = q.orderby(order_field, 'DESC') else: res = q.orderby(order_field, 'DESC')[(page - 1) * psize:page * psize] books = Service.inst().fill_book_info_by_bid(res) if action == 'export': title = [('bid', '书ID'), ('name', '书名'), ('author', '作者'), ('cp', '版权'), ('category_0', '类别'), ('category_1', '子类'), ('charge_type', '计费类型'), ('state', '状态'), ('maxcid', '最大章节'), ('maxfee', '最大收入')] xls = Excel().generate(title, books, 1) filename = 'evalue_max_cid_max_fee.xls' self.set_header('Content-Disposition', 'attachment;filename=%s' % filename) self.finish(xls) else: self.render('data/e_value_max_cid_max_fee.html', plan_id=plan_id, partner_id=partner_id, book_ids=book_ids, order_field=order_field, page=page, psize=psize, books=books, count=count)
def pvuv_stat(self): page = int(self.get_argument('pageNum', 1)) psize = int(self.get_argument('numPerPage', 100)) action = self.get_argument('action', '') tody = self.get_date(1) + datetime.timedelta(days=1) start = self.get_argument('start', '') key = self.get_argument('key', '') yest = tody - datetime.timedelta(days=1) if not start: start = tody - datetime.timedelta(days=7) else: start = datetime.datetime.strptime(start, '%Y-%m-%d') end = yest count, stats = 0, [] stats = A0.mgr().get_pv_uv_multi_days(start, end) if key: stats = stats.filter(a0=key) for stat in stats: stat['time'] = stat['time'].strftime('%Y-%m-%d') if action == 'export': title = [('time', '日期'), ('a0', 'KEY'), ('pv', 'PV'), ('uv', 'UV')] xls = Excel().generate(title, stats, 1) filename = 'qiandao_basic_%s.xls' % (yest.strftime('%Y-%m-%d')) self.set_header('Content-Disposition', 'attachment;filename=%s' % filename) self.finish(xls) else: count = len(stats) stats = stats[(page - 1) * psize:page * psize] self.render('data/pvuv_stat.html', key=key, date=yest.strftime('%Y-%m-%d'), start=start.strftime('%Y-%m-%d'), page=page, psize=psize, count=count, stats=stats)
def book_stat(self): page = int(self.get_argument('pageNum', 1)) psize = int(self.get_argument('numPerPage', 20)) charge_type = self.get_argument('charge_type', '') factory_id = int(self.get_argument('factory_id', 0)) order_field = self.get_argument('orderField', 'fee') query_mode = self.get_argument('query_mode', 'accounting_book') group = self.get_argument('group', '') assert order_field in ('pay_user', 'free_user', 'pay_down', 'free_down', 'pv', 'uv', 'fee', 'batch_fee', 'batch_pv', 'batch_uv', 'real_fee') action = self.get_argument('action', '') # perm q = Factory.mgr().Q() group and q.filter(group=group) factory_list = self.filter_factory_acc(q[:], query_mode) # for safety reason, some time a perm doesn't have a val, and in this Situation a factory CANN'T see all factory accouting data!!! cuser = self.get_current_user() if len(factory_list) > 150 and (cuser['name'] not in SAFE_USER): factory_list = [] if factory_id == 0 and factory_list: factory_id = factory_list[0].id partner_list = Partnerv2.mgr().Q().filter(factory_id=factory_id)[:] # scope list scopeid_list = [] for i in partner_list: scope = Scope.mgr().Q().filter(platform_id=6, run_id=0, partner_id=i.partner_id)[0] if scope: scopeid_list.append(scope.id) tody = self.get_date(1) + datetime.timedelta(days=1) yest = tody - datetime.timedelta(days=1) last = yest - datetime.timedelta(days=1) start = self.get_argument('start', '') if start: start = datetime.datetime.strptime(start, '%Y-%m-%d') else: start = yest count, books = 0, [] q = BookStat.mgr().get_accouting_multy_scope_stat( scopeid_list, order_field, start) charge_type and q.filter(charge_type=charge_type) q = q.orderby(order_field, 'DESC') count = len(q) if action == 'export': books = q.data() for i in books: i['batch_fee'] = "%0.2f" % i['batch_fee'] else: books = q[(page - 1) * psize:page * psize] for i in books: i['batch_fee'] = "%0.2f" % i['batch_fee'] books = Service.inst().fill_book_info(books) # pagination page_count = (count + psize - 1) / psize for book in books: book['fee'] = "%.01f" % float(book['fee']) book['real_fee'] = "%.01f" % float(book['real_fee']) if action == 'export': books = Service.inst().fill_book_count_info(books) while (self.do_books_have_two_or_empty_title(books)): books = self.remove_books_two_or_empty_title(books) title = [('time', '时间'), ('book_id', '书ID'), ('name', '书名'), ('author', '作者'), ('cp', '版权'), ('category_2', '类别'), ('category_1', '子类'), ('category_0', '三级分类'), ('state', '状态'), ('charge_type', '计费类型'), ('fee', '收益'), ('real_fee', '主账户收益'), ('pay_down', '付费下载数'), ('pay_user', '付费下载用户数'), ('free_down', '免费下载数'), ('free_user', '免费下载用户数'), ('pv', '简介访问数'), ('uv', '简介访问人数'), ('batch_fee', '批量订购阅饼消费')] xls = Excel().generate(title, books, 1) filename = 'book_%s.xls' % (yest.strftime('%Y-%m-%d')) self.set_header('Content-Disposition', 'attachment;filename=%s' % filename) self.finish(xls) else: self.render('data/accounting_book.html', page=page, psize=psize, count=count, page_count=page_count, books=books, charge_type=charge_type, order_field=order_field, start=start.strftime('%Y-%m-%d'), factory_id=factory_id, factory_list=factory_list, query_mode=query_mode)
def factorydaily(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', 'accounting_basic') 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 = self.get_argument('start', '') date = self.get_argument('date', '') action = self.get_argument('action', '') # Special factory special_factory_list = SPECIAL_FACTORY_COEFFICIENT.keys() special_factory_list2 = SPECIAL_FACTORY_COEFFICIENT2.keys() # factory q = Factory.mgr().Q() group and q.filter(group=group) factory_list = self.filter_factory_acc(q[:], query_mode) #for safety reason, some time a perm doesn't have a val, and in this Situation a factory CANN'T see all factory accouting data!!! cuser = self.get_current_user() if len(factory_list) > 150 and (not cuser['is_staff']): factory_list = [] if factory_id == 0 and factory_list: factory_id = factory_list[0].id partner_list = Partnerv2.mgr().Q().filter(factory_id=factory_id)[:] #get facotry start time if partner_list: q_start = AccountingFactoryStart.mgr().Q().filter( factory_id=partner_list[0]['factory_id']) else: q_start = None start_time = None user = self.get_current_user() if user['name'] in SAFE_USER: start_time = datetime.datetime(2012, 12, 31) coefficient = 1.0 if q_start: start_time = q_start[0]['time'] coefficient = q_start[0]['coefficient'] # scope list scopeid_list = [] scope_proportion_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) temp = { 'proportion': i['proportion'], 'scope_id': scope.id, 'partner_id': i['partner_id'] } scope_proportion_list.append(temp) # basic stat basics = [] dft = dict([(i, 0) for i in BasicStat._fields]) if not start: start = tody - datetime.timedelta(days=7) else: start = datetime.datetime.strptime(start, '%Y-%m-%d') _start, days = start, [] if start_time: if start_time > _start: #限定开始时间 _start = start_time else: _start = datetime.datetime(3012, 01, 01) # 没配置的不现实 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 = BasicStat.mgr().get_data_by_multi_scope_proportion( scope_proportion_list, mode='day', start=_start, end=_end) #Special factory Coefficient if factory_id in special_factory_list: statttime = SPECIAL_FACTORY_COEFFICIENT[factory_id][ 'starttime'] sfc = SPECIAL_FACTORY_COEFFICIENT[factory_id]['coefficient'] if _start.strftime('%Y-%m-%d') >= statttime: for i in basic.keys(): #乘以系数 basic[i] = float(int( basic[i])) * coefficient #要和商务月报数据保持一致,所以这么处理 basic[i] = "%.01f" % basic[i] basic[i] = float(basic[i]) * sfc basic[i] = int(basic[i]) else: for i in basic.keys(): #乘以系数 basic[i] = float(basic[i]) * coefficient basic[i] = long(basic[i]) #Special factory Coefficient2 if factory_id in special_factory_list2: statttime2 = SPECIAL_FACTORY_COEFFICIENT2[factory_id][ 'starttime'] sfc2 = SPECIAL_FACTORY_COEFFICIENT2[factory_id]['coefficient'] if _start.strftime('%Y-%m-%d') >= statttime2: for i in basic.keys(): #乘以系数 basic[i] = float(basic[i]) * sfc2 basic[i] = int(basic[i]) basic['title'] = _start.strftime('%Y-%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', 'visits', 'user_visit', 'new_user_visit', 'active_user_visit', 'imei', 'user_retention') 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'] i['feesum'] = int(i['feesum']) acc_stats = {} for basic in basics: for field in basic: if field != 'title': basic[field] = int(basic[field]) acc_stats[field] = basic[field] + acc_stats.get(field, 0) acc_stats['title'] = '总计' if basics: basics.append(acc_stats) acc = {'title': '总计'} if action == 'export': excel_title = [('title', '时间'), ('user_run', '启动用户'), ('new_user_run', '新增启动用户'), ('pay_user', '付费用户'), ('cpay_down', '章付费数'), ('bpay_down', '本付费数'), ('cpay_user', '章付费用户'), ('bpay_user', '本付费用户'), ('cfree_down', '章免费数'), ('bfree_down', '本免费数'), ('cfree_user', '章免费用户'), ('bfree_user', '本免费用户'), ('feesum', '收入')] xls = Excel().generate(excel_title, basics, 1) filename = 'accounting_factorydaily_%s.xls' % ( yest.strftime('%Y-%m-%d')) self.set_header('Content-Disposition', 'attachment;filename=%s' % filename) self.finish(xls) else: self.render('data/accounting_factorydaily.html', latform_id=platform_id, run_id=run_id, plan_id=plan_id, factory_id=factory_id, tpl_titles=ACCOUNTING_FACTORY_TITLE, 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)
def businessmonthly(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', '') month = self.get_argument('month', '') page = int(self.get_argument('pageNum', 1)) psize = int(self.get_argument('numPerPage', 20)) query_mode = self.get_argument('query_mode', 'accounting_business') group = self.get_argument('group', '') action = self.get_argument('action', '') tody = self.get_date(1) + datetime.timedelta(days=1) yest = tody - datetime.timedelta(days=1) last_month = tody - datetime.timedelta(days=30) last_month = last_month.strftime('%Y-%m') order_field = self.get_argument('orderField', '') if not month or month == '未选择': month = last_month start = month + '-01' start = datetime.datetime.strptime(start, '%Y-%m-%d') next_month_start = start + datetime.timedelta( days=monthrange(start.year, start.month)[1]) # Special factory special_factory_list = SPECIAL_FACTORY_COEFFICIENT.keys() # factory q = Factory.mgr().Q() group and q.filter(group=group) factory_list = self.filter_factory_acc(q[:], query_mode) basics = [] stats = [] for i in factory_list: factory_id = i['id'] partner_list = Partnerv2.mgr().Q().filter(factory_id=i.id)[:] if not partner_list: continue q_start = AccountingFactoryStart.mgr().Q().filter( factory_id=partner_list[0]['factory_id']) start_time = None user = self.get_current_user() if user['name'] in SAFE_USER: start_time = datetime.datetime(2012, 12, 31) coefficient = 1.0 if q_start: start_time = q_start[0]['time'] coefficient = q_start[0]['coefficient'] if not partner_list: continue if not start_time or start_time >= next_month_start: #start_time stat = None continue elif start_time > start: start = start_time #stat = MonthlyBusinessStatDaily.mgr().get_monthly_busiess_stat_multy_days(start,next_month_start,partner_list)[0] stat = MonthlyBusinessStatDaily.mgr( ).get_monthly_busiess_stat_multy_days_proportion( start, next_month_start, partner_list) # Special factory if factory_id in special_factory_list: statttime = SPECIAL_FACTORY_COEFFICIENT[factory_id][ 'starttime'] sfc = SPECIAL_FACTORY_COEFFICIENT[factory_id]['coefficient'] if start.strftime('%Y-%m-%d') >= statttime: stat['fee'] = float(stat['fee']) * sfc # Special factory2 #if factory_id in special_factory_list2: # statttime2 = SPECIAL_FACTORY_COEFFICIENT2[factory_id]['starttime'] # sfc2 = SPECIAL_FACTORY_COEFFICIENT2[factory_id]['coefficient'] # if start.strftime('%Y-%m-%d')>= statttime2: # stat['fee'] = float(stat['fee']) * sfc2 if stat['fee'] != None: stat['fee'] = int(stat['fee']) stat['factory'] = i.name else: stat['fee'] = '0' stat['factory'] = i.name # Special factory ... if i['id'] == 229 and start.strftime('%Y-%m-%d') == '2014-01-01': stat['fee'] = 483471 if i['id'] == 2144 and start.strftime('%Y-%m-%d') == '2014-01-01': stat['fee'] = 966997 if i['id'] == 229 and start.strftime('%Y-%m-%d') == '2014-02-01': stat['fee'] = 778841 if i['id'] == 2144 and start.strftime('%Y-%m-%d') == '2014-02-01': stat['fee'] = 1090431 if i['id'] == 229 and start.strftime('%Y-%m-%d') == '2014-03-01': stat['fee'] = 1027234 if i['id'] == 2144 and start.strftime('%Y-%m-%d') == '2014-03-01': stat['fee'] = 1438187 if i['id'] == 229 and start.strftime('%Y-%m-%d') == '2014-04-01': stat['fee'] = 1003872 if i['id'] == 2144 and start.strftime('%Y-%m-%d') == '2014-04-01': stat['fee'] = 1405475 stats.append(stat) if order_field: stats.sort(cmp=lambda x, y: cmp(x[order_field], y[order_field]), reverse=True) count = len(stats) groups = Factory.mgr().all_groups() if action == 'export': excel_title = [('factory', '厂商名称'), ('fee', '月收入')] xls = Excel().generate(excel_title, stats, 1) filename = 'accounting_bueiness_monthly_%s.xls' % ( start.strftime('%Y-%m-%d')) self.set_header('Content-Disposition', 'attachment;filename=%s' % filename) self.finish(xls) else: self.render('data/accounting_businessmonthly.html', count=count, psize=psize, page=page, query_mode=query_mode, stats=stats, monthly=MONTHLY, group=group, groups=groups, month=month, order_field=order_field)
def productdaily(self): order_field = self.get_argument('orderField', 'user_run') 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)) version_name = self.get_argument('version_name', '').replace('__', '.') group = self.get_argument('group', '') psize = int(self.get_argument('numPerPage', 20)) start = self.get_argument('start', '') tody = self.get_date(1) + datetime.timedelta(days=1) yest = tody - datetime.timedelta(days=1) action = self.get_argument('action', '') factory_id = int(self.get_argument('factory_id', 0)) product_name = self.get_argument('product_name', '') page = int(self.get_argument('pageNum', 1)) query_mode = self.get_argument('query_mode', 'accounting_product') if not start: start = yest else: start = datetime.datetime.strptime(start, '%Y-%m-%d') # Special factory special_factory_list = SPECIAL_FACTORY_COEFFICIENT.keys() special_factory_list2 = SPECIAL_FACTORY_COEFFICIENT2.keys() # factory q = Factory.mgr().Q() group and q.filter(group=group) factory_list = self.filter_factory_acc(q[:], 'accounting_product') #for safety reason, some time a perm doesn't have a val, and in this Situation a factory CANN'T see all factory accouting data!!! cuser = self.get_current_user() if len(factory_list) > 150 and (not cuser['is_staff']): factory_list = [] if factory_id == 0 and factory_list: factory_id = factory_list[0].id partner_list = Partnerv2.mgr().Q().filter(factory_id=factory_id)[:] #get facotry start time if partner_list: q_start = AccountingFactoryStart.mgr().Q().filter( factory_id=partner_list[0]['factory_id']) else: q_start = None coefficient = 1.0 if q_start: start_time = q_start[0]['time'] coefficient = q_start[0]['coefficient'] else: start_time = datetime.datetime(2014, 12, 31) user = self.get_current_user() if user['name'] in SAFE_USER: start_time = datetime.datetime(2012, 12, 31) coefficient = 1.0 if start_time: if start_time > start: start = start_time scopeid_product, model_list = {}, [] if factory_id == -1: #partnerid_list = [0] partner_list = [] for i in partner_list: scopeid_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['partner_id'], 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['partner_id'], 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_one_day_model_data_proportion( i['proportion'], scopeid_list, 'day', start) model_list += result count = len(model_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) #Special factory Coefficient if factory_id in special_factory_list: statttime = SPECIAL_FACTORY_COEFFICIENT[factory_id]['starttime'] sfc = SPECIAL_FACTORY_COEFFICIENT[factory_id]['coefficient'] if start.strftime('%Y-%m-%d') >= statttime: for res in res_list: for i in res.keys(): if i not in ('product_name', 'time'): res[i] = float( res[i]) * coefficient * sfc # coefficient res[i] = long(res[i]) else: for res in res_list: for i in res.keys(): if i not in ('product_name', 'time'): res[i] = float(res[i]) * coefficient # coefficient res[i] = long(res[i]) #Special factory Coefficient2 if factory_id in special_factory_list2: statttime2 = SPECIAL_FACTORY_COEFFICIENT2[factory_id]['starttime'] sfc2 = SPECIAL_FACTORY_COEFFICIENT2[factory_id]['coefficient'] if start.strftime('%Y-%m-%d') >= statttime2: for res in res_list: for i in res.keys(): if i not in ('product_name', 'time'): res[i] = float(res[i]) * sfc2 # coefficient res[i] = long(res[i]) 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/accounting_productdaily.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'), factory_list=factory_list, order_field=order_field)
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)
#! /data/sever/python/bin/python # -*- coding:utf-8 -*- """ @author: 'root' @date: '9/30/16' """ __author__ = 'root' import time import datetime from lib.utils import format_list from lib.mongo import MongoClient from lib.crawler import Crawler from lib.excel import Excel M = MongoClient().db.tbk_test.find() M = [val for val in M] e = Excel() title = [ ('title', '名称'), ('category', '分类'), ] with open('export_date.xls', 'wb') as f: f.write(e.generate(title, M))
def basic_chart(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','') #perm run_list=self.run_list() run_list = self.filter_run_id_perms(run_list=run_list) run_id_list = [run['run_id'] for run in run_list] if run_id == 0 and run_id_list: # has perm and doesn't select a run_id if len(run_id_list) == len(Run.mgr().Q().extra("status<>'hide'").data()): run_id = 0 # user has all run_id perms else: run_id = run_id_list[0] if run_id not in run_id_list and run_id != 0: # don't has perm and selete a run_id scope = None else: # 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 = [] if scope: for i in days: dft = dict([(j,0) for j in BasicStatv3._fields]) s = BasicStatv3.mgr().Q(time=i).filter(scope_id=scope.id,mode='day',time=i)[0] or dft s['title'] = i.strftime('%Y-%m-%d') basics.append(s) x_axis = ['%s'%i.strftime('%m-%d') for i in days] results = {} excludes = ('id','scope_id','mode','time','recharge','uptime') for k in [i for i in BasicStatv3._fields if i not in excludes]: results[k] ={'title':BasicStatv3._fieldesc[k],'data':','.join([str(i.get(k,0)) for i in basics])} if action == 'export': excel_title = [('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','本免费用户'), ('cfee','章月饼消费'),('bfee','本月饼消费'),('batch_fee','批量订购阅饼消费'),('batch_pv','批量订购PV'),('batch_uv','批量订购UV') ] xls = Excel().generate(excel_title,basics,1) filename = 'basic_%s_%s.xls' % (mode,yest.strftime('%Y-%m-%d')) self.set_header('Content-Disposition','attachment;filename=%s'%filename) self.finish(xls) else: self.render('data/basic_chart.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') )
# @Author : Miracle Young # @File : app.py import argparse from etc import config from lib.excel import Excel from views.delete.handleRowData import setBgColorRowIdx # _args = _parser.parse_args( # ['--src', 'abc.xlsx', '--src-sheets', 'CAPS,APQC,3rdparty', '--tgt', 'def.xlsx', '--tgt-sheets', 'qwe,asd,zxc']) if __name__ == '__main__': _desc = ''' The sheet name should like "Sheet1,Sheet2,Sheet3", use double quote include sheetnames balabala ''' _parser = argparse.ArgumentParser(description=_desc) _parser.add_argument('--src', type=str, help='Source file') _parser.add_argument('--src-sheets', type=str, help='Source file sheets') _parser.add_argument('--tgt', type=str, help='Target file') _parser.add_argument('--tgt-sheets', type=str, help='Target file sheets') _parser.add_argument('--idx', type=str, help='Your file filter index') _args = _parser.parse_args() _config = config.Config() setattr(_config, 'SRC_DATA', {_args.src: _args.src_sheets}) setattr(_config, 'TGT_DATA', {_args.tgt: _args.tgt_sheets}) _srcexcel = Excel(_args.src) _tgtexcel = Excel(_args.tgt) setBgColorRowIdx(_srcexcel, _tgtexcel, _args.tgt_sheets, _args.idx)
def setUpClass(cls): cls.excel = Excel("加油卡完整用例.xls") cls.sheet_data = cls.excel.get_data("查询")
def chart(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)) partner_id = int(self.get_argument('partner_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', 400)) charge_type = self.get_argument('charge_type', '') book_ids = self.get_argument('book_ids', '') bookid_list = [i for i in book_ids.split(',') if i] action = self.get_argument('action', '') #perm run_list = self.run_list() run_list = self.filter_run_id_perms(run_list=run_list) run_id_list = [run['run_id'] for run in run_list] if run_id == 0 and run_id_list: # has perm and doesn't select a run_id if len(run_id_list) == len( Run.mgr().Q().extra("status<>'hide'").data()): run_id = 0 # user has all run_id perms else: run_id = run_id_list[0] if run_id not in run_id_list and run_id != 0: # don't has perm and selete a run_id scope = None else: # 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) start = self.get_argument('start', '') if start: start = datetime.datetime.strptime(start, '%Y-%m-%d') else: start = tody - datetime.timedelta(days=7) # x_axis delta = tody - start days = [start + datetime.timedelta(days=i) for i in range(delta.days)] x_axis = ['%s' % i.strftime('%m-%d') for i in days] count, books = 0, [] if scope: # books of by-book & by-chapter result = BookStat.mgr().get_data(scope.id, 'day', start, tody, charge_type, bookid_list, page, psize) count = result['count'] books = Service.inst().fill_book_info(result['list']) while ( self.do_books_have_two_or_empty_title(books) ): #this is for Fu Rong's request, but books can't deepcopy, so I have to do this way, so egg pain ! books = self.remove_books_two_or_empty_title(books) # pagination results = {} excludes = ('id', 'scope_id', 'mode', 'time', 'uptime', 'category_1', 'category_0', 'charge_type', 'author', 'book_id', 'arpu', 'category_0') for k in [i for i in BookStat._fields if i not in excludes]: results[k] = { 'title': BookStat._fieldesc[k], 'data': ','.join([str(i.get(k, 0)) for i in books]) } page_count = (count + psize - 1) / psize if action == 'export': title = [('time', '时间'), ('book_id', '书ID'), ('name', '书名'), ('author', '作者'), ('cp', '版权'), ('category_2', '类别'), ('category_1', '子类'), ('category_0', '三级分类'), ('state', '状态'), ('charge_type', '计费类型'), ('fee', '收益'), ('pay_down', '付费下载数'), ('pay_user', '付费下载用户数'), ('free_down', '免费下载数'), ('free_user', '免费下载用户数'), ('pv', '简介访问数'), ('uv', '简介访问人数'), ('batch_fee', '批量订购阅饼消费'), ('batch_pv', '批量订购PV'), ('batch_uv', '批量订购UV')] xls = Excel().generate(title, books, 1) filename = 'book_%s.xls' % (yest.strftime('%Y-%m-%d')) self.set_header('Content-Disposition', 'attachment;filename=%s' % filename) self.finish(xls) else: self.render('data/book_chart.html', x_axis=x_axis, results=results, platform_id=platform_id, run_id=run_id, plan_id=plan_id, date=yest.strftime('%Y-%m-%d'), partner_id=partner_id, version_name=version_name, product_name=product_name, run_list=self.run_list(), plan_list=self.plan_list(), page=page, psize=psize, count=count, page_count=page_count, books=books, charge_type=charge_type, book_ids=book_ids, start=start.strftime('%Y-%m-%d'))
startTime = config.get("para","startTime") timeArray = time.strptime(startTime + " 00:00:00", "%Y%m%d %H:%M:%S") startTimeStamp = int(time.mktime(timeArray)) endTime = config.get("para","endTime") timeArray = time.strptime(endTime + " 00:00:00", "%Y%m%d %H:%M:%S") endTimeStamp = int(time.mktime(timeArray)) filename = config.get("para","filename") timeScope = config.get("para","timeScope") #账号密码登录 暂不可用 #username = "******" #password = "******" #session = login(username, password) #模拟登录 s = simulateLogin(cookies) e = Excel("./", filename, "xls") analyzeBase(s, startTimeStamp, endTimeStamp, token, e) analyzeAccess(s, token, startTimeStamp, endTimeStamp, depthDict, timeDict, e) analyzeShare(s, startTimeStamp, endTimeStamp, token, e) analyzeShareToDay(s, startTimeStamp, endTimeStamp, token, e) analyzeSource(s, startTimeStamp, endTimeStamp, token, sourceLabel, e) analyzeUser(s, timeScope, token, e) e.close()
def setUpClass(cls): cls.db = DB() cls.excel = Excel("加油卡完整用例.xls")
def setUpClass(cls): cls.driver = select_Browser_WebDriver() cls.url = getBaseUrl('POS_URL') + '/card/index' cls.excel = Excel( os.path.join(gl.dataPath, 'posChargeCard.xls').decode('utf-8'))
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 3/23/18 4:32 PM # @Author : Miracle Young # @File : app.py from lib.logger import StreamFileLogger from lib.excel import Excel from utils import settings _sflogger = StreamFileLogger(settings.LOG_FILE, __file__).get_logger() _sflogger.info(1) _sflogger.debug(2) try: a except Exception as e: _sflogger.error('Failed', exc_info=True) excel_name = settings.SRC_DATA['a.xlsx'] excel = Excel(excel_name) excel.get_column_names('CAPS Industry KPIs New', 'A1', 'F28') # get all sheetname excel.read_excel_by_pos('CAPS Industry KPIs New', 'A1', 'F28') #
def basic_chart(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','') run_list = [i for i in self.run_list() if i['run_id'] in IOS_RUN_ID_LIST] if run_id == 0: #不限 scope = Scope.mgr().get_ios_scope_id_list() 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 = [] if scope: if partner_id: 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] if not scope: scope_id_list = [] basics = [] else: scope_id_list = str(scope['id']) for i in days: dft = dict([(j,0) for j in BasicStatv3._fields]) basic = BasicStatv3.mgr().get_sum_data_by_multi_scope(scope_id_list,i)[0] basic['title'] = i.strftime('%Y-%m-%d') basics.append(basic) else: scope_id_list = ','.join([str(i['id']) for i in scope]) for i in days: dft = dict([(j,0) for j in BasicStatv3._fields]) basic = BasicStatv3.mgr().get_sum_data_by_multi_scope(scope_id_list,i)[0] basic['title'] = i.strftime('%Y-%m-%d') basics.append(basic) for basic in basics: basic['cfee'] = long(basic['cfee']) basic['bfee'] = long(basic['bfee']) basic['batch_fee'] = long(basic['batch_fee']) else: # 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 = [] if scope: for i in days: dft = dict([(j,0) for j in BasicStatv3._fields]) s = BasicStatv3.mgr().Q(time=i).filter(scope_id=scope.id,mode='day',time=i)[0] or dft s['title'] = i.strftime('%Y-%m-%d') basics.append(s) for basic in basics: basic['cfee'] = long(basic['cfee']) basic['bfee'] = long(basic['bfee']) basic['batch_fee'] = long(basic['batch_fee']) x_axis = ['%s'%i.strftime('%m-%d') for i in days] results = {} excludes = ('id','scope_id','mode','time','recharge','uptime') for k in [i for i in BasicStatv3._fields if i not in excludes]: results[k] ={'title':BasicStatv3._fieldesc[k],'data':','.join([str(i.get(k,0)) for i in basics])} if action == 'export': excel_title = [('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','本免费用户'), ('cfee','章月饼消费'),('bfee','本月饼消费'),('batch_fee','批量订购阅饼消费'),('batch_pv','批量订购PV'),('batch_uv','批量订购UV') ] xls = Excel().generate(excel_title,basics,1) filename = 'basic_%s_%s.xls' % (mode,yest.strftime('%Y-%m-%d')) self.set_header('Content-Disposition','attachment;filename=%s'%filename) self.finish(xls) else: self.render('data/ios_basic_chart.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=run_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)) partner_id = int(self.get_argument('partner_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)) charge_type = self.get_argument('charge_type', '') order_field = self.get_argument('orderField', 'fee') assert order_field in ('pay_user', 'free_user', 'pay_down', 'free_down', 'pv', 'uv', 'fee', 'batch_fee', 'batch_pv', 'batch_uv', 'real_fee') action = self.get_argument('action', '') #perm run_list = self.run_list() run_list = self.filter_run_id_perms(run_list=run_list) run_id_list = [run['run_id'] for run in run_list] if run_id == 0 and run_id_list: # has perm and doesn't select a run_id if len(run_id_list) == len( Run.mgr().Q().extra("status<>'hide'").data()): run_id = 0 # user has all run_id perms else: run_id = run_id_list[0] if run_id not in run_id_list and run_id != 0: # don't has perm and selete a run_id scope = None else: # 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) last = yest - datetime.timedelta(days=1) start = self.get_argument('start', '') if start: start = datetime.datetime.strptime(start, '%Y-%m-%d') else: start = yest if start > yest: start = yest count, books = 0, [] if scope: if start != yest: q = BookStat.mgr().get_data_by_multi_days( scope_id=scope.id, mode='day', start=start, end=tody, charge_type=charge_type) q = q.orderby(order_field, 'DESC') count = len(q) if action == 'export': books = q.data() else: books = q[(page - 1) * psize:page * psize] else: q = BookStat.mgr().Q(time=yest).filter(scope_id=scope.id, mode='day', time=yest) charge_type and q.filter(charge_type=charge_type) count = q.count() q = q.orderby(order_field, 'DESC') if action == 'export': books = q.data() else: books = q[(page - 1) * psize:page * psize] books = Service.inst().fill_book_info(books) # pagination page_count = (count + psize - 1) / psize if action == 'export': books = Service.inst().fill_book_count_info(books) while (self.do_books_have_two_or_empty_title(books)): books = self.remove_books_two_or_empty_title(books) title = [('time', '时间'), ('book_id', '书ID'), ('name', '书名'), ('author', '作者'), ('cp', '版权'), ('category_2', '类别'), ('category_1', '子类'), ('category_0', '三级分类'), ('state', '状态'), ('charge_type', '计费类型'), ('fee', '收益'), ('pay_down', '付费下载数'), ('pay_user', '付费下载用户数'), ('free_down', '免费下载数'), ('free_user', '免费下载用户数'), ('pv', '简介访问数'), ('uv', '简介访问人数'), ('batch_fee', '批量订购阅饼消费'), ('batch_pv', '批量订购PV'), ('batch_uv', '批量订购UV'), ('chapterCount', '总章数'), ('wordCount', '总字数')] xls = Excel().generate(title, books, 1) filename = 'book_%s.xls' % (yest.strftime('%Y-%m-%d')) self.set_header('Content-Disposition', 'attachment;filename=%s' % filename) self.finish(xls) else: self.render('data/book.html', platform_id=platform_id, run_id=run_id, plan_id=plan_id, date=yest.strftime('%Y-%m-%d'), partner_id=partner_id, version_name=version_name, product_name=product_name, run_list=self.run_list(), plan_list=self.plan_list(), page=page, psize=psize, count=count, page_count=page_count, books=books, charge_type=charge_type, order_field=order_field, start=start.strftime('%Y-%m-%d'))
if con.acquire(): if len(queue) < 0: con.wait() else: elem = queue.pop() print("Consumer a elem {}. Now size is {}".format( elem, len(queue))) time.sleep(random.random()) con.notify() con.release() def main(): for i in range(3): Producer().start() for i in range(2): Consumer().start() if __name__ == '__main__': from lib.excel import Excel from utils import settings for path, sheetnames in settings.SRC_DATA.items(): excel = Excel(path) sheet = excel.get_sheet(sheetnames[0]) for _i, _row in enumerate(sheet.rows): _t = excel.get_column(sheet, 'Year') print(1)
def setUpClass(cls): cls.driver = select_Browser_WebDriver() cls.url = join_url('/actualcard/opencard') cls.toexcel = Excel(os.path.join(gl.dataPath, 'actualopencard.xls'))
def bookcategory(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)) partner_id = int(self.get_argument('partner_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)) charge_type = self.get_argument('charge_type', '') order_field = self.get_argument('orderField', 'fee') cate_type = self.get_argument('cate_type', '') action = self.get_argument('action', '') #perm run_list = self.run_list() run_list = self.filter_run_id_perms(run_list=run_list) run_id_list = [run['run_id'] for run in run_list] if run_id == 0 and run_id_list: # has perm and doesn't select a run_id if len(run_id_list) == len( Run.mgr().Q().extra("status<>'hide'").data()): run_id = 0 # user has all run_id perms else: run_id = run_id_list[0] if run_id not in run_id_list and run_id != 0: # don't has perm and selete a run_id scope = None else: # 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) last = yest - datetime.timedelta(days=1) start = self.get_argument('start', '') if start: start = datetime.datetime.strptime(start, '%Y-%m-%d') else: start = yest if start > yest: start = yest count, books = 0, [] res_all = {} if scope: if start != yest: q = BookStat.mgr().get_data_by_multi_days( scope_id=scope.id, mode='day', start=start, end=tody, charge_type=charge_type) q = q.orderby(order_field, 'DESC') count = len(q) if action == 'export': books = q.data() else: books = q[:] else: q = BookStat.mgr().Q(time=yest).filter(scope_id=scope.id, mode='day', time=yest) charge_type and q.filter(charge_type=charge_type) count = q.count() q = q.orderby(order_field, 'DESC') if action == 'export': books = q.data() else: books = q[:] books = self.get_fill_category_id(books) cates = self.counting_category(books) cates = self.fill_category_name(cates) cates = self.bubblesort(cates, 'fee') if action == 'export': title = [('category_no3', '类别'), ('category_no2', '二级分类'), ('category_no1', '三级分类'), ('fee', '阅饼消费'), ('batch_fee', '批量下载阅饼消费')] xls = Excel().generate(title, cates, 1) filename = 'category.xls' self.set_header('Content-Disposition', 'attachment;filename=%s' % filename) self.finish(xls) else: self.render('data/book_category2.html', platform_id=platform_id, run_id=run_id, plan_id=plan_id, date=yest.strftime('%Y-%m-%d'), partner_id=partner_id, version_name=version_name, product_name=product_name, run_list=self.run_list(), plan_list=self.plan_list(), page=page, psize=psize, count=count, charge_type=charge_type, cates=cates, start=start.strftime('%Y-%m-%d'))