Browse Source

设备转移修改联通卡绑定,删除设备解绑联通4G卡

zhangdongming 3 years ago
parent
commit
fec90cc414
2 changed files with 124 additions and 83 deletions
  1. 14 6
      Controller/CloudTransfer.py
  2. 110 77
      Controller/EquipmentManager.py

+ 14 - 6
Controller/CloudTransfer.py

@@ -6,16 +6,17 @@
 @IDE :PyCharm
 @IDE :PyCharm
 """
 """
 import time
 import time
+
 from django.db import transaction
 from django.db import transaction
+from django.db.models import Q
 from django.views.generic.base import View
 from django.views.generic.base import View
 
 
+from Model.models import Device_User, Device_Info, Order_Model, UID_Bucket, StsCrdModel, VodHlsModel, Unused_Uid_Meal, \
+    VodBucketModel, UnicomDeviceInfo
+from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
 from Service.ModelService import ModelService
 from Service.ModelService import ModelService
-from Object.ResponseObject import ResponseObject
-from django.db.models import Q
-from Model.models import Device_User, Device_Info, Order_Model, UID_Bucket, StsCrdModel, VodHlsModel, Unused_Uid_Meal, \
-    VodBucketModel, UIDMainUser
 
 
 
 
 class cloudTestView(View):
 class cloudTestView(View):
@@ -59,8 +60,8 @@ class cloudTestView(View):
 
 
         try:
         try:
             # 查询该userID下是否存在此设备
             # 查询该userID下是否存在此设备
-            old_deviceInfo_qs = Device_Info.objects.filter(userID_id=oldUserID, UID=uid, isExist=1).values('isShare',
-                                                                                                           'vodPrimaryUserID')
+            old_deviceInfo_qs = Device_Info.objects.filter(userID_id=oldUserID, UID=uid, isExist=1) \
+                .values('isShare', 'vodPrimaryUserID', 'serial_number')
             if not old_deviceInfo_qs.exists():
             if not old_deviceInfo_qs.exists():
                 return response.json(10008)
                 return response.json(10008)
 
 
@@ -101,6 +102,7 @@ class cloudTestView(View):
             vodPrimaryMaster = newUserName
             vodPrimaryMaster = newUserName
 
 
             with transaction.atomic():
             with transaction.atomic():
+                serial_number = old_deviceInfo_qs[0]['serial_number']
                 # 更新旧设备的userID,设备添加时间,关闭推送消息提醒
                 # 更新旧设备的userID,设备添加时间,关闭推送消息提醒
                 old_deviceInfo_qs.update(userID=newUserID, data_joined=now_time, NotificationMode=0)
                 old_deviceInfo_qs.update(userID=newUserID, data_joined=now_time, NotificationMode=0)
                 # 更新设备的主用户信息
                 # 更新设备的主用户信息
@@ -108,6 +110,12 @@ class cloudTestView(View):
                                                            vodPrimaryMaster=vodPrimaryMaster)
                                                            vodPrimaryMaster=vodPrimaryMaster)
                 VodHlsModel.objects.filter(uid=uid).delete()
                 VodHlsModel.objects.filter(uid=uid).delete()
 
 
+                if not serial_number:
+                    serial_number = CommonService.query_serial_with_uid(uid)
+                u_dev_info_qs = UnicomDeviceInfo.objects.filter(serial_no=serial_number)
+                if u_dev_info_qs.exists():
+                    now_time = int(time.time())
+                    u_dev_info_qs.update(user_id=newUserID, updated_time=now_time)
                 # UIDMainUser.objects.filter(UID=uid).delete()
                 # UIDMainUser.objects.filter(UID=uid).delete()
                 # uid_main_dict = {
                 # uid_main_dict = {
                 #     'UID': uid,
                 #     'UID': uid,

+ 110 - 77
Controller/EquipmentManager.py

@@ -1,26 +1,27 @@
+import logging
 import re
 import re
+import threading
 import time
 import time
 import traceback
 import traceback
-import threading
-import logging
 
 
+import oss2
 import requests
 import requests
 import simplejson as json
 import simplejson as json
+from django.db import transaction
+from django.db.models import Q
 from django.utils import timezone
 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, \
 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.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
 from Service.ModelService import ModelService
 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):
 def queryUserEquipmentInterface(request):
@@ -165,7 +166,8 @@ def delUserEquipmentInterface(request):
 
 
         if dv_qs.exists():
         if dv_qs.exists():
             uid = dv_qs[0].UID
             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()
             asy.start()
 
 
             print('删除')
             print('删除')
