Browse Source

修改OTA升级记录接口

Ansjer_antony_ios 3 năm trước cách đây
mục cha
commit
dcc5506791
4 tập tin đã thay đổi với 69 bổ sung95 xóa
  1. 0 1
      Ansjer/urls.py
  2. 50 86
      Controller/OTAEquipment.py
  3. 1 3
      Model/models.py
  4. 18 5
      Object/UrlTokenObject.py

+ 0 - 1
Ansjer/urls.py

@@ -128,7 +128,6 @@ urlpatterns = [
     url(r'^dlotapack/(?P<fullPath>[0-9\w/.\-]+)', OTAEquipment.downloadOTAInterfaceV2),
     url(r'^OTA/getDownLoadOTApackUrl$', OTAEquipment.getDownLoadOTApackUrl),
     url(r'^OTA/checkMaxVersion$', OTAEquipment.checkMaxVersion),
-    url(r'^v2/OTA/checkMaxVersion$', OTAEquipment.checkMaxVersionV2),
 
     # h获取验证码    # v2接口
     url(r'^v2/account/authcode$', UserController.v2authCodeView.as_view()),

+ 50 - 86
Controller/OTAEquipment.py

@@ -412,7 +412,7 @@ def addNewEquipmentVersionInterface(request):
         lang = deviceData.get('lang', None)
         if code and lang:
             try:
-                Equipment_Version.objects.filter(code=code,lang=lang).delete()
+                Equipment_Version.objects.filter(code=code, lang=lang).delete()
             except Exception as e:
                 pass
         if version is None or filePath is None:
@@ -423,7 +423,7 @@ def addNewEquipmentVersionInterface(request):
             os.makedirs(paths)  # makedirs 创建文件时如果路径不存在会创建这个路径
             # print ('该文件不存在')
         else:
-            print ('该文件存在')
+            print('该文件存在')
         print(file_s)
         if file_s is None:
             deviceData['img'] = ''
@@ -477,9 +477,11 @@ def getNewVerInterface(request):
     token = request_dict.get('token', None)
     lang = request_dict.get('lang', None)
     now_ver = request_dict.get('ver', None)
-    uid = request_dict.get('uid', None)
+    uid = request_dict.get('uid', 'null')
+    serial_number = request_dict.get('serial_number', 'null')
+
     if not code or not now_ver:
-        return response.json(902, {'param':'code,ver'})
+        return response.json(902, {'param': 'code,ver'})
         # return response.json(444, 'code,ver')
     tko = TokenObject(token)
     response.lang = tko.lang
@@ -506,15 +508,15 @@ def getNewVerInterface(request):
                 redisObject.set_data(key=key, val=json.dumps(list(evl_qs.values())), expire=600)
         if evl_qs and len(evl_qs) > 0:
             evl = evl_qs[0]
-            if evl['type'] == 1: # uid限制
+            if evl['type'] == 1:  # uid限制
                 uids = json.loads(evl['content'])
                 if not uids.__contains__(uid):
                     return response.json(902)
-            elif evl['type'] == 2: # user限制
+            elif evl['type'] == 2:  # user限制
                 users = json.loads(evl['content'])
                 if not users.__contains__(tko.userID):
                     return response.json(902)
-            elif evl['type'] == 3: # 国家地区限制
+            elif evl['type'] == 3:  # 国家地区限制
                 countries = json.loads(evl['content'])
                 country_ip_qs = CountryIPModel.objects.filter(user_ex__userID=tko.userID)
                 if country_ip_qs.exists():
@@ -525,23 +527,27 @@ def getNewVerInterface(request):
                     return response.json(902)
 
         file_path = equipment.filePath
+        version = equipment.version
+        mci = equipment.mci
         ver = equipment.softwareVersion
         max_ver = equipment.max_ver
         print(now_ver <= max_ver)
         if now_ver <= max_ver:
             # 创建url的token
-            tko = UrlTokenObject()
-            file_path = tko.generate(data={'Url': "ansjer/" + CommonService.RandomStr(6) + "/" + file_path})
+            url_tko = UrlTokenObject()
+            file_path = url_tko.generate(
+                data={'Url': "ansjer/" + CommonService.RandomStr(6) + "/" + file_path, 'user_id': tko.userID,
+                      'uid': uid, 'serial_number': serial_number, 'old_version': now_ver,'new_version': version, 'mci': mci})
             url = SERVER_DOMAIN + 'dlotapack/' + file_path
             print(url)
             # if SERVER_TYPE == 'Ansjer.formal_settings':
             #     url = SERVER_DOMAIN + 'dlotapack/' + file_path
             # else:
             #     这里调用国内服务器进行下载,防止下载bug
-                # if code == '18E201200CA' or code == '18E201200CZ':
-                #     url = 'http://www.zositech.xyz/dlotapack/' + file_path
-                # else:
-                #     url = SERVER_DOMAIN + 'dlotapack/' + file_path
+            # if code == '18E201200CA' or code == '18E201200CZ':
+            #     url = 'http://www.zositech.xyz/dlotapack/' + file_path
+            # else:
+            #     url = SERVER_DOMAIN + 'dlotapack/' + file_path
             return response.json(0, {
                 'ver': ver,
                 'url': url,
@@ -655,17 +661,26 @@ def downloadOTAInterface(request, fullPath, *callback_args, **callback_kwargs):
 @csrf_exempt
 def downloadOTAInterfaceV2(request, fullPath, *callback_args, **callback_kwargs):
     res = ResponseObject()
-    print('fullPath:')
-    print(fullPath)
+    # print('fullPath:%s' % fullPath)
     # 解密url的token
     url_token = UrlTokenObject(fullPath)
-    if ('' == url_token.Url):
+
+    fp = url_token.Url
+    serial_number = url_token.serial_number
+    uid = url_token.uid
+    user_id = url_token.user_id
+    mci = url_token.mci
+    old_version = url_token.old_version
+    new_version = url_token.new_version
+
+    if ('' == fp):
         print('过期了')
         return res.json(907)
     else:
-        print(url_token.Url)
-        fp = url_token.Url
+        print('URL参数%s-%s-%s-%s-%s-', (url_token.Url,url_token.serial_number,url_token.uid,url_token.user_id,url_token.eid))
+
     fullPath = fp[14:]
+
     if fullPath:
         if os.path.isfile(fullPath):
             try:
@@ -678,6 +693,20 @@ def downloadOTAInterfaceV2(request, fullPath, *callback_args, **callback_kwargs)
                 response['Content-SHA265'] = getMD5orSHA265(fullPath, 'SHA265')
                 response['Content-CRC32'] = getMD5orSHA265(fullPath, 'CRC32')
                 response['Content-Error'] = res.formal(0)
+
+                #设备下载OTA包,记录数据库
+                # 记录设备OTA升级
+                createdTime = int(time.time())
+                DeviceOTAUpgradeRecord.objects.create(
+                    created_time=createdTime,
+                    old_version=old_version,
+                    new_version=new_version,
+                    user_id=user_id,
+                    serial_number=serial_number,
+                    uid=uid,
+                    mci=mci,
+                )
+
                 return response
             except Exception as e:
                 return res.json(906, repr(e))
@@ -723,51 +752,6 @@ def getDownLoadOTApackUrl(request):
 
 @csrf_exempt
 def checkMaxVersion(request):
-    # QT检查ota设备软件版本是否需要更新
-    response = ResponseObject()
-    if request.method == "POST":
-        request_dict = request.POST
-    elif request.method == "GET":
-        request_dict = request.GET
-    else:
-        return response.json(444)
-    deviceType = request_dict.get('deviceType', None)
-    version = request_dict.get('version', None) # 设备版本:当前版本+设备规格代码
-    lang = request_dict.get('lang', None)   # 'zh-Hans','en'
-    if not deviceType or not version:
-        return response.json(444, 'deviceType or version')
-    now_version = version[1:version.rindex('.')] # 去掉V
-    code = version[version.rindex('.')+1:]
-    equipmentVersion = Equipment_Version.objects.filter(mci=deviceType, code=code, lang=lang, status=1) # order by data_joined
-    # 判断是否有该版本存在
-    if not equipmentVersion.exists():
-        return response.json(907)
-
-    filePath = equipmentVersion[0].filePath
-    softwareVersion = equipmentVersion[0].softwareVersion   # 可用最新版本的版本号
-    maxVersion = equipmentVersion[0].max_ver
-    if now_version >= softwareVersion:
-        # 当前版本大于等于最新版本,不需要更新
-        return response.json(902)
-    url = SERVER_DOMAIN + 'OTA/downloadsPack/' + filePath   # 复用app下载ota包的方式
-    res = {
-        'url': url,
-    }
-    # 记录设备OTA升级
-    createdTime = int(time.time())
-    # deviceOTA_UpgradeRecord = DeviceOTAUpgradeRecord({
-    #     Equipment_package=equipmentVersion[0].eid, created_time=createdTime, oldVersion=now_version, newVersion=softwareVersion})
-    # deviceOTA_UpgradeRecord.save()
-    DeviceOTAUpgradeRecord.objects.create(
-        equipment_package=equipmentVersion[0],
-        created_time=createdTime,
-        old_version=version,
-        new_version=equipmentVersion[0].version,
-    )
-    return response.json(0, res)
-
-@csrf_exempt
-def checkMaxVersionV2(request):
     # QT检查ota设备软件版本是否需要更新
     response = ResponseObject()
     if request.method == "POST":
@@ -779,16 +763,6 @@ def checkMaxVersionV2(request):
     deviceType = request_dict.get('deviceType', None)
     version = request_dict.get('version', None)  # 设备版本:当前版本+设备规格代码
     lang = request_dict.get('lang', None)  # 'zh-Hans','en'
-    uid = request_dict.get('uid','null')
-    serial_number = request_dict.get('serial_number','null')
-
-
-    token = request_dict.get('token',None)
-    token_object = TokenObject(token)
-    if token_object.code != 0:
-        return response.json(token_object.code)
-    user_id = token_object.userID
-
     if not deviceType or not version:
         return response.json(444, 'deviceType or version')
     now_version = version[1:version.rindex('.')]  # 去掉V
@@ -809,16 +783,6 @@ def checkMaxVersionV2(request):
     res = {
         'url': url,
     }
-    # 记录设备OTA升级
-    createdTime = int(time.time())
-    DeviceOTAUpgradeRecord.objects.create(
-        equipment_package=equipmentVersion[0],
-        created_time=createdTime,
-        old_version=version,
-        new_version=equipmentVersion[0].version,
-        user_id=user_id,
-        serial_number=serial_number,
-        uid=uid,
-    )
-    print('执行成功%s' % DeviceOTAUpgradeRecord.id)
-    return response.json(0, res)
+
+    return response.json(0, res)
+

+ 1 - 3
Model/models.py

@@ -2045,15 +2045,13 @@ class CloudVodSurveysOperateLog(models.Model):
 
 class DeviceOTAUpgradeRecord(models.Model):
     id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
-    equipment_package = models.ForeignKey(Equipment_Version, to_field='eid', default='', on_delete=models.CASCADE,
-                             verbose_name='关联设备OTA包ID')
     created_time = models.IntegerField(default=0, verbose_name='创建时间')
     old_version = models.CharField(max_length=22, blank=True, verbose_name='原版本号', default='')
     new_version = models.CharField(max_length=22, blank=True, verbose_name='升级后版本号', default='')
     user_id = models.CharField(max_length=32, blank=True, verbose_name='用户ID', default='')
     serial_number = models.CharField(max_length=11, blank=True, verbose_name='序列号', default='')
     uid = models.CharField(max_length=22, blank=True, verbose_name='设备UID', default='')
-
+    mci = models.CharField(max_length=10, blank=True, verbose_name='设备大类:IPC/NVR/DVR', default='')
     class Meta:
         db_table = 'device_OTA_upgrade_record'
         verbose_name = '设备OTA升级记录'

+ 18 - 5
Object/UrlTokenObject.py

@@ -20,6 +20,12 @@ class UrlTokenObject:
     def __init__(self, token=None):
         self.token = token
         self.Url = ''
+        self.mci = ''
+        self.user_id = ''
+        self.uid = ''
+        self.serial_number = ''
+        self.old_version = ''
+        self.new_version = ''
         self.flag = self.valid()
 
     def valid(self):
@@ -28,13 +34,20 @@ class UrlTokenObject:
             if self.token is None:
                 return False
             res = jwt.decode(token, '12345', algorithms='HS256')
-            # print(res)
             Url = res.get('Url', None)
-            if Url is None:
+            if not Url:
                 return False
-            self.Url = Url
+
+            self.mci = res.get('mci', 'null')
+            self.user_id = res.get('user_id', 'null')
+            self.uid = res.get('uid', 'null')
+            self.serial_number = res.get('serial_number', 'null')
+            self.old_version = res.get('old_version', 'null')
+            self.new_version = res.get('new_version', 'null')
+
+
         except jwt.ExpiredSignatureError as e:
-            # print('过期')
+            print('UrlTokenObject_except_过期')
             return False
 
     def generate(self, data={}):
@@ -43,5 +56,5 @@ class UrlTokenObject:
         # 过期时间为两天
         data['exp'] = 172800 + now_stamp
         token = jwt.encode(data, '12345', algorithm='HS256').decode('utf-8')
-        self.token=token
+        self.token = token
         return token