|
# -*- coding: utf-8 -*-
import logging
import requests
import json
from django.conf import settings
from django.db import transaction
from django_curtail_uuid import CurtailUUID
from django_logit import logit
from django_response import response
from ipaddr import client_ip
from pyqywe_miniapp import get_userid
from pyqywe_token import access_token
from pywe_storage import RedisStorage
from TimeConvert import TimeConvert as tc
from account.models import UserInfo
from mch.models import SaleclerkInfo, DistributorInfo, MaintenancemanInfo
from statistic.models import RegisterStatisticInfo
from utils.error.errno_utils import ProductBrandStatusCode, ProductDistributorStatusCode
from utils.redis.connect import r
from utils.redis.rprofile import set_profile_info
WECHAT = settings.WECHAT
logger = logging.getLogger('logit')
@logit(res=True)
@transaction.atomic
def qy_login_api(request):
brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
appId = request.POST.get('appId', 'QYMINIAPP')
if brand_id != settings.KODO_DEFAULT_BRAND_ID:
return response(ProductBrandStatusCode.BRAND_NOT_MATCH)
wxcfg = WECHAT.get(appId, {})
appid = wxcfg.get('appID')
secret = wxcfg.get('appsecret')
code = request.POST.get('code', '')
userid = get_userid(appid=appid, secret=secret, code=code, storage=RedisStorage(r))
token = access_token(appid=appid, secret=secret, storage=RedisStorage(r))
userinfo = requests.post(url='https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token='+token+'&userid='+userid).text
userinfo = json.loads(userinfo)
mobile = userinfo.get('mobile', '')
# Get or Create User
user, created = UserInfo.objects.select_for_update().get_or_create(appid=appid, userid=userid)
# Set User_id
if created:
user.user_id = CurtailUUID.uuid(UserInfo, 'user_id')
# 注册用户统计
rsi, _ = RegisterStatisticInfo.objects.select_for_update().get_or_create(
brand_id=brand_id,
ymd=int(tc.local_string(format='%Y%m%d')),
)
rsi.num += 1
rsi.save()
# Set User Key's Value
user.user_from = UserInfo.QYMINIAPP_USER
user.appid = appid
user.user_status = UserInfo.ACTIVATED
user.signup_ip = client_ip(request)
user.signup_at = tc.utc_datetime()
user.phone = mobile
user.save()
# Store Userinfo
set_profile_info(user)
# 维修员登录 (122 维修部部门ID)
if 122 in userinfo.get('department', []):
maintenance, created = MaintenancemanInfo.objects.get_or_create(brand_id=brand_id, maintenance_phone=mobile, status=True)
if created:
maintenance.maintenance_name = userinfo.get('name', '')
maintenance.maintenance_sex = userinfo.get('gender', 0)
maintenance.maintenance_phone = mobile
maintenance.user_id = user.user_id
maintenance.save()
else:
# 销售员登录
saleclerk, created = SaleclerkInfo.objects.get_or_create(brand_id=brand_id, clerk_phone=mobile, status=True)
if created:
try:
distributor = DistributorInfo.objects.get(department_id__in=userinfo.get('department', []))
except:
return response(ProductDistributorStatusCode.DISTRIBUTOR_NOT_FOUND)
saleclerk.brand_id = brand_id
saleclerk.distributor_id = distributor.distributor_id
saleclerk.distributor_name = distributor.distributor_name
saleclerk.clerk_name = userinfo.get('name', '')
saleclerk.sex = userinfo.get('gender', 0)
saleclerk.clerk_phone = userinfo.get('mobile', '')
saleclerk.user_id = user.user_id
saleclerk.wx_userid = userid
saleclerk.user_status = SaleclerkInfo.ACTIVATED
saleclerk.is_auth = True
saleclerk.save()
return response(200, 'Mini App Login Success', u'微信小程序登录成功', user.brand_qydata(brand_id=brand_id))
|