def Getdata(self): request = self.request gmt_start = request.GET.get('gmt_start', '') gmt_end = request.GET.get('gmt_end', '') ra = redis_aliexprss() if not gmt_start and not gmt_end: rate_data = ra.hgetall_data('ali_activation_rate__{}'.format( datetime.datetime.now().strftime('%Y-%m-%d'))) else: if not gmt_end: gmt_end = datetime.datetime.now().strftime('%Y-%m-%d') if not gmt_start: gmt_start = (datetime.datetime.now() - datetime.timedelta(days=30)).strftime('%Y-%m-%d') new_gmt_end = ( datetime.datetime.strptime(gmt_end.strip(), '%Y-%m-%d') - datetime.timedelta(days=1)).strftime('%Y-%m-%d') gmt_time = gmt_start.strip() + '-' + new_gmt_end.strip() rate_data = ra.hgetall_data( 'ali_activation_rate__{}'.format(gmt_time)) tdate = rate_data.get('tdate') new_tdate = int(''.join(tdate.split('-'))) rate_data['tdate'] = new_tdate return rate_data
def get_list_queryset(self): request = self.request qs = super(t_erp_aliexpress_activation_rate_Admin, self).get_list_queryset() UpdateTime_start = request.GET.get( 'UpdateTime_start', datetime.datetime.now().strftime('%Y-%m-%d')) UpdateTime_end = request.GET.get('UpdateTime_end', '') gmt_start = request.GET.get('gmt_start', '') gmt_end = request.GET.get('gmt_end', '') submitter = request.GET.get('submitter', '').split(',') category = request.GET.get('category', '').split(',') searchList = { 'updatetime__gte': UpdateTime_start, 'updatetime__lt': UpdateTime_end, } if category != [ '', ]: searchList.update({'category__in': category}) if submitter != [ '', ]: searchList.update({'submitter__in': submitter}) if gmt_end or gmt_start: if not gmt_end: gmt_end = datetime.datetime.now().strftime('%Y-%m-%d') if not gmt_start: gmt_start = (datetime.datetime.now() - datetime.timedelta(days=30)).strftime('%Y-%m-%d') new_gmt_end = ( datetime.datetime.strptime(gmt_end.strip(), '%Y-%m-%d') - datetime.timedelta(days=1)).strftime('%Y-%m-%d') gmt_time = gmt_start.strip() + '-' + new_gmt_end.strip() objs_exists = t_erp_aliexpress_activation_rate_overview.objects.filter( gmt_time=gmt_time).exists() redis_name = 'ali_activation_rate__{}'.format(gmt_time) ra = redis_aliexprss() ra_query = ra.hgetall_data(redis_name) if not objs_exists or not ra_query: self.main(gmt_start, gmt_end) searchList.update({'gmt_time__exact': gmt_time}) else: qs = qs.filter(gmt_time__isnull=True, updatetime=datetime.datetime.now()) if not qs.exists(): qs = qs.filter(gmt_time__isnull=True) sl = {} for k, v in searchList.items(): if isinstance(v, list): if v: sl[k] = v else: if v is not None and v.strip() != '': sl[k] = v if sl is not None: # try: qs = qs.filter(**sl) return qs
def get_data(self): ra=redis_aliexprss() weekday = datetime.datetime.weekday(datetime.datetime.now()) last_week = datetime.datetime.now().isocalendar()[1] - 1 redis_name = 'ali_mutation_coefficient_{}'.format(last_week) if weekday!=5: redis_data = ra.hgetall_data(redis_name) if redis_data and redis_data.get('category'): return redis_data objs=v_erp_aliexpress_mutation_coefficient.objects.filter(week=last_week).values('product_id','wow_sales','wow_rate','cata_zh','shopName','sales','lastweek_sales','submitter') top_sales={} top_wow_rate={} top_wow_sales={} shopname_dict={} category_dict={} submitter_dict={} for obj in objs: product_id=int(obj['product_id']) wow_sales=int(obj['wow_sales']) wow_rate=float(obj['wow_rate']) shopName=obj['shopName'] category=obj['cata_zh'] sales=int(obj['sales']) lastweek_sales = int(obj['lastweek_sales']) if lastweek_sales>=10: top_wow_rate[product_id]=wow_rate top_sales[product_id]=sales top_wow_sales[product_id]=wow_sales submitter=obj['submitter'] if not isinstance(shopname_dict.get(shopName,None),dict): shopname_dict[shopName]={'sales':0,'lastweek_sales':0} shopname_dict[shopName]['sales']+=sales shopname_dict[shopName]['lastweek_sales'] += lastweek_sales if not isinstance(category_dict.get(category,None),dict): category_dict[category]={'sales':0,'lastweek_sales':0} category_dict[category]['sales']+=sales category_dict[category]['lastweek_sales'] += lastweek_sales if not isinstance(submitter_dict.get(submitter,None),dict): submitter_dict[submitter]={'sales':0,'lastweek_sales':0} submitter_dict[submitter]['sales']+=sales submitter_dict[submitter]['lastweek_sales'] += lastweek_sales for submitter in submitter_dict: lastweek_sales=submitter_dict[submitter]['lastweek_sales'] sales=submitter_dict[submitter]['sales'] if lastweek_sales>0: submitter_dict[submitter]['wow_rate'] = round((sales-lastweek_sales)*100.0/lastweek_sales,1) else: submitter_dict[submitter]['wow_rate'] = sales* 100.0 for category in category_dict: lastweek_sales=category_dict[category]['lastweek_sales'] sales=category_dict[category]['sales'] if lastweek_sales>0: category_dict[category]['wow_rate'] = round((sales-lastweek_sales)*100.0/lastweek_sales,1) else: category_dict[category]['wow_rate'] = sales* 100.0 top20sales=sorted(top_sales.items(),key=lambda item:item[1],reverse=True)[:20] #上周销量前二十 top20wow_sales=sorted(top_wow_sales.items(),key=lambda item:item[1],reverse=True)[:20] #上周环比销量增加前二十 top20wow_rate=sorted(top_wow_rate.items(),key=lambda item:item[1],reverse=True)[:20] #上周环比销量增加率前二十 result={'submitter':json.dumps(submitter_dict),'category':json.dumps(category_dict), 'shopname':json.dumps(shopname_dict),'topsales':json.dumps(top20sales), 'topwow_sales':json.dumps(top20wow_sales),'topwow_rate':json.dumps(top20wow_rate),'week':last_week} ra.set_data(redis_name, result) ra.redis_conn.expire(redis_name, 604800) return result
def main(self, gmt_start, gmt_end): query_dict = {} query_dict['gmt_create__gte'] = gmt_start query_dict['gmt_create__lt'] = gmt_end new_gmt_end = ( datetime.datetime.strptime(gmt_end.strip(), '%Y-%m-%d') - datetime.timedelta(days=1)).strftime('%Y-%m-%d') gmt_time = gmt_start.strip() + '-' + new_gmt_end.strip() ra = redis_aliexprss() redis_name = 'ali_activation_rate__{}'.format(gmt_time) category_dict = {} category_objs = t_erp_aliexpress_config_category.objects.values( 'category_id', 'category_name_zh', 'full_path_zh', 'category_level') for obj in category_objs: if obj['category_level'] in (1, '1', u'1'): category_dict[int( obj['category_id'])] = obj['category_name_zh'] else: categoryname = obj['full_path_zh'].split('>>')[0] if categoryname == '服装/服饰配件': secondcategory = obj['full_path_zh'].split('>>')[1] if secondcategory.strip().startswith('服饰配饰'): category_dict[int(obj['category_id'])] = '服饰配饰' else: category_dict[int(obj['category_id'])] = '服装' else: category_dict[int(obj['category_id'])] = categoryname for c in [ 200003561, 200003565, 200003564, 200003566, 200003568, 200003577, 200003569, 200003567 ]: category_dict[c] = '电子烟' category_switch = { "箱包": "箱包鞋类", "运动及娱乐": "运动鞋服包/户外配附", "家具和室内装饰品": "家居&家具", "玩具": "母婴&玩具", "手表": "珠宝饰品及配件", "孕婴童": "母婴&玩具", "鞋子": "箱包鞋类", "电脑和办公": "电脑网络&办公文教", "家用电器": "家用电器", "电话和通讯": "手机配件", "家装(硬装)": "家装&灯具&工具", "安全防护": "安全防护", "工具": "家装&灯具&工具", "办公文教用品": "电脑网络&办公文教", "照明灯饰": "家装&灯具&工具", "家居用品": "家居&家具", "汽车、摩托车": "汽摩配", "安防": "安全防护", } # 品类关系替换 for category_id, v in category_dict.items(): if str(v) in category_switch: category_dict[category_id] = category_switch[str(v)] objs = t_erp_aliexpress_online_info.objects.filter(**query_dict)\ .values_list('owner_member_id', 'product_id', 'submitter','activation_flag','category_id') shopcatagory_objs = t_erp_aliexpress_shop_info.objects.values( 'accountName', 'cata_zh') shopcatagory_dict = {} for obj in shopcatagory_objs: shopcatagory_dict[obj['accountName']] = obj['cata_zh'] submitter_dict = {} product_sales = set() for obj in objs: submitter = obj[2] if not submitter or submitter == u'\x00': submitter = u'unknow' product_id = obj[1] category_id = int(obj[4]) accountName = obj[0] if obj[3] in ('1', 1, u'1'): product_sales.add(product_id) if not isinstance(submitter_dict.get(submitter), dict): # 初始化 submitter_dict submitter_dict[submitter] = {} _category = category_dict.get(category_id, '家居&家具') if _category == '其他特殊类': _category = '其他特殊类(' + shopcatagory_dict[accountName] + '账号)' elif _category == '珠宝饰品及配件': if shopcatagory_dict[accountName] == '服装服饰': _category = '珠宝饰品及配件(服装账号)' elif _category == '服装': if shopcatagory_dict[accountName] == '珠宝饰品及配件': _category = '服装(饰品账号)' if not isinstance(submitter_dict[submitter].get(_category), set): submitter_dict[submitter][_category] = set() submitter_dict[submitter][_category].add(product_id) for submitter in submitter_dict: tmp = {} for category in submitter_dict[submitter]: if tmp.get(category, None) is None: tmp[category] = set() product_set = submitter_dict[submitter][category] tmp[category].update(product_set) for category in tmp: product_set = tmp[category] activation_count = len(product_set & product_sales) rate = round(activation_count * 100.0 / len(product_set), 1) defaults = { u'activation_rate': rate, u'activation_count': activation_count, u'product_count': len(product_set) } t_erp_aliexpress_activation_rate.objects.update_or_create( submitter=submitter, category=category, gmt_time=gmt_time, updatetime=datetime.datetime.now(), defaults=defaults) # 向t_erp_aliexpress_activation_rate_overview表写入统计数据 objs = t_erp_aliexpress_activation_rate.objects.filter( updatetime=datetime.datetime.now(), gmt_time=gmt_time) submitter_dict = {} category_dict = {} datadict = { 'Submitter': [], 'Category': [], } activation_count_dict = {'Submitter': [], 'Category': []} product_count_dict = {'Submitter': [], 'Category': []} for obj in objs: if not isinstance(submitter_dict.get(obj.submitter), dict): submitter_dict[obj.submitter] = { 'product_count': 0, 'activation_count': 0 } if not isinstance(category_dict.get(obj.category), dict): category_dict[obj.category] = { 'product_count': 0, 'activation_count': 0 } submitter_dict[obj.submitter]['product_count'] += obj.product_count submitter_dict[ obj.submitter]['activation_count'] += obj.activation_count category_dict[obj.category]['product_count'] += obj.product_count category_dict[ obj.category]['activation_count'] += obj.activation_count for submitter, submitter_data in submitter_dict.items(): submitter_rate = round( submitter_data.get('activation_count') * 100.0 / submitter_data.get('product_count'), 1) datadict['Submitter'].append([submitter, submitter_rate]) product_count_dict['Submitter'].append( [submitter, submitter_data.get('product_count')]) activation_count_dict['Submitter'].append( [submitter, submitter_data.get('activation_count')]) defaults = { 'rate': submitter_rate, 'type': 0, 'activation_count': submitter_data.get('activation_count'), 'product_count': submitter_data.get('product_count') } t_erp_aliexpress_activation_rate_overview.objects.update_or_create( name=submitter, gmt_time=gmt_time, updatetime=datetime.datetime.now(), defaults=defaults) for category, category_data in category_dict.items(): category_rate = round( category_data.get('activation_count') * 100.0 / category_data.get('product_count'), 1) datadict['Category'].append([category, category_rate]) product_count_dict['Category'].append( [category, category_data.get('product_count')]) activation_count_dict['Category'].append( [category, category_data.get('activation_count')]) defaults = { 'rate': category_rate, 'type': 1, 'activation_count': category_data.get('activation_count'), 'product_count': category_data.get('product_count') } t_erp_aliexpress_activation_rate_overview.objects.update_or_create( name=category, gmt_time=gmt_time, updatetime=datetime.datetime.now(), defaults=defaults) result = {} result['Submitter_rate'] = json.dumps(datadict['Submitter']) result['Category_rate'] = json.dumps(datadict['Category']) result['Submitter_product_count'] = json.dumps( product_count_dict['Submitter']) result['Category_product_count'] = json.dumps( product_count_dict['Category']) result['Submitter_activation_count'] = json.dumps( activation_count_dict['Submitter']) result['Category_activation_count'] = json.dumps( activation_count_dict['Category']) result['tdate'] = gmt_time ra.set_data(redis_name, result) ra.redis_conn.expire(redis_name, 10800)