SubDeviceController.py 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. # -*- coding: utf-8 -*-
  2. """
  3. @Time : 2022/5/25 15:17
  4. @Auth : Locky
  5. @File :SubDeviceController.py
  6. @IDE :PyCharm
  7. """
  8. import time
  9. from django.db import transaction
  10. from django.views import View
  11. from Model.models import Device_Info, GatewaySubDevice, FamilyRoomDevice
  12. from Object.ResponseObject import ResponseObject
  13. from Object.TokenObject import TokenObject
  14. class GatewaySubDeviceView(View):
  15. def get(self, request, *args, **kwargs):
  16. request.encoding = 'utf-8'
  17. operation = kwargs.get('operation')
  18. return self.validation(request.GET, request, operation)
  19. def post(self, request, *args, **kwargs):
  20. request.encoding = 'utf-8'
  21. operation = kwargs.get('operation')
  22. return self.validation(request.POST, request, operation)
  23. def validation(self, request_dict, request, operation):
  24. token_obj = TokenObject(request.META.get('HTTP_AUTHORIZATION'))
  25. lang = request_dict.get('lang', None)
  26. response = ResponseObject(lang if lang else token_obj.lang)
  27. if token_obj.code != 0:
  28. return response.json(token_obj.code)
  29. user_id = token_obj.userID
  30. if operation == 'add': # 添加子设备
  31. return self.add(request_dict, user_id, response)
  32. elif operation == 'query': # 查询子设备
  33. return self.query(request_dict, user_id, response)
  34. elif operation == 'update': # 更新子设备信息
  35. return self.sensor_update(user_id, request_dict, response)
  36. elif operation == 'delete': # 删除子设备
  37. return self.delete(request_dict, user_id, response)
  38. else:
  39. return response.json(414)
  40. @staticmethod
  41. def add(request_dict, user_id, response):
  42. """
  43. 添加子设备
  44. @param request_dict: 请求参数
  45. @request_dict serial_number: 序列号
  46. @request_dict device_type: 设备类型
  47. @request_dict nickname: 设备名
  48. @request_dict src_addr: 短地址
  49. @request_dict family_id: 家庭id
  50. @request_dict room_id: 房间id
  51. @param user_id: 用户id
  52. @param response: 响应对象
  53. @return: response 响应对象
  54. """
  55. serial_number = request_dict.get('serial_number', None)
  56. device_type = int(request_dict.get('device_type', None))
  57. nickname = request_dict.get('nickname', None)
  58. request_dict.get('ieee_addr', None)
  59. src_addr = request_dict.get('src_addr', None)
  60. family_id = request_dict.get('family_id', None)
  61. room_id = request_dict.get('room_id', None)
  62. if not all([serial_number, device_type, nickname, src_addr, family_id, room_id]):
  63. return response.json(444)
  64. now_time = int(time.time())
  65. try:
  66. device_info_qs = Device_Info.objects.filter(userID_id=user_id, serial_number=serial_number).values('id')
  67. if not device_info_qs.exists():
  68. return response.json(14)
  69. device_id = device_info_qs[0]['id']
  70. with transaction.atomic():
  71. sub_device = GatewaySubDevice.objects.create(device_id=device_id, device_type=device_type,
  72. nickname=nickname, src_addr=src_addr, status=1,
  73. created_time=now_time, updated_time=now_time)
  74. FamilyRoomDevice.objects.create(family_id=family_id, room_id=room_id, device_id=device_id,
  75. sub_device=sub_device, created_time=now_time, updated_time=now_time)
  76. return response.json(0)
  77. except Exception as e:
  78. return response.json(500, repr(e))
  79. @staticmethod
  80. def query(request_dict, user_id, response):
  81. """
  82. 查询子设备
  83. @param request_dict: 请求参数
  84. @request_dict serial_number: 序列号
  85. @param user_id: 用户id
  86. @param response: 响应对象
  87. @return: response
  88. """
  89. serial_number = request_dict.get('serial_number', None)
  90. if not all([serial_number]):
  91. return response.json(444)
  92. try:
  93. device_info_qs = Device_Info.objects.filter(userID_id=user_id, serial_number=serial_number).values('id')
  94. if not device_info_qs.exists():
  95. return response.json(14)
  96. device_id = device_info_qs[0]['id']
  97. count = GatewaySubDevice.objects.filter(device_id=device_id).count()
  98. gateway_sub_device_qs = GatewaySubDevice.objects.filter(device_id=device_id).values('device_type',
  99. 'nickname', 'src_addr',
  100. 'status')
  101. gateway_sub_device_list = [gateway_sub_device for gateway_sub_device in gateway_sub_device_qs]
  102. res = {
  103. 'count': count,
  104. 'gateway_sub_device_list': gateway_sub_device_list
  105. }
  106. return response.json(0, res)
  107. except Exception as e:
  108. return response.json(500, repr(e))
  109. @classmethod
  110. def sensor_update(cls, user_id, request_dict, response):
  111. """
  112. 传感器修改
  113. @param user_id: 登录用户id
  114. @param request_dict: 请求参数
  115. @param response: 响应结果
  116. @return: list
  117. """
  118. serial_number = request_dict.get('serialNumber', None)
  119. nickName = request_dict.get('nickName', None)
  120. gateway_sub_id = request_dict.get('gatewaySubId', None)
  121. family_id = request_dict.get('familyId', None)
  122. room_id = request_dict.get('roomId', None)
  123. if not all([serial_number, gateway_sub_id]):
  124. return response.json(444)
  125. try:
  126. gateway_sub_id = int(gateway_sub_id)
  127. device_info_qs = Device_Info.objects.filter(userID_id=user_id, serial_number=serial_number).values('id')
  128. if not device_info_qs.exists():
  129. return response.json(14)
  130. gateway_sub_qs = GatewaySubDevice.objects.filter(id=gateway_sub_id)
  131. if not gateway_sub_qs.exists():
  132. return response.json(173)
  133. if nickName:
  134. gateway_sub_qs.update(nickname=nickName)
  135. return response.json(0)
  136. elif all([family_id, room_id]):
  137. device_id = device_info_qs.first()['id']
  138. room_id = int(room_id)
  139. FamilyRoomDevice.objects.filter(device_id=device_id, sub_device=gateway_sub_id) \
  140. .update(room_id=room_id)
  141. return response.json(0)
  142. except Exception as e:
  143. print(e.args)
  144. return response.json(500, repr(e))
  145. @staticmethod
  146. def delete(request_dict, user_id, response):
  147. """
  148. 更新子设备信息
  149. @param request_dict: 请求参数
  150. @request_dict sub_device_id: 子设备id
  151. @param user_id: 用户id
  152. @param response: 响应对象
  153. @return: response
  154. """
  155. sub_device_id = request_dict.get('sub_device_id', None)
  156. if not all([sub_device_id]):
  157. return response.json(444)
  158. try:
  159. GatewaySubDevice.objects.filter(id=sub_device_id).delete()
  160. return response.json(0)
  161. except Exception as e:
  162. return response.json(500, repr(e))