|
# -*- 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)
user.is_maintenance = 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.wx_userid = user.wx_userid
maintenance.save()
else:
user.is_maintenance = False
# 销售员登录
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()
user.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, has_used=False, status=True)
coupons = [coupon.data for coupon in coupons]
right_detail = right.maintaindata(level=user.level)
return response(200, 'UserInfo Success', u'获取用户信息成功', data={
'coupons': coupons,
'right': right_detail
})
|