EquipmentStatus.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. @Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
  5. @AUTHOR: ASJRD018
  6. @NAME: Ansjer
  7. @software: PyCharm
  8. @DATE: 2018/6/7 9:27
  9. @Version: python3.6
  10. @MODIFY DECORD:ansjer dev
  11. @file: EquipmentStat.py
  12. @Contact: chanjunkai@163.com
  13. """
  14. import base64
  15. import json
  16. import threading
  17. import urllib.parse
  18. import time
  19. import oss2
  20. from django.http import JsonResponse
  21. from django.views.decorators.csrf import csrf_exempt
  22. from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET
  23. from Model.models import Device_Info
  24. from Object.ETkObject import ETkObject
  25. from Object.RedisObject import RedisObject
  26. from Object.ResponseObject import ResponseObject
  27. from Service.ModelService import ModelService
  28. from Service.CommonService import CommonService
  29. '''
  30. http://192.168.136.45:8077/device/online?UID=C2887N9EBS87ZAT1111A
  31. http://192.168.136.45:8077/device/offline?UID=C2887N9EBS87ZAT1111A
  32. http://192.168.136.45:8077/device/updateIP?UID=C2887N9EBS87ZAT1111A?ip=190.9.194.216
  33. '''
  34. @csrf_exempt
  35. def EquipmentOnline(request):
  36. response = ResponseObject()
  37. if request.method == 'GET':
  38. request.encoding = 'utf-8'
  39. UID = request.GET.get('UID', None)
  40. if request.method == 'POST':
  41. request.encoding = 'utf-8'
  42. UID = request.POST.get('UID', None)
  43. qs = Device_Info.objects.filter(UID=UID)
  44. if not qs.exists():
  45. return response.json(173)
  46. @csrf_exempt
  47. def EquipmentOffline(request):
  48. response = ResponseObject()
  49. if request.method == 'GET':
  50. request.encoding = 'utf-8'
  51. UID = request.GET.get('UID', None)
  52. if request.method == 'POST':
  53. request.encoding = 'utf-8'
  54. UID = request.POST.get('UID', None)
  55. qs = Device_Info.objects.filter(UID=UID)
  56. if not qs.exists():
  57. return response.json(173)
  58. try:
  59. qs.update(Online=False)
  60. except Exception as e:
  61. print(repr(e))
  62. return response.json(0)
  63. @csrf_exempt
  64. def updateIP(request):
  65. response = ResponseObject()
  66. if request.method == 'GET':
  67. request.encoding = 'utf-8'
  68. request_dict = request.GET
  69. if request.method == 'POST':
  70. request.encoding = 'utf-8'
  71. request_dict = request.POST
  72. UID = request_dict.get('UID', None)
  73. ip = request_dict.get('ip', None)
  74. qs = Device_Info.objects.filter(UID=UID)
  75. if not qs.exists():
  76. return response.json(173)
  77. area = ''
  78. try:
  79. area = CommonService.getAddr(ip=ip)
  80. qs.update(ip=ip, area=area)
  81. except Exception as e:
  82. print(repr(e))
  83. return response.json(0, {'area': area})
  84. def getTZ(request):
  85. request.encoding = 'utf-8'
  86. if request.method == 'GET':
  87. request_dict = request.GET
  88. elif request.method == 'POST':
  89. request_dict = request.POST
  90. else:
  91. return JsonResponse(status=200, data={'code': 403, 'msg': '接口请求方法错误'})
  92. c = request_dict.get('etk', None)
  93. ip = request_dict.get('ip', None)
  94. lang = request_dict.get('lang', None)
  95. update = request_dict.get('update',None)
  96. if not ip:
  97. ip = CommonService.get_ip_address(request)
  98. if c:
  99. c = base64.b64decode(c)
  100. c = c[2:-2]
  101. c = urllib.parse.unquote(c.decode('utf-8'))
  102. c = base64.b64decode(c)
  103. uid = c.decode('utf-8')
  104. if len(uid) == 20:
  105. print(uid)
  106. redisObject = RedisObject(db=7)
  107. data = redisObject.get_data(key=ip)
  108. if data:
  109. info = json.loads(data)
  110. return JsonResponse(status=200, data={'code': 0, 'msg': 'success', 'data': info})
  111. elif update:
  112. info = CommonService.getIpIpInfo(ip=ip, lang=lang,update=True)
  113. else:
  114. info = CommonService.getIpIpInfo(ip=ip, lang=lang,update=False)
  115. try:
  116. tz = info['utc_offset']
  117. # 增加GMT,且补:00
  118. if len(tz) == 5:
  119. gmtz = tz.replace('UTC-', 'GMT-0').replace('UTC+', 'GMT+0')
  120. if ':' not in gmtz:
  121. gmtz = gmtz + ':00'
  122. info['gmt_offset'] = gmtz
  123. if len(tz) == 6:
  124. gmtz = tz.replace('UTC-', 'GMT-').replace('UTC+', 'GMT+')
  125. if ':' not in gmtz:
  126. gmtz = gmtz + ':00'
  127. info['gmt_offset'] = gmtz
  128. elif len(tz) == 8:
  129. gmtz = tz.replace('UTC-', 'GMT-0').replace('UTC+', 'GMT+0')
  130. info['gmt_offset'] = gmtz
  131. redisObject.set_data(key=ip, val=json.dumps(info), expire=3600)
  132. except Exception as e:
  133. pass
  134. return JsonResponse(status=200, data={'code': 0, 'msg': 'success', 'data': info})
  135. else:
  136. return JsonResponse(status=200, data={'code': 404, 'msg': '令牌错误'})
  137. else:
  138. return JsonResponse(status=200, data={'code': 444, 'msg': '接口参数错误 etk'})
  139. # 设备日志上传
  140. def getUploadLogUrl(request):
  141. request.encoding = 'utf-8'
  142. if request.method == 'GET':
  143. request_dict = request.GET
  144. elif request.method == 'POST':
  145. request_dict = request.POST
  146. else:
  147. return JsonResponse(status=200, data={'code': 403, 'msg': 'wrong post method!'})
  148. etk = request_dict.get('etk', None)
  149. eto = ETkObject(etk)
  150. uid = eto.uid
  151. if len(uid) == 20:
  152. auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
  153. bucket = oss2.Bucket(auth, 'oss-cn-hongkong.aliyuncs.com', 'statres')
  154. nowTime = int(time.time())
  155. obj = 'log/{uid}/'.format(uid=uid) + str(nowTime) + '.log'
  156. url = bucket.sign_url('PUT', obj, 7200)
  157. return JsonResponse(status=200, data={'code': 0, 'msg': 'success', 'url': url})
  158. else:
  159. return JsonResponse(status=200, data={'code': 404, 'msg': 'wrong etk'})