def get_visit_daily_trend(request): webapp_id = request.user_profile.webapp_id #先对昨天的数据进行统计 #_count_visit_yestoday_daily_pv_uv(webapp_id) #对当天的统计结果进行更新 _update_visit_today_daily_statistics(webapp_id) days = request.GET['days'] total_days, low_date, cur_date, high_date = dateutil.get_date_range( dateutil.get_today(), days, 0) statisticses = PageVisitDailyStatistics.objects.filter( webapp_id=webapp_id, url_type=URL_TYPE_ALL, data_date__range=(low_date, high_date)) date2pv = dict([(s.data_date.strftime('%Y-%m-%d'), s.pv_count) for s in statisticses]) date2uv = dict([(s.data_date.strftime('%Y-%m-%d'), s.uv_count) for s in statisticses]) date_list = dateutil.get_date_range_list(low_date, high_date) pv_trend_values = [] uv_trend_values = [] for loop_date in date_list: date = loop_date.strftime('%Y-%m-%d') x = (loop_date - low_date).days pv_trend_values.append({'x': x, 'y': date2pv.get(date, 0)}) uv_trend_values.append({'x': x, 'y': date2uv.get(date, 0)}) if len(pv_trend_values) == 0: values = [] else: values = [{ 'title': u'PV数', 'values': pv_trend_values }, { 'title': u'UV数', 'values': uv_trend_values }] infos = { 'title': '', 'values': values, 'date_info': { 'days': total_days, 'low_date': low_date } } line_chart_json = chartutil.create_line_chart( infos, display_today_data=settings.IS_UPDATE_PV_UV_REALTIME) return HttpResponse(line_chart_json, 'application/json')
def __get_weather_info(city_code, weather_id=0): data_str, error_info = __get_http_response_data( "m.weather.com.cn", "/data/%s.html" % city_code) weather_info = [] weather = None if data_str: info_json = decode_json_str(data_str) weather_json = info_json['weatherinfo'] # 计算周几 weeks = [u'一', u'二', u'三', u'四', u'五', u'六', u'日'] week_index = __get_week_index(weeks, weather_json['week']) # 获取今天日期 today_date = datetime.now() total_days, low_date, cur_date, high_date = dateutil.get_date_range( dateutil.get_today(), '6', 6) date_list = dateutil.get_date_range_list(datetime.date(today_date), high_date) for i in range(1, 7): data = dict() data['date'] = date_list[i - 1].strftime("%Y年%m月%d日") data['weather'] = weather_json['weather%d' % i] data['temp'] = weather_json['temp%d' % i] data['week'] = u'周%s' % weeks[week_index] # 给week赋值下标 week_index = week_index + 1 if week_index + 1 < len(weeks) else 0 weather_info.append(data) # 判断是否已经添加过数据,如果添加过就修改 if weather_id: weather = Weather.objects.get(id=weather_id) weather.info = json.dumps(weather_info) weather.update_time = today_date weather.save() else: weather = Weather.objects.create(info=json.dumps(weather_info), city_code=city_code) else: if weather_id: weather = Weather.objects.get(id=weather_id) weather_info = json.loads(weather.info) # print u'更新数据,天气的api不可用!' watchdog_fatal(u'更新数据,天气的api不可用!%s' % error_info, WATCHDOG_TYPE) else: # print u'首次获取数据,天气的api不可用!' watchdog_fatal(u'首次获取数据,天气的api不可用!%s' % error_info, WATCHDOG_TYPE) return weather_info, weather
def api_get(request): """ 返回销售额的EChart数据 """ low_date, high_date, date_range = stats_util.get_date_range(request) webapp_id = request.cloud_user.get_webapp_id() date_list = [ date.strftime("%m/%d") for date in dateutil.get_date_range_list(low_date, high_date) ] price_trend_values = get_count_list_by_type(webapp_id, date_list, low_date, high_date, sign="price") name_2_values_list = [{"name": "销售额", "values": price_trend_values}] response = get_mobile_chart_response(date_list, name_2_values_list) return response
def get_new_weixin_user_daily_trend(request): webapp_id = request.user_profile.webapp_id days = request.GET['days'] total_days, low_date, cur_date, high_date = dateutil.get_date_range( dateutil.get_today(), days, 0) statisticses = WeixinUserDailyStatistics.objects.filter( webapp_id=webapp_id, data_date__range=(low_date, high_date)) date2count = dict([(s.data_date, s.count) for s in statisticses]) date_list = dateutil.get_date_range_list(low_date, high_date) trend_values = [] for loop_date in date_list: count = 0 if loop_date in date2count: count = date2count[loop_date] x = (loop_date - low_date).days dot = {'x': x, 'y': count} trend_values.append(dot) if len(trend_values) == 0: values = [] else: values = [{'title': '新增用户数', 'values': trend_values}] infos = { 'title': '', 'values': values, 'date_info': { 'days': total_days, 'low_date': low_date } } line_chart_json = chartutil.create_line_chart(infos, display_today_data=True) return HttpResponse(line_chart_json, 'application/json')
def get_message_daily_trend(request): days = request.GET['days'] total_days, low_date, cur_date, high_date = dateutil.get_date_range( dateutil.get_today(), days, 0) statisticses = MessageDailyStatistics.objects.filter( owner=request.user, data_date__range=(low_date, high_date)) date2count = dict([(s.data_date, s.count) for s in statisticses]) date_list = dateutil.get_date_range_list(low_date, high_date) trend_values = [] for loop_date in date_list: count = 0 if loop_date in date2count: count = date2count[loop_date] x = (loop_date - low_date).days dot = {'x': x, 'y': count} trend_values.append(dot) if len(trend_values) == 0: values = [] else: values = [{'title': '消息数', 'values': trend_values}] infos = { 'title': '', 'values': values, 'date_info': { 'days': total_days, 'low_date': low_date } } line_chart_json = chartutil.create_line_chart( infos, display_today_data=settings.IS_UPDATE_PV_UV_REALTIME) return HttpResponse(line_chart_json, 'application/json')
def api_get(request): """ 关键词分析 """ #获取当前页数 cur_page = int(request.GET.get('page', '1')) #获取每页个数 count_per_page = int(request.GET.get('count_per_page', 10)) days = request.GET.get('days', '7') keyword = request.GET.get('keyword', '') owner_id = request.manager.id total_days, low_date, cur_date, high_date = dateutil.get_date_range( dateutil.get_today(), days, 0) date_list = [ date.strftime("%Y-%m-%d") for date in dateutil.get_date_range_list(low_date, high_date) ] display_date_list = [ date.strftime("%m.%d") for date in dateutil.get_date_range_list(low_date, high_date) ] records = KeywordCount.objects.filter( owner_id=owner_id, date__range=(low_date, high_date), keyword__contains=keyword).annotate( total_count=Sum('count')).order_by('-total_count') new_records = {} for record in records: new_record = {} count = record.count if new_records.has_key(record.keyword): count += new_records[record.keyword] new_records[record.keyword] = count new_records = sorted(new_records.items(), key=lambda d: d[1], reverse=True) pageinfo, new_records = paginator.paginate(new_records, cur_page, count_per_page, None) items = [] num = 1 #计算排行id使用 for record in new_records: record_item = {} record_item['id'] = (cur_page - 1) * count_per_page + num num += 1 record_item['keyword'] = record[0] record_item['count'] = record[1] items.append(record_item) response = create_response(200) response.data = { 'items': items, 'pageinfo': paginator.to_dict(pageinfo), 'sortAttr': '' } return response.get_response()
def api_get(request): """ 页面访问 """ days = request.GET.get('days', 7) try: owner_id = request.manager.id total_days, low_date, cur_date, high_date = dateutil.get_date_range( dateutil.get_today(), days, 0) date_list = [ date.strftime("%Y-%m-%d") for date in dateutil.get_date_range_list(low_date, high_date) ] display_date_list = [ date.strftime("%m.%d") for date in dateutil.get_date_range_list(low_date, high_date) ] analysis = MessageAnalysis.objects.filter( owner_id=owner_id, date_time__range=(low_date, (high_date + timedelta(days=1)))).order_by('date_time') date2receive = dict() date2send = dict() date2interaction_user = dict() date2interaction = dict() for analys in analysis: date = analys.date_time.strftime("%Y-%m-%d") date2receive[date] = analys.receive_count date2send[date] = analys.send_count date2interaction_user[date] = analys.interaction_user_count date2interaction[date] = analys.interaction_count receive_count_values = [] send_count_values = [] interaction_user_count_values = [] interaction_count_values = [] for date in date_list: receive_count_values.append(date2receive.get(date, 0)) send_count_values.append(date2send.get(date, 0)) interaction_user_count_values.append( date2interaction_user.get(date, 0)) interaction_count_values.append(date2interaction.get(date, 0)) return create_line_chart_response( '', '', display_date_list, [{ "name": "接收消息数", "values": receive_count_values }, { "name": "发送消息数", "values": send_count_values }, { "name": "互动人数", "values": interaction_user_count_values }, { "name": "互动次数", "values": interaction_count_values }], ["#11ca64", "#ca117e", "#00a2ff", "#ff9600"]) except: if settings.DEBUG: raise else: response = create_response(500) response.innerErrMsg = unicode_full_stack() return response.get_response()
def api_get(request): """ 用户分析 """ days = request.GET.get('days', 7) try: owner_id = request.manager.id total_days, low_date, cur_date, high_date = dateutil.get_date_range( dateutil.get_today(), days, 0) date_list = [ date.strftime("%Y-%m-%d") for date in dateutil.get_date_range_list(low_date, high_date) ] display_date_list = [ date.strftime("%m.%d") for date in dateutil.get_date_range_list(low_date, high_date) ] analysis = MemberAnalysis.objects.filter( owner_id=owner_id, date_time__range=(low_date, (high_date + timedelta(days=1)))).order_by('date_time') date2added = dict() date2cancel = dict() date2net = dict() date2total = dict() for analys in analysis: date = analys.date_time date2added[date] = analys.new_user date2cancel[date] = analys.cancel_user date2net[date] = analys.net_growth date2total[date] = analys.cumulate_user added_trend_values = [] cancel_trend_values = [] net_trend_values = [] total_trend_values = [] for date in date_list: added_trend_values.append(date2added.get(date, 0)) cancel_trend_values.append(date2cancel.get(date, 0)) net_trend_values.append(date2net.get(date, 0)) total_trend_values.append(date2total.get(date, 0)) return create_line_chart_response( '', '', display_date_list, [{ "name": "新增人数", "values": added_trend_values }, { "name": "跑路人数", "values": cancel_trend_values }, { "name": "净增人数", "values": net_trend_values }, { "name": "累计人数", "values": total_trend_values }], ["#11ca64", "#e2bf91", "#ca117e", "#00a2ff"]) except: if settings.DEBUG: raise else: response = create_response(500) response.innerErrMsg = unicode_full_stack() return response.get_response()
def api_get(request): webapp_id = request.user_profile.webapp_id if request.GET.get('get_outline_data', None): # 获得昨日订单数据 today = '%s 23:59:59' % dateutil.get_yesterday_str('today') yesterday = '%s 00:00:00' % dateutil.get_yesterday_str('today') order_money, order_count = stats_util.get_transaction_money_order_count( webapp_id, yesterday, today) # 获取会员数 update by bert at 20150817 subscribed_member_count = member_models.Member.objects.filter( webapp_id=webapp_id, is_subscribed=True, is_for_test=False).count() new_member_count = member_models.Member.objects.filter( webapp_id=webapp_id, created_at__range=(yesterday, today), status=member_models.SUBSCRIBED, is_for_test=False).count() response = create_response(200) response.data = { 'unread_message_count': get_unread_message_count(request.manager), 'new_member_count': new_member_count, 'order_count': order_count, 'order_money': round(order_money, 2), 'subscribed_member_count': subscribed_member_count, 'shop_hint_data': _get_shop_hint_data(request), 'tomorrow': dateutil.get_tomorrow_str('today') } return response.get_response() else: type = request.GET.get('type', None) days = request.GET.get('days', 6) total_days, low_date, cur_date, high_date = dateutil.get_date_range( dateutil.get_today(), days, 0) # high_date -= timedelta(days=1) date_list = [ date.strftime("%Y-%m-%d") for date in dateutil.get_date_range_list(low_date, high_date) ] #当最后一天是今天时,折线图中不显示最后一天的数据 duhao 2015-09-17 #当起止日期都是今天时,数据正常显示 today = dateutil.get_today() if len(date_list) > 1 and date_list[-1] == today: del date_list[-1] if type and type == 'purchase_trend': try: date2count = dict() date2price = dict() # 11.20从查询mall_purchase_daily_statistics变更为直接统计订单表,解决mall_purchase_daily_statistics遗漏统计订单与统计时间不一样导致的统计结果不同的问题。 orders = mall_models.Order.objects.belong_to( webapp_id).filter( created_at__range=(low_date, (high_date) + timedelta(days=1))) statuses = set([ mall_models.ORDER_STATUS_PAYED_SUCCESSED, mall_models.ORDER_STATUS_PAYED_NOT_SHIP, mall_models.ORDER_STATUS_PAYED_SHIPED, mall_models.ORDER_STATUS_SUCCESSED ]) orders = [ order for order in orders if (order.type != 'test') and ( order.status in statuses) ] for order in orders: # date = dateutil.normalize_date(order.created_at) date = order.created_at.strftime("%Y-%m-%d") if order.webapp_id != webapp_id: order_price = mall_models.Order.get_order_has_price_number( order) + order.postage else: order_price = order.final_price + order.weizoom_card_money if date in date2count: old_count = date2count[date] date2count[date] = old_count + 1 else: date2count[date] = 1 if date in date2price: old_price = date2price[date] date2price[date] = old_price + order_price else: date2price[date] = order_price count_trend_values = [] price_trend_values = [] for date in date_list: count_trend_values.append(date2count.get(date, 0)) price_trend_values.append( round(date2price.get(date, 0.0), 2)) result = create_line_chart_response( '', '', date_list, [{ "name": "销售额", "values": price_trend_values }, { "name": "订单数", "values": count_trend_values }], use_double_y_lable=True, get_json=True) result['yAxis'][0]['name'] = '销售额' result['yAxis'][1]['name'] = '订单数' result['yAxis'][1]['splitLine'] = {'show': False} response = create_response(200) response.data = result return response.get_response() except: if settings.DEBUG: raise else: response = create_response(500) response.innerErrMsg = unicode_full_stack() return response.get_response() elif type and type == 'visit_daily_trend': # 已弃用 """ 获得每日pv、uv统计 """ # 对当天的统计结果进行更新 if settings.IS_UPDATE_PV_UV_REALTIME: # 先删除当天的pv,uv统计结果,然后重新进行统计 today = dateutil.get_today() webapp_models.PageVisitDailyStatistics.objects.filter( webapp_id=webapp_id, data_date=today).delete() webapp_statistics_util.count_visit_daily_pv_uv( webapp_id, today) statisticses = webapp_models.PageVisitDailyStatistics.objects.filter( webapp_id=webapp_id, url_type=webapp_models.URL_TYPE_ALL, data_date__range=(low_date, high_date)) date2pv = dict([(s.data_date.strftime('%Y-%m-%d'), s.pv_count) for s in statisticses]) date2uv = dict([(s.data_date.strftime('%Y-%m-%d'), s.uv_count) for s in statisticses]) pv_trend_values = [] uv_trend_values = [] for date in date_list: pv_trend_values.append(date2pv.get(date, 0)) uv_trend_values.append(date2uv.get(date, 0)) return create_line_chart_response('', '', date_list, [{ "name": "PV", "values": pv_trend_values }, { "name": "UV", "values": uv_trend_values }])
def get_order_daily_trend(request): days = request.GET['days'] type = int(request.GET['type']) # 1为柱状图,2为k线图 elements = request.GET.get('element', '') if elements: elements = elements.split(',') total_days, low_date, cur_date, high_date = dateutil.get_date_range( dateutil.get_today(), days, 0) date_list = dateutil.get_date_range_list(low_date, high_date) if low_date == high_date: orders = Order.objects.filter(created_at__year=low_date.year, created_at__month=low_date.month, created_at__day=low_date.day) else: if days.find('-') == -1: date_list = date_list[:len(date_list) - 1] else: total_days = total_days + 1 high_date = high_date + timedelta(days=1) orders = Order.objects.filter(created_at__range=(low_date, high_date)) date2count = dict([(o, o) for o in range(1, 7)]) trend_ordered_quantity_values = [] trend_shiped_quantity_values = [] trend_order_weixin_values = [] trend_order_shopex_values = [] trend_listened_record_values = [] trend_recorded_values = [] x_labels = [] max_value = MAX_VALUE for loop_date in date_list: x = (loop_date - low_date).days x_labels.append(str(x)) for e in elements: orders_filter_by_date = orders.filter( created_at__year=loop_date.year, created_at__month=loop_date.month, created_at__day=loop_date.day) e = int(e) if ORDERED_QUANTITY == e: count = orders_filter_by_date.count() dot = {'x': x, 'y': count} max_value = __get_max_values(count, max_value) trend_ordered_quantity_values.append(dot) if ORDERED_SHIPED_QUANTITY == e: count = 0 for order in orders_filter_by_date.filter( status__gte=ORDER_STATUS_PAYED_SUCCESSED): for order_has_product in OrderHasProduct.objects.filter( order=order): count = count + order_has_product.number dot = {'x': x, 'y': count} max_value = __get_max_values(count, max_value) trend_shiped_quantity_values.append(dot) if ORDERED_TOTAL_PRICE == e: total_price = 0 for order in orders_filter_by_date.filter( status__gte=ORDER_STATUS_PAYED_SUCCESSED): total_price = total_price + order.total_price dot = {'x': x, 'y': total_price} max_value = __get_max_values(total_price, max_value) trend_order_shopex_values.append(dot) values = [] for e in elements: e = int(e) if ORDERED_QUANTITY == e: values.append({ 'title': u'日订单量', 'values': trend_ordered_quantity_values }) if ORDERED_SHIPED_QUANTITY == e: values.append({ 'title': u'日出货量', 'values': trend_shiped_quantity_values }) if ORDERED_TOTAL_PRICE == e: values.append({ 'title': u'日总金额', 'values': trend_order_shopex_values }) if type == 1: infos = { 'title': '', 'x_labels': x_labels, 'bar_title': 'ttt', 'x_legend_text': u'日期', 'values': values, 'max_value': max_value, 'date_info': { 'days': total_days, 'low_date': low_date } } chart_json = chartutil.create_bar_chart(infos) else: infos = { 'title': '', 'values': values, 'date_info': { 'days': total_days, 'low_date': low_date }, 'max_value': max_value } chart_json = chartutil.create_wine_line_chart(infos, display_today_data=False) return HttpResponse(chart_json, 'application/json')
def api_get(request): """ 签到详情查看 """ member_id = request.GET.get('member_id', None) belong_to = request.GET.get('belong_to', None) if member_id and belong_to: #最近90天 total_days, low_date, cur_date, high_date = dateutil.get_date_range( dateutil.get_today(), str(89), 0) date_list = dateutil.get_date_range_list(low_date, cur_date) #进行分页 count_per_page = int( request.GET.get('count_per_page', COUNT_PER_PAGE)) cur_page = int(request.GET.get('page', '1')) date_list.reverse() pageinfo, date_list = paginator.paginate( date_list, cur_page, count_per_page, query_string=request.META['QUERY_STRING']) pageinfo = paginator.to_dict(pageinfo) start_date = low_date.strftime("%Y-%m-%d %H:%M:%S") #现在的时间 end_date = cur_date.strftime("%Y-%m-%d 23:59:59") items = app_models.exSignDetails.objects( belong_to=belong_to, member_id=int(member_id), created_at__gte=start_date, created_at__lte=end_date).order_by('-created_at') sign_member_ids = [item.member_id for item in items] member_id2info = { m.id: { 'is_subscribed': m.is_subscribed, 'member_name': m.username_for_html } for m in Member.objects.filter(id__in=sign_member_ids) } returnDataList = [] time2prize = {} coupon_ids = [] for t in items: if t['prize'].get('coupon', None): coupon = t['prize']['coupon'] for c in coupon: coupon_ids.append(c['id']) coupon_id2name = { c.id: c.name for c in promotion_models.CouponRule.objects.filter( id__in=coupon_ids) } for item in items: prize_str = u'' if item['prize'].get('integral', None): prize_str += u'积分+%s<br/>' % str(item['prize']['integral']) if item['prize'].get('coupon', None): coupon = item['prize']['coupon'] for c in coupon: prize_str += u'%s<br/>' % coupon_id2name.get( c['id'], '') time2prize[item.created_at.strftime("%Y.%m.%d")] = { "created_at": item.created_at.strftime("%Y.%m.%d %H:%M:%S"), "created_at_f": item.created_at.strftime("%Y-%m-%d %H:%M:%S"), "prize": prize_str, "status": 1 } for date_d in date_list: date_ymd = date_d.strftime("%Y.%m.%d") if time2prize.get(date_ymd, None): returnDataList.append(time2prize[date_ymd]) else: returnDataList.append({ "created_at": date_d.strftime("%Y.%m.%d %H:%M:%S"), "created_at_f": date_d.strftime("%Y-%m-%d %H:%M:%S"), "prize": "", "status": 0 }) else: returnDataList = [] pageinfo = None response = create_response(200) response.data.items = returnDataList response.data.pageinfo = pageinfo return response.get_response()
def get_date_range_for_data(request, start_date=None, end_date=None): """ 获取数据的时间区域 需要request.GET中出现下列参数: * date_interval: 可选,指定时间范围,格式为2014.12.01-2014.12.03 * aggregation_type: 数据聚合类型,可选{"day", "week", "month", "year"}, 默认为day * page: 当前页数, 默认为1 * count_per_page:每页数据个数,默认为10 @retval 返回: (low_bound, high_bound, dates)三元组,指定需要从数据库中获取的数据的时间范围 """ if start_date and end_date: low_bound = datetime.strptime(start_date, '%Y-%m-%d') high_bound = datetime.strptime('%s 23:59:59' % end_date, '%Y-%m-%d %H:%M:%S') return low_bound, high_bound, dateutil.get_date_range_list( low_bound, high_bound) else: type2count = {'day': 1, 'week': 7, 'month': 30, 'year': 365} aggregation_type = request.GET.get('aggregation_type', 'day') day_per_item = type2count[aggregation_type] today = datetime.today() if aggregation_type == 'day': start_date = today elif aggregation_type == 'week': start_date = today + timedelta(6 - today.weekday()) #next sunday elif aggregation_type == 'month': monthrange = calendar.monthrange(today.year, today.month) last_day_of_month = '%s-%s-%s' % (today.year, today.month, monthrange[1]) start_date = datetime.strptime(last_day_of_month, '%Y-%m-%d') else: last_day_of_year = '%s-%s-%s' % (today.year, '12', '31') start_date = datetime.strptime(last_day_of_year, '%Y-%m-%d') cur_page = int(request.GET.get('page', '1')) count_per_page = int( request.GET.get('count_per_page', RECORDS_PER_PAGE)) if aggregation_type == 'month': #根据当前页码和每页记录个数计算截止日期 high_bound_date = dateutil.get_month_before((cur_page - 1) * count_per_page + 1) #根据截止日期往前推count_per_page个月 low_bound_date = dateutil.get_month_before_of_date( high_bound_date, count_per_page) low_bound = '%d-%d-%s 00:00:00' % (low_bound_date.year, low_bound_date.month, '01') last_day_of_high_bound_month = calendar.monthrange( high_bound_date.year, high_bound_date.month)[1] high_bound = '%d-%d-%d 23:59:59' % (high_bound_date.year, high_bound_date.month, last_day_of_high_bound_month) elif aggregation_type == 'year': #根据当前页码和每页记录个数计算截止日期 high_bound_year = datetime.now().year - (cur_page - 1) * count_per_page high_bound = '%d-%s-%s 23:59:59' % (high_bound_year, '12', '31') low_bound_year = high_bound_year - count_per_page + 1 low_bound = '%d-%s-%s 00:00:00' % (low_bound_year, '01', '01') else: low_bound = '%s 00:00:00' % ( start_date - timedelta(cur_page * count_per_page * day_per_item - 1)).strftime('%Y-%m-%d') high_bound = '%s 23:59:59' % (start_date - timedelta( (cur_page - 1) * count_per_page * day_per_item)).strftime('%Y-%m-%d') low_bound = datetime.strptime(low_bound, '%Y-%m-%d %H:%M:%S') high_bound = datetime.strptime(high_bound, '%Y-%m-%d %H:%M:%S') return low_bound, high_bound, dateutil.get_date_range_list( low_bound, high_bound)
def api_get(request): low_date, high_date, date_range = stats_util.get_date_range(request) try: webapp_id = request.user_profile.webapp_id date_list = [ date.strftime("%Y-%m-%d") for date in dateutil.get_date_range_list(low_date, high_date) ] date2count = dict() date2price = dict() # 11.20从查询mall_purchase_daily_statistics变更为直接统计订单表,解决mall_purchase_daily_statistics遗漏统计订单与统计时间不一样导致的统计结果不同的问题。 orders = Order.objects.belong_to(webapp_id).filter( created_at__range=(low_date, (high_date + timedelta(days=1)))) statuses = set([ ORDER_STATUS_PAYED_SUCCESSED, ORDER_STATUS_PAYED_NOT_SHIP, ORDER_STATUS_PAYED_SHIPED, ORDER_STATUS_SUCCESSED ]) orders = [ order for order in orders if (order.type != 'test') and (order.status in statuses) ] for order in orders: # date = dateutil.normalize_date(order.created_at) date = order.created_at.strftime("%Y-%m-%d") if order.webapp_id != webapp_id: order_price = Order.get_order_has_price_number( order) + order.postage else: order_price = order.final_price + order.weizoom_card_money if date in date2count: old_count = date2count[date] date2count[date] = old_count + 1 else: date2count[date] = 1 if date in date2price: old_price = date2price[date] date2price[date] = old_price + order_price else: date2price[date] = order_price price_trend_values = [] #当最后一天是今天时,折线图中不显示最后一天的数据 duhao 2015-08-12 #当起止日期都是今天时,数据正常显示 today = dateutil.get_today() if len(date_list) > 1 and date_list[-1] == today: del date_list[-1] for date in date_list: price_trend_values.append("%.2f" % (date2price.get(date, 0.0))) return create_line_chart_response('', '', date_list, [{ "name": "销售额", "values": price_trend_values }]) except: if settings.DEBUG: raise else: response = create_response(500) response.innerErrMsg = unicode_full_stack() return response.get_response()
def get_buy_trend(request): days = request.GET['days'] webapp_id = request.user_profile.webapp_id total_days, low_date, cur_date, high_date = dateutil.get_date_range( dateutil.get_today(), days, 0) date_list = dateutil.get_date_range_list(low_date, high_date) date2count = dict() date2price = dict() # 11.20从查询mall_purchase_daily_statistics变更为直接统计订单表,解决mall_purchase_daily_statistics遗漏统计订单与统计时间不一样导致的统计结果不同的问题。 orders = Order.objects.belong_to(webapp_id).filter( created_at__range=(low_date, (high_date + timedelta(days=1))), status__gte=2) for order in orders: date = dateutil.normalize_date(order.created_at) date = order.created_at.strftime("%Y-%m-%d") if order.webapp_id != webapp_id: order_price = Order.get_order_has_price_number( order) + order.postage else: order_price = order.final_price if date in date2count: old_count = date2count[date] date2count[date] = old_count + 1 else: date2count[date] = 1 if date in date2price: old_price = date2price[date] date2price[date] = old_price + order_price else: date2price[date] = order_price count_trend_values = [] price_trend_values = [] for loop_date in date_list: date = loop_date.strftime('%Y-%m-%d') x = (loop_date - low_date).days count_trend_values.append({'x': x, 'y': date2count.get(date, 0)}) price_trend_values.append({'x': x, 'y': date2price.get(date, 0)}) if len(count_trend_values) == 0: values = [] else: values = [{ 'title': u'订单数', 'values': count_trend_values }, { 'title': u'销售额', 'values': price_trend_values }] infos = { 'title': '', 'values': values, 'date_info': { 'days': total_days, 'low_date': low_date } } line_chart_json = chartutil.create_line_chart(infos, display_today_data=True) return HttpResponse(line_chart_json, 'application/json')