瀏覽代碼

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

zhangdongming 3 年之前
父節點
當前提交
fec90cc414
共有 2 個文件被更改,包括 124 次插入83 次删除
  1. 14 6
      Controller/CloudTransfer.py
  2. 110 77
      Controller/EquipmentManager.py

+ 14 - 6
Controller/CloudTransfer.py

@@ -6,16 +6,17 @@
 @IDE :PyCharm
 """
 import time
+
 from django.db import transaction
+from django.db.models import Q
 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 Service.CommonService import CommonService
 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):
@@ -59,8 +60,8 @@ class cloudTestView(View):
 
         try:
             # 查询该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():
                 return response.json(10008)
 
@@ -101,6 +102,7 @@ class cloudTestView(View):
             vodPrimaryMaster = newUserName
 
             with transaction.atomic():
+                serial_number = old_deviceInfo_qs[0]['serial_number']
                 # 更新旧设备的userID,设备添加时间,关闭推送消息提醒
                 old_deviceInfo_qs.update(userID=newUserID, data_joined=now_time, NotificationMode=0)
                 # 更新设备的主用户信息
@@ -108,6 +110,12 @@ class cloudTestView(View):
                                                            vodPrimaryMaster=vodPrimaryMaster)
                 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()
                 # uid_main_dict = {
                 #     'UID': uid,

+ 110 - 77
Controller/EquipmentManager.py

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