| @@ -625,6 +625,51 @@ def statistic_consumer(request): | ||
| 625 | 625 | 'province_logs': province_logs, | 
| 626 | 626 | }) | 
| 627 | 627 |  | 
| 628 | +def statistic_member(request): | |
| 629 | +    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) | |
| 630 | +    admin_id = request.POST.get('admin_id', '') | |
| 631 | +    start_time = request.POST.get('start_time', '') | |
| 632 | +    end_time = request.POST.get('end_time', '') | |
| 633 | + | |
| 634 | + if brand_id != settings.KODO_DEFAULT_BRAND_ID: | |
| 635 | + return response(ProductBrandStatusCode.BRAND_NOT_MATCH) | |
| 636 | + | |
| 637 | + try: | |
| 638 | + administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True) | |
| 639 | + except AdministratorInfo.DoesNotExist: | |
| 640 | + return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND) | |
| 641 | + | |
| 642 | + # 消费者统计 | |
| 643 | +    users = ConsumeInfoSubmitLogInfo.objects.filter(ymd__gte=start_time, ymd__lte=end_time, test_user=False, dupload=False, status=True).values('user_id').distinct() | |
| 644 | + | |
| 645 | + userinfos = UserInfo.objects.none() | |
| 646 | + | |
| 647 | + for user in users: | |
| 648 | +        userinfos |= UserInfo.objects.filter(user_id=user.get('user_id', '')) | |
| 649 | + | |
| 650 | + # 会员级别 | |
| 651 | +    level_logs = list(userinfos.values('level').annotate(num=Count('user_id'))) | |
| 652 | + | |
| 653 | + # 会员积分 | |
| 654 | +    integral_logs = list(userinfos.values('integral').annotate(num=Count('user_id'))) | |
| 655 | + | |
| 656 | + # 镜头数 | |
| 657 | +    shot_logs = list(userinfos.values('shots_num').annotate(num=Count('user_id'))) | |
| 658 | + | |
| 659 | + # 性别 | |
| 660 | +    sex_logs = list(userinfos.values('sex').annotate(num=Count('user_id'))) | |
| 661 | + | |
| 662 | + # 省份 | |
| 663 | +    province_logs = list(userinfos.values('province_name').annotate(num=Count('user_id')).order_by('-num')) | |
| 664 | + | |
| 665 | +    return response(200, 'Get Consumer Statistic Success', u'获取消费者统计成功', data={ | |
| 666 | + 'level_logs': level_logs, | |
| 667 | + 'integral_logs': integral_logs, | |
| 668 | + 'shot_logs': shot_logs, | |
| 669 | + 'sex_logs': sex_logs, | |
| 670 | + 'province_logs': province_logs, | |
| 671 | + }) | |
| 672 | + | |
| 628 | 673 | def record_consumer(request): | 
| 629 | 674 |      brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) | 
| 630 | 675 |      page = request.POST.get('page', 1) | 
| @@ -314,6 +314,7 @@ urlpatterns += [ | ||
| 314 | 314 |  | 
| 315 | 315 | url(r'^admin/dashboard$', admin_views.dashboard, name='dashboard'), | 
| 316 | 316 | url(r'^admin/statistic/consumer$', admin_views.statistic_consumer, name='statistic_consumer'), | 
| 317 | + url(r'^admin/statistic/member$', admin_views.statistic_member, name='statistic_member'), | |
| 317 | 318 |  | 
| 318 | 319 | url(r'^admin/record/consumer$', admin_views.record_consumer, name='record_consumer'), | 
| 319 | 320 | url(r'^admin/record/sale$', admin_views.record_sale, name='record_sale'), |