123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- import json
- import logging
- import requests
- 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 coupon.models import UserCouponInfo
- from mch.models import DistributorInfo, MaintenancemanInfo, SaleclerkInfo
- from member.models import RightInfo
- from statistic.models import RegisterStatisticInfo
- 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') or 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', '')
-
- user, created = UserInfo.objects.select_for_update().get_or_create(appid=appid, userid=userid)
-
- 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()
-
- 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()
-
- set_profile_info(user)
-
- 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 = 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 DistributorInfo.DoesNotExist:
- 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') or 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 UserInfo.DoesNotExist:
- 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
- })
|