@@ -233,7 +235,9 @@ def modifyUserEquipmentInterface(request):
             uid = qs[0].UID
             uid = qs[0].UID
             if uid == '98UXAA8BRPA35VAL111A':
             if uid == '98UXAA8BRPA35VAL111A':
                 asy = threading.Thread(target=ModelService.update_log,
                 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()
                 asy.start()
             nickname = qs[0].NickName
             nickname = qs[0].NickName
             # 增加设备影子信息修改昵称 start
             # 增加设备影子信息修改昵称 start
@@ -410,7 +414,8 @@ def addInterface(request):
                 primaryMaster = ''
                 primaryMaster = ''
                 isShare = False
                 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():
                 if main_exist.exists():
                     vodPrimaryUserID = main_exist[0]['vodPrimaryUserID']
                     vodPrimaryUserID = main_exist[0]['vodPrimaryUserID']
@@ -422,7 +427,8 @@ def addInterface(request):
                     isShare = True
                     isShare = True
 
 
                 isusermain = False
                 isusermain = False
-                if (vodPrimaryUserID != userID and vodPrimaryUserID != '') or (primaryUserID != userID and primaryUserID != ''):
+                if (vodPrimaryUserID != userID and vodPrimaryUserID != '') or (
+                        primaryUserID != userID and primaryUserID != ''):
                     isusermain = True
                     isusermain = True
 
 
                 # 判断是否有已绑定用户
                 # 判断是否有已绑定用户
@@ -480,7 +486,8 @@ def addInterface(request):
                     userDevice = Device_Info(id=pk, userID_id=userID, UID=UID,
                     userDevice = Device_Info(id=pk, userID_id=userID, UID=UID,
                                              NickName=NickName, View_Account=View_Account,
                                              NickName=NickName, View_Account=View_Account,
                                              View_Password=View_Password, Type=Type, ChannelIndex=ChannelIndex,
                                              View_Password=View_Password, Type=Type, ChannelIndex=ChannelIndex,
-                                             version=version, vodPrimaryUserID=vodPrimaryUserID, vodPrimaryMaster=vodPrimaryMaster)
+                                             version=version, vodPrimaryUserID=vodPrimaryUserID,
+                                             vodPrimaryMaster=vodPrimaryMaster)
                     userDevice.save()
                     userDevice.save()
                     uid_serial_qs = UIDCompanySerialModel.objects.filter(
                     uid_serial_qs = UIDCompanySerialModel.objects.filter(
                         uid__uid=UID)
                         uid__uid=UID)
@@ -507,7 +514,8 @@ def addInterface(request):
                                         {'userID': userID, 'UID': UID, 'uid_nick': uid_channel_set['channel_name'],
                                         {'userID': userID, 'UID': UID, 'uid_nick': uid_channel_set['channel_name'],
                                          'channel': uid_channel_set['channel'], 'password': View_Password})
                                          'channel': uid_channel_set['channel'], 'password': View_Password})
                         else:
                         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服务器更新事件网关
                         # 请求Alexa服务器更新事件网关
                         data_list = json.dumps(data_list)
                         data_list = json.dumps(data_list)
@@ -521,22 +529,24 @@ def addInterface(request):
                                                                     'View_Account',
                                                                     'View_Account',
                                                                     'View_Password', 'ChannelIndex', 'Type',
                                                                     'View_Password', 'ChannelIndex', 'Type',
                                                                     'isShare',
                                                                     'isShare',
-                                                                    'primaryUserID', 'primaryMaster', 'vodPrimaryUserID', 'vodPrimaryMaster', 'userID__userEmail',
+                                                                    'primaryUserID', 'primaryMaster',
+                                                                    'vodPrimaryUserID', 'vodPrimaryMaster',
+                                                                    'userID__userEmail',
                                                                     'data_joined', 'version',
                                                                     'data_joined', 'version',
-                                                                    'isVod', 'isExist', 'isCameraOpenCloud', 'serial_number')
+                                                                    'isVod', 'isExist', 'isCameraOpenCloud',
+                                                                    'serial_number')
                     dvql = CommonService.qs_to_list(dvqs)
                     dvql = CommonService.qs_to_list(dvqs)
                     ubqs = UID_Bucket.objects.filter(uid=UID). \
                     ubqs = UID_Bucket.objects.filter(uid=UID). \
                         values('bucket__content', 'status', 'channel', 'endTime', 'uid')
                         values('bucket__content', 'status', 'channel', 'endTime', 'uid')
                     res = dvql[0]
                     res = dvql[0]
                     res['vod'] = list(ubqs)
                     res['vod'] = list(ubqs)
 
 
-
                     # 新增获取IOT证书内容
                     # 新增获取IOT证书内容
                     iotqs = iotdeviceInfoModel.objects.filter(serial_number=dvql[0]['serial_number'])
                     iotqs = iotdeviceInfoModel.objects.filter(serial_number=dvql[0]['serial_number'])
                     if iotqs.exists():
                     if iotqs.exists():
                         res['iot'] = {
                         res['iot'] = {
-                                'endpoint': iotqs[0].endpoint,
-                                'token_iot_number': iotqs[0].endpoint
+                            'endpoint': iotqs[0].endpoint,
+                            'token_iot_number': iotqs[0].endpoint
                         }
                         }
 
 
                     if isMainUserExists:
                     if isMainUserExists:
