Browse Source

新增网关复位删除设备信息接口

locky 2 năm trước cách đây
mục cha
commit
ed706cb9bf
2 tập tin đã thay đổi với 64 bổ sung4 xóa
  1. 53 0
      Controller/SensorGateway/GatewayDeviceController.py
  2. 11 4
      Service/ModelService.py

+ 53 - 0
Controller/SensorGateway/GatewayDeviceController.py

@@ -51,6 +51,9 @@ class GatewayDeviceView(View):
         if operation == 'bind-serial-user':
             response = ResponseObject()
             return self.bind_serial_user(request_dict, response)
+        elif operation == 'reset':
+            response = ResponseObject()
+            return self.reset(request_dict, response)
 
         token = TokenObject(request.META.get('HTTP_AUTHORIZATION'))
         lang = request_dict.get('lang', None)
@@ -535,6 +538,54 @@ class GatewayDeviceView(View):
         except Exception as e:
             return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
+    @staticmethod
+    def reset(request_dict, response):
+        """
+        网关复位删除设备信息
+        @param request_dict: 请求参数字典
+        @request_dict serial_number: 序列号
+        @param response: 响应对象
+        @return:
+        """
+        serial_number = request_dict.get('serial_number')
+        if not serial_number:
+            return response.json(444)
+        try:
+            with transaction.atomic():
+                device_qs = Device_Info.objects.filter(serial_number=serial_number)
+                device_id_list = list(device_qs.values_list('id', flat=True))
+                user_id_list = list(device_qs.values_list('userID_id', flat=True))
+                if not device_qs.exists():
+                    return response.json(173)
+
+                FamilyRoomDevice.objects.filter(device_id__in=device_id_list).delete()
+                UidSetModel.objects.filter(uid=device_qs.first().UID).delete()
+                socket_info_qs = SocketInfo.objects.filter(device_id__in=device_id_list)
+                if socket_info_qs.exists():
+                    socket_info_qs.delete()
+                    SocketPowerStatistics.objects.filter(device_id__in=device_id_list).delete()
+                    SocketSchedule.objects.filter(device_id__in=device_id_list).delete()
+                    SmartSocketView.delete_alexa_socket(serial_number)
+
+                # 如果有子设备,删除子设备和关联的场景数据,删除传感器记录
+                gateway_qs = GatewaySubDevice.objects.filter(device_id__in=device_id_list)
+                if gateway_qs.exists():
+                    sub_id_list = gateway_qs.values_list('id', flat=True)
+                    SensorRecord.objects.filter(gateway_sub_device_id__in=list(sub_id_list)).delete()
+                    SmartScene.objects.filter(Q(device_id__in=device_id_list) | Q(sub_device_id__in=sub_id_list)).delete()
+                else:
+                    SmartScene.objects.filter(device_id__in=device_id_list).delete()
+
+                gateway_qs.delete()  # 删除子设备
+                SceneLog.objects.filter(device_id__in=device_id_list).delete()
+                device_qs.delete()
+                # 异步删除推送消息
+                asy = threading.Thread(target=ModelService.del_user_list_eq_info, args=(user_id_list, serial_number))
+                asy.start()
+            return response.json(0)
+        except Exception as e:
+            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+
     @classmethod
     def update_socket(cls, serial_number, device_name, user_id, region):
         url = 'https://www.zositech.xyz/deviceStatus/addOrUpdateSwitch'
@@ -549,6 +600,8 @@ class GatewayDeviceView(View):
             requests.post(url=url, data=data, timeout=5)
         except Exception as e:
             print(repr(e))
+
+
 #
 #                   ___====-_  _-====___
 #             _--^^^#####//      \\#####^^^--_

+ 11 - 4
Service/ModelService.py

@@ -156,11 +156,18 @@ class ModelService:
             eq_list = eq_list.filter(device_user_id=userID, device_uid=uid)
             if eq_list.exists():
                 eq_list.delete()
-        # ei_count = ei_qs.count()
-        # while (ei_count > 1000):
-        #     ei_qs[0:1000].delete()
 
-        # 根据设备主键ID判断是否拥有该设备
+    @staticmethod
+    def del_user_list_eq_info(user_id_list, uid):
+        """
+        根据用户id列表删除设备推送消息
+        @param user_id_list: 用户id列表
+        @param uid:
+        @return:
+        """
+        for i in range(1, 8):
+            EquipmentInfoService.get_equipment_info_model('', i).\
+                filter(device_user_id__in=user_id_list, device_uid=uid).delete()
 
     # 获取绑定用户设备列表
     @staticmethod