|
@@ -1,26 +1,27 @@
|
|
|
+import logging
|
|
|
import re
|
|
|
+import threading
|
|
|
import time
|
|
|
import traceback
|
|
|
-import threading
|
|
|
-import logging
|
|
|
|
|
|
+import oss2
|
|
|
import requests
|
|
|
import simplejson as json
|
|
|
+from django.db import transaction
|
|
|
+from django.db.models import Q
|
|
|
from django.utils import timezone
|
|
|
+
|
|
|
+from Ansjer.config import OSS_STS_ACCESS_SECRET, OSS_STS_ACCESS_KEY, BASE_DIR
|
|
|
+from Ansjer.config import PUSH_REDIS_ADDRESS
|
|
|
+from Controller.DetectController import DetectControllerView
|
|
|
from Model.models import Device_User, Device_Info, UID_Bucket, UID_Preview, UidSetModel, UidPushModel, \
|
|
|
- UIDCompanySerialModel, iotdeviceInfoModel, UIDMainUser, UidChannelSetModel, LogModel
|
|
|
-from django.db.models import Q
|
|
|
+ UIDCompanySerialModel, iotdeviceInfoModel, UidChannelSetModel, LogModel, UnicomDeviceInfo, SysMsgModel
|
|
|
+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
|
|
|
-from Ansjer.config import OSS_STS_ACCESS_SECRET, OSS_STS_ACCESS_KEY, BASE_DIR
|
|
|
-from Object.ETkObject import ETkObject
|
|
|
-import oss2
|
|
|
-from django.http import JsonResponse
|
|
|
-from Object.RedisObject import RedisObject
|
|
|
-from Controller.DetectController import DetectControllerView
|
|
|
-from Ansjer.config import PUSH_REDIS_ADDRESS
|
|
|
+
|
|
|
|
|
|
# 查询用户设备
|
|
|
def queryUserEquipmentInterface(request):
|
|
@@ -165,7 +166,8 @@ def delUserEquipmentInterface(request):
|
|
|
|
|
|
if dv_qs.exists():
|
|
|
uid = dv_qs[0].UID
|
|
|
- asy = threading.Thread(target=ModelService.add_log, args=(CommonService.get_ip_address(request), userID, 'deleteV1'))
|
|
|
+ asy = threading.Thread(target=ModelService.add_log,
|
|
|
+ args=(CommonService.get_ip_address(request), userID, 'deleteV1'))
|
|
|
asy.start()
|
|
|
|
|
|
print('删除')
|
|
@@ -233,7 +235,9 @@ def modifyUserEquipmentInterface(request):
|
|
|
uid = qs[0].UID
|
|
|
if uid == '98UXAA8BRPA35VAL111A':
|
|
|
asy = threading.Thread(target=ModelService.update_log,
|
|
|
- args=(CommonService.get_ip_address(request), userID, 'modifyV0', deviceContent, id))
|
|
|
+ args=(
|
|
|
+ CommonService.get_ip_address(request), userID, 'modifyV0', deviceContent,
|
|
|
+ id))
|
|
|
asy.start()
|
|
|
nickname = qs[0].NickName
|
|
|
# 增加设备影子信息修改昵称 start
|
|
@@ -410,7 +414,8 @@ def addInterface(request):
|
|
|
primaryMaster = ''
|
|
|
isShare = False
|
|
|
|
|
|
- is_bind = Device_Info.objects.filter(UID=UID, isShare=False).values('userID__userID', 'primaryUserID', 'primaryMaster')
|
|
|
+ is_bind = Device_Info.objects.filter(UID=UID, isShare=False).values('userID__userID', 'primaryUserID',
|
|
|
+ 'primaryMaster')
|
|
|
|
|
|
if main_exist.exists():
|
|
|
vodPrimaryUserID = main_exist[0]['vodPrimaryUserID']
|
|
@@ -422,7 +427,8 @@ def addInterface(request):
|
|
|
isShare = True
|
|
|
|
|
|
isusermain = False
|
|
|
- if (vodPrimaryUserID != userID and vodPrimaryUserID != '') or (primaryUserID != userID and primaryUserID != ''):
|
|
|
+ if (vodPrimaryUserID != userID and vodPrimaryUserID != '') or (
|
|
|
+ primaryUserID != userID and primaryUserID != ''):
|
|
|
isusermain = True
|
|
|
|
|
|
# 判断是否有已绑定用户
|
|
@@ -480,7 +486,8 @@ def addInterface(request):
|
|
|
userDevice = Device_Info(id=pk, 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)
|
|
|
+ version=version, vodPrimaryUserID=vodPrimaryUserID,
|
|
|
+ vodPrimaryMaster=vodPrimaryMaster)
|
|
|
userDevice.save()
|
|
|
uid_serial_qs = UIDCompanySerialModel.objects.filter(
|
|
|
uid__uid=UID)
|
|
@@ -507,7 +514,8 @@ def addInterface(request):
|
|
|
{'userID': userID, 'UID': UID, 'uid_nick': uid_channel_set['channel_name'],
|
|
|
'channel': uid_channel_set['channel'], 'password': View_Password})
|
|
|
else:
|
|
|
- data_list = [{'userID': userID, 'UID': UID, 'uid_nick': NickName, 'password': View_Password}]
|
|
|
+ data_list = [
|
|
|
+ {'userID': userID, 'UID': UID, 'uid_nick': NickName, 'password': View_Password}]
|
|
|
|
|
|
# 请求Alexa服务器更新事件网关
|
|
|
data_list = json.dumps(data_list)
|
|
@@ -521,22 +529,24 @@ def addInterface(request):
|
|
|
'View_Account',
|
|
|
'View_Password', 'ChannelIndex', 'Type',
|
|
|
'isShare',
|
|
|
- 'primaryUserID', 'primaryMaster', 'vodPrimaryUserID', 'vodPrimaryMaster', 'userID__userEmail',
|
|
|
+ 'primaryUserID', 'primaryMaster',
|
|
|
+ 'vodPrimaryUserID', 'vodPrimaryMaster',
|
|
|
+ 'userID__userEmail',
|
|
|
'data_joined', 'version',
|
|
|
- 'isVod', 'isExist', 'isCameraOpenCloud', 'serial_number')
|
|
|
+ '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)
|
|
|
|
|
|
-
|
|
|
# 新增获取IOT证书内容
|
|
|
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
|
|
|
+ 'endpoint': iotqs[0].endpoint,
|
|
|
+ 'token_iot_number': iotqs[0].endpoint
|
|
|
}
|
|
|
|
|
|
if isMainUserExists:
|
|
@@ -795,50 +805,55 @@ def deleteInterface(request):
|
|
|
if not userID:
|
|
|
return response.json(309)
|
|
|
try:
|
|
|
- dv_qs = Device_Info.objects.filter(userID_id=userID, id=id)
|
|
|
- if not dv_qs.exists():
|
|
|
- return response.json(14)
|
|
|
- uid = dv_qs[0].UID
|
|
|
- if userID == dv_qs[0].vodPrimaryUserID:
|
|
|
- Device_Info.objects.filter(UID=uid).update(vodPrimaryUserID='', vodPrimaryMaster='')
|
|
|
+ with transaction.atomic():
|
|
|
+ dv_qs = Device_Info.objects.filter(userID_id=userID, id=id)
|
|
|
+ if not dv_qs.exists():
|
|
|
+ return response.json(14)
|
|
|
+ uid = dv_qs[0].UID
|
|
|
+ serial_number = dv_qs[0].serial_number
|
|
|
+ if userID == dv_qs[0].vodPrimaryUserID:
|
|
|
+ Device_Info.objects.filter(UID=uid).update(vodPrimaryUserID='', vodPrimaryMaster='')
|
|
|
|
|
|
- if dv_qs[0].isShare:
|
|
|
- dv_qs.delete()
|
|
|
- else:
|
|
|
- # a.主用户删除设备
|
|
|
- dv_qs.delete()
|
|
|
- # 删除设备影子信息uid_set 外键关联删除设备推送配置信息 uid_push
|
|
|
- up_qs = UidPushModel.objects.filter(uid_set__uid=uid)
|
|
|
- DetectControllerView().do_delete_redis(uid)
|
|
|
- if up_qs.count() > 1:
|
|
|
- UidPushModel.objects.filter(uid_set__uid=uid, userID_id=userID).delete()
|
|
|
- redisObj = RedisObject(db=6, SERVER_HOST=PUSH_REDIS_ADDRESS)
|
|
|
- ykey = '{uid}_redis_qs'.format(uid=uid)
|
|
|
- if ykey:
|
|
|
- redisObj.del_data(key=ykey)
|
|
|
+ if dv_qs[0].isShare:
|
|
|
+ dv_qs.delete()
|
|
|
else:
|
|
|
- up_qs.delete()
|
|
|
- # b.删除次用户设备
|
|
|
- Device_Info.objects.filter(UID=uid, isShare=True, primaryUserID=userID).delete()
|
|
|
- # 异步删除推送消息
|
|
|
- asy = threading.Thread(target=ModelService.del_eq_info, args=(userID, uid))
|
|
|
- asy.start()
|
|
|
+ # a.主用户删除设备
|
|
|
+ dv_qs.delete()
|
|
|
+ # 删除设备影子信息uid_set 外键关联删除设备推送配置信息 uid_push
|
|
|
+ up_qs = UidPushModel.objects.filter(uid_set__uid=uid)
|
|
|
+ DetectControllerView().do_delete_redis(uid)
|
|
|
+ if up_qs.count() > 1:
|
|
|
+ UidPushModel.objects.filter(uid_set__uid=uid, userID_id=userID).delete()
|
|
|
+ redisObj = RedisObject(db=6, SERVER_HOST=PUSH_REDIS_ADDRESS)
|
|
|
+ ykey = '{uid}_redis_qs'.format(uid=uid)
|
|
|
+ if ykey:
|
|
|
+ redisObj.del_data(key=ykey)
|
|
|
+ else:
|
|
|
+ up_qs.delete()
|
|
|
+ # b.删除次用户设备
|
|
|
+ Device_Info.objects.filter(UID=uid, isShare=True, primaryUserID=userID).delete()
|
|
|
|
|
|
- # 记录操作日志
|
|
|
- now_time = int(time.time())
|
|
|
- ip = CommonService.get_ip_address(request)
|
|
|
- content = json.loads(json.dumps(request_dict))
|
|
|
- log = {
|
|
|
- 'ip': ip,
|
|
|
- 'user_id': 1,
|
|
|
- 'status': 200,
|
|
|
- 'time': now_time,
|
|
|
- 'content': json.dumps(content),
|
|
|
- 'url': 'equipment/delete',
|
|
|
- 'operation': '{}删除设备,uid:{}'.format(userID, uid),
|
|
|
- }
|
|
|
- LogModel.objects.create(**log)
|
|
|
+ if not serial_number:
|
|
|
+ serial_number = CommonService.query_serial_with_uid(uid)
|
|
|
+ del_unicom_info(userID, serial_number)
|
|
|
+ # 异步删除推送消息
|
|
|
+ asy = threading.Thread(target=ModelService.del_eq_info, args=(userID, uid))
|
|
|
+ asy.start()
|
|
|
|
|
|
+ # 记录操作日志
|
|
|
+ now_time = int(time.time())
|
|
|
+ ip = CommonService.get_ip_address(request)
|
|
|
+ content = json.loads(json.dumps(request_dict))
|
|
|
+ log = {
|
|
|
+ 'ip': ip,
|
|
|
+ 'user_id': 1,
|
|
|
+ 'status': 200,
|
|
|
+ 'time': now_time,
|
|
|
+ 'content': json.dumps(content),
|
|
|
+ 'url': 'equipment/delete',
|
|
|
+ 'operation': '{}删除设备,uid:{}'.format(userID, uid),
|
|
|
+ }
|
|
|
+ LogModel.objects.create(**log)
|
|
|
except Exception as e:
|
|
|
errorInfo = traceback.format_exc()
|
|
|
print('删除数据库记录错误: %s' % errorInfo)
|
|
@@ -846,6 +861,22 @@ def deleteInterface(request):
|
|
|
else:
|
|
|
return response.json(0)
|
|
|
|
|
|
+
|
|
|
+def del_unicom_info(user_id, serial_no):
|
|
|
+ """
|
|
|
+ 解绑联通绑定用户信息
|
|
|
+ @param user_id: 用户id
|
|
|
+ @param serial_no: 序列号
|
|
|
+ """
|
|
|
+ u_dev_info_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_no)
|
|
|
+ if u_dev_info_qs.exists():
|
|
|
+ now_time = int(time.time())
|
|
|
+ u_dev_info_qs.update(user_id='', updated_time=now_time)
|
|
|
+ sys_msg_qs = SysMsgModel.objects.filter(userID_id=user_id, uid=serial_no)
|
|
|
+ if sys_msg_qs.exists():
|
|
|
+ sys_msg_qs.delete()
|
|
|
+
|
|
|
+
|
|
|
# 批量删除设备
|
|
|
def batchDeleteInterface(request):
|
|
|
'''
|
|
@@ -926,6 +957,7 @@ def batchDeleteInterface(request):
|
|
|
else:
|
|
|
return response.json(0)
|
|
|
|
|
|
+
|
|
|
# 新查询设备字段
|
|
|
def queryInterface(request):
|
|
|
request.encoding = 'utf-8'
|
|
@@ -959,8 +991,10 @@ def queryInterface(request):
|
|
|
# count = dvqs.count()
|
|
|
dvql = dvqs[(page - 1) * line:page * line].values('id', 'userID', 'NickName', 'UID', 'View_Account',
|
|
|
'View_Password', 'ChannelIndex', 'Type', 'isShare',
|
|
|
- 'primaryUserID', 'primaryMaster', 'data_joined', 'version', 'vodPrimaryUserID', 'vodPrimaryMaster', 'userID__userEmail',
|
|
|
- 'isVod', 'isExist', 'NotificationMode', 'isCameraOpenCloud', 'serial_number')
|
|
|
+ 'primaryUserID', 'primaryMaster', 'data_joined', 'version',
|
|
|
+ 'vodPrimaryUserID', 'vodPrimaryMaster', 'userID__userEmail',
|
|
|
+ 'isVod', 'isExist', 'NotificationMode', 'isCameraOpenCloud',
|
|
|
+ 'serial_number')
|
|
|
dvls = CommonService.qs_to_list(dvql)
|
|
|
uid_list = []
|
|
|
serial_number_list = []
|
|
@@ -972,8 +1006,7 @@ def queryInterface(request):
|
|
|
uid_list.append(dvl['UID'])
|
|
|
serial_number_list.append(dvl['serial_number'][0:6])
|
|
|
|
|
|
-
|
|
|
- #新增获取IOT证书内容
|
|
|
+ # 新增获取IOT证书内容
|
|
|
iotqs = iotdeviceInfoModel.objects.filter(serial_number__in=serial_number_list)
|
|
|
|
|
|
ubqs = UID_Bucket.objects.filter(uid__in=uid_list). \
|
|
@@ -984,7 +1017,7 @@ def queryInterface(request):
|
|
|
nowTime = int(time.time())
|
|
|
data = []
|
|
|
# 设备拓展信息表
|
|
|
- us_qs = UidSetModel.objects.filter(uid__in=uid_list).\
|
|
|
+ us_qs = UidSetModel.objects.filter(uid__in=uid_list). \
|
|
|
values('uid', 'version', 'nickname', 'detect_interval', 'is_ptz')
|
|
|
uv_dict = {}
|
|
|
for us in us_qs:
|
|
@@ -994,17 +1027,17 @@ def queryInterface(request):
|
|
|
'detect_interval': us['detect_interval']}
|
|
|
|
|
|
for p in dvls:
|
|
|
- #新增IOT
|
|
|
+ # 新增IOT
|
|
|
p['iot'] = []
|
|
|
for iot in iotqs:
|
|
|
if p['serial_number'][0:6] == iot.serial_number:
|
|
|
- p['iot'].append(
|
|
|
- {
|
|
|
- 'endpoint':iot.endpoint,
|
|
|
- 'token_iot_number':iot.token_iot_number
|
|
|
+ p['iot'].append(
|
|
|
+ {
|
|
|
+ 'endpoint': iot.endpoint,
|
|
|
+ 'token_iot_number': iot.token_iot_number
|
|
|
|
|
|
- }
|
|
|
- )
|
|
|
+ }
|
|
|
+ )
|
|
|
|
|
|
p['vod'] = []
|
|
|
for dm in ubqs:
|
|
@@ -1014,7 +1047,7 @@ def queryInterface(request):
|
|
|
p['preview'] = []
|
|
|
for up in upqs:
|
|
|
if p['UID'] == up['uid']:
|
|
|
- obj = 'uid_preview/{uid}/channel_{channel}.png'.\
|
|
|
+ obj = 'uid_preview/{uid}/channel_{channel}.png'. \
|
|
|
format(uid=up['uid'], channel=up['channel'])
|
|
|
img_sign = bucket.sign_url('GET', obj, 300)
|
|
|
p['preview'].append(img_sign)
|
|
@@ -1059,7 +1092,7 @@ def uid_status(request):
|
|
|
# 判断用户是否绑定设备
|
|
|
qs = UidSetModel.objects.filter(uid=uid).values('uid', 'detect_status', 'detect_interval', 'version', 'ucode',
|
|
|
'p2p_region', 'tz', 'video_code', 'channel', 'cloud_vod', 'id',
|
|
|
- 'detect_group', 'is_alexa', 'region_alexa','is_ptz')
|
|
|
+ 'detect_group', 'is_alexa', 'region_alexa', 'is_ptz')
|
|
|
|
|
|
# 调试
|
|
|
debugOnes = int(time.time())
|
|
@@ -1116,6 +1149,7 @@ def uid_status(request):
|
|
|
else:
|
|
|
return response.json(0)
|
|
|
|
|
|
+
|
|
|
def uid_status_test(request):
|
|
|
request.encoding = 'utf-8'
|
|
|
response = ResponseObject()
|
|
@@ -1174,7 +1208,6 @@ def uid_status_test(request):
|
|
|
return response.json(0)
|
|
|
|
|
|
|
|
|
-
|
|
|
def update_uid_set(request):
|
|
|
request.encoding = 'utf-8'
|
|
|
response = ResponseObject()
|