es-num-old"> 30 30
 hiredis==0.2.0
@@ -40,7 +40,7 @@ pywe-pay==1.0.11
40 40
 pywe-pay-notify==1.0.4
41 41
 pywe-response==1.0.1
42 42
 pywe-sign==1.0.8
43
-pywe-xml==1.0.3
43
+pywe-xml==1.0.6
44 44
 qiniu==7.2.0
45 45
 redis==2.10.6
46 46
 redis-extensions==1.2.1

+ 37 - 2
statistic/admin.py

@@ -1,7 +1,42 @@
1 1
 # -*- coding: utf-8 -*-
2
-from __future__ import unicode_literals
3 2
 
4 3
 from django.contrib import admin
4
+from django_admin import ReadOnlyModelAdmin
5 5
 
6
+from statistic.models import (DistributorSaleStatisticInfo, ModelSaleStatisticInfo, ProvinceSaleStatisticInfo,
7
+                              RegisterStatisticInfo, SaleStatisticInfo)
6 8
 
7
-# Register your models here.
9
+
10
+class RegisterStatisticInfoAdmin(admin.ModelAdmin):
11
+    list_display = ('ymd', 'num', 'status', 'created_at', 'updated_at')
12
+    search_fields = ('ymd', )
13
+
14
+
15
+class SaleStatisticInfoAdmin(admin.ModelAdmin):
16
+    list_display = ('ymd', 'num', 'status', 'created_at', 'updated_at')
17
+    search_fields = ('ymd', )
18
+
19
+
20
+class ModelSaleStatisticInfoAdmin(admin.ModelAdmin):
21
+    list_display = ('model_id', 'model_name', 'ymd', 'num', 'status', 'created_at', 'updated_at')
22
+    list_filter = ('model_name', 'status')
23
+    search_fields = ('model_id', 'model_name', 'ymd')
24
+
25
+
26
+class DistributorSaleStatisticInfoAdmin(admin.ModelAdmin):
27
+    list_display = ('distributor_id', 'distributor_name', 'ymd', 'num', 'status', 'created_at', 'updated_at')
28
+    list_filter = ('distributor_name', 'status')
29
+    search_fields = ('distributor_id', 'distributor_name', 'ymd')
30
+
31
+
32
+class ProvinceSaleStatisticInfoAdmin(admin.ModelAdmin):
33
+    list_display = ('province_code', 'province_name', 'ymd', 'num', 'status', 'created_at', 'updated_at')
34
+    list_filter = ('province_code', 'province_name', 'status')
35
+    search_fields = ('province_code', 'province_name', 'ymd')
36
+
37
+
38
+admin.site.register(RegisterStatisticInfo, RegisterStatisticInfoAdmin)
39
+admin.site.register(SaleStatisticInfo, SaleStatisticInfoAdmin)
40
+admin.site.register(ModelSaleStatisticInfo, ModelSaleStatisticInfoAdmin)
41
+admin.site.register(DistributorSaleStatisticInfo, DistributorSaleStatisticInfoAdmin)
42
+admin.site.register(ProvinceSaleStatisticInfo, ProvinceSaleStatisticInfoAdmin)

+ 32 - 0
statistic/migrations/0002_provincesalestatisticinfo.py

@@ -0,0 +1,32 @@
1
+# -*- coding: utf-8 -*-
2
+# Generated by Django 1.11.11 on 2018-04-25 04:59
3
+from __future__ import unicode_literals
4
+
5
+from django.db import migrations, models
6
+
7
+
8
+class Migration(migrations.Migration):
9
+
10
+    dependencies = [
11
+        ('statistic', '0001_initial'),
12
+    ]
13
+
14
+    operations = [
15
+        migrations.CreateModel(
16
+            name='ProvinceSaleStatisticInfo',
17
+            fields=[
18
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
19
+                ('status', models.BooleanField(db_index=True, default=True, help_text='Status', verbose_name='status')),
20
+                ('created_at', models.DateTimeField(auto_now_add=True, help_text='Create Time', verbose_name='created_at')),
21
+                ('updated_at', models.DateTimeField(auto_now=True, help_text='Update Time', verbose_name='updated_at')),
22
+                ('province_code', models.CharField(db_index=True, help_text='\u7701\u4efd\u7f16\u7801', max_length=32, verbose_name='province_code')),
23
+                ('province_name', models.CharField(blank=True, help_text='\u7701\u4efd\u540d\u79f0', max_length=32, null=True, verbose_name='province_name')),
24
+                ('ymd', models.CharField(blank=True, db_index=True, help_text='\u5e74\u6708\u65e5', max_length=8, null=True, verbose_name='ymd')),
25
+                ('num', models.IntegerField(default=0, help_text='\u6570\u91cf', verbose_name='num')),
26
+            ],
27
+            options={
28
+                'verbose_name': '\u7701\u4efd\u9500\u91cf\u7edf\u8ba1',
29
+                'verbose_name_plural': '\u7701\u4efd\u9500\u91cf\u7edf\u8ba1',
30
+            },
31
+        ),
32
+    ]

