Explorar el Código

新增批量添加设备接口

locky hace 3 años
padre
commit
59b0f9405b
Se han modificado 1 ficheros con 191 adiciones y 0 borrados
  1. 191 0
      Controller/EquipmentManagerV3.py

+ 191 - 0
Controller/EquipmentManagerV3.py

@@ -50,6 +50,8 @@ class EquipmentManagerV3(View):
         # 手机端添加设备,查询,修改
         if operation == 'add':
             return self.do_add(userID, request_dict, response, request)
+        if operation == 'batch_add':
+            return self.do_batch_add(userID, request_dict, response, request)
         elif operation == 'query':
             return self.do_query(userID, request_dict, response)
         elif operation == 'modify':
@@ -257,6 +259,195 @@ class EquipmentManagerV3(View):
                 }
             return response.json(0, res)
 
+    def do_batch_add(self, userID, request_dict, response, request):
+        # 批量添加设备
+        uidContent = request_dict.get('uidContent', None)
+
+        if not uidContent:
+            return response.json(444, {'param': 'uidContent'})
+
+        try:
+            uidContent = eval(uidContent)
+            print('uidContent: ', uidContent)
+            re_uid = re.compile(r'^[A-Za-z0-9]{14,20}$')
+            for uid_data in uidContent.values():
+                UID = uid_data['UID']
+                NickName = uid_data['NickName']
+                Type = uid_data['Type']
+                ChannelIndex = uid_data['ChannelIndex']
+                version = uid_data['version']
+                isCheckMainUser = uid_data['isCheckMainUser']
+                View_Account = uid_data['View_Account']
+                encryptPassword = uid_data['encryptPassword']
+                View_Password = self.decode_pwd(encryptPassword)
+                if not all([UID, NickName, View_Account, Type, ChannelIndex]):  # Type和ChannelIndex可能为0
+                    return response.json(444, {'param': 'UID, NickName, View_Account, Type, ChannelIndex'})
+
+                Type = int(Type)
+                ChannelIndex = int(ChannelIndex)
+
+                if not re_uid.match(UID):   # 检查uid长度
+                    return response.json(444, {'error uid length': UID})
+
+                device_info_qs = Device_Info.objects.filter(UID=UID, userID_id=userID)
+                if device_info_qs:
+                    # 判断设备是否已存在
+                    if device_info_qs[0].isExist == 1:
+                        return response.json(174)
+                    else:
+                        device_info_qs.delete()
+
+                id = CommonService.getUserID(getUser=False)
+                userName = Device_User.objects.get(userID=userID).username
+                main_exist = Device_Info.objects.filter(UID=UID)
+                main_exist = main_exist.filter(~Q(vodPrimaryUserID='')).values('vodPrimaryUserID', 'vodPrimaryMaster')
+
+                vodPrimaryUserID = userID
+                vodPrimaryMaster = userName
+                primaryUserID = ''
+                primaryMaster = ''
+                isShare = False
+
+                is_bind = Device_Info.objects.filter(UID=UID, isShare=False).values('userID__userID', 'primaryUserID', 'primaryMaster')
+
+                if main_exist.exists():
+                    vodPrimaryUserID = main_exist[0]['vodPrimaryUserID']
+                    vodPrimaryMaster = main_exist[0]['vodPrimaryMaster']
+
+                if is_bind.exists():
+                    primaryUserID = is_bind[0]['primaryUserID']
+                    primaryMaster = is_bind[0]['primaryMaster']
+                    isShare = True
+
+                isusermain = False
+                if (vodPrimaryUserID != userID and vodPrimaryUserID != '') or (primaryUserID != userID and primaryUserID != ''):
+                    isusermain = True
+
+                # 判断是否有已绑定用户
+                if isCheckMainUser == '1' and isusermain:
+                    res = {
+                        'id': id,
+                        'userID': userID,
+                        'NickName': NickName,
+                        'UID': UID,
+                        'View_Account': View_Account,
+                        'View_Password': View_Password,
+                        'ChannelIndex': ChannelIndex,
+                        'Type': Type,
+                        'isShare': isShare,
+                        'primaryUserID': primaryUserID,
+                        'primaryMaster': primaryMaster,
+                        'vodPrimaryUserID': vodPrimaryUserID,
+                        'vodPrimaryMaster': vodPrimaryMaster,
+                        'data_joined': '',
+                        'version': version,
+                        'isVod': 0,
+                        'isExist': 1,
+                        'userID__userEmail': ''
+                    }
+                    res['vod'] = [
+                        {
+                            "status": 1,
+                            "channel": ChannelIndex,
+                            "endTime": '',
+                            "bucket__content": '',
+                            "uid": UID
+                        }
+                    ]
+                    res['isMainUserExists'] = 1
+                    return response.json(0, res)
+
+                # 判断是否有用户绑定
+                nowTime = int(time.time())
+                us_qs = UidSetModel.objects.filter(uid=UID)
+                if us_qs.exists():
+                    us_qs.update(nickname=NickName)
+                    UidSet_id = us_qs.first().id
+                else:
+                    ip = CommonService.get_ip_address(request)
+                    region_id = Device_Region().get_device_region(ip)
+                    region_alexa = 'CN' if region_id == 1 else 'ALL'
+                    uid_set_create_dict = {
+                        'uid': UID,
+                        'addTime': nowTime,
+                        'updTime': nowTime,
+                        'ip': CommonService.get_ip_address(request_dict),
+                        'channel': ChannelIndex,
+                        'nickname': NickName,
+                        'version': version,
+                        'region_alexa': region_alexa,
+                    }
+                    UidSet = UidSetModel.objects.create(**uid_set_create_dict)
+                    UidSet_id = UidSet.id
+
+                # 查询uid_channel表有无该uid的数据
+                uid_channel_set = UidChannelSetModel.objects.filter(uid_id=UidSet_id)
+                if not uid_channel_set.exists():
+                    # 多通道设备设置通道名
+                    multi_channel_list = [1, 2, 3, 4, 10001]
+                    if Type in multi_channel_list:
+                        UidChannelSet_bulk = []
+                        for i in range(1, ChannelIndex+1):
+                            channel_name = 'channel'+str(i)  # channel1,channel2...
+                            UidChannelSet = UidChannelSetModel(uid_id=UidSet_id, channel=i, channel_name=channel_name)
+                            UidChannelSet_bulk.append(UidChannelSet)
+                        UidChannelSetModel.objects.bulk_create(UidChannelSet_bulk)
+
+                userDevice = Device_Info(id=id, userID_id=userID, UID=UID, NickName=NickName, View_Account=View_Account,
+                                         View_Password=View_Password, Type=Type, ChannelIndex=ChannelIndex, version=version,
+                                         vodPrimaryUserID=vodPrimaryUserID, vodPrimaryMaster=vodPrimaryMaster)
+                userDevice.save()
+                uid_serial_qs = UIDCompanySerialModel.objects.filter(uid__uid=UID)
+                if uid_serial_qs.exists():
+                    uid_serial = uid_serial_qs[0]
+                    Device_Info.objects.filter(UID=UID).update(vodPrimaryUserID=vodPrimaryUserID,
+                                                               vodPrimaryMaster=vodPrimaryMaster,
+                                                               serial_number=uid_serial.company_serial.serial_number + uid_serial.company_serial.company.mark)
+                else:
+                    Device_Info.objects.filter(UID=UID).update(vodPrimaryUserID=vodPrimaryUserID,
+                                                               vodPrimaryMaster=vodPrimaryMaster)
+
+                if not us_qs.exists():
+                    us_qs = UidSetModel.objects.filter(uid=UID)
+
+                if us_qs.exists() and us_qs[0].is_alexa == 1:
+                    if us_qs[0].channel > 1:
+                        data_list = []
+                        uid_channel_set_qs = UidChannelSetModel.objects.filter(uid_id=us_qs[0].id).\
+                            values('channel', 'channel_name')
+                        if uid_channel_set_qs.exists():
+                            # 多通道设备名为 UidChannelSetModel 的 channel_name
+                            for uid_channel_set in uid_channel_set_qs:
+                                data_list.append({'userID': userID, 'UID': UID, 'uid_nick': uid_channel_set['channel_name'],
+                                                  'channel': uid_channel_set['channel'], 'password': encryptPassword})
+                    else:
+                        data_list = [{'userID': userID, 'UID': UID, 'uid_nick': NickName, 'password': encryptPassword}]
+
+                    # 请求Alexa服务器更新事件网关
+                    data_list = json.dumps(data_list)
+                    data = {'data_list': data_list}
+                    url = 'https://www.zositech.xyz/deviceStatus/addOrUpdateV2'
+                    requests.post(url, data=data, timeout=2)
+                dvqs = Device_Info.objects.filter(id=id).values('id', 'userID', 'NickName', 'UID',
+                                                                'View_Account',
+                                                                'View_Password', 'ChannelIndex', 'Type',
+                                                                'isShare',
+                                                                'primaryUserID', 'primaryMaster',
+                                                                'vodPrimaryUserID', 'vodPrimaryMaster',
+                                                                'userID__userEmail',
+                                                                'data_joined', 'version',
+                                                                'isVod', 'isExist', 'isCameraOpenCloud', 'serial_number')
+                dvql = CommonService.qs_to_list(dvqs)
+                ubqs = UID_Bucket.objects.filter(uid=UID). \
+                    values('bucket__content', 'status', 'channel', 'endTime', 'uid')
+                res = dvql[0]
+                res['vod'] = list(ubqs)
+                iotqs = iotdeviceInfoModel.objects.filter(serial_number=dvql[0]['serial_number'])
+                if iotqs.exists():
+                    res['iot'] = {'endpoint': iotqs[0].endpoint, 'token_iot_number': iotqs[0].endpoint}
+            return response.json(0, res)
+        except Exception as e:
+            return response.json(10, {UID: repr(e)})
 
     def do_modify(self, userID, request_dict, response, request):
         token = request_dict.get('token', None)