|
@@ -10,6 +10,7 @@
|
|
|
import time
|
|
|
|
|
|
import oss2
|
|
|
+from django.db import connection
|
|
|
from django.db import transaction
|
|
|
from django.db.models import Q
|
|
|
from django.views.generic.base import View
|
|
@@ -54,18 +55,28 @@ class EquipmentFamilyView(View):
|
|
|
# 手机端添加设备,查询,修改
|
|
|
if operation == 'add':
|
|
|
return self.do_save(user_id, request_dict, response, request)
|
|
|
+ # 分页获取设备
|
|
|
if operation == 'page':
|
|
|
return self.do_device_page(user_id, request_dict, response)
|
|
|
+ # 条件查询设备列表
|
|
|
if operation == 'query':
|
|
|
return self.do_device_query(user_id, request_dict, response)
|
|
|
+ # 获取家庭列表
|
|
|
if operation == 'family-list':
|
|
|
return self.get_family_list(user_id, request_dict, response)
|
|
|
+ # 家庭保存
|
|
|
+ if operation == 'family-save':
|
|
|
+ return self.family_save(user_id, request_dict, response)
|
|
|
+ # 获取房间列表
|
|
|
if operation == 'room-list':
|
|
|
return self.get_family_room_list(request_dict, response)
|
|
|
+ # 房间保存
|
|
|
if operation == 'room-save':
|
|
|
return self.room_save(request_dict, response)
|
|
|
if operation == 'room-sort':
|
|
|
return self.room_sort_save(request_dict, response)
|
|
|
+ if operation == 'permission-list':
|
|
|
+ return self.get_member_permission_list(user_id, request_dict, response)
|
|
|
else:
|
|
|
return response.json(414)
|
|
|
|
|
@@ -82,6 +93,8 @@ class EquipmentFamilyView(View):
|
|
|
nick_name = request_dict.get('nickName', None)
|
|
|
serial_number = request_dict.get('serialNumber', None)
|
|
|
device_type = request_dict.get('deviceType', None)
|
|
|
+ family_id = request_dict.get('familyId', None)
|
|
|
+ room_id = request_dict.get('roomId', None)
|
|
|
# type 可能为0
|
|
|
if not all([nick_name, serial_number, device_type]):
|
|
|
return response.json(444, {'param': 'nick_name, serial_number, device_type'})
|
|
@@ -102,7 +115,9 @@ class EquipmentFamilyView(View):
|
|
|
UID=serial_number,
|
|
|
serial_number=serial_number, data_joined=now_time,
|
|
|
update_time=now_time)
|
|
|
-
|
|
|
+ boole = cls.family_room_device_save(family_id, room_id, device_id)
|
|
|
+ if not boole:
|
|
|
+ return response.json(15)
|
|
|
# 判断是否有用户绑定
|
|
|
us_qs = UidSetModel.objects.filter(uid=serial_number)
|
|
|
if not us_qs:
|
|
@@ -171,12 +186,15 @@ class EquipmentFamilyView(View):
|
|
|
page = request_dict.get('page', None)
|
|
|
line = request_dict.get('line', None)
|
|
|
nick_name = request_dict.get('NickName', None)
|
|
|
+ family_id = request_dict.get('familyId', None)
|
|
|
+ room_id = request_dict.get('roomId', None)
|
|
|
|
|
|
page = int(page)
|
|
|
line = int(line)
|
|
|
uid = request_dict.get('uid', None)
|
|
|
+ # 获取设备信息列表
|
|
|
device_info_list = cls.get_device_info_list(user_id, nick_name, uid,
|
|
|
- page, line)
|
|
|
+ page, line, family_id, room_id)
|
|
|
uid_list = []
|
|
|
# 判断是否是主用户 isPrimaryUser=0:否,1:是
|
|
|
for dvl in device_info_list:
|
|
@@ -200,9 +218,11 @@ class EquipmentFamilyView(View):
|
|
|
return response.json(0, items)
|
|
|
|
|
|
@classmethod
|
|
|
- def get_device_info_list(cls, user_id, nick_name, uid, page, line):
|
|
|
+ def get_device_info_list(cls, user_id, nick_name, uid, page, line, family_id, room_id):
|
|
|
"""
|
|
|
根据用户id获取设备信息
|
|
|
+ @param room_id: 家庭id
|
|
|
+ @param family_id: 房间id
|
|
|
@param uid: uid
|
|
|
@param nick_name: 设备名称
|
|
|
@param line: 条数
|
|
@@ -218,6 +238,9 @@ class EquipmentFamilyView(View):
|
|
|
device_info_qs = device_info_qs.filter(NickName__icontains=nick_name)
|
|
|
if uid:
|
|
|
device_info_qs.filter(UID=uid)
|
|
|
+ if family_id or room_id:
|
|
|
+ # 根据家庭id获取房间id关联查询设备
|
|
|
+ return cls.get_family_device_list(user_id, page, line, family_id, room_id)
|
|
|
device_info_values = device_info_qs.values('id', 'userID', 'NickName', 'UID', 'View_Account', 'View_Password',
|
|
|
'ChannelIndex',
|
|
|
'Type', 'isShare', 'primaryUserID', 'primaryMaster', 'data_joined',
|
|
@@ -225,10 +248,54 @@ class EquipmentFamilyView(View):
|
|
|
'vodPrimaryMaster', 'userID__userEmail', 'version', 'isVod',
|
|
|
'isExist', 'NotificationMode',
|
|
|
'isCameraOpenCloud', 'serial_number')
|
|
|
+
|
|
|
device_info_values = device_info_values[(page - 1) * line:page * line]
|
|
|
device_info_list = CommonService.qs_to_list(device_info_values)
|
|
|
return device_info_list
|
|
|
|
|
|
+ @classmethod
|
|
|
+ def get_family_device_list(cls, user_id, page_no, page_size, family_id, room_id):
|
|
|
+ """
|
|
|
+ 获取关联家庭设备列表
|
|
|
+ @param user_id: 用户id
|
|
|
+ @param page_no: 页数
|
|
|
+ @param page_size: 分页大小
|
|
|
+ @param family_id: 家庭id
|
|
|
+ @param room_id: 房间id
|
|
|
+ @return: result_list
|
|
|
+ """
|
|
|
+ cursor = connection.cursor()
|
|
|
+ sql = 'SELECT d.id,d.userID_id as userID,d.NickName,d.UID,d.View_Account,d.View_Password,d.ChannelIndex,' \
|
|
|
+ 'd.Type,d.isShare,d.primaryUserID,d.primaryMaster,d.data_joined,d.vodPrimaryUserID,d.vodPrimaryMaster, ' \
|
|
|
+ 'd.version,d.isVod,d.isExist,d.NotificationMode,d.isCameraOpenCloud,d.serial_number '
|
|
|
+ sql += 'FROM device_info d INNER JOIN loocam_family_room_device l ON d.id = l.device_id '
|
|
|
+ sql += 'WHERE d.userID_id = %s AND d.isExist != %s '
|
|
|
+ if family_id:
|
|
|
+ sql += ' AND l.family_id = %s '
|
|
|
+ if room_id:
|
|
|
+ sql += ' AND l.room_id = %s '
|
|
|
+ sql += ' order by d.data_joined DESC,d.id DESC LIMIT %s,%s '
|
|
|
+ cursor.execute(sql, [user_id, 2, int(family_id) if family_id else int(room_id), ((page_no - 1) * page_size),
|
|
|
+ page_size, ])
|
|
|
+ data_obj = cursor.fetchall()
|
|
|
+ cursor.close() # 执行完,关闭
|
|
|
+ connection.close()
|
|
|
+ result_list = []
|
|
|
+ col_names = [desc[0] for desc in cursor.description]
|
|
|
+ for item in data_obj:
|
|
|
+ val = dict(zip(col_names, item))
|
|
|
+ user_id = val['userID']
|
|
|
+ device_user_qs = Device_User.objects.filter(userID=user_id)
|
|
|
+ val['userID__userEmail'] = device_user_qs.first().userEmail
|
|
|
+ val['isShare'] = False if val['isShare'] == 0 else True
|
|
|
+ if 'data_joined' in val:
|
|
|
+ if val['data_joined']:
|
|
|
+ val['data_joined'] = val['data_joined'].strftime("%Y-%m-%d %H:%M:%S")
|
|
|
+ else:
|
|
|
+ val['data_joined'] = ''
|
|
|
+ result_list.append(val)
|
|
|
+ return result_list
|
|
|
+
|
|
|
@classmethod
|
|
|
def get_bucket_and_preview_by_uid(cls, uid_list):
|
|
|
"""
|
|
@@ -452,16 +519,83 @@ class EquipmentFamilyView(View):
|
|
|
data['familyId'] = item['family_id']
|
|
|
data['identity'] = item['identity']
|
|
|
data['familyName'] = item['family__name']
|
|
|
+ data['permissionId'] = item['permission_id']
|
|
|
data['permissionNo'] = item['permission__no']
|
|
|
data['familyLocation'] = item['family__location']
|
|
|
items.append(data)
|
|
|
return response.json(0, items)
|
|
|
return response.json(309)
|
|
|
|
|
|
+ @classmethod
|
|
|
+ def family_save(cls, user_id, request_dict, response):
|
|
|
+ """
|
|
|
+ 家庭保存
|
|
|
+ @param user_id: 用户id
|
|
|
+ @param request_dict: 参数
|
|
|
+ @param response: 响应
|
|
|
+ @return:
|
|
|
+ """
|
|
|
+ family_id = request_dict.get('familyId', None)
|
|
|
+ family_name = request_dict.get('familyName', None)
|
|
|
+ location = request_dict.get('location', None)
|
|
|
+ with transaction.atomic():
|
|
|
+ now_time = int(time.time())
|
|
|
+ if family_id:
|
|
|
+ family_member = LoocamFamilyMember.objects.filter(family_id=family_id, user_id=user_id)
|
|
|
+ if family_member.exists():
|
|
|
+ family_member = family_member.first()
|
|
|
+ if family_member.identity == 0:
|
|
|
+ return response.json(404)
|
|
|
+ family_qs = LoocamUserFamily.objects.filter(id=family_id)
|
|
|
+ if family_qs.exists():
|
|
|
+ data = {
|
|
|
+ 'updated_time': now_time
|
|
|
+ }
|
|
|
+ if family_name:
|
|
|
+ data['name'] = family_name
|
|
|
+ if location:
|
|
|
+ data['location'] = location
|
|
|
+ family_qs.update(**data)
|
|
|
+ return response.json(0)
|
|
|
+ data = {'user_id': user_id, 'updated_time': now_time, 'created_time': now_time}
|
|
|
+ if family_name:
|
|
|
+ data['name'] = family_name
|
|
|
+ if location:
|
|
|
+ data['location'] = location
|
|
|
+ LoocamUserFamily.objects.create(**data)
|
|
|
+ return response.json(0)
|
|
|
+ return response.json(444)
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def family_room_device_save(cls, family_id, room_id, device_id):
|
|
|
+ """
|
|
|
+ 设备与家庭房间保存
|
|
|
+ @param family_id: 家庭id
|
|
|
+ @param room_id: 房间id
|
|
|
+ @param device_id: 设备id
|
|
|
+ @return: Boole
|
|
|
+ """
|
|
|
+ now_time = int(time.time())
|
|
|
+ family_room_device = LoocamFamilyRoomDevice.objects.filter(device_id=device_id)
|
|
|
+ if family_room_device.exists():
|
|
|
+ return False
|
|
|
+ data = {
|
|
|
+ 'family_id': int(family_id),
|
|
|
+ 'device_id': device_id,
|
|
|
+ 'updated_time': now_time,
|
|
|
+ 'created_time': now_time
|
|
|
+ }
|
|
|
+ if room_id:
|
|
|
+ room_id = int(room_id)
|
|
|
+ if LoocamFamilyRoom.objects.filter(id=room_id).exists():
|
|
|
+ data['room_id'] = room_id
|
|
|
+ LoocamFamilyRoomDevice.objects.create(**data)
|
|
|
+ return True
|
|
|
+
|
|
|
@classmethod
|
|
|
def family_device_binding(cls, user_id, family_id):
|
|
|
"""
|
|
|
- 根据用户设备与家庭进行绑定
|
|
|
+ 用户旧设备与默认家庭进行绑定
|
|
|
@param user_id:
|
|
|
@param family_id:
|
|
|
@return: True
|
|
@@ -522,11 +656,18 @@ class EquipmentFamilyView(View):
|
|
|
"""
|
|
|
family_id = request_dict.get('familyId', None)
|
|
|
room_name = request_dict.get('roomName', None)
|
|
|
+ room_id = request_dict.get('roomId', None)
|
|
|
if not all([family_id, room_name]):
|
|
|
return response.json(444)
|
|
|
with transaction.atomic():
|
|
|
- room_qs = LoocamFamilyRoom.objects.filter(family_id=family_id, name=room_name)
|
|
|
now_time = int(time.time())
|
|
|
+ if room_id:
|
|
|
+ room_qs = LoocamFamilyRoom.objects.filter(id=int(room_id))
|
|
|
+ if room_qs.exists():
|
|
|
+ room_qs.update(name=room_name, updated_time=now_time)
|
|
|
+ return response.json(0)
|
|
|
+ room_qs = LoocamFamilyRoom.objects.filter(family_id=family_id, name=room_name)
|
|
|
+
|
|
|
if room_qs.exists():
|
|
|
room_dict = {'updated_time': now_time, 'name': room_name}
|
|
|
room_qs.update(**room_dict)
|
|
@@ -549,3 +690,45 @@ class EquipmentFamilyView(View):
|
|
|
id_sort = item[i]
|
|
|
print(id_sort)
|
|
|
return response.json(0)
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def get_member_permission_list(cls, user_id, request_dict, response):
|
|
|
+ """
|
|
|
+ 获取用户权限列表
|
|
|
+ @param user_id:
|
|
|
+ @param request_dict:
|
|
|
+ @param response:
|
|
|
+ @return:
|
|
|
+ """
|
|
|
+ family_id = request_dict.get('familyId')
|
|
|
+ user_id = request_dict.get('userId', user_id)
|
|
|
+ if not family_id:
|
|
|
+ return response.json(404)
|
|
|
+ result = cls.get_member_permission_by_family_id(user_id, family_id)
|
|
|
+ return response.json(0, result)
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def get_member_permission_by_family_id(cls, user_id, family_id):
|
|
|
+ """
|
|
|
+ 获取权限列表并返回当前user_id所在家庭中权限
|
|
|
+ @param user_id:
|
|
|
+ @param family_id:
|
|
|
+ @return:
|
|
|
+ """
|
|
|
+ member_qs = LoocamFamilyMember.objects.filter(family_id=family_id)
|
|
|
+ if user_id:
|
|
|
+ member_qs = member_qs.filter(user_id=user_id).values()
|
|
|
+ if member_qs.exists():
|
|
|
+ member_qs = member_qs.first()
|
|
|
+ permission = LoocamFamilyMemberPermission.objects.all().values('id', 'no')
|
|
|
+ data_list = []
|
|
|
+ this_permission = {}
|
|
|
+ result = {}
|
|
|
+ for item in permission:
|
|
|
+ if item['id'] == member_qs['permission_id']:
|
|
|
+ this_permission['id'] = item['id']
|
|
|
+ this_permission['no'] = item['no']
|
|
|
+ data_list.append(item)
|
|
|
+ result['memberPermission'] = this_permission
|
|
|
+ result['permissionList'] = data_list
|
|
|
+ return result
|