DeviceController.py 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. # @Author : Rocky
  2. # @File : DeviceController.py
  3. # @Time : 2025/5/16 14:56
  4. import logging
  5. from datetime import datetime
  6. from django.views import View
  7. from model.models import iotdeviceInfoModel
  8. from object.ResponseObject import ResponseObject
  9. class DeviceView(View):
  10. def get(self, request, *args, **kwargs):
  11. request.encoding = 'utf-8'
  12. operation = kwargs.get('operation')
  13. return self.validation(request.GET, request, operation)
  14. def post(self, request, *args, **kwargs):
  15. request.encoding = 'utf-8'
  16. operation = kwargs.get('operation')
  17. return self.validation(request.POST, request, operation)
  18. def validation(self, request_dict, request, operation):
  19. response = ResponseObject()
  20. if operation == 'creatOrUpdateIotInfo':
  21. return self.creatOrUpdateIotInfo(request_dict, response)
  22. else:
  23. return response.json(414)
  24. @staticmethod
  25. def creatOrUpdateIotInfo(request_dict, response):
  26. logger = logging.getLogger('django')
  27. # 获取必要参数
  28. serial_number = request_dict.get('serial_number', '')
  29. uid = request_dict.get('uid', '')
  30. certificate_id = request_dict.get('certificate_id', '')
  31. certificate_pem = request_dict.get('certificate_pem', '')
  32. public_key = request_dict.get('public_key', '')
  33. private_key = request_dict.get('private_key', '')
  34. thing_name = request_dict.get('thing_name', '')
  35. thing_groups = request_dict.get('thing_groups', '')
  36. endpoint = request_dict.get('endpoint', '')
  37. token_iot_number = request_dict.get('token_iot_number', '')
  38. # 检查参数有效性
  39. if not (serial_number or uid):
  40. return response.json(444, 'serial_number或uid必须有一个不为空')
  41. try:
  42. # 查询设备是否已存在
  43. if serial_number:
  44. device_name = serial_number
  45. device = iotdeviceInfoModel.objects.filter(serial_number=serial_number).first()
  46. else:
  47. device_name = uid
  48. device = iotdeviceInfoModel.objects.filter(uid=uid).first()
  49. logger.info('--------{}创建/更新IoT设备信息--------'.format(device_name))
  50. if not device:
  51. # 创建新设备
  52. iotdeviceInfoModel.objects.create(
  53. serial_number=serial_number,
  54. uid=uid,
  55. certificate_id=certificate_id,
  56. certificate_pem=certificate_pem,
  57. public_key=public_key,
  58. private_key=private_key,
  59. thing_name=thing_name,
  60. thing_groups=thing_groups,
  61. endpoint=endpoint,
  62. token_iot_number=token_iot_number
  63. )
  64. else:
  65. # 更新现有设备
  66. if device.certificate_id != certificate_id:
  67. device.certificate_id = certificate_id
  68. device.certificate_pem = certificate_pem
  69. device.public_key = public_key
  70. device.private_key = private_key
  71. device.thing_name = thing_name
  72. device.thing_groups = thing_groups
  73. device.endpoint = endpoint
  74. device.token_iot_number = token_iot_number
  75. device.update_time = datetime.now()
  76. device.save()
  77. return response.json(0)
  78. except Exception as e:
  79. logger.error('创建/更新IoT设备信息异常: %s', str(e))
  80. return response.json(500, '服务器内部错误')