优化 statistic_distributor

FFIB 4 年 前
コミット
6efb13a58e
共有1 個のファイルを変更した112 個の追加98 個の削除を含む
  1. 112 98
      api/admin_views.py

+ 112 - 98
api/admin_views.py

@@ -390,104 +390,118 @@ def statistic_distributor(request):
390 390
     except AdministratorInfo.DoesNotExist:
391 391
         return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
392 392
 
393
-    logs = SaleclerkSubmitLogInfo.objects.filter(ymd__gte=start_time, ymd__lte=end_time, distributor_name__contains=distributor_name, model_uni_name__contains=model_name, test_user=False, dupload=False, test_sn=False, status=True)
394
-
395
-    daily_logs = list(logs.values('ymd').annotate(num=Count('pk')).order_by('ymd'))
396
-    daily_code1_logs = list(logs.filter(code_version=1).values('ymd').annotate(num=Count('pk')).order_by('ymd'))
397
-    daily_code1_hasScan_logs = list(logs.filter(code_version=1, has_scan=True).values('ymd').annotate(num=Count('pk')).order_by('ymd'))
398
-    daily_code2_logs = list(logs.filter(code_version=2).values('ymd').annotate(num=Count('pk')).order_by('ymd'))
399
-    daily_code2_hasScan_logs = list(logs.filter(code_version=2, has_scan=True).values('ymd').annotate(num=Count('pk')).order_by('ymd'))
400
-
401
-    i1 = 0
402
-    i2 = 0
403
-    i3 = 0
404
-    i4 = 0
405
-    for i in range(0, len(daily_logs)):
406
-        daily_logs[i]['code1'] = 0
407
-        daily_logs[i]['code2'] = 0
408
-        daily_logs[i]['has_code1_scan_num'] = 0
409
-        daily_logs[i]['has_code2_scan_num'] = 0
410
-        if i1 < len(daily_code1_hasScan_logs) and daily_logs[i]['ymd'] == daily_code1_hasScan_logs[i1]['ymd']:
411
-            daily_logs[i]['has_code1_scan_num'] = daily_code1_hasScan_logs[i1]['num']
412
-            i1 += 1
413
-
414
-        if i2 < len(daily_code1_logs) and daily_logs[i]['ymd'] == daily_code1_logs[i2]['ymd']:
415
-            daily_logs[i]['code1'] = daily_code1_logs[i2]['num']
416
-            i2 += 1
417
-
418
-        if i3 < len(daily_code2_logs) and daily_logs[i]['ymd'] == daily_code2_logs[i3]['ymd']:
419
-            daily_logs[i]['code2'] = daily_code2_logs[i3]['num']
420
-            i3 += 1
421
-
422
-        if i4 < len(daily_code2_hasScan_logs) and daily_logs[i]['ymd'] == daily_code2_hasScan_logs[i4]['ymd']:
423
-            daily_logs[i]['has_code2_scan_num'] = daily_code2_hasScan_logs[i4]['num']
424
-            i4 += 1
425
-
426
-    model_logs = list(logs.values('model_uni_name').annotate(num=Count('pk')).order_by('model_uni_name'))
427
-    model_code1_logs = list(logs.filter(code_version=1).values('model_uni_name').annotate(num=Count('pk')).order_by('model_uni_name'))
428
-    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'))
429
-    model_code2_logs = list(logs.filter(code_version=2).values('model_uni_name').annotate(num=Count('pk')).order_by('model_uni_name'))
430
-    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'))
431
-
432
-    i1 = 0
433
-    i2 = 0
434
-    i3 = 0
435
-    i4 = 0
436
-    for i in range(0, len(model_logs)):
437
-        model_logs[i]['code1'] = 0
438
-        model_logs[i]['code2'] = 0
439
-        model_logs[i]['has_code1_scan_num'] = 0
440
-        model_logs[i]['has_code2_scan_num'] = 0
441
-        if i1 < len(model_code1_hasScan_logs) and model_logs[i]['model_uni_name'] == model_code1_hasScan_logs[i1]['model_uni_name']:
442
-            model_logs[i]['has_code1_scan_num'] = model_code1_hasScan_logs[i1]['num']
443
-            i1 += 1
444
-
445
-        if i2 < len(model_code1_logs) and model_logs[i]['model_uni_name'] == model_code1_logs[i2]['model_uni_name']:
446
-            model_logs[i]['code1'] = model_code1_logs[i2]['num']
447
-            i2 += 1
448
-
449
-        if i3 < len(model_code2_logs) and model_logs[i]['model_uni_name'] == model_code2_logs[i3]['model_uni_name']:
450
-            model_logs[i]['code2'] = model_code2_logs[i3]['num']
451
-            i3 += 1
452
-
453
-        if i4 < len(model_code2_hasScan_logs) and model_logs[i]['model_uni_name'] == model_code2_hasScan_logs[i4]['model_uni_name']:
454
-            model_logs[i]['has_code2_scan_num'] = model_code2_hasScan_logs[i4]['num']
455
-            i4 += 1
456
-
457
-    model_logs.sort(key=lambda k: (-k['num']))
458
-
459
-    distributor_logs = list(logs.values('distributor_name').annotate(num=Count('pk')).order_by('distributor_name'))
460
-    distributor_code1_logs = list(logs.filter(code_version=1).values('distributor_name').annotate(num=Count('pk')).order_by('distributor_name'))
461
-    distributor_code1_hasScan_logs = list(logs.filter(code_version=1, has_scan=True).values('distributor_name').annotate(num=Count('pk')).order_by('distributor_name'))
462
-    distributor_code2_logs = list(logs.filter(code_version=2).values('distributor_name').annotate(num=Count('pk')).order_by('distributor_name'))
463
-    distributor_code2_hasScan_logs = list(logs.filter(code_version=2, has_scan=True).values('distributor_name').annotate(num=Count('pk')).order_by('distributor_name'))
464
-
465
-    i1 = 0
466
-    i2 = 0
467
-    i3 = 0
468
-    i4 = 0
469
-    for i in range(0, len(distributor_logs)):
470
-        distributor_logs[i]['code1'] = 0
471
-        distributor_logs[i]['code2'] = 0
472
-        distributor_logs[i]['has_code1_scan_num'] = 0
473
-        distributor_logs[i]['has_code2_scan_num'] = 0
474
-        if i1 < len(distributor_code1_hasScan_logs) and distributor_logs[i]['distributor_name'] == distributor_code1_hasScan_logs[i1]['distributor_name']:
475
-            distributor_logs[i]['has_code1_scan_num'] = distributor_code1_hasScan_logs[i1]['num']
476
-            i1 += 1
477
-
478
-        if i2 < len(distributor_code1_logs) and distributor_logs[i]['distributor_name'] == distributor_code1_logs[i2]['distributor_name']:
479
-            distributor_logs[i]['code1'] = distributor_code1_logs[i2]['num']
480
-            i2 += 1
481
-
482
-        if i3 < len(distributor_code2_logs) and distributor_logs[i]['distributor_name'] == distributor_code2_logs[i3]['distributor_name']:
483
-            distributor_logs[i]['code2'] = distributor_code2_logs[i3]['num']
484
-            i3 += 1
485
-
486
-        if i4 < len(distributor_code2_hasScan_logs) and distributor_logs[i]['distributor_name'] == distributor_code2_hasScan_logs[i4]['distributor_name']:
487
-            distributor_logs[i]['has_code2_scan_num'] = distributor_code2_hasScan_logs[i4]['num']
488
-            i4 += 1
489
-
490
-    distributor_logs.sort(key=lambda k: (-k['num']))
393
+    daily_logs = SaleclerkSubmitLogInfo.objects.raw('select id, ymd, Count(*) AS num, Count(code_version=1 or NULL) AS code1 , Count(code_version=2 or NULL) AS code2, Count((code_version=1 AND has_scan=True) or NULL) AS has_code1_scan_num, Count((code_version=2 AND has_scan=True) or NULL) AS has_code2_scan_num FROM integral_saleclerksubmitloginfo where ymd >= %s AND ymd <= %s AND test_user=False AND dupload=False AND test_sn=False AND status=True AND CONTAINS(model_uni_name, %s) AND CONTAINS(distributor_name, %s) GROUP BY ymd;', [start_time, end_time, model_name, distributor_name])
394
+
395
+    daily_logs = [{'ymd': log.ymd, '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 daily_logs]
396
+
397
+    if model_name == '':
398
+        model_logs = SaleclerkSubmitLogInfo.objects.raw('select id, model_uni_name, Count(*) AS num, Count(code_version=1 or NULL) AS code1 , Count(code_version=2 or NULL) AS code2, Count((code_version=1 AND has_scan=True) or NULL) AS has_code1_scan_num, Count((code_version=2 AND has_scan=True) or NULL) AS has_code2_scan_num FROM integral_saleclerksubmitloginfo where ymd >= %s AND ymd <= %s AND test_user=False AND dupload=False AND test_sn=False AND status=True AND CONTAINS(distributor_name, %s) GROUP BY model_uni_name;', [start_time, end_time, distributor_name])
399
+        
400
+        model_logs = [{'model_uni_name': log.model_uni_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 daily_logs]
401
+    
402
+    if distributor_name == '':
403
+        distributor_logs = SaleclerkSubmitLogInfo.objects.raw('select id, distributor_name, Count(*) AS num, Count(code_version=1 or NULL) AS code1 , Count(code_version=2 or NULL) AS code2, Count((code_version=1 AND has_scan=True) or NULL) AS has_code1_scan_num, Count((code_version=2 AND has_scan=True) or NULL) AS has_code2_scan_num FROM integral_saleclerksubmitloginfo where ymd >= %s AND ymd <= %s AND test_user=False AND dupload=False AND test_sn=False AND status=True AND CONTAINS(model_uni_name, %s) GROUP BY distributor_name;', [start_time, end_time, model_name])
404
+        
405
+        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 daily_logs]
406
+
407
+    # daily_logs = list(logs.values('ymd').annotate(num=Count('pk')).order_by('ymd'))
408
+    # daily_code1_logs = list(logs.filter(code_version=1).values('ymd').annotate(num=Count('pk')).order_by('ymd'))
409
+    # daily_code1_hasScan_logs = list(logs.filter(code_version=1, has_scan=True).values('ymd').annotate(num=Count('pk')).order_by('ymd'))
410
+    # daily_code2_logs = list(logs.filter(code_version=2).values('ymd').annotate(num=Count('pk')).order_by('ymd'))
411
+    # daily_code2_hasScan_logs = list(logs.filter(code_version=2, has_scan=True).values('ymd').annotate(num=Count('pk')).order_by('ymd'))
412
+
413
+    # i1 = 0
414
+    # i2 = 0
415
+    # i3 = 0
416
+    # i4 = 0
417
+    # for i in range(0, len(daily_logs)):
418
+    #     daily_logs[i]['code1'] = 0
419
+    #     daily_logs[i]['code2'] = 0
420
+    #     daily_logs[i]['has_code1_scan_num'] = 0
421
+    #     daily_logs[i]['has_code2_scan_num'] = 0
422
+    #     if i1 < len(daily_code1_hasScan_logs) and daily_logs[i]['ymd'] == daily_code1_hasScan_logs[i1]['ymd']:
423
+    #         daily_logs[i]['has_code1_scan_num'] = daily_code1_hasScan_logs[i1]['num']
424
+    #         i1 += 1
425
+
426
+    #     if i2 < len(daily_code1_logs) and daily_logs[i]['ymd'] == daily_code1_logs[i2]['ymd']:
427
+    #         daily_logs[i]['code1'] = daily_code1_logs[i2]['num']
428
+    #         i2 += 1
429
+
430
+    #     if i3 < len(daily_code2_logs) and daily_logs[i]['ymd'] == daily_code2_logs[i3]['ymd']:
431
+    #         daily_logs[i]['code2'] = daily_code2_logs[i3]['num']
432
+    #         i3 += 1
433
+
434
+    #     if i4 < len(daily_code2_hasScan_logs) and daily_logs[i]['ymd'] == daily_code2_hasScan_logs[i4]['ymd']:
435
+    #         daily_logs[i]['has_code2_scan_num'] = daily_code2_hasScan_logs[i4]['num']
436
+    #         i4 += 1
437
+
438
+    # if model_name:
439
+    #     model_logs = list(logs.values('model_uni_name').annotate(num=Count('pk')).order_by('model_uni_name'))
440
+    #     model_code1_logs = list(logs.filter(code_version=1).values('model_uni_name').annotate(num=Count('pk')).order_by('model_uni_name'))
441
+    #     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'))
442
+    #     model_code2_logs = list(logs.filter(code_version=2).values('model_uni_name').annotate(num=Count('pk')).order_by('model_uni_name'))
443
+    #     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'))
444
+
445
+    #     i1 = 0
446
+    #     i2 = 0
447
+    #     i3 = 0
448
+    #     i4 = 0
449
+    #     for i in range(0, len(model_logs)):
450
+    #         model_logs[i]['code1'] = 0
451
+    #         model_logs[i]['code2'] = 0
452
+    #         model_logs[i]['has_code1_scan_num'] = 0
453
+    #         model_logs[i]['has_code2_scan_num'] = 0
454
+    #         if i1 < len(model_code1_hasScan_logs) and model_logs[i]['model_uni_name'] == model_code1_hasScan_logs[i1]['model_uni_name']:
455
+    #             model_logs[i]['has_code1_scan_num'] = model_code1_hasScan_logs[i1]['num']
456
+    #             i1 += 1
457
+
458
+    #         if i2 < len(model_code1_logs) and model_logs[i]['model_uni_name'] == model_code1_logs[i2]['model_uni_name']:
459
+    #             model_logs[i]['code1'] = model_code1_logs[i2]['num']
460
+    #             i2 += 1
461
+
462
+    #         if i3 < len(model_code2_logs) and model_logs[i]['model_uni_name'] == model_code2_logs[i3]['model_uni_name']:
463
+    #             model_logs[i]['code2'] = model_code2_logs[i3]['num']
464
+    #             i3 += 1
465
+
466
+    #         if i4 < len(model_code2_hasScan_logs) and model_logs[i]['model_uni_name'] == model_code2_hasScan_logs[i4]['model_uni_name']:
467
+    #             model_logs[i]['has_code2_scan_num'] = model_code2_hasScan_logs[i4]['num']
468
+    #             i4 += 1
469
+
470
+    #     model_logs.sort(key=lambda k: (-k['num']))
471
+
472
+    # if distributor_name:
473
+    #     distributor_logs = list(logs.values('distributor_name').annotate(num=Count('pk')).order_by('distributor_name'))
474
+    #     distributor_code1_logs = list(logs.filter(code_version=1).values('distributor_name').annotate(num=Count('pk')).order_by('distributor_name'))
475
+    #     distributor_code1_hasScan_logs = list(logs.filter(code_version=1, has_scan=True).values('distributor_name').annotate(num=Count('pk')).order_by('distributor_name'))
476
+    #     distributor_code2_logs = list(logs.filter(code_version=2).values('distributor_name').annotate(num=Count('pk')).order_by('distributor_name'))
477
+    #     distributor_code2_hasScan_logs = list(logs.filter(code_version=2, has_scan=True).values('distributor_name').annotate(num=Count('pk')).order_by('distributor_name'))
478
+
479
+    #     i1 = 0
480
+    #     i2 = 0
481
+    #     i3 = 0
482
+    #     i4 = 0
483
+    #     for i in range(0, len(distributor_logs)):
484
+    #         distributor_logs[i]['code1'] = 0
485
+    #         distributor_logs[i]['code2'] = 0
486
+    #         distributor_logs[i]['has_code1_scan_num'] = 0
487
+    #         distributor_logs[i]['has_code2_scan_num'] = 0
488
+    #         if i1 < len(distributor_code1_hasScan_logs) and distributor_logs[i]['distributor_name'] == distributor_code1_hasScan_logs[i1]['distributor_name']:
489
+    #             distributor_logs[i]['has_code1_scan_num'] = distributor_code1_hasScan_logs[i1]['num']
490
+    #             i1 += 1
491
+
492
+    #         if i2 < len(distributor_code1_logs) and distributor_logs[i]['distributor_name'] == distributor_code1_logs[i2]['distributor_name']:
493
+    #             distributor_logs[i]['code1'] = distributor_code1_logs[i2]['num']
494
+    #             i2 += 1
495
+
496
+    #         if i3 < len(distributor_code2_logs) and distributor_logs[i]['distributor_name'] == distributor_code2_logs[i3]['distributor_name']:
497
+    #             distributor_logs[i]['code2'] = distributor_code2_logs[i3]['num']
498
+    #             i3 += 1
499
+
500
+    #         if i4 < len(distributor_code2_hasScan_logs) and distributor_logs[i]['distributor_name'] == distributor_code2_hasScan_logs[i4]['distributor_name']:
501
+    #             distributor_logs[i]['has_code2_scan_num'] = distributor_code2_hasScan_logs[i4]['num']
502
+    #             i4 += 1
503
+
504
+    #     distributor_logs.sort(key=lambda k: (-k['num']))
491 505
 
492 506
     return response(200, 'Get Distributor Statistic Success', u'获取经销商统计成功', data={
493 507
         'daily_logs': daily_logs,