|
# -*- 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 account.models import UserInfo
from mch.models import ConsumeInfoSubmitLogInfo
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,
# 'phone': '18888888888',
# 'ymd': '20121212',
# })
k, v = r.blpopjson(MINI_PROGRAM_GIS_LIST, 60)
if not v:
continue
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)), verify=False).json()
except Exception as e:
logger.info(e.message)
zh1 = gisinfo.get('result', {}).get('address_component', {}).get('province', '')
province_code = ProvinceModelMixin.PROVINCE_NAME_CODE_DICT.get(zh1) if zh1 else ''
if not province_code:
continue
brand_id = v.get('brand_id', '')
user_id = v.get('user_id', '')
ymd = str(v.get('ymd', ''))
# 更新用户表
user = UserInfo.objects.select_for_update().get(user_id=user_id, status=True)
user.province_name = ProvinceShortModelMixin.PROVINCE_CODE_NAME_DICT.get(province_code)
user.save()
if v.get('pk'):
log = ConsumeInfoSubmitLogInfo.objects.get(pk=v.get('pk', -1), status=True)
log.province = ProvinceShortModelMixin.PROVINCE_CODE_NAME_DICT.get(province_code)
log.save()
# [消费者维度]省份销量统计
# 日
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.users = list(set(cpssi.users + [user_id]))
cpssi.num = len(cpssi.users)
cpssi.num2 += 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.users = list(set(cpssi.users + [user_id]))
cpssi.num = len(cpssi.users)
cpssi.num2 += 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.users = list(set(cpssi.users + [user_id]))
cpssi.num = len(cpssi.users)
cpssi.num2 += 1
cpssi.save()
close_old_connections()
|