Opt

Brightcells 6 gadi atpakaļ
vecāks
revīzija
285acfc352
5 mainītis faili ar 152 papildinājumiem un 24 dzēšanām
  1. 42 8
      api/mch_views.py
  2. 42 8
      page/sale_views.py
  3. 62 2
      pre/views.py
  4. 1 1
      requirements_dj.txt
  5. 5 5
      statistic/views.py

+ 42 - 8
api/mch_views.py

@@ -298,16 +298,32 @@ def consumer_info_api(request):
298 298
             test_user=False,
299 299
         ).count() == 1:
300 300
             ymd = int(tc.local_string(format='%Y%m%d'))
301
+            ym = int(tc.local_string(format='%Y%m'))
302
+            y = int(tc.local_string(format='%Y'))
301 303
 
302
-            # 销量统计
304
+            # 日销量统计
303 305
             ssi, _ = ConsumeSaleStatisticInfo.objects.select_for_update().get_or_create(
304 306
                 brand_id=brand.brand_id,
305 307
                 ymd=ymd,
306 308
             )
307 309
             ssi.num += 1
308 310
             ssi.save()
311
+            # 月销量统计
312
+            ssi, _ = ConsumeSaleStatisticInfo.objects.select_for_update().get_or_create(
313
+                brand_id=brand.brand_id,
314
+                ymd=ym,
315
+            )
316
+            ssi.num += 1
317
+            ssi.save()
318
+            # 年销量统计
319
+            ssi, _ = ConsumeSaleStatisticInfo.objects.select_for_update().get_or_create(
320
+                brand_id=brand.brand_id,
321
+                ymd=y,
322
+            )
323
+            ssi.num += 1
324
+            ssi.save()
309 325
 
