|
# -*- 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 member.models import RightInfo
from coupon.models import UserCouponInfo
from utils.error.errno_utils import ProductBrandStatusCode, ProductDistributorStatusCode, UserStatusCode
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))
@logit(res=True)
@transaction.atomic
def query_userinfo(request):
brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
maintenance_id = request.POST.get('maintenance_id', '')
memebercardcode = request.POST.get('membercardcode', '')
try:
user = UserInfo.objects.get(memberusercardcode=memebercardcode, status=True)
except:
return response(UserStatusCode.USER_NOT_FOUND)
# 维修人工费
right = RightInfo.objects.get(right_id='X457xEV8KVxHQiTvhA7Dtf')
coupons = UserCouponInfo.objects.filter(user_id=user.user_id)
coupons = [coupon.data for coupon in coupons]
right_detail = ''
if user.level == 1:
right_detail = right.level1 if right.level1 else ''
elif user.level == 2:
right_detail = right.level2 if right.level2 else ''
elif user.level == 3:
right_detail = right.level3 if right.level3 else ''
elif user.level == 4:
right_detail = right.level4 if right.level4 else ''
elif user.level == 5:
right_detail = right.level5 if right.level5 else ''
return response(200, 'UserInfo Success', u'获取用户信息成功', data={
'coupons': coupons,
'right': right_detail
})
|