+ 32 - 6
statistic/models.py

@@ -1,9 +1,12 @@
1 1
 # -*- coding: utf-8 -*-
2 2
 
3
+from django.conf import settings
3 4
 from django.db import models
4 5
 from django.utils.translation import ugettext_lazy as _
5 6
 from django_models_ext import BaseModelMixin
6 7
 
8
+from utils.rdm_utils import randnum
9
+
7 10
 
8 11
 class RegisterStatisticInfo(BaseModelMixin):
9 12
     ymd = models.CharField(_(u'ymd'), max_length=8, blank=True, null=True, help_text=u'年月日', db_index=True)  # 例:20171208, tc.local_string(format='%Y%m%d')
@@ -20,7 +23,7 @@ class RegisterStatisticInfo(BaseModelMixin):
20 23
     def data(self):
21 24
         return {
22 25
             'ymd': self.ymd,
23
-            'num': self.num,
26
+            'num': randnum() if settings.DEBUG_DATA_FLAG else self.num,
24 27
         }
25 28
 
26 29
 
@@ -39,14 +42,14 @@ class SaleStatisticInfo(BaseModelMixin):
39 42
     def data(self):
40 43
         return {
41 44
             'ymd': self.ymd,
42
-            'num': self.num,
45
+            'num': randnum() if settings.DEBUG_DATA_FLAG else self.num,
43 46
         }
44 47
 
45 48
 
46 49
 class ModelSaleStatisticInfo(BaseModelMixin):
47 50
     model_id = models.CharField(_(u'model_id'), max_length=32, help_text=u'型号唯一标识', db_index=True)
48 51
     model_name = models.CharField(_(u'model_name'), max_length=255, blank=True, null=True, help_text=u'型号名称')
49
-    ymd = models.CharField(_(u'ymd'), max_length=8, blank=True, null=True, help_text=u'年月日', db_index=True)  # 例:20171208, tc.local_string(format='%Y%m%d')
52
+    ymd = models.CharField(_(u'ymd'), max_length=8, blank=True, null=True, help_text=u'年月日', db_index=True)  # 例:20171208, tc.local_string(format='%Y%m%d'), 0 为全部
50 53
     num = models.IntegerField(_(u'num'), default=0, help_text=u'数量')
51 54
 
52 55
     class Meta:
@@ -62,14 +65,14 @@ class ModelSaleStatisticInfo(BaseModelMixin):
62 65
             'model_id': self.model_id,
63 66
             'model_name': self.model_name,
64 67
             'ymd': self.ymd,
65
-            'num': self.num,
68
+            'num': randnum() if settings.DEBUG_DATA_FLAG else self.num,
66 69
         }
67 70
 
68 71
 
69 72
 class DistributorSaleStatisticInfo(BaseModelMixin):
70 73
     distributor_id = models.CharField(_(u'distributor_id'), max_length=32, help_text=u'经销商唯一标识', db_index=True)
71 74
     distributor_name = models.CharField(_(u'distributor_name'), max_length=255, blank=True, null=True, help_text=u'经销商名称')
72
-    ymd = models.CharField(_(u'ymd'), max_length=8, blank=True, null=True, help_text=u'年月日', db_index=True)  # 例:20171208, tc.local_string(format='%Y%m%d')
75
+    ymd = models.CharField(_(u'ymd'), max_length=8, blank=True, null=True, help_text=u'年月日', db_index=True)  # 例:20171208, tc.local_string(format='%Y%m%d'), 0 为全部
73 76
     num = models.IntegerField(_(u'num'), default=0, help_text=u'数量')
74 77
 
75 78
     class Meta:
@@ -85,5 +88,28 @@ class DistributorSaleStatisticInfo(BaseModelMixin):
85 88
             'distributor_id': self.distributor_id,
86 89
             'distributor_name': self.distributor_name,
87 90
             'ymd': self.ymd,