310
-            # 型号销量统计
326
+            # 日型号销量统计
311 327
             mssi, _ = ConsumeModelSaleStatisticInfo.objects.select_for_update().get_or_create(
312 328
                 brand_id=brand.brand_id,
313 329
                 model_id=model.model_id,
@@ -316,15 +332,33 @@ def consumer_info_api(request):
316 332
             mssi.model_name = model.model_name
317 333
             mssi.num += 1
318 334
             mssi.save()
319
-
320
-            mssi2, _ = ConsumeModelSaleStatisticInfo.objects.select_for_update().get_or_create(
335
+            # 月型号销量统计
336
+            mssi, _ = ConsumeModelSaleStatisticInfo.objects.select_for_update().get_or_create(
337
+                brand_id=brand.brand_id,
338
+                model_id=model.model_id,
339
+                ymd=ym,
340
+            )
341
+            mssi.model_name = model.model_name
342
+            mssi.num += 1
343
+            mssi.save()
344
+            # 年型号销量统计
345
+            mssi, _ = ConsumeModelSaleStatisticInfo.objects.select_for_update().get_or_create(
321 346
                 brand_id=brand.brand_id,
322 347
                 model_id=model.model_id,
323
-                ymd=0,
348
+                ymd=y,
324 349
             )
325
-            mssi2.model_name = model.model_name
326
-            mssi2.num += 1
327
-            mssi2.save()
350
+            mssi.model_name = model.model_name
351
+            mssi.num += 1
352
+            mssi.save()
353
+
354
+            # mssi2, _ = ConsumeModelSaleStatisticInfo.objects.select_for_update().get_or_create(
355
+            #     brand_id=brand.brand_id,
356
+            #     model_id=model.model_id,
357
+            #     ymd=0,
358
+            # )
359
+            # mssi2.model_name = model.model_name
360
+            # mssi2.num += 1
361
+            # mssi2.save()
328 362
 
329 363
             # # 经销商销量统计
330 364
             # dssi, _ = ConsumeDistributorSaleStatisticInfo.objects.select_for_update().get_or_create(

+ 42 - 8
page/sale_views.py

@@ -139,14 +139,30 @@ def clerk_sale_submit_api(request):
139 139
     # TODO: Make statistic async
140 140
     if not sci:
141 141
         ymd = int(tc.local_string(format='%Y%m%d'))
142
+        ym = int(tc.local_string(format='%Y%m'))
143
+        y = int(tc.local_string(format='%Y'))
142 144
 
143
-        # 销量统计
145
+        # 日销量统计
144 146
         ssi, _ = SaleStatisticInfo.objects.select_for_update().get_or_create(
145 147
             brand_id=brand.brand_id,
146 148
             ymd=ymd,
147 149
         )
148 150
         ssi.num += 1
149 151
         ssi.save()
152
+        # 月销量统计
153
+        ssi, _ = SaleStatisticInfo.objects.select_for_update().get_or_create(
154
+            brand_id=brand.brand_id,
155
+            ymd=ym,
156
+        )
157
+        ssi.num += 1
158
+        ssi.save()
159
+        # 年销量统计
160
+        ssi, _ = SaleStatisticInfo.objects.select_for_update().get_or_create(
161
+            brand_id=brand.brand_id,
162
+            ymd=y,
163
+        )
164
+        ssi.num += 1
165
+        ssi.save()
150 166
 
151 167
         # 型号销量统计
152 168
         mssi, _ = ModelSaleStatisticInfo.objects.select_for_update().get_or_create(
@@ -186,7 +202,7 @@ def clerk_sale_submit_api(request):
186 202
         dssi2.num += 1
187 203
         dssi2.save()
188 204
 
189
-        # 省份销量统计
205
+        # 日省份销量统计
190 206
         pssi, _ = ProvinceSaleStatisticInfo.objects.select_for_update().get_or_create(
191 207
             brand_id=brand.brand_id,
192 208
             province_code=distributor.distributor_province_code,
@@ -195,15 +211,33 @@ def clerk_sale_submit_api(request):
195 211
         pssi.province_name = distributor.distributor_province_name
196 212
         pssi.num += 1
197 213
         pssi.save()
198
-
199
-        pssi2, _ = ProvinceSaleStatisticInfo.objects.select_for_update().get_or_create(
214
+        # 月省份销量统计
215
+        pssi, _ = ProvinceSaleStatisticInfo.objects.select_for_update().get_or_create(
200 216
             brand_id=brand.brand_id,
201 217
             province_code=distributor.distributor_province_code,
202
-            ymd=0,
218
+            ymd=ym,
219
+        )
220
+        pssi.province_name = distributor.distributor_province_name
221
+        pssi.num += 1
222
+        pssi.save()
223
+        # 年省份销量统计
224
+        pssi, _ = ProvinceSaleStatisticInfo.objects.select_for_update().get_or_create(
225
+            brand_id=brand.brand_id,
226
+            province_code=distributor.distributor_province_code,
227
+            ymd=y,
203 228
         )
204
-        pssi2.province_name = distributor.distributor_province_name
205
-        pssi2.num += 1
206
-        pssi2.save()
229
+        pssi.province_name = distributor.distributor_province_name
230
+        pssi.num += 1
231
+        pssi.save()
232
+
233
+        # pssi2, _ = ProvinceSaleStatisticInfo.objects.select_for_update().get_or_create(
234
+        #     brand_id=brand.brand_id,
235
+        #     province_code=distributor.distributor_province_code,
236
+        #     ymd=0,
237
+        # )
238
+        # pssi2.province_name = distributor.distributor_province_name
239
+        # pssi2.num += 1
240
+        # pssi2.save()
207 241
 
208 242
     return response(200, data={
209 243
         'integral': integral,

+ 62 - 2
pre/views.py

@@ -8,8 +8,8 @@ from pysnippets.strsnippets import strip
8 8
 
9 9
 from mch.models import BrandInfo, DistributorInfo, ModelInfo
10 10
 from statistic.models import (ConsumeDistributorSaleStatisticInfo, ConsumeModelSaleStatisticInfo,
11
-                              ConsumeProvinceSaleStatisticInfo, DistributorSaleStatisticInfo, ModelSaleStatisticInfo,
12
-                              ProvinceSaleStatisticInfo)
11
+                              ConsumeProvinceSaleStatisticInfo, ConsumeSaleStatisticInfo, DistributorSaleStatisticInfo,
12
+                              ModelSaleStatisticInfo, ProvinceSaleStatisticInfo, SaleStatisticInfo)
13 13
 
14 14
 
15 15
 PROVINCE_LIST = {
@@ -136,3 +136,63 @@ def pre_new_models(fpath='./pre/static/models_20180816.xls'):
136 136
         mdl.model_full_name = strip(rvals[4])
137 137
         mdl.warehouse = strip(rvals[5])
138 138
         mdl.save()
139
+
140
+
141
+def fill_ym():
142
+    for o in ConsumeSaleStatisticInfo.objects.all():
143
+        ymd = str(o.ymd)
144
+        if len(ymd) == 8:
145
+            # 月销量统计
146
+            ssi, _ = ConsumeSaleStatisticInfo.objects.select_for_update().get_or_create(
147
+                brand_id=o.brand_id,
148
+                ymd=ymd[6],
149
+            )
150
+            ssi.num += 1
151
+            ssi.save()
152
+            # 年销量统计
153
+            ssi, _ = ConsumeSaleStatisticInfo.objects.select_for_update().get_or_create(
154
+                brand_id=o.brand_id,
155
+                ymd=ymd[4],
156
+            )
157
+            ssi.num += 1
158
+            ssi.save()
159
+
160
+    for o in ConsumeModelSaleStatisticInfo.objects.all():
161
+        ymd = str(o.ymd)
162
+        if len(ymd) == 8:
163
+            # 月型号销量统计
164
+            mssi, _ = ConsumeModelSaleStatisticInfo.objects.select_for_update().get_or_create(
165
+                brand_id=o.brand_id,
166
+                model_id=o.model_id,
167
+                ymd=ymd[6],
168
+            )
169
+            mssi.model_name = o.model_name
170
+            mssi.num += 1
171
+            mssi.save()
172
+            # 年型号销量统计
173
+            mssi, _ = ConsumeModelSaleStatisticInfo.objects.select_for_update().get_or_create(
174
+                brand_id=o.brand_id,
175
+                model_id=o.model_id,
176
+                ymd=ymd[4],
177
+            )
178
+            mssi.model_name = o.model_name
179
+            mssi.num += 1
180
+            mssi.save()
181
+
182
+    for o in SaleStatisticInfo.objects.all():
183
+        ymd = str(o.ymd)
184
+        if len(ymd) == 8:
185
+            # 月销量统计
186
+            ssi, _ = SaleStatisticInfo.objects.select_for_update().get_or_create(
187
+                brand_id=o.brand_id,
188
+                ymd=ymd[6],
189
+            )
190
+            ssi.num += 1
191
+            ssi.save()
192
+            # 年销量统计
193
+            ssi, _ = SaleStatisticInfo.objects.select_for_update().get_or_create(
194
+                brand_id=o.brand_id,
195
+                ymd=ymd[4],
196
+            )
197
+            ssi.num += 1
198
+            ssi.save()

+ 1 - 1
requirements_dj.txt

@@ -1,4 +1,4 @@
1
-Django==1.11.15
1
+Django==1.11.16
2 2
 django-admin==1.3.2
3 3
 django-cors-headers==2.4.0
4 4
 django-curtail-uuid==1.0.4

+ 5 - 5
statistic/views.py

@@ -205,7 +205,7 @@ def __tj_generate(ymd=None):
205 205
 
206 206
 
207 207
 def ymdtj(brand_id, ymd, lastymd):
208
-    # 周期内扫描用户人数
208
+    # [消费者维度] 周期内扫描用户人数
209 209
     try:
210 210
         scan_user_count = ConsumeSaleStatisticInfo.objects.get(brand_id=brand_id, ymd=ymd).num
211 211
     except ConsumeSaleStatisticInfo.DoesNotExist:
@@ -219,7 +219,7 @@ def ymdtj(brand_id, ymd, lastymd):
219 219
     # 与上个统计周期数据的用户人数比例
220 220
     user_count_increase_pct = '%.2f' % (scan_user_count * 100.0 / last_scan_user_count) if last_scan_user_count != 0 else 0
221 221
 
222
-    # 周期内镜头销售支数
222
+    # [经销商维度] 周期内镜头销售支数
223 223
     try:
224 224
         sell_volume_count = SaleStatisticInfo.objects.get(brand_id=brand_id, ymd=ymd).num
225 225
     except SaleStatisticInfo.DoesNotExist:
@@ -233,15 +233,15 @@ def ymdtj(brand_id, ymd, lastymd):
233 233
     # 与上个统计周期数据的销售支数比例
234 234
     volume_count_increase_pct = '%.2f' % (sell_volume_count * 100.0 / last_sell_volume_count) if last_sell_volume_count != 0 else 0
235 235
 
236
-    # 统计周期内型号扫描排行数据,请按顺序返回
236
+    # [消费者维度] 统计周期内型号扫描排行数据,请按顺序返回
237 237
     models = ConsumeModelSaleStatisticInfo.objects.filter(brand_id=brand_id, ymd=ymd, status=True).order_by('-num')[:20]
238 238
     models = [m.data for m in models]
239 239
 
240
-    # 统计周期内销售员排行数据,请按顺序返回
240
+    # [经销商维度] 统计周期内销售员排行数据,请按顺序返回
241 241
     salesmen = SaleclerkSaleStatisticInfo.objects.filter(brand_id=brand_id, ymd=ymd, status=True).order_by('-num')[:20]
242 242
     salesmen = [s.data for s in salesmen]
243 243
 
244
-    # 统计周期内省份销量排行数据,请按顺序返回
244
+    # [经销商维度] 统计周期内省份销量排行数据,请按顺序返回
245 245
     provinces = ProvinceSaleStatisticInfo.objects.filter(brand_id=brand_id, ymd=ymd, status=True)
246 246
     provinces = [p.data for p in provinces]
247 247