@@ -0,0 +1,83 @@ |
||
1 |
+# -*- coding: utf-8 -*- |
|
2 |
+ |
|
3 |
+import logging |
|
4 |
+ |
|
5 |
+from django.db.models import Sum |
|
6 |
+from django_six import CompatibilityBaseCommand, close_old_connections |
|
7 |
+from TimeConvert import TimeConvert as tc |
|
8 |
+ |
|
9 |
+from integral.models import SaleclerkSubmitLogInfo |
|
10 |
+from mch.models import BrandInfo, DistributorInfo, ModelInfo |
|
11 |
+from sales.models import SalesResponsibilityInfo, SalesResponsibilityInfoModelsSaleStatisticInfo, SuperSalesResponsibilityInfoModelsSaleStatisticInfo |
|
12 |
+ |
|
13 |
+ |
|
14 |
+logger = logging.getLogger('console') |
|
15 |
+ |
|
16 |
+ |
|
17 |
+class Command(CompatibilityBaseCommand): |
|
18 |
+ def handle(self, *args, **options): |
|
19 |
+ |
|
20 |
+ logger.info('Sales is dealing') |
|
21 |
+ |
|
22 |
+ close_old_connections() |
|
23 |
+ |
|
24 |
+ # year = tc.local_string(format='%Y') |
|
25 |
+ month = tc.local_string(format='%Y%m') |
|
26 |
+ day = tc.local_string(format='%Y%m%d') |
|
27 |
+ |
|
28 |
+ # lastyear = tc.local_string(tc.several_time_ago(years=1), format='%Y') |
|
29 |
+ lastmonth = tc.local_string(tc.several_time_ago(months=1), format='%Y%m') |
|
30 |
+ lastday = tc.local_string(tc.several_time_ago(days=1), format='%Y%m%d') |
|
31 |
+ |
|
32 |
+ brands = BrandInfo.objects.filter(status=True) |
|
33 |
+ |
|
34 |
+ for b in brands: |
|
35 |
+ distributors = DistributorInfo.objects.filter(brand_id=b.brand_id, status=True) |
|
36 |
+ models = ModelInfo.objects.filter(brand_id=b.brand_id, status=True) |
|
37 |
+ for d in distributors: |
|
38 |
+ for m in models: |
|
39 |
+ logs = SaleclerkSubmitLogInfo.objects.filter(distributor_pk=d.pk, model_pk=m.pk, dupload=False, test_sn=False, status=True) |
|
40 |
+ # today_num = logs.filter(ymd=day).count() |
|
41 |
+ yesterday_num = logs.filter(ymd=lastday).count() |
|
42 |
+ current_month = logs.filter(ym=month).count() |
|
43 |
+ last_month = logs.filter(ym=lastmonth).count() |
|
44 |
+ if m.is_important or (yesterday_num or current_month or last_month): |
|
45 |
+ SalesResponsibilityInfoModelsSaleStatisticInfo.objects.create( |
|
46 |
+ brand_id=b.brand_id, |
|
47 |
+ sr_id=d.sr_id, |
|
48 |
+ distributor_id=d.distributor_id, |
|
49 |
+ distributor_name=d.distributor_name, |
|
50 |
+ model_id=m.model_id, |
|
51 |
+ model_name=m.model_name, |
|
52 |
+ is_important=m.is_important, |
|
53 |
+ ymd=day, |
|
54 |
+ yesterday_num=yesterday_num, |
|
55 |
+ current_month=current_month, |
|
56 |
+ last_month=last_month, |
|
57 |
+ ) |
|
58 |
+ |
|
59 |
+ srs = SalesResponsibilityInfo.objects.filter(brand_id=b.brand_id, status=True) |
|
60 |
+ for s in srs: |
|
61 |
+ sums = SalesResponsibilityInfoModelsSaleStatisticInfo.objects.filter( |
|
62 |
+ sr_id=s.sr_id, |
|
63 |
+ ymd=day, |
|
64 |
+ status=True |
|
65 |
+ ).aggregate( |
|
66 |
+ Sum('yesterday_num'), |
|
67 |
+ Sum('current_month'), |
|
68 |
+ Sum('last_month'), |
|
69 |
+ ) |
|
70 |
+ yesterday_num = sums.get('yesterday_num__sum', 0) or 0 |
|
71 |
+ current_month = sums.get('current_month__sum', 0) or 0 |
|
72 |
+ last_month = sums.get('last_month__sum', 0) or 0 |
|
73 |
+ SuperSalesResponsibilityInfoModelsSaleStatisticInfo.objects.create( |
|
74 |
+ brand_id=b.brand_id, |
|
75 |
+ sr_id=s.sr_id, |
|
76 |
+ sr_name=s.name, |
|
77 |
+ ymd=day, |
|
78 |
+ yesterday_num=yesterday_num, |
|
79 |
+ current_month=current_month, |
|
80 |
+ last_month=last_month, |
|
81 |
+ ) |
|
82 |
+ |
|
83 |
+ close_old_connections() |
@@ -99,6 +99,9 @@ class SaleclerkSubmitLogInfo(BaseModelMixin): |
||
99 | 99 |
test_user = models.BooleanField(_(u'test_user'), default=False, help_text=_(u'是否为测试用户'), db_index=True) |
100 | 100 |
test_sn = models.BooleanField(_(u'test_sn'), default=False, help_text=_(u'是否为测试序列号'), db_index=True) |
101 | 101 |
|
102 |
+ ym = models.IntegerField(_(u'ym'), default=0, help_text=u'年月', db_index=True) # 例:201712, tc.local_string(format='%Y%m') |
|
103 |
+ ymd = models.IntegerField(_(u'ymd'), default=0, help_text=u'年月日', db_index=True) # 例:20171208, tc.local_string(format='%Y%m%d') |
|
104 |
+ |
|
102 | 105 |
class Meta: |
103 | 106 |
verbose_name = _(u'saleclerksubmitloginfo') |
104 | 107 |
verbose_name_plural = _(u'saleclerksubmitloginfo') |
@@ -2,8 +2,7 @@ CodeConvert==2.0.5 |
||
2 | 2 |
MySQL-python==1.2.5 |
3 | 3 |
Pillow==5.0.0 |
4 | 4 |
StatusCode==1.0.0 |
5 |
-TimeConvert==1.4.4 |
|
6 |
-cryptography==1.5.2 |
|
5 |
+TimeConvert==1.5.0 |
|
7 | 6 |
furl==2.0.0 |
8 | 7 |
isoweek==1.3.3 |
9 | 8 |
jsonfield==2.0.2 |
@@ -80,6 +80,9 @@ class SalesResponsibilityInfo(BaseModelMixin): |
||
80 | 80 |
class SalesResponsibilityInfoModelsSaleStatisticInfo(BaseModelMixin): |
81 | 81 |
brand_id = models.CharField(_(u'brand_id'), max_length=32, blank=True, null=True, help_text=u'品牌唯一标识', db_index=True) |
82 | 82 |
|
83 |
+ # 销售担当,供 SuperSalesResponsibilityInfoModelsSaleStatisticInfo 统计使用 |
|
84 |
+ sr_id = models.CharField(_(u'sr_id'), max_length=32, help_text=u'销售担当唯一标识', db_index=True) |
|
85 |
+ |
|
83 | 86 |
# 经销商 |
84 | 87 |
distributor_id = models.CharField(_(u'distributor_id'), max_length=32, help_text=u'经销商唯一标识', db_index=True) |
85 | 88 |
distributor_name = models.CharField(_(u'distributor_name'), max_length=255, blank=True, null=True, help_text=u'经销商名称') |