@@ -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( |
@@ -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, |
@@ -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,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 |
@@ -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 |
|