Selaa lähdekoodia

删除设备同时删除推送数据

peng 2 vuotta sitten
vanhempi
commit
9b517a95a5
1 muutettua tiedostoa jossa 31 lisäystä ja 25 poistoa
  1. 31 25
      Controller/SensorGateway/GatewayDeviceController.py

+ 31 - 25
Controller/SensorGateway/GatewayDeviceController.py

@@ -7,6 +7,7 @@
 @Software: PyCharm
 """
 import datetime
+import threading
 import time
 
 import requests
@@ -29,6 +30,7 @@ from Object.RedisObject import RedisObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
+from Service.ModelService import ModelService
 
 
 class GatewayDeviceView(View):
@@ -191,7 +193,18 @@ class GatewayDeviceView(View):
                             SocketSchedule.objects.filter(device_id=device_id).delete()
                             SceneLog.objects.filter(device_id=serial_number).delete()
                             SmartSocketView.delete_alexa_socket(serial_number)
-
+                        # 重置设备
+                        topic_name = SUB_DEVICE_TOPIC.format(serial_number)
+                        msg = {
+                            'zigbee': 'recover',
+                        }
+                        success = CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)
+                        LOGGER.info('删除重置设备结果:{}'.format(success))
+                        try:
+                            assert success
+                        except AssertionError:
+                            return response.json(10044)
+                        time.sleep(0.3)
                         # 如果有子设备,删除子设备和关联的场景数据
                         gateway_qs = GatewaySubDevice.objects.filter(device_id=device_id)
                         if gateway_qs.exists():
@@ -201,7 +214,6 @@ class GatewayDeviceView(View):
 
                             # 下发删除设备消息
                             ieee_addr_list = gateway_qs.values_list('ieee_addr', flat=True)
-                            topic_name = SUB_DEVICE_TOPIC.format(serial_number)
                             for ieee_addr in ieee_addr_list:
                                 # 删除设备
                                 msg = {
@@ -214,17 +226,6 @@ class GatewayDeviceView(View):
                                 except AssertionError:
                                     return response.json(10044)
                                 time.sleep(0.3)
-                                # 重置设备
-                                msg = {
-                                    'zigbee': 'recover',
-                                }
-                                success = CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)
-                                LOGGER.info('删除重置设备结果:{}'.format(success))
-                                try:
-                                    assert success
-                                except AssertionError:
-                                    return response.json(10044)
-                                time.sleep(0.3)
                         else:
                             smart_scene_qs = SmartScene.objects.filter(device_id=device_id)
                         if smart_scene_qs.exists():
@@ -247,6 +248,9 @@ class GatewayDeviceView(View):
                         gateway_qs.delete()  # 删除子设备
                         SceneLog.objects.filter(device_id=device_id).delete()
                         device_qs.delete()
+                        # 异步删除推送消息
+                        asy = threading.Thread(target=ModelService.del_eq_info, args=(user_id, serial_number))
+                        asy.start()
                 elif sub_ids:
                     sub_id_list = list(map(int, sub_ids.split(',')))
                     FamilyRoomDevice.objects.filter(sub_device__in=sub_id_list).delete()
@@ -261,6 +265,17 @@ class GatewayDeviceView(View):
                     gateway_sub_device_qs = GatewaySubDevice.objects.filter(id__in=sub_id_list)
                     ieee_addr_list = gateway_sub_device_qs.values_list('ieee_addr', flat=True)
                     topic_name = SUB_DEVICE_TOPIC.format(serial_number)
+                    # 重置设备
+                    msg = {
+                        'zigbee': 'recover',
+                    }
+                    success = CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)
+                    LOGGER.info('删除重置设备结果:{}'.format(success))
+                    try:
+                        assert success
+                    except AssertionError:
+                        return response.json(10044)
+                    time.sleep(0.3)
                     for ieee_addr in ieee_addr_list:
                         # 删除设备
                         msg = {
@@ -273,17 +288,6 @@ class GatewayDeviceView(View):
                         except AssertionError:
                             return response.json(10044)
                         time.sleep(0.3)
-                        # 重置设备
-                        msg = {
-                            'zigbee': 'recover',
-                        }
-                        success = CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)
-                        LOGGER.info('删除重置设备结果:{}'.format(success))
-                        try:
-                            assert success
-                        except AssertionError:
-                            return response.json(10044)
-                        time.sleep(0.3)
                     # 删除场景,下发MQTT通知设备
                     smart_scene_qs = SmartScene.objects.filter(sub_device_id__in=sub_id_list)
                     if smart_scene_qs.exists():
@@ -306,7 +310,9 @@ class GatewayDeviceView(View):
 
                     gateway_sub_device_qs.delete()
                     SceneLog.objects.filter(sub_device_id__in=sub_id_list).delete()
-
+                    # 异步删除推送消息
+                    asy = threading.Thread(target=ModelService.del_eq_info, args=(user_id, serial_number))
+                    asy.start()
                 return response.json(0)
         except Exception as e:
             return response.json(177, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))