88
-            'num': self.num,
91
+            'num': randnum() if settings.DEBUG_DATA_FLAG else self.num,
92
+        }
93
+
94
+
95
+class ProvinceSaleStatisticInfo(BaseModelMixin):
96
+    province_code = models.CharField(_(u'province_code'), max_length=32, help_text=u'省份编码', db_index=True)
97
+    province_name = models.CharField(_(u'province_name'), max_length=32, blank=True, null=True, help_text=u'省份名称')
98
+    ymd = models.CharField(_(u'ymd'), max_length=8, blank=True, null=True, help_text=u'年月日', db_index=True)  # 例:20171208, tc.local_string(format='%Y%m%d'), 0 为全部
99
+    num = models.IntegerField(_(u'num'), default=0, help_text=u'数量')
100
+
101
+    class Meta:
102
+        verbose_name = _(u'省份销量统计')
103
+        verbose_name_plural = _(u'省份销量统计')
104
+
105
+    def __unicode__(self):
106
+        return unicode(self.pk)
107
+
108
+    @property
109
+    def data(self):
110
+        return {
111
+            'province_code': self.province_code,
112
+            'province_name': self.province_name,
113
+            'ymd': self.ymd,
114
+            'num': randnum() if settings.DEBUG_DATA_FLAG else self.num,
89 115
         }

+ 18 - 11
statistic/views.py

@@ -1,11 +1,13 @@
1 1
 # -*- coding: utf-8 -*-
2 2
 
3
+from django.conf import settings
3 4
 from django_logit import logit
4 5
 from django_response import response
5 6
 from TimeConvert import TimeConvert as tc
6 7
 
7
-from statistic.models import (DistributorSaleStatisticInfo, ModelSaleStatisticInfo, RegisterStatisticInfo,
8
-                              SaleStatisticInfo)
8
+from statistic.models import (DistributorSaleStatisticInfo, ModelSaleStatisticInfo, ProvinceSaleStatisticInfo,
9
+                              RegisterStatisticInfo, SaleStatisticInfo)
10
+from utils.rdm_utils import randnum
9 11
 
10 12
 
11 13
 @logit
@@ -25,7 +27,7 @@ def tj_data(request):
25 27
     # 销量统计 & 今日销量
26 28
     try:
27 29
         sale_num = SaleStatisticInfo.objects.get(ymd=ymd).num
28
-    except RegisterStatisticInfo.DoesNotExist:
30
+    except SaleStatisticInfo.DoesNotExist:
29 31
         sale_num = 0
30 32
 
31 33
     # 商品销量趋势
@@ -33,18 +35,23 @@ def tj_data(request):
33 35
     sale_trends = [s.data for s in sale_trends]
34 36
 
35 37
     # 型号销量统计 & 热销商品榜
36
-    model_sales = ModelSaleStatisticInfo.objects.filter(status=True).order_by('-num')[:3]
38
+    model_sales = ModelSaleStatisticInfo.objects.filter(ymd='0', status=True).order_by('-num')[:3]
37 39
     model_sales = [m.data for m in model_sales]
38 40
 
39 41
     # 经销商销量统计 & 经销商榜
40
-    distributor_sales = DistributorSaleStatisticInfo.objects.filter(status=True).order_by('-num')[:3]
42
+    distributor_sales = DistributorSaleStatisticInfo.objects.filter(ymd='0', status=True).order_by('-num')[:3]
41 43
     distributor_sales = [d.data for d in distributor_sales]
42 44
 
45
+    # 各地区实时销量
46
+    province_sales = ProvinceSaleStatisticInfo.objects.filter(ymd='0', status=True).order_by('-num')[:3]
47
+    province_sales = [p.data for p in province_sales]
48
+
43 49
     return response(200, 'Get TJ Data Success', u'获取统计数据成功', {
44
-        'register_num': register_num,
45
-        'register_trends': register_trends,
46
-        'sale_num': sale_num,
47
-        'sale_trends': sale_trends,
48
-        'model_sales': model_sales,
49
-        'distributor_sales': distributor_sales,
50
+        'register_num': randnum() if settings.DEBUG_DATA_FLAG else register_num,  # 注册用户统计 & 今日注册用户
51
+        'register_trends': register_trends,  # 注册用户数趋势
52
+        'sale_num': randnum() if settings.DEBUG_DATA_FLAG else sale_num,  # 销量统计 & 今日销量
53
+        'sale_trends': sale_trends,  # 商品销量趋势
54
+        'model_sales': model_sales,  # 型号销量统计 & 热销商品榜
55
+        'distributor_sales': distributor_sales,  # 经销商销量统计 & 经销商榜
56
+        'province_sales': province_sales,  # 各地区实时销量
50 57
     })

+ 7 - 0
utils/rdm_utils.py

@@ -0,0 +1,7 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+import random
4
+
5
+
6
+def randnum(sflag=100, eflag=1000):
7
+    return random.randint(sflag, eflag)

Sign In - Gogs: Go Git Service

Sign In