|
# -*- coding: utf-8 -*-
import logging
import requests
from django.conf import settings
from django.db import transaction
from django_models_ext import ProvinceModelMixin, ProvinceShortModelMixin
from django_six import CompatibilityBaseCommand, close_old_connections
from statistic.models import ConsumeProvinceSaleStatisticInfo
from utils.redis.connect import r
from utils.redis.rkeys import MINI_PROGRAM_GIS_LIST
logger = logging.getLogger('console')
class Command(CompatibilityBaseCommand):
def handle(self, *args, **options):
logger.info('Gis is dealing')
while True:
# r.rpushjson('TEMPLET_CMD_KEY', {
# 'brand_id': 'brand_id',
# 'lat': .0,
# 'lon': .0,
# 'ymd': '20121212',
# })
k, v = r.blpopjson(MINI_PROGRAM_GIS_LIST, 60)
if v:
close_old_connections()
logger.info(v)
with transaction.atomic():
try:
gisinfo = requests.get(settings.GIS_2_ADMINISTRATIVE_DIVISION.format(v.get('lat', 0), v.get('lon', 0))).json()
except Exception as e:
logger.info(e.message)
if gisinfo.get('error') != 0:
continue
zh1 = gisinfo.get('data', {}).get('zh1', '')
if not zh1:
continue
province_code = ProvinceModelMixin.PROVINCE_NAME_CODE_DICT.get(zh1)
if not province_code:
continue
brand_id = v.get('brand_id', '')
ymd = v.get('ymd', '')
# [消费者维度]省份销量统计
# 日
cpssi, _ = ConsumeProvinceSaleStatisticInfo.objects.select_for_update().get_or_create(
brand_id=brand_id,
province_code=province_code,
ymd=ymd,
)
if not cpssi.province_name:
cpssi.province_name = ProvinceShortModelMixin.PROVINCE_CODE_NAME_DICT.get(province_code)
cpssi.num += 1
cpssi.save()
# 月
cpssi, _ = ConsumeProvinceSaleStatisticInfo.objects.select_for_update().get_or_create(
brand_id=brand_id,
province_code=province_code,
ymd=ymd[:6],
)
if not cpssi.province_name:
cpssi.province_name = ProvinceShortModelMixin.PROVINCE_CODE_NAME_DICT.get(province_code)
cpssi.num += 1
cpssi.save()
# 年
cpssi, _ = ConsumeProvinceSaleStatisticInfo.objects.select_for_update().get_or_create(
brand_id=brand_id,
province_code=province_code,
ymd=ymd[:4],
)
if not cpssi.province_name:
cpssi.province_name = ProvinceShortModelMixin.PROVINCE_CODE_NAME_DICT.get(province_code)
cpssi.num += 1
cpssi.save()
close_old_connections()
|