statistic_distributor add code_version

FFIB преди 5 години
родител
ревизия
4da0bcfd9d
променени са 1 файла, в които са добавени 35 реда и са изтрити 31 реда
  1. 35 31
      api/admin_views.py

+ 35 - 31
api/admin_views.py

@@ -8,7 +8,7 @@ from django_logit import logit
8 8
 from django_response import response
9 9
 from paginator import pagination
10 10
 from TimeConvert import TimeConvert as tc
11
-from django.db.models import Sum
11
+from django.db.models import Sum, Count
12 12
 from datetime import datetime
13 13
 
14 14
 from mch.models import AdministratorInfo, ConsumeInfoSubmitLogInfo, SaleclerkInfo, ModelInfo
@@ -21,7 +21,8 @@ from utils.error.errno_utils import (AdministratorStatusCode, ProductBrandStatus
21 21
 
22 22
 from collections import defaultdict
23 23
 import json
24
-from itertools import groupby
24
+from itertools import groupby,chain
25
+
25 26
 
26 27
 
27 28
 WECHAT = settings.WECHAT
@@ -315,6 +316,7 @@ def statistic_distributor(request):
315 316
     end_time = request.POST.get('end_time', '')
316 317
     model_name = request.POST.get('model_name', '')
317 318
     distributor_name = request.POST.get('distributor_name', '')
319
+    code_version = request.POST.get('code_version', '')
318 320
 
319 321
     if brand_id != settings.KODO_DEFAULT_BRAND_ID:
320 322
         return response(ProductBrandStatusCode.BRAND_NOT_MATCH)
@@ -324,35 +326,37 @@ def statistic_distributor(request):
324 326
     except AdministratorInfo.DoesNotExist:
325 327
         return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
326 328
 
327
-    logs = ModelSaleStatisticInfo.objects.filter(ymd__gte=start_time, ymd__lte=end_time)
328
-
329
-    if model_name:
330
-        logs = logs.filter(model_name=model_name)
331
-
332
-    distributor_logs = []
333
-    distributor_names = []
334
-
335
-    logs = logs.values('model_name', 'ymd', 'num', 'saleclerks')
336
-    for log in logs:
337
-        for saleclerk in json.loads(log['saleclerks']):
338
-            saleclerk_info = SaleclerkInfo.objects.get(clerk_id=saleclerk)
339
-            if distributor_name and saleclerk_info.distributor_name != distributor_name:
340
-                log['num'] -= 1
341
-            else:
342
-                if saleclerk_info.distributor_name not in distributor_names:
343
-                    distributor_logs.append({'distributor_name': saleclerk_info.distributor_name, 'num': 1})
344
-                    distributor_names.append(saleclerk_info.distributor_name)
345
-                else:
346
-                    i = distributor_names.index(saleclerk_info.distributor_name)
347
-                    distributor_logs[i]['num'] += 1
348
-
349
-    daily_logs = []
350
-    for k, v in groupby(logs, lambda log: log['ymd']):
351
-        daily_logs.append(reduce(lambda dict1, dict2: {'ymd': k, 'num': dict1['num'] + dict2['num']}, v))
352
-
353
-    model_logs = []
354
-    for k, v in groupby(sorted(logs, key=lambda log: log['model_name']), lambda log: log['model_name']):
355
-        model_logs.append(reduce(lambda dict1, dict2: {'model_name': k, 'num': dict1['num'] + dict2['num']}, v))
329
+    logs = SaleclerkSubmitLogInfo.objects.filter(ymd__gte=start_time, ymd__lte=end_time, model_name__contains=model_name, code_version__contains=code_version, test_user=False, dupload=False, test_sn=False)
330
+
331
+    daily_logs = list(logs.values('ymd').annotate(num=Count('pk')).order_by('ymd'))
332
+    daily_hasScan_logs = list(logs.filter(has_scan=True).values('ymd').annotate(has_scan_num=Count('pk')).order_by('ymd'))
333
+
334
+    j = 0
335
+    for i in range(0, len(daily_logs)):
336
+        daily_logs[i]['has_scan_num'] = 0
337
+        if j < len(daily_hasScan_logs) and daily_logs[i]['ymd'] == daily_hasScan_logs[j]['ymd']:
338
+            daily_logs[i]['has_scan_num'] = daily_hasScan_logs[j]['has_scan_num']
339
+            j += 1
340
+
341
+    model_logs = list(logs.values('model_name').annotate(num=Count('pk')).order_by('model_name'))
342
+    model_hasScan_logs = list(logs.filter(has_scan=True).values('model_name').annotate(has_scan_num=Count('pk')).order_by('model_name'))
343
+
344
+    j = 0
345
+    for i in range(0, len(model_logs)):
346
+        model_logs[i]['has_scan_num'] = 0
347
+        if j < len(model_hasScan_logs) and model_logs[i]['model_name'] == model_hasScan_logs[j]['model_name']:
348
+            model_logs[i]['has_scan_num'] = model_hasScan_logs[j]['has_scan_num']
349
+            j += 1
350
+
351
+    distributor_logs = list(logs.values('distributor_name').annotate(num=Count('pk')).order_by('distributor_name'))
352
+    distributor_hasScan_logs = list(logs.filter(has_scan=True).values('distributor_name').annotate(has_scan_num=Count('pk')).order_by('distributor_name'))
353
+
354
+    j = 0
355
+    for i in range(0, len(distributor_logs)):
356
+        distributor_logs[i]['has_scan_num'] = 0
357
+        if j < len(distributor_hasScan_logs) and distributor_logs[i]['distributor_name'] == distributor_hasScan_logs[j]['distributor_name']:
358
+            distributor_logs[i]['has_scan_num'] = distributor_hasScan_logs[j]['has_scan_num']
359
+            j += 1
356 360
 
357 361
     return response(200, 'Get Distributor Statistic Success', u'获取经销商统计成功', data={
358 362
         'daily_logs': daily_logs,