Przeglądaj źródła

更新token过长导致无法下载问题

zhangdongming 3 lat temu
rodzic
commit
ce48b09ce0
1 zmienionych plików z 59 dodań i 20 usunięć
  1. 59 20
      Controller/OTAEquipment.py

+ 59 - 20
Controller/OTAEquipment.py

@@ -1,12 +1,12 @@
 import hashlib
+import logging
 import os
-import simplejson as json
 import time
 import traceback
-
 from wsgiref.util import FileWrapper
 from zlib import crc32
 
+import simplejson as json
 from django.http import HttpResponse
 from django.utils.decorators import method_decorator
 from django.views.decorators.csrf import csrf_exempt
@@ -14,7 +14,6 @@ from django.views.generic import TemplateView
 
 from Ansjer.config import BASE_DIR
 from Ansjer.config import SERVER_DOMAIN
-from Ansjer.config import SERVER_TYPE
 from Model.models import Device_User, EquipmentVersionLimitModel, CountryIPModel, DeviceOTAUpgradeRecord
 from Model.models import Equipment_Version
 from Object.RedisObject import RedisObject
@@ -23,6 +22,7 @@ from Object.TokenObject import TokenObject
 from Object.UrlTokenObject import UrlTokenObject
 from Service.CommonService import CommonService
 from Service.ModelService import ModelService
+import uuid
 
 
 def downloadUrl(fileType, fileCode, fileVersion, fileName):
@@ -494,7 +494,7 @@ def getNewVerInterface(request):
     else:
         equipmentValid = Equipment_Version.objects.filter(code=code, status=1, lang='en').order_by(
             '-data_joined')
-
+    logger = logging.getLogger('info')
     if equipmentValid.exists():
         equipment = equipmentValid[0]
         redisObject = RedisObject()
@@ -533,14 +533,32 @@ def getNewVerInterface(request):
         ver = equipment.softwareVersion
         max_ver = equipment.max_ver
         print(now_ver <= max_ver)
+
+        now_stamp = int(time.time())
         if now_ver <= max_ver:
             # 创建url的token
+            param_url = "ansjer/" + CommonService.RandomStr(6) + "/" + file_path
+            data = {'Url': param_url, 'user_id': tko.userID,
+                    'uid': uid, 'serial_number': serial_number, 'old_version': "V" + now_ver + "." + code,
+                    'new_version': version, 'mci': mci}
+            device_info_value = json.dumps(data)
+            expire = 3600 * 24 * 2 + 600 + now_stamp
+
+            str_uuid = str(tko.userID)
+            if serial_number and serial_number != 'null':
+                str_uuid += serial_number
+            elif uid and uid != 'null':
+                str_uuid += uid
+            str_uuid += now_ver
+            device_info_key = 'ASJ:SERVER:VERSION:{}'.format(str_uuid)
+            logger.info('缓存key={}'.format(device_info_key))
+            redisObject.set_data(device_info_key, device_info_value, expire)
+
             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': "V" + now_ver + "." + code,'new_version': version, 'mci': mci})
+            file_path = url_tko.generate(data={'Url': 'a', 'uid': str_uuid})
+
             url = SERVER_DOMAIN + 'dlotapack/' + file_path
-            print(url)
+            logger.info('<<<<<<<URL={}'.format(url))
             # if SERVER_TYPE == 'Ansjer.formal_settings':
             #     url = SERVER_DOMAIN + 'dlotapack/' + file_path
             # else:
@@ -549,11 +567,13 @@ def getNewVerInterface(request):
             #     url = 'http://www.zositech.xyz/dlotapack/' + file_path
             # else:
             #     url = SERVER_DOMAIN + 'dlotapack/' + file_path
-            return response.json(0, {
+            result = {
                 'ver': ver,
                 'url': url,
                 "Description": equipment.Description,
-            })
+            }
+            logger.info('<<<<<响应结果={}'.format(result))
+            return response.json(0, result)
         else:
             return response.json(902)
     else:
@@ -666,14 +686,32 @@ def downloadOTAInterfaceV2(request, fullPath, *callback_args, **callback_kwargs)
     # 解密url的token
     url_token = UrlTokenObject(fullPath)
 
-    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
-
+    # 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
+    str_uuid = url_token.uid
+    logger = logging.getLogger('info')
+    logger.info('<<<<<进入OTA下载')
+    redis_object = RedisObject()
+    logger.info(str_uuid)
+    device_key = 'ASJ:SERVER:VERSION:{}'.format(str_uuid)
+    device_value = redis_object.get_data(device_key)
+    logger.info(device_value)
+    if not device_value:
+        return res.json(907)
+    device_dist = json.loads(device_value)
+    logger.info('<<<<<解析={}'.format(device_dist))
+    fp = device_dist['Url']
+    serial_number = device_dist['serial_number']
+    uid = device_dist['uid']
+    user_id = device_dist['user_id']
+    mci = device_dist['mci']
+    old_version = device_dist['old_version']
+    new_version = device_dist['new_version']
     if '' == fp:
         return res.json(907)
 
@@ -692,7 +730,7 @@ def downloadOTAInterfaceV2(request, fullPath, *callback_args, **callback_kwargs)
                 response['Content-CRC32'] = getMD5orSHA265(fullPath, 'CRC32')
                 response['Content-Error'] = res.formal(0)
 
-                #设备下载OTA包,记录数据库
+                # 设备下载OTA包,记录数据库
                 # 记录设备OTA升级
                 createdTime = int(time.time())
                 DeviceOTAUpgradeRecord.objects.create(
@@ -704,6 +742,8 @@ def downloadOTAInterfaceV2(request, fullPath, *callback_args, **callback_kwargs)
                     uid=uid,
                     mci=mci,
                 )
+                del_data = redis_object.del_data(device_key)
+                logger.info('删除缓存={}'.format(del_data))
                 return response
             except Exception as e:
                 return res.json(906, repr(e))
@@ -782,4 +822,3 @@ def checkMaxVersion(request):
     }
 
     return response.json(0, res)
-