# -*- 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))