Няма описание

qy_views.py 5.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. # -*- coding: utf-8 -*-
  2. import json
  3. import logging
  4. import requests
  5. from django.conf import settings
  6. from django.db import transaction
  7. from django_curtail_uuid import CurtailUUID
  8. from django_logit import logit
  9. from django_response import response
  10. from ipaddr import client_ip
  11. from pyqywe_miniapp import get_userid
  12. from pyqywe_token import access_token
  13. from pywe_storage import RedisStorage
  14. from TimeConvert import TimeConvert as tc
  15. from account.models import UserInfo
  16. from coupon.models import UserCouponInfo
  17. from mch.models import DistributorInfo, MaintenancemanInfo, SaleclerkInfo
  18. from member.models import RightInfo
  19. from statistic.models import RegisterStatisticInfo
  20. from utils.error.errno_utils import ProductBrandStatusCode, ProductDistributorStatusCode, UserStatusCode
  21. from utils.redis.connect import r
  22. from utils.redis.rprofile import set_profile_info
  23. WECHAT = settings.WECHAT
  24. logger = logging.getLogger('logit')
  25. @logit(res=True)
  26. @transaction.atomic
  27. def qy_login_api(request):
  28. brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
  29. appId = request.POST.get('appId', 'QYMINIAPP')
  30. if brand_id != settings.KODO_DEFAULT_BRAND_ID:
  31. return response(ProductBrandStatusCode.BRAND_NOT_MATCH)
  32. wxcfg = WECHAT.get(appId, {})
  33. appid = wxcfg.get('appID')
  34. secret = wxcfg.get('appsecret')
  35. code = request.POST.get('code', '')
  36. userid = get_userid(appid=appid, secret=secret, code=code, storage=RedisStorage(r))
  37. token = access_token(appid=appid, secret=secret, storage=RedisStorage(r))
  38. userinfo = requests.post(url='https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=' + token + '&userid=' + userid).text
  39. userinfo = json.loads(userinfo)
  40. mobile = userinfo.get('mobile', '')
  41. # Get or Create User
  42. user, created = UserInfo.objects.select_for_update().get_or_create(appid=appid, userid=userid)
  43. # Set User_id
  44. if created:
  45. user.user_id = CurtailUUID.uuid(UserInfo, 'user_id')
  46. # 注册用户统计
  47. rsi, _ = RegisterStatisticInfo.objects.select_for_update().get_or_create(
  48. brand_id=brand_id,
  49. ymd=int(tc.local_string(format='%Y%m%d')),
  50. )
  51. rsi.num += 1
  52. rsi.save()
  53. # Set User Key's Value
  54. user.user_from = UserInfo.QYMINIAPP_USER
  55. user.appid = appid
  56. user.user_status = UserInfo.ACTIVATED
  57. user.signup_ip = client_ip(request)
  58. user.signup_at = tc.utc_datetime()
  59. user.phone = mobile
  60. user.save()
  61. # Store Userinfo
  62. set_profile_info(user)
  63. # 维修员登录 (122 维修部部门ID)
  64. if 122 in userinfo.get('department', []):
  65. maintenance, created = MaintenancemanInfo.objects.get_or_create(brand_id=brand_id, maintenance_phone=mobile, status=True)
  66. user.is_maintenance = True
  67. if created:
  68. maintenance.maintenance_name = userinfo.get('name', '')
  69. maintenance.maintenance_sex = userinfo.get('gender', 0)
  70. maintenance.maintenance_phone = mobile
  71. maintenance.user_id = user.user_id
  72. maintenance.wx_userid = userid
  73. maintenance.save()
  74. else:
  75. user.is_maintenance = False
  76. # 销售员登录
  77. saleclerk, created = SaleclerkInfo.objects.get_or_create(brand_id=brand_id, clerk_phone=mobile, status=True)
  78. if created:
  79. try:
  80. distributor = DistributorInfo.objects.get(department_id__in=userinfo.get('department', []))
  81. except DistributorInfo.DoesNotExist:
  82. return response(ProductDistributorStatusCode.DISTRIBUTOR_NOT_FOUND)
  83. saleclerk.brand_id = brand_id
  84. saleclerk.distributor_id = distributor.distributor_id
  85. saleclerk.distributor_name = distributor.distributor_name
  86. saleclerk.clerk_name = userinfo.get('name', '')
  87. saleclerk.sex = userinfo.get('gender', 0)
  88. saleclerk.clerk_phone = userinfo.get('mobile', '')
  89. saleclerk.user_id = user.user_id
  90. saleclerk.wx_userid = userid
  91. saleclerk.user_status = SaleclerkInfo.ACTIVATED
  92. saleclerk.is_auth = True
  93. saleclerk.save()
  94. user.save()
  95. return response(200, 'Mini App Login Success', u'微信小程序登录成功', user.brand_qydata(brand_id=brand_id))
  96. @logit(res=True)
  97. @transaction.atomic
  98. def query_userinfo(request):
  99. brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
  100. maintenance_id = request.POST.get('maintenance_id', '')
  101. memebercardcode = request.POST.get('membercardcode', '')
  102. try:
  103. user = UserInfo.objects.get(memberusercardcode=memebercardcode, status=True)
  104. except UserInfo.DoesNotExist:
  105. return response(UserStatusCode.USER_NOT_FOUND)
  106. # 维修人工费
  107. right = RightInfo.objects.get(right_id='X457xEV8KVxHQiTvhA7Dtf')
  108. coupons = UserCouponInfo.objects.filter(user_id=user.user_id, has_used=False, status=True)
  109. coupons = [coupon.data for coupon in coupons]
  110. right_detail = right.maintaindata(level=user.level)
  111. return response(200, 'UserInfo Success', u'获取用户信息成功', data={
  112. 'coupons': coupons,
  113. 'right': right_detail
  114. })