ReportController.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. # @Author : Rocky
  2. # @File : ReportController.py
  3. # @Time : 2025/5/12 10:42
  4. import json
  5. import time
  6. from django.views import View
  7. from Object.RedisObject import RedisObject
  8. from Object.ResponseObject import ResponseObject
  9. from Model.models import AbnormalEvent
  10. class ReportView(View):
  11. def get(self, request, *args, **kwargs):
  12. request.encoding = 'utf-8'
  13. operation = kwargs.get('operation')
  14. return self.validation(request.GET, operation)
  15. def post(self, request, *args, **kwargs):
  16. request.encoding = 'utf-8'
  17. operation = kwargs.get('operation')
  18. return self.validation(request.POST, operation)
  19. def validation(self, request_dict, operation):
  20. response = ResponseObject()
  21. if operation == 'abnormalEvent': # 上报异常事件
  22. return self.abnormal_event(request_dict, response)
  23. @staticmethod
  24. def abnormal_event(request_dict, response):
  25. uid = request_dict.get('uid')
  26. device_type = request_dict.get('device_type')
  27. version = request_dict.get('version')
  28. event_list = request_dict.get('event_list')
  29. if not all([uid, device_type, version, event_list]):
  30. return response.json(444)
  31. # 同一设备限制十分钟之内不能重复请求
  32. redis_obj = RedisObject()
  33. key = 'report_abnormal_event_{}'.format(uid)
  34. ttl = redis_obj.get_ttl(key)
  35. if ttl > 0:
  36. res = {
  37. 'limit_time': ttl
  38. }
  39. return response.json(10, res)
  40. redis_obj.set_data(key=key, val=1, expire=600)
  41. try:
  42. device_type = int(device_type)
  43. now_time = int(time.time())
  44. event_list = json.loads(event_list)
  45. # 批量创建异常事件数据
  46. abnormal_event_list = []
  47. data = {
  48. 'uid': uid,
  49. 'device_type': device_type,
  50. 'version': version,
  51. 'created_time': now_time
  52. }
  53. for event in event_list:
  54. data['event_code'] = event['event_code']
  55. data['event_time'] = event['event_time']
  56. if event.get('content'):
  57. data['content'] = event['content']
  58. abnormal_event = AbnormalEvent(**data)
  59. abnormal_event_list.append(abnormal_event)
  60. AbnormalEvent.objects.bulk_create(abnormal_event_list)
  61. return response.json(0)
  62. except Exception as e:
  63. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))