|
@@ -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)
|