优化 statistic_consumer

FFIB 4 years ago
parent
commit
b5090f5270
1 changed files with 16 additions and 154 deletions
  1. 16 154
      api/admin_views.py

+ 16 - 154
api/admin_views.py

@@ -409,105 +409,6 @@ def statistic_distributor(request):
409 409
         distributor_logs = SaleclerkSubmitLogInfo.objects.raw(distributor_sql)
410 410
         distributor_logs = [{'distributor_name': log.distributor_name, 'num': log.num, 'code1': log.code1, 'code2': log.code2, 'has_code1_scan_num': log.has_code1_scan_num, 'has_code2_scan_num': log.has_code2_scan_num} for log in distributor_logs]
411 411
 
412
-    # daily_logs = list(logs.values('ymd').annotate(num=Count('pk')).order_by('ymd'))
413
-    # daily_code1_logs = list(logs.filter(code_version=1).values('ymd').annotate(num=Count('pk')).order_by('ymd'))
414
-    # daily_code1_hasScan_logs = list(logs.filter(code_version=1, has_scan=True).values('ymd').annotate(num=Count('pk')).order_by('ymd'))
415
-    # daily_code2_logs = list(logs.filter(code_version=2).values('ymd').annotate(num=Count('pk')).order_by('ymd'))
416
-    # daily_code2_hasScan_logs = list(logs.filter(code_version=2, has_scan=True).values('ymd').annotate(num=Count('pk')).order_by('ymd'))
417
-
418
-    # i1 = 0
419
-    # i2 = 0
420
-    # i3 = 0
421
-    # i4 = 0
422
-    # for i in range(0, len(daily_logs)):
423
-    #     daily_logs[i]['code1'] = 0
424
-    #     daily_logs[i]['code2'] = 0
425
-    #     daily_logs[i]['has_code1_scan_num'] = 0
426
-    #     daily_logs[i]['has_code2_scan_num'] = 0
427
-    #     if i1 < len(daily_code1_hasScan_logs) and daily_logs[i]['ymd'] == daily_code1_hasScan_logs[i1]['ymd']:
428
-    #         daily_logs[i]['has_code1_scan_num'] = daily_code1_hasScan_logs[i1]['num']
429
-    #         i1 += 1
430
-
431
-    #     if i2 < len(daily_code1_logs) and daily_logs[i]['ymd'] == daily_code1_logs[i2]['ymd']:
432
-    #         daily_logs[i]['code1'] = daily_code1_logs[i2]['num']
433
-    #         i2 += 1
434
-
435
-    #     if i3 < len(daily_code2_logs) and daily_logs[i]['ymd'] == daily_code2_logs[i3]['ymd']:
436
-    #         daily_logs[i]['code2'] = daily_code2_logs[i3]['num']
437
-    #         i3 += 1
438
-
439
-    #     if i4 < len(daily_code2_hasScan_logs) and daily_logs[i]['ymd'] == daily_code2_hasScan_logs[i4]['ymd']:
440
-    #         daily_logs[i]['has_code2_scan_num'] = daily_code2_hasScan_logs[i4]['num']
441
-    #         i4 += 1
442
-
443
-    # if model_name:
444
-    #     model_logs = list(logs.values('model_uni_name').annotate(num=Count('pk')).order_by('model_uni_name'))
445
-    #     model_code1_logs = list(logs.filter(code_version=1).values('model_uni_name').annotate(num=Count('pk')).order_by('model_uni_name'))
446
-    #     model_code1_hasScan_logs = list(logs.filter(code_version=1, has_scan=True).values('model_uni_name').annotate(num=Count('pk')).order_by('model_uni_name'))
447
-    #     model_code2_logs = list(logs.filter(code_version=2).values('model_uni_name').annotate(num=Count('pk')).order_by('model_uni_name'))
448
-    #     model_code2_hasScan_logs = list(logs.filter(code_version=2, has_scan=True).values('model_uni_name').annotate(num=Count('pk')).order_by('model_uni_name'))
449
-
450
-    #     i1 = 0
451
-    #     i2 = 0
452
-    #     i3 = 0
453
-    #     i4 = 0
454
-    #     for i in range(0, len(model_logs)):
455
-    #         model_logs[i]['code1'] = 0
456
-    #         model_logs[i]['code2'] = 0
457
-    #         model_logs[i]['has_code1_scan_num'] = 0
458
-    #         model_logs[i]['has_code2_scan_num'] = 0
459
-    #         if i1 < len(model_code1_hasScan_logs) and model_logs[i]['model_uni_name'] == model_code1_hasScan_logs[i1]['model_uni_name']:
460
-    #             model_logs[i]['has_code1_scan_num'] = model_code1_hasScan_logs[i1]['num']
461
-    #             i1 += 1
462
-
463
-    #         if i2 < len(model_code1_logs) and model_logs[i]['model_uni_name'] == model_code1_logs[i2]['model_uni_name']:
464
-    #             model_logs[i]['code1'] = model_code1_logs[i2]['num']
465
-    #             i2 += 1
466
-
467
-    #         if i3 < len(model_code2_logs) and model_logs[i]['model_uni_name'] == model_code2_logs[i3]['model_uni_name']:
468
-    #             model_logs[i]['code2'] = model_code2_logs[i3]['num']
469
-    #             i3 += 1
470
-
471
-    #         if i4 < len(model_code2_hasScan_logs) and model_logs[i]['model_uni_name'] == model_code2_hasScan_logs[i4]['model_uni_name']:
472
-    #             model_logs[i]['has_code2_scan_num'] = model_code2_hasScan_logs[i4]['num']
473
-    #             i4 += 1
474
-
475
-    #     model_logs.sort(key=lambda k: (-k['num']))
476
-
477
-    # if distributor_name:
478
-    #     distributor_logs = list(logs.values('distributor_name').annotate(num=Count('pk')).order_by('distributor_name'))
479
-    #     distributor_code1_logs = list(logs.filter(code_version=1).values('distributor_name').annotate(num=Count('pk')).order_by('distributor_name'))
480
-    #     distributor_code1_hasScan_logs = list(logs.filter(code_version=1, has_scan=True).values('distributor_name').annotate(num=Count('pk')).order_by('distributor_name'))
481
-    #     distributor_code2_logs = list(logs.filter(code_version=2).values('distributor_name').annotate(num=Count('pk')).order_by('distributor_name'))
482
-    #     distributor_code2_hasScan_logs = list(logs.filter(code_version=2, has_scan=True).values('distributor_name').annotate(num=Count('pk')).order_by('distributor_name'))
483
-
484
-    #     i1 = 0
485
-    #     i2 = 0
486
-    #     i3 = 0
487
-    #     i4 = 0
488
-    #     for i in range(0, len(distributor_logs)):
489
-    #         distributor_logs[i]['code1'] = 0
490
-    #         distributor_logs[i]['code2'] = 0
491
-    #         distributor_logs[i]['has_code1_scan_num'] = 0
492
-    #         distributor_logs[i]['has_code2_scan_num'] = 0
493
-    #         if i1 < len(distributor_code1_hasScan_logs) and distributor_logs[i]['distributor_name'] == distributor_code1_hasScan_logs[i1]['distributor_name']:
494
-    #             distributor_logs[i]['has_code1_scan_num'] = distributor_code1_hasScan_logs[i1]['num']
495
-    #             i1 += 1
496
-
497
-    #         if i2 < len(distributor_code1_logs) and distributor_logs[i]['distributor_name'] == distributor_code1_logs[i2]['distributor_name']:
498
-    #             distributor_logs[i]['code1'] = distributor_code1_logs[i2]['num']
499
-    #             i2 += 1
500
-
501
-    #         if i3 < len(distributor_code2_logs) and distributor_logs[i]['distributor_name'] == distributor_code2_logs[i3]['distributor_name']:
502
-    #             distributor_logs[i]['code2'] = distributor_code2_logs[i3]['num']
503
-    #             i3 += 1
504
-
505
-    #         if i4 < len(distributor_code2_hasScan_logs) and distributor_logs[i]['distributor_name'] == distributor_code2_hasScan_logs[i4]['distributor_name']:
506
-    #             distributor_logs[i]['has_code2_scan_num'] = distributor_code2_hasScan_logs[i4]['num']
507
-    #             i4 += 1
508
-
509
-    #     distributor_logs.sort(key=lambda k: (-k['num']))
510
-
511 412
     return response(200, 'Get Distributor Statistic Success', u'获取经销商统计成功', data={
512 413
         'daily_logs': daily_logs,
513 414
         'model_logs': model_logs,
@@ -568,6 +469,7 @@ def statistic_consumer(request):
568 469
     admin_id = request.POST.get('admin_id', '')
569 470
     start_time = request.POST.get('start_time', '')
570 471
     end_time = request.POST.get('end_time', '')
472
+    model_name = request.POST.get('model_name', '')
571 473
 
572 474
     if brand_id != settings.KODO_DEFAULT_BRAND_ID:
573 475
         return response(ProductBrandStatusCode.BRAND_NOT_MATCH)
@@ -578,62 +480,22 @@ def statistic_consumer(request):
578 480
         return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
579 481
 
580 482
     # 消费者统计
581
-    logs = ConsumeInfoSubmitLogInfo.objects.filter(ymd__gte=start_time, ymd__lte=end_time, test_user=False, dupload=False, status=True)
483
+    daily_sql = 'select id, Count(id) AS num, Count(code_version=1 or NULL) AS code1 , Count(code_version=2 or NULL) AS code2 FROM mch_consumeinfosubmitloginfo where ymd >= %s AND ymd <= %s AND test_user=False AND dupload=False AND status=True %s GROUP BY ymd;' % (start_time, end_time, ('AND model_uni_name="%s"' % (model_name)) if model_name else '')
484
+
485
+    daily_logs = ConsumeInfoSubmitLogInfo.objects.raw(daily_sql)
486
+    daily_logs = [{'ymd': log.ymd, 'num': log.num, 'code1': log.code1, 'code2': log.code2} for log in daily_logs]
487
+
488
+    model_logs = []
489
+    if model_name == '':
490
+        model_sql = 'select id, model_uni_name, Count(id) AS num, Count(code_version=1 or NULL) AS code1 , Count(code_version=2 or NULL) AS code2 FROM mch_consumeinfosubmitloginfo where ymd >= %s AND ymd <= %s AND test_user=False AND dupload=False AND status=True GROUP BY model_uni_name ORDER BY num desc;' % (start_time, end_time)
491
+
492
+        model_logs = ConsumeInfoSubmitLogInfo.objects.raw(model_sql)
493
+        model_logs = [{'model_uni_name': log.model_uni_name, 'num': log.num, 'code1': log.code1, 'code2': log.code2} for log in model_logs]
494
+    
495
+    province_sql = 'select id, province, Count(id) AS num, Count(code_version=1 or NULL) AS code1, Count(code_version=2 or NULL) AS code2 FROM mch_consumeinfosubmitloginfo where ymd >= %s AND ymd <= %s AND test_user=False AND dupload=False AND status=True %s GROUP BY province ORDER BY num desc;' % (start_time, end_time, ('AND model_uni_name="%s"' % (model_name)) if model_name else '')
582 496
 
583
-    daily_logs = list(logs.values('ymd').annotate(num=Count('pk')).order_by('ymd'))
584
-    daily_code1_logs = list(logs.filter(code_version=1).values('ymd').annotate(num=Count('pk')).order_by('ymd'))
585
-    daily_code2_logs = list(logs.filter(code_version=2).values('ymd').annotate(num=Count('pk')).order_by('ymd'))
586
-
587
-    j = 0
588
-    k = 0
589
-    for i in range(0, len(daily_logs)):
590
-        daily_logs[i]['code1'] = 0
591
-        daily_logs[i]['code2'] = 0
592
-        if j < len(daily_code1_logs) and daily_logs[i]['ymd'] == daily_code1_logs[j]['ymd']:
593
-            daily_logs[i]['code1'] = daily_code1_logs[j]['num']
594
-            j += 1
595
-
596
-        if k < len(daily_code2_logs) and daily_logs[i]['ymd'] == daily_code2_logs[k]['ymd']:
597
-            daily_logs[i]['code2'] = daily_code2_logs[k]['num']
598
-            k += 1
599
-
600
-    model_logs = list(logs.values('model_uni_name').annotate(num=Count('pk')).order_by('model_uni_name'))
601
-    model_code1_logs = list(logs.filter(code_version=1).values('model_uni_name').annotate(num=Count('pk')).order_by('model_uni_name'))
602
-    model_code2_logs = list(logs.filter(code_version=2).values('model_uni_name').annotate(num=Count('pk')).order_by('model_uni_name'))
603
-
604
-    j = 0
605
-    k = 0
606
-    for i in range(0, len(model_logs)):
607
-        model_logs[i]['code1'] = 0
608
-        model_logs[i]['code2'] = 0
609
-        if j < len(model_code1_logs) and model_logs[i]['model_uni_name'] == model_code1_logs[j]['model_uni_name']:
610
-            model_logs[i]['code1'] = model_code1_logs[j]['num']
611
-            j += 1
612
-
613
-        if k < len(model_code2_logs) and model_logs[i]['model_uni_name'] == model_code2_logs[k]['model_uni_name']:
614
-            model_logs[i]['code2'] = model_code2_logs[k]['num']
615
-            k += 1
616
-
617
-    model_logs.sort(key=lambda k: (-k['num']))
618
-
619
-    province_logs = list(logs.values('province').annotate(num=Count('pk')).order_by('province'))
620
-    province_code1_logs = list(logs.filter(code_version=1).values('province').annotate(num=Count('pk')).order_by('province'))
621
-    province_code2_logs = list(logs.filter(code_version=2).values('province').annotate(num=Count('pk')).order_by('province'))
622
-
623
-    j = 0
624
-    k = 0
625
-    for i in range(0, len(province_logs)):
626
-        province_logs[i]['code1'] = 0
627
-        province_logs[i]['code2'] = 0
628
-        if j < len(province_code1_logs) and province_logs[i]['province'] == province_code1_logs[j]['province']:
629
-            province_logs[i]['code1'] = province_code1_logs[j]['num']
630
-            j += 1
631
-
632
-        if k < len(province_code2_logs) and province_logs[i]['province'] == province_code2_logs[k]['province']:
633
-            province_logs[i]['code2'] = province_code2_logs[k]['num']
634
-            k += 1
635
-
636
-    province_logs.sort(key=lambda k: (-k['num']))
497
+    province_logs = ConsumeInfoSubmitLogInfo.objects.raw(province_sql)
498
+    province_logs = [{'province': log.province, 'num': log.num, 'code1': log.code1, 'code2': log.code2} for log in province_logs]
637 499
 
638 500
     return response(200, 'Get Consumer Statistic Success', u'获取消费者统计成功', data={
639 501
         'daily_logs': daily_logs,