AppAccountManagement.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. # -*- encoding: utf-8 -*-
  2. """
  3. @File : UserDeviceShareController.py
  4. @Time : 2023/2/3 13:25
  5. @Author : guanhailong
  6. @Email : guanhailong@asj6.wecom.work
  7. @Software: PyCharm
  8. """
  9. import datetime
  10. import time
  11. from django.db import transaction
  12. from Controller.CheckUserData import RandomStr
  13. from Model.models import Device_User, Device_Info, DeviceSuperPassword, SysMsgModel
  14. from Object.RedisObject import RedisObject
  15. from Object.ResponseObject import ResponseObject
  16. from Object.TokenObject import TokenObject
  17. from django.views import View
  18. from Service.CommonService import CommonService
  19. class AppAccoutView(View):
  20. def get(self, request, *args, **kwargs):
  21. request.encoding = 'utf-8'
  22. operation = kwargs.get('operation')
  23. request_dict = request.GET
  24. return self.validation(request_dict, request, operation)
  25. def post(self, request, *args, **kwargs):
  26. request.encoding = 'utf-8'
  27. operation = kwargs.get('operation')
  28. request_dict = request.GET
  29. return self.validation(request_dict, request, operation)
  30. def validation(self, request_dict, request, operation):
  31. token = TokenObject(request.META.get('HTTP_AUTHORIZATION'))
  32. lang = request_dict.get('lang', token.lang)
  33. response = ResponseObject(lang)
  34. userID = token.userID
  35. if token.code != 0:
  36. return response.json(token.code)
  37. if operation == 'getAuthorizationCode': # 获取用户请求/生成授权码
  38. return self.getAuthorizationCode(request_dict, response, userID)
  39. if operation == 'customerServiceManagement': # 编辑超级密码请求表
  40. return self.customerServiceManagement(request_dict, response)
  41. if operation == 'getDeviceSuperPassword': # 查询超级密码请求表
  42. return self.getDeviceSuperPassword(request_dict, response)
  43. if operation == 'verifyTheVerificationCode': # 检验验证码
  44. return self.verifyTheVerificationCode(request_dict, response, userID)
  45. else:
  46. return response.json(404)
  47. def getAuthorizationCode(self, request_dict, response, userID):
  48. """
  49. @param uid:设备id
  50. @param request_dict:请求参数
  51. @param response:响应对象
  52. @param describe:需求描述
  53. @param Purchase_channel:购买渠道描述
  54. @param orderID:订单id
  55. @param buyTime:购买时间
  56. @return:
  57. """
  58. uid = request_dict.get('uid', None)
  59. describe = request_dict.get('describe', None)
  60. if not all([uid, describe]):
  61. return response.json(444)
  62. purchase_channel = request_dict.get('purchase_channel', None)
  63. orderID = request_dict.get('orderID', None)
  64. buyTime = request_dict.get('buyTime', None)
  65. lang = request_dict.get('lang', 'en')
  66. try:
  67. now = int(time.time())
  68. addTime = now
  69. device_info_qs = Device_Info.objects.filter(UID=uid, userID_id=userID)
  70. if not device_info_qs.exists():
  71. return response.json(173)
  72. if buyTime:
  73. buyTime = datetime.datetime.strptime(buyTime, '%Y-%m-%d')
  74. buyTime = CommonService.str_to_timestamp(str_time=str(buyTime))
  75. DeviceSuperPassword.objects.create(uid=uid, orderID=orderID, describe=describe,
  76. purchase_channel=purchase_channel, addTime=addTime, userID_id=userID,
  77. buyTime=buyTime, status=0, lang=lang)
  78. # 验证码生成
  79. super_code = RandomStr(6, True)
  80. super_password_id = "super_password_%s" % userID
  81. redisObj = RedisObject()
  82. redisObj.set_data(key=super_password_id, val=super_code, expire=86400)
  83. return response.json(0)
  84. except Exception as e:
  85. print('生成验证码异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  86. return response.json(500, repr(e))
  87. # def storeTheVerificationCode(self, userID, uid, lang, authcode, status, hint, response):
  88. # now = int(time.time())
  89. # try:
  90. # with transaction.atomic():
  91. # if authcode and uid and userID:
  92. # device_super_password_qs = DeviceSuperPassword.objects.filter(uid=uid, userID=userID)
  93. # if not device_super_password_qs.exists():
  94. # return response.json(173)
  95. # authcode = CommonService.decode_data(authcode)
  96. # if status == 1:
  97. # if lang == 'en':
  98. # msg = "Your authorization code is " + authcode + ",valid within 24 hours"
  99. # else:
  100. # msg = "您的授权代码:" + authcode + ",24小时内有效"
  101. # code = CommonService.encode_data(authcode)
  102. # SysMsgModel.objects.create(userID_id=userID, msg=msg, addTime=now, updTime=now, uid=uid,
  103. # eventType=2, code=code)
  104. # return response.json(0)
  105. # if status == 0 and len(hint) > 1:
  106. # msg = hint
  107. # SysMsgModel.objects.create(userID_id=userID, msg=msg, addTime=now, updTime=now, uid=uid,
  108. # eventType=2)
  109. # return response.json(0)
  110. # return response.json(444)
  111. # except Exception as e:
  112. # print('验证码保存异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  113. # return response.json(500, repr(e))
  114. def customerServiceManagement(self, request_dict, response):
  115. """
  116. @param request_dict:请求参数
  117. @param response:响应对象
  118. @param hint:提示内容
  119. @return:
  120. """
  121. userID = request_dict.get('userID')
  122. uid = request_dict.get('uid', None)
  123. status = request_dict.get('status', None)
  124. hint = request_dict.get('hint', None)
  125. lang = request_dict.get('lang', 'en')
  126. if not all({uid, userID}):
  127. return response.json(444)
  128. now = int(time.time())
  129. try:
  130. with transaction.atomic():
  131. device_super_password_qs = DeviceSuperPassword.objects.filter(uid=uid, userID=userID)
  132. if not device_super_password_qs.exists():
  133. return response.json(173)
  134. status = int(status)
  135. authcode = ''
  136. if status == 1:
  137. device_super_password_qs.update(status=status)
  138. super_password_id = 'super_password_' + userID
  139. redisObj = RedisObject()
  140. # redis里面的验证码
  141. redis_super_code = redisObj.get_data(key=super_password_id)
  142. # 验证用户输入的验证码和redis中的验证码
  143. if redis_super_code is False:
  144. return response.json(120)
  145. authcode = CommonService.encode_data(redis_super_code)
  146. if status == 0:
  147. device_super_password_qs.update(status=status, hint=hint)
  148. super_password_id = 'super_password_' + userID
  149. redisObj = RedisObject()
  150. # redis里面的验证码
  151. redis_super_code = redisObj.get_data(key=super_password_id)
  152. # 验证用户输入的验证码和redis中的验证码
  153. if redis_super_code is False:
  154. return response.json(120)
  155. authcode = CommonService.encode_data(redis_super_code)
  156. device_super_password_qs = DeviceSuperPassword.objects.filter(uid=uid, userID=userID)
  157. if not device_super_password_qs.exists():
  158. return response.json(173)
  159. authcode = CommonService.decode_data(authcode)
  160. if status == 1:
  161. if lang == 'en':
  162. msg = "Your authorization code is " + authcode + ",valid within 24 hours"
  163. else:
  164. msg = "您的授权代码:" + authcode + ",24小时内有效"
  165. code = CommonService.encode_data(authcode)
  166. SysMsgModel.objects.create(userID_id=userID, msg=msg, addTime=now, updTime=now, uid=uid,
  167. eventType=2, code=code)
  168. return response.json(0)
  169. if status == 0 and len(hint) > 1:
  170. msg = hint
  171. SysMsgModel.objects.create(userID_id=userID, msg=msg, addTime=now, updTime=now, uid=uid,
  172. eventType=2)
  173. return response.json(0)
  174. return response.json(177)
  175. except Exception as e:
  176. print('修改状态异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  177. return response.json(500, repr(e))
  178. def getDeviceSuperPassword(self, request_dict, response):
  179. """
  180. @param request_dict:请求参数
  181. @param response:响应对象
  182. @return:
  183. """
  184. pageNo = request_dict.get('pageNo', None)
  185. pageSize = request_dict.get('pageSize', None)
  186. status = request_dict.get('status', None)
  187. userID = request_dict.get('userID', None)
  188. uid = request_dict.get('uid', None)
  189. if not all([pageNo, pageSize]):
  190. return response.json(444)
  191. page = int(pageNo)
  192. line = int(pageSize)
  193. try:
  194. device_super_password_qs = DeviceSuperPassword.objects.all()
  195. if status:
  196. device_super_password_qs = device_super_password_qs.filter(status=status)
  197. if userID:
  198. device_super_password_qs = device_super_password_qs.filter(userID=userID)
  199. if uid:
  200. device_super_password_qs = device_super_password_qs.filter(uid=uid)
  201. if not device_super_password_qs.exists():
  202. return response.json(0, [])
  203. count = device_super_password_qs.count()
  204. device_super_password_qs = device_super_password_qs.values('id',
  205. 'uid',
  206. 'userID',
  207. 'orderID',
  208. 'describe',
  209. 'purchase_channel',
  210. 'addTime',
  211. 'status',
  212. 'buyTime',
  213. 'hint',
  214. 'lang')
  215. device_super_password_qs = device_super_password_qs.order_by('-addTime')[
  216. (page - 1) * line:page * line]
  217. return response.json(0, {'list': list(device_super_password_qs), 'count': count})
  218. except Exception as e:
  219. print('查询异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  220. return response.json(500, repr(e))
  221. def verifyTheVerificationCode(self, request_dict, response, userID):
  222. """
  223. @czVccccccc request_dict:请求参数
  224. @param response:响应对象
  225. @param userID:用户ID
  226. @param authcode:验证码
  227. @return:
  228. """
  229. authcode = request_dict.get('authcode', None)
  230. if authcode:
  231. authcode = CommonService.decode_data(authcode)
  232. super_password_id = 'super_password_' + userID
  233. redisObj = RedisObject()
  234. # redis里面的验证码
  235. redis_image_code = redisObj.get_data(key=super_password_id)
  236. # 验证用户输入的验证码和redis中的验证码
  237. if redis_image_code is False or authcode.lower() != redis_image_code.lower():
  238. return response.json(121)
  239. else:
  240. return response.json(0)
  241. else:
  242. return response.json(444)