SmartSceneController.py 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. # -*- coding: utf-8 -*-
  2. """
  3. @Author : Rocky
  4. @Time : 2022/6/29 9:31
  5. @File :SmartSceneController.py
  6. """
  7. import time
  8. from django.core.exceptions import ObjectDoesNotExist
  9. from django.views import View
  10. from Model.models import FamilyRoomDevice, GatewaySubDevice, FamilyRoom, SmartScene, EffectiveTime
  11. from Object.ResponseObject import ResponseObject
  12. from Object.TokenObject import TokenObject
  13. class SmartSceneView(View):
  14. def get(self, request, *args, **kwargs):
  15. request.encoding = 'utf-8'
  16. operation = kwargs.get('operation')
  17. return self.validation(request.GET, request, operation)
  18. def post(self, request, *args, **kwargs):
  19. request.encoding = 'utf-8'
  20. operation = kwargs.get('operation')
  21. return self.validation(request.POST, request, operation)
  22. def validation(self, request_dict, request, operation):
  23. token_obj = TokenObject(request.META.get('HTTP_AUTHORIZATION'))
  24. lang = request_dict.get('lang', None)
  25. response = ResponseObject(lang if lang else token_obj.lang)
  26. if token_obj.code != 0:
  27. return response.json(token_obj.code)
  28. user_id = token_obj.userID
  29. if operation == 'condition-devices': # 添加条件-查询设备
  30. return self.condition_devices(request_dict, response)
  31. if operation == 'task-devices': # 添加任务-查询设备
  32. return self.task_devices(request_dict, user_id, response)
  33. elif operation == 'create': # 创建智能场景
  34. return self.create_smart_scene(request_dict, user_id, response)
  35. else:
  36. return response.json(414)
  37. @staticmethod
  38. def condition_devices(request_dict, response):
  39. """
  40. 添加条件-查询设备
  41. @param request_dict: 请求参数
  42. @request_dict deviceId: 网关设备id
  43. @request_dict subDeviceId: 子设备id
  44. @param response: 响应对象
  45. @return: response
  46. """
  47. device_id = request_dict.get('deviceId', None)
  48. sub_device_id = request_dict.get('subDeviceId', None)
  49. if not any([device_id, sub_device_id]):
  50. return response.json(444)
  51. try:
  52. if device_id:
  53. gateway_sub_device_qs = GatewaySubDevice.objects.filter(device_id=device_id)
  54. else:
  55. gateway_sub_device_qs = GatewaySubDevice.objects.filter(id=sub_device_id)
  56. if not gateway_sub_device_qs.exists():
  57. return response.json(173)
  58. gateway_sub_device_qs = gateway_sub_device_qs.values('id', 'device_type', 'nickname', 'status')
  59. sub_device_list = []
  60. for gateway_sub_device in gateway_sub_device_qs:
  61. room_id = FamilyRoomDevice.objects.filter(sub_device=gateway_sub_device['id']).values('room_id')[0][
  62. 'room_id']
  63. try:
  64. gateway_sub_device['room_name'] = FamilyRoom.objects.get(id=room_id).name
  65. except ObjectDoesNotExist:
  66. gateway_sub_device['room_name'] = ''
  67. gateway_sub_device.pop('id')
  68. sub_device_list.append(gateway_sub_device)
  69. return response.json(0, sub_device_list)
  70. except Exception as e:
  71. return response.json(500, repr(e))
  72. @staticmethod
  73. def task_devices(request_dict, user_id, response):
  74. """
  75. 添加任务-查询设备
  76. @param request_dict: 请求参数
  77. @param user_id: 用户id
  78. @request_dict deviceId: 网关设备id
  79. @param response: 响应对象
  80. @return: response
  81. """
  82. device_id = request_dict.get('deviceId', None)
  83. if not all([device_id]):
  84. return response.json(444)
  85. try:
  86. device_info_qs = GatewaySubDevice.objects.filter(device__userID_id=user_id)
  87. return response.json(0)
  88. except Exception as e:
  89. return response.json(500, repr(e))
  90. @staticmethod
  91. def create_smart_scene(request_dict, user_id, response):
  92. """
  93. 创建智能场景
  94. @param request_dict: 请求参数
  95. @param user_id: 用户id
  96. @request_dict gatewaySubId: 子设备id
  97. @param response: 响应对象
  98. @return: response
  99. """
  100. sub_device_id = request_dict.get('gatewaySubId', None)
  101. scene_name = request_dict.get('sceneName', None)
  102. conditions = request_dict.get('conditions', None)
  103. tasks = request_dict.get('tasks', None)
  104. all_day = request_dict.get('allDay', None)
  105. if not all([sub_device_id, conditions, tasks]):
  106. return response.json(444)
  107. now_time = int(time.time())
  108. try:
  109. if all_day:
  110. SmartScene.objects.create(user_id=user_id, scene_name=scene_name, conditions=conditions, tasks=tasks,
  111. created_time=now_time, updated_time=now_time)
  112. else:
  113. start_time = request_dict.get('startTime', None)
  114. end_time = request_dict.get('endTime', None)
  115. repeat = request_dict.get('repeat', None)
  116. if not all([start_time, end_time, repeat]):
  117. return response.json(444)
  118. effective_time_qs = EffectiveTime.objects.filter(start_time=start_time, end_time=end_time, repeat=repeat).values('id')
  119. if effective_time_qs.exists():
  120. effective_time_id = effective_time_qs[0]['id']
  121. else:
  122. effective_time_id = EffectiveTime.objects.create(start_time=start_time, end_time=end_time, repeat=repeat).id
  123. SmartScene.objects.create(user_id=user_id, scene_name=scene_name, conditions=conditions, tasks=tasks,
  124. effective_time_id=effective_time_id, created_time=now_time, updated_time=now_time)
  125. return response.json(0)
  126. except Exception as e:
  127. return response.json(500, repr(e))