# -*- encoding: utf-8 -*- """ @File : GatewayDeviceController.py @Time : 2022/6/6 13:50 @Author : stephen @Email : zhangdongming@asj6.wecom.work @Software: PyCharm """ from django.db.models import Q from django.views.generic.base import View from Controller.SensorGateway.EquipmentFamilyController import EquipmentFamilyView from Model.models import FamilyRoomDevice, FamilyRoom, GatewaySubDevice from Object.ResponseObject import ResponseObject from Object.TokenObject import TokenObject class GatewayDeviceView(View): def get(self, request, *args, **kwargs): request.encoding = 'utf-8' operation = kwargs.get('operation') return self.validation(request.GET, request, operation) def post(self, request, *args, **kwargs): request.encoding = 'utf-8' operation = kwargs.get('operation') return self.validation(request.POST, request, operation) def validation(self, request_dict, request, operation): token = TokenObject(request.META.get('HTTP_AUTHORIZATION')) lang = request_dict.get('lang', None) response = ResponseObject(lang) if lang else ResponseObject(token.lang) if token.code != 0: return response.json(token.code) user_id = token.userID # 网关设备 if operation == 'list': return self.gateway_device_list(request_dict, response) if operation == 'del': return self.gateway_device_del(user_id, request_dict, response) @classmethod def gateway_device_del(cls, user_id, request_dict, response): """ 网关设备删除或删除子设备 @param user_id: @param request_dict: @param response: @return: """ device_id = request_dict.get('deviceId') family_id = request_dict.get('familyId') # 1 删除网关 否则删除子设备 is_gateway = request_dict.get('isGateway', None) sub_ids = request_dict.get('subIds') if not all([is_gateway, family_id]): return response.json(444) permission = EquipmentFamilyView.get_member_permission_details(user_id, family_id) if not permission or permission == '003': return response.json(404) is_gateway = int(is_gateway) if is_gateway == 1 and device_id: family_device_qs = FamilyRoomDevice.objects.filter(device_id=device_id) if family_device_qs.exists(): family_device_qs.delete() gateway_qs = GatewaySubDevice.objects.filter(device_id=device_id) if gateway_qs.exists(): gateway_qs.delete() elif sub_ids: sub_ids = sub_ids.split(',') ids = [] for item in sub_ids: sub_id = int(item) ids.append(sub_id) family_device_qs = FamilyRoomDevice.objects.filter(sub_device__in=ids) if family_device_qs.exists(): family_device_qs.delete() gateway_sub_qs = GatewaySubDevice.objects.filter(id__in=ids) if gateway_sub_qs.exists(): gateway_sub_qs.delete() return response.json(0) @classmethod def gateway_device_list(cls, request_dict, response): """ 网关设备列表 @param request_dict: @param response: @return: """ device_id = request_dict.get('deviceId', None) if not device_id: return response.json(444) device_qs = FamilyRoomDevice.objects.filter(device_id=device_id, sub_device=0) if not device_qs.exists(): return response.json(173) device_qs = device_qs.values('room_id', 'device__Type', 'device__NickName', 'device__UID', 'device__serial_number') device_qs = device_qs.first() room_id = device_qs['room_id'] gateway_room_name = '' if room_id: room_qs = FamilyRoom.objects.filter(id=room_id) gateway_room_name = room_qs.first().name if room_qs.exists() else '' gateway = { 'deviceType': device_qs['device__Type'], 'deviceNickName': device_qs['device__NickName'], 'UID': device_qs['device__UID'], 'serialNumber': device_qs['device__serial_number'], 'roomName': gateway_room_name } family_device_qs = FamilyRoomDevice.objects.filter(device_id=device_id) family_device_qs = family_device_qs.filter(~Q(sub_device=0)).order_by('-created_time') sub_device = [] if family_device_qs.exists(): for item in family_device_qs: sub_id = item['sub_device'] gateway_sub_qs = GatewaySubDevice.objects.filter(device_id=device_id, id=sub_id).values( 'id', 'device_type', 'nickname', 'src_addr', 'status', 'created_time', ) rood_id = item['rood_id'] room_qs = FamilyRoom.objects.filter(id=rood_id) gateway_room_name = room_qs.first().name if room_qs.exists() else '' if device_qs.exists(): gateway_sub_qs = gateway_sub_qs.first() sub_device.append({ 'id': gateway_sub_qs['id'], 'nickName': gateway_sub_qs['nickname'], 'srcAddr': gateway_sub_qs['src_addr'], 'status': gateway_sub_qs['status'], 'createdTime': gateway_sub_qs['created_time'], 'roomName': gateway_room_name }) return response.json(0, {'gateway': gateway, 'sub_device': sub_device})