@@ -795,50 +805,55 @@ def deleteInterface(request):
     if not userID:
     if not userID:
         return response.json(309)
         return response.json(309)
     try:
     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:
             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:
     except Exception as e:
         errorInfo = traceback.format_exc()
         errorInfo = traceback.format_exc()
         print('删除数据库记录错误: %s' % errorInfo)
         print('删除数据库记录错误: %s' % errorInfo)
@@ -846,6 +861,22 @@ def deleteInterface(request):
     else:
     else:
         return response.json(0)
         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):
 def batchDeleteInterface(request):
     '''
     '''
@@ -926,6 +957,7 @@ def batchDeleteInterface(request):
     else:
     else:
         return response.json(0)
         return response.json(0)
 
 
+
 # 新查询设备字段
 # 新查询设备字段
 def queryInterface(request):
 def queryInterface(request):
     request.encoding = 'utf-8'
     request.encoding = 'utf-8'
@@ -959,8 +991,10 @@ def queryInterface(request):
         # count = dvqs.count()
         # count = dvqs.count()
         dvql = dvqs[(page - 1) * line:page * line].values('id', 'userID', 'NickName', 'UID', 'View_Account',
         dvql = dvqs[(page - 1) * line:page * line].values('id', 'userID', 'NickName', 'UID', 'View_Account',
                                                           'View_Password', 'ChannelIndex', 'Type', 'isShare',
                                                           '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)
         dvls = CommonService.qs_to_list(dvql)
         uid_list = []
         uid_list = []
         serial_number_list = []
         serial_number_list = []
@@ -972,8 +1006,7 @@ def queryInterface(request):
             uid_list.append(dvl['UID'])
             uid_list.append(dvl['UID'])
             serial_number_list.append(dvl['serial_number'][0:6])
             serial_number_list.append(dvl['serial_number'][0:6])
 
 
-
-        #新增获取IOT证书内容
+        # 新增获取IOT证书内容
         iotqs = iotdeviceInfoModel.objects.filter(serial_number__in=serial_number_list)
         iotqs = iotdeviceInfoModel.objects.filter(serial_number__in=serial_number_list)
 
 
         ubqs = UID_Bucket.objects.filter(uid__in=uid_list). \
         ubqs = UID_Bucket.objects.filter(uid__in=uid_list). \
@@ -984,7 +1017,7 @@ def queryInterface(request):
         nowTime = int(time.time())
         nowTime = int(time.time())
         data = []
         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')
             values('uid', 'version', 'nickname', 'detect_interval', 'is_ptz')
         uv_dict = {}
         uv_dict = {}
         for us in us_qs:
         for us in us_qs:
@@ -994,17 +1027,17 @@ def queryInterface(request):
                                   'detect_interval': us['detect_interval']}
                                   'detect_interval': us['detect_interval']}
 
 
         for p in dvls:
         for p in dvls:
-            #新增IOT
+            # 新增IOT
             p['iot'] = []
             p['iot'] = []
             for iot in iotqs:
             for iot in iotqs:
                 if p['serial_number'][0:6] == iot.serial_number:
                 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'] = []
             p['vod'] = []
             for dm in ubqs:
             for dm in ubqs:
@@ -1014,7 +1047,7 @@ def queryInterface(request):
             p['preview'] = []
             p['preview'] = []
             for up in upqs:
             for up in upqs:
                 if p['UID'] == up['uid']:
                 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'])
                         format(uid=up['uid'], channel=up['channel'])
                     img_sign = bucket.sign_url('GET', obj, 300)
                     img_sign = bucket.sign_url('GET', obj, 300)
                     p['preview'].append(img_sign)
                     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',
     qs = UidSetModel.objects.filter(uid=uid).values('uid', 'detect_status', 'detect_interval', 'version', 'ucode',
                                                     'p2p_region', 'tz', 'video_code', 'channel', 'cloud_vod', 'id',
                                                     '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())
     debugOnes = int(time.time())
@@ -1116,6 +1149,7 @@ def uid_status(request):
     else:
     else:
         return response.json(0)
         return response.json(0)
 
 
+
 def uid_status_test(request):
 def uid_status_test(request):
     request.encoding = 'utf-8'
     request.encoding = 'utf-8'
     response = ResponseObject()
     response = ResponseObject()
@@ -1174,7 +1208,6 @@ def uid_status_test(request):
         return response.json(0)
         return response.json(0)
 
 
 
 
-
 def update_uid_set(request):
 def update_uid_set(request):
     request.encoding = 'utf-8'
     request.encoding = 'utf-8'
     response = ResponseObject()
     response = ResponseObject()