add statistic_distributor

FFIB 5 lat temu
rodzic
commit
0a6f355c17
2 zmienionych plików z 60 dodań i 5 usunięć
  1. 58 5
      api/admin_views.py
  2. 2 0
      api/urls.py

+ 58 - 5
api/admin_views.py

@@ -11,8 +11,8 @@ from TimeConvert import TimeConvert as tc
11 11
 from django.utils import timezone
12 12
 from django.db.models import Sum
13 13
 
14
-from mch.models import AdministratorInfo
15
-from statistic.models import ConsumeModelSaleStatisticInfo, ConsumeSaleStatisticInfo, ConsumeUserStatisticInfo
14
+from mch.models import AdministratorInfo, ConsumeInfoSubmitLogInfo, SaleclerkInfo
15
+from statistic.models import ConsumeModelSaleStatisticInfo, ConsumeSaleStatisticInfo, ConsumeUserStatisticInfo, ModelSaleStatisticInfo
16 16
 from account.models import UserInfo
17 17
 from integral.models import SaleclerkSubmitLogInfo
18 18
 from utils.error.errno_utils import (AdministratorStatusCode, ProductBrandStatusCode, ProductCouponStatusCode,
@@ -20,6 +20,7 @@ from utils.error.errno_utils import (AdministratorStatusCode, ProductBrandStatus
20 20
 
21 21
 from collections import defaultdict
22 22
 import json
23
+from itertools import groupby
23 24
 
24 25
 
25 26
 WECHAT = settings.WECHAT
@@ -215,7 +216,7 @@ def statistic_userprofile(request):
215 216
     admin_id = request.POST.get('admin_id', '')
216 217
     start_time = request.POST.get('start_time', '')
217 218
     end_time = request.POST.get('end_time', '')
218
-    model_uni_name = request.POST.get('model_uni_name', '')
219
+    model_name = request.POST.get('model_name', '')
219 220
 
220 221
     if brand_id != settings.KODO_DEFAULT_BRAND_ID:
221 222
         return response(ProductBrandStatusCode.BRAND_NOT_MATCH)
@@ -225,8 +226,8 @@ def statistic_userprofile(request):
225 226
     except AdministratorInfo.DoesNotExist:
226 227
         return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
227 228
 
228
-    if model_uni_name:
229
-        logs = ConsumeModelSaleStatisticInfo.objects.filter(model_name=model_uni_name, ymd__gte=start_time, ymd__lte=end_time)
229
+    if model_name:
230
+        logs = ConsumeModelSaleStatisticInfo.objects.filter(model_name=model_name, ymd__gte=start_time, ymd__lte=end_time)
230 231
     else:
231 232
         logs = ConsumeModelSaleStatisticInfo.objects.filter(ymd__gte=start_time, ymd__lte=end_time)
232 233
     
@@ -297,4 +298,56 @@ def statistic_model(request):
297 298
     logs = [{'model_name': log[0], 'num': log[1]} for log in logs]
298 299
     return response(200, 'Get Model Statistic Success', u'获取型号统计成功', data={
299 300
         'logs': logs
301
+    })
302
+
303
+def statistic_distributor(request):
304
+    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
305
+    admin_id = request.POST.get('admin_id', '')
306
+    start_time = request.POST.get('start_time', '')
307
+    end_time = request.POST.get('end_time', '')
308
+    model_name = request.POST.get('model_name', '')
309
+    distributor_name = request.POST.get('distributor_name', '')
310
+
311
+    if brand_id != settings.KODO_DEFAULT_BRAND_ID:
312
+        return response(ProductBrandStatusCode.BRAND_NOT_MATCH)
313
+
314
+    try:
315
+        administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True)
316
+    except AdministratorInfo.DoesNotExist:
317
+        return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND)
318
+
319
+    logs = ModelSaleStatisticInfo.objects.filter(ymd__gte=start_time, ymd__lte=end_time)
320
+
321
+    if model_name:
322
+        logs = logs.filter(model_name=model_name)
323
+    
324
+    distributor_logs = []
325
+    distributor_names = []
326
+
327
+    logs = logs.values('model_name', 'ymd', 'num', 'saleclerks')
328
+    for log in logs:
329
+        for saleclerk in json.loads(log['saleclerks']):
330
+            saleclerk_info = SaleclerkInfo.objects.get(clerk_id=saleclerk)
331
+            if distributor_name and saleclerk_info.distributor_name != distributor_name:
332
+                log['num'] -= 1
333
+            else:
334
+                if saleclerk_info.distributor_name not in distributor_names:
335
+                    distributor_logs.append({'distributor_name': saleclerk_info.distributor_name, 'num': 1})
336
+                    distributor_names.append(saleclerk_info.distributor_name)
337
+                else:
338
+                    i = distributor_names.index(saleclerk_info.distributor_name)
339
+                    distributor_logs[i]['num'] += 1
340
+    
341
+    daily_logs = []
342
+    for k, v in groupby(logs, lambda log:log['ymd']):
343
+        daily_logs.append(reduce(lambda dict1, dict2: {'ymd': k, 'num': dict1['num'] + dict2['num']}, v))
344
+    
345
+    model_logs = []
346
+    for k, v in groupby(sorted(logs, key=lambda log:log['model_name']), lambda log:log['model_name']):
347
+        model_logs.append(reduce(lambda dict1, dict2: {'model_name': k, 'num': dict1['num'] + dict2['num']}, v))
348
+
349
+    return response(200, 'Get Distributor Statistic Success', u'获取经销商统计成功', data={
350
+        'daily_logs': daily_logs,
351
+        'model_logs': model_logs,
352
+        'distributor_logs': distributor_logs
300 353
     })

+ 2 - 0
api/urls.py

@@ -298,6 +298,8 @@ urlpatterns += [
298 298
     url(r'^admin/statistic/user_profile$', admin_views.statistic_userprofile, name='statistic_userprofile'),
299 299
     url(r'^admin/statistic/consumer/daily$', admin_views.statistic_daily, name='statistic_daily'),
300 300
     url(r'^admin/statistic/consumer/model$', admin_views.statistic_model, name='statistic_model'),
301
+
302
+    url(r'^admin/statistic/distributor$', admin_views.statistic_distributor, name='statistic_distributor'),
301 303
 ]
302 304
 
303 305
 urlpatterns += [