Browse Source

Merge branch 'test' of http://192.168.136.99:3000/servers/ASJServer into test

lang 3 years ago
parent
commit
2cf381163b

+ 13 - 7
AdminController/VersionManagementController.py

@@ -113,7 +113,6 @@ class VersionManagement(View):
         resolutionRatio = request_dict.get('resolutionRatio', '')
         resolutionRatio = request_dict.get('resolutionRatio', '')
         Description = request_dict.get('Description', '')
         Description = request_dict.get('Description', '')
         status = request_dict.get('status', 0)
         status = request_dict.get('status', 0)
-        fileSize = request_dict.get('fileSize', '')
 
 
         if not all([file, mci, lang, ESN, max_ver, channel, resolutionRatio]):
         if not all([file, mci, lang, ESN, max_ver, channel, resolutionRatio]):
             return response.json(444)
             return response.json(444)
@@ -124,15 +123,22 @@ class VersionManagement(View):
             status = int(status)
             status = int(status)
             # 文件名为设备版本,最后一个'.'的前面为软件版本,后面为设备规格名称
             # 文件名为设备版本,最后一个'.'的前面为软件版本,后面为设备规格名称
             # V2.2.4.16E201252CA,软件版本:2.2.4,设备规格名称:16E201252CA
             # V2.2.4.16E201252CA,软件版本:2.2.4,设备规格名称:16E201252CA
+            # V1.7.2.36C11680X30411F000600000150001Z,软件版本:1.7.2,设备规格名称:36C11680X30411F000600000150001Z
             file_name = str(file)                           # 文件名
             file_name = str(file)                           # 文件名
-            version = file_name[:file_name.rindex('.')]     # 设备版本
-            rpoint = version.rindex('.')
-            softwareVersion = version[1:rpoint]             # 软件版本
-            code = version[rpoint+1:]                       # 设备规格名称
+            # .img和.tar.gz文件
+            file_type_index = file_name.find('.img')
+            if file_type_index == -1:
+                file_type_index = file_name.find('.tar')
+                if file_type_index == -1:
+                    return response.json(903)
+            version = file_name[:file_type_index]           # 设备版本
+            version_index = version.rindex('.')
+            softwareVersion = version[1:version_index]      # 软件版本
+            code = version[version_index+1:]                # 设备规格名称
             chipModelList2Code = code[:4]                   # 主芯片
             chipModelList2Code = code[:4]                   # 主芯片
-            type = code[-3:-1]                              # 设备机型
+            type = code[8:10]                               # 设备机型
             companyCode = code[-1:]                         # 公司代码
             companyCode = code[-1:]                         # 公司代码
-            fileSize = fileSize
+            fileSize = file.size
             filePath = '/'.join(('static/otapack', mci, lang, file_name))
             filePath = '/'.join(('static/otapack', mci, lang, file_name))
             file_data = file.read()
             file_data = file.read()
             fileMd5 = hashlib.md5(file_data).hexdigest()
             fileMd5 = hashlib.md5(file_data).hexdigest()

+ 1 - 1
Ansjer/urls.py

@@ -343,7 +343,7 @@ urlpatterns = [
 
 
     # 设备确定分配地区
     # 设备确定分配地区
     url(r'^device/confirmRegion$', DeviceConfirmRegion.ConfirmRegion.as_view()),
     url(r'^device/confirmRegion$', DeviceConfirmRegion.ConfirmRegion.as_view()),
-    url(r'^device/ConfirmRegionV2$', DeviceConfirmRegion.ConfirmRegionV2.as_view()),
+    url(r'^device/confirmRegionV2$', DeviceConfirmRegion.ConfirmRegionV2.as_view()),
     url(r'^device/confirmCountry$', DeviceConfirmRegion.confirm_country_with_ip),
     url(r'^device/confirmCountry$', DeviceConfirmRegion.confirm_country_with_ip),
 
 
     # pc端软件信息
     # pc端软件信息

+ 42 - 27
Controller/DetectController.py

@@ -11,6 +11,7 @@
 @file: DetectController.py
 @file: DetectController.py
 @Contact: chanjunkai@163.com
 @Contact: chanjunkai@163.com
 """
 """
+import logging
 import os
 import os
 import time
 import time
 
 
@@ -20,10 +21,11 @@ import oss2
 from django.http import JsonResponse
 from django.http import JsonResponse
 from django.views.generic.base import View
 from django.views.generic.base import View
 from pyfcm import FCMNotification
 from pyfcm import FCMNotification
-from Object.RedisObject import RedisObject
-from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, DETECT_PUSH_DOMAIN,\
-                            JPUSH_CONFIG, FCM_CONFIG, APNS_CONFIG, \
-                            BASE_DIR, APNS_MODE,  SERVER_TYPE
+
+from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, DETECT_PUSH_DOMAIN, \
+    JPUSH_CONFIG, FCM_CONFIG, APNS_CONFIG, \
+    BASE_DIR, APNS_MODE, SERVER_TYPE
+from Ansjer.config import PUSH_REDIS_ADDRESS
 from Model.models import Device_Info, VodHlsModel, Equipment_Info, UidSetModel, UidPushModel, SysMsgModel
 from Model.models import Device_Info, VodHlsModel, Equipment_Info, UidSetModel, UidPushModel, SysMsgModel
 from Object.ETkObject import ETkObject
 from Object.ETkObject import ETkObject
 from Object.RedisObject import RedisObject
 from Object.RedisObject import RedisObject
@@ -31,8 +33,7 @@ from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
 from Object.UidTokenObject import UidTokenObject
 from Object.UidTokenObject import UidTokenObject
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
-from Service.ModelService import ModelService
-from Ansjer.config import PUSH_REDIS_ADDRESS
+from Service.EquipmentInfoService import EquipmentInfoService
 
 
 
 
 class DetectControllerView(View):
 class DetectControllerView(View):
@@ -73,6 +74,8 @@ class DetectControllerView(View):
             return response.json(tko.code)
             return response.json(tko.code)
 
 
     def do_query(self, request_dict, response, userID):
     def do_query(self, request_dict, response, userID):
+        logger = logging.getLogger('info')
+        logger.info("-----旧APP调用移动侦测查询")
         page = int(request_dict.get('page', None))
         page = int(request_dict.get('page', None))
         line = int(request_dict.get('line', None))
         line = int(request_dict.get('line', None))
         if not page or not line:
         if not page or not line:
@@ -80,15 +83,26 @@ class DetectControllerView(View):
         startTime = request_dict.get('startTime', None)
         startTime = request_dict.get('startTime', None)
         endTime = request_dict.get('endTime', None)
         endTime = request_dict.get('endTime', None)
         eventType = request_dict.get('eventType', None)
         eventType = request_dict.get('eventType', None)
-        qs = Equipment_Info.objects.filter(userID_id=userID).order_by('-eventTime')
+        # qs = Equipment_Info.objects.filter(userID_id=userID).order_by('-eventTime')
+        # if startTime and endTime:
+        #     qs = qs.filter(eventTime__range=(startTime, endTime))
+        # if eventType:
+        #     qs = qs.filter(eventType=eventType)
         if startTime and endTime:
         if startTime and endTime:
-            qs = qs.filter(eventTime__range=(startTime, endTime))
-        if eventType:
-            qs = qs.filter(eventType=eventType)
+            qs, count = EquipmentInfoService.find_by_start_time_equipment_info(page, line, userID, startTime,
+                                                                               endTime, eventType,
+                                                                               request_dict.get('uids', None))
+
+        else:
+            # 默认查询近七天消息推送
+            qs, count = EquipmentInfoService.get_equipment_info_week_all(page, line, userID, startTime, endTime,
+                                                                         eventType,
+                                                                         request_dict.get('uids', None))
+        logger.info('<<<|||分表查询结果count:{}'.format(count))
         uids = request_dict.get('uids', None)
         uids = request_dict.get('uids', None)
         if uids:
         if uids:
             uid_list = uids.split(',')
             uid_list = uids.split(',')
-            qs = qs.filter(devUid__in=uid_list)
+            # qs = qs.filter(devUid__in=uid_list)
             dvqs = Device_Info.objects.filter(UID__in=uid_list, userID_id=userID).values('UID', 'Type', 'NickName')
             dvqs = Device_Info.objects.filter(UID__in=uid_list, userID_id=userID).values('UID', 'Type', 'NickName')
             uid_type_dict = {}
             uid_type_dict = {}
             for dv in dvqs:
             for dv in dvqs:
@@ -99,13 +113,16 @@ class DetectControllerView(View):
             for dv in dvqs:
             for dv in dvqs:
                 uid_type_dict[dv['UID']] = {'type': dv['Type'], 'NickName': dv['NickName']}
                 uid_type_dict[dv['UID']] = {'type': dv['Type'], 'NickName': dv['NickName']}
         # print(uid_type_dict)
         # print(uid_type_dict)
-        if not qs.exists():
+        if not qs or count == 0 or not qs.exists():
             return response.json(0, {'datas': [], 'count': 0})
             return response.json(0, {'datas': [], 'count': 0})
-        qs = qs.values('id', 'devUid', 'devNickName', 'Channel', 'eventType', 'status', 'alarm', 'eventTime',
-                       'receiveTime', 'is_st', 'addTime')
-
-        count = qs.count()
-        qr = qs[(page - 1) * line:page * line]
+        # if not qs.exists():
+        #     return response.json(0, {'datas': [], 'count': 0})
+        # qs = qs.values('id', 'devUid', 'devNickName', 'Channel', 'eventType', 'status', 'alarm', 'eventTime',
+        #                'receiveTime', 'is_st', 'addTime')
+
+        # count = qs.count()
+        # qr = qs[(page - 1) * line:page * line]
+        qr = qs
         res = []
         res = []
         auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
         auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
         img_bucket = oss2.Bucket(auth, 'oss-cn-shenzhen.aliyuncs.com', 'apg')
         img_bucket = oss2.Bucket(auth, 'oss-cn-shenzhen.aliyuncs.com', 'apg')
@@ -320,7 +337,6 @@ class DetectControllerView(View):
             return response.json(0)
             return response.json(0)
 
 
 
 
-
 '''
 '''
 http://push.dvema.com/notify/push?etk=Y2lTRXhMTjBWS01sWlpURTVJU0ZWTlJ6RXhNVUU9T3o=&n_time=1526845794&channel=1&event_type=704&is_st=0
 http://push.dvema.com/notify/push?etk=Y2lTRXhMTjBWS01sWlpURTVJU0ZWTlJ6RXhNVUU9T3o=&n_time=1526845794&channel=1&event_type=704&is_st=0
 http://push.dvema.com/deviceShadow/generateUTK?username=debug_user&password=debug_password&uid=VVDHCVBYDKFMJRWA111A
 http://push.dvema.com/deviceShadow/generateUTK?username=debug_user&password=debug_password&uid=VVDHCVBYDKFMJRWA111A
@@ -394,8 +410,8 @@ class NotificationView(View):
             print(have_ykey)
             print(have_ykey)
         else:
         else:
             # 从数据库查询出来
             # 从数据库查询出来
-            uid_push_qs = UidPushModel.objects.filter(uid_set__uid=uid,uid_set__detect_status=1). \
-                values('token_val', 'app_type', 'appBundleId','m_code',
+            uid_push_qs = UidPushModel.objects.filter(uid_set__uid=uid, uid_set__detect_status=1). \
+                values('token_val', 'app_type', 'appBundleId', 'm_code',
                        'push_type', 'userID_id', 'userID__NickName',
                        'push_type', 'userID_id', 'userID__NickName',
                        'lang', 'm_code', 'tz', 'uid_set__nickname', 'uid_set__detect_interval', 'uid_set__detect_group',
                        'lang', 'm_code', 'tz', 'uid_set__nickname', 'uid_set__detect_interval', 'uid_set__detect_group',
                        'uid_set__channel')
                        'uid_set__channel')
@@ -435,7 +451,7 @@ class NotificationView(View):
             else:
             else:
                 detect_med_type = 2  # 为2的话,既推送,又存库
                 detect_med_type = 2  # 为2的话,既推送,又存库
                 # detect_group=0允许全部推送的时候
                 # detect_group=0允许全部推送的时候
-                if detect_group == '0'or detect_group == '':
+                if detect_group == '0' or detect_group == '':
                     redisObj.set_data(key=dkey, val=1, expire=detect_interval)
                     redisObj.set_data(key=dkey, val=1, expire=detect_interval)
                 else:
                 else:
                     detect_group_list = detect_group.split(',')
                     detect_group_list = detect_group.split(',')
@@ -445,7 +461,7 @@ class NotificationView(View):
                         redisObj.set_data(key=dkey, val=1, expire=detect_interval)
                         redisObj.set_data(key=dkey, val=1, expire=detect_interval)
                 # 改为1秒
                 # 改为1秒
                 # 如果不是正式
                 # 如果不是正式
-                if SERVER_TYPE!="Ansjer.formal_settings":
+                if SERVER_TYPE != "Ansjer.formal_settings":
                     redisObj.set_data(key=pkey, val=1, expire=10)
                     redisObj.set_data(key=pkey, val=1, expire=10)
                 else:
                 else:
                     redisObj.set_data(key=pkey, val=1, expire=60)
                     redisObj.set_data(key=pkey, val=1, expire=60)
@@ -497,7 +513,7 @@ class NotificationView(View):
             kwag_args['msg_title'] = msg_title
             kwag_args['msg_title'] = msg_title
             kwag_args['msg_text'] = msg_text
             kwag_args['msg_text'] = msg_text
             push_server_status = 0
             push_server_status = 0
-            #推送
+            # 推送
             if detect_med_type == 2 or detect_med_type == 0:
             if detect_med_type == 2 or detect_med_type == 0:
                 if push_type == 0:  # ios apns
                 if push_type == 0:  # ios apns
                     print('do_apns')
                     print('do_apns')
@@ -569,7 +585,7 @@ class NotificationView(View):
                 del up['uid_set__nickname']
                 del up['uid_set__nickname']
                 del up['uid_set__detect_interval']
                 del up['uid_set__detect_interval']
                 del up['uid_set__detect_group']
                 del up['uid_set__detect_group']
-            return JsonResponse(status=200, data={'code': 0, 'msg': 'success 0 or 2' ,'re_list':redis_list})
+            return JsonResponse(status=200, data={'code': 0, 'msg': 'success 0 or 2', 're_list': redis_list})
 
 
         elif is_st == '1':
         elif is_st == '1':
             print("is_st=1")
             print("is_st=1")
@@ -632,7 +648,6 @@ class NotificationView(View):
                 res_data = {'code': 0, 'img_url_list': img_url_list, 'msg': 'success 3'}
                 res_data = {'code': 0, 'img_url_list': img_url_list, 'msg': 'success 3'}
             return JsonResponse(status=200, data=res_data)
             return JsonResponse(status=200, data=res_data)
 
 
-
     def get_msg_title(self, appBundleId, nickname):
     def get_msg_title(self, appBundleId, nickname):
         package_title_config = {
         package_title_config = {
             'com.ansjer.customizedd_a': 'DVS',
             'com.ansjer.customizedd_a': 'DVS',
@@ -659,7 +674,7 @@ class NotificationView(View):
         return False
         return False
 
 
     def get_msg_text(self, channel, n_time, lang, tz, event_type, is_sys=0):
     def get_msg_text(self, channel, n_time, lang, tz, event_type, is_sys=0):
-        n_date = CommonService.get_now_time_str(n_time=n_time, tz=tz,lang=lang)
+        n_date = CommonService.get_now_time_str(n_time=n_time, tz=tz, lang=lang)
         etype = int(event_type)
         etype = int(event_type)
         if lang == 'cn':
         if lang == 'cn':
             if etype == 704:
             if etype == 704:
@@ -933,7 +948,7 @@ class PushNotificationView(View):
                 # 从数据库查询出来
                 # 从数据库查询出来
                 uid_push_qs = UidPushModel.objects.filter(uid_set__uid=uid, uid_set__detect_status=1). \
                 uid_push_qs = UidPushModel.objects.filter(uid_set__uid=uid, uid_set__detect_status=1). \
                     values('token_val', 'app_type', 'appBundleId',
                     values('token_val', 'app_type', 'appBundleId',
-                           'push_type', 'userID_id', 'lang','m_code',
+                           'push_type', 'userID_id', 'lang', 'm_code',
                            'tz', 'uid_set__nickname')
                            'tz', 'uid_set__nickname')
                 # 新建一个list接收数据
                 # 新建一个list接收数据
                 redis_list = []
                 redis_list = []

+ 6 - 6
Controller/EquipmentOTA.py

@@ -305,26 +305,26 @@ class EquipmentVersionView(View):
                 if not uids.__contains__(uid):
                 if not uids.__contains__(uid):
                     return response.json(902)
                     return response.json(902)
         file_path = eqs[0].filePath
         file_path = eqs[0].filePath
+        url = SERVER_DOMAIN
         if file_path.find('static/Upgrade/') != -1:
         if file_path.find('static/Upgrade/') != -1:
-            path = file_path.replace('static/Upgrade/', '').replace('\\', '/')
             # 创建url的token
             # 创建url的token
             tko = UrlTokenObject()
             tko = UrlTokenObject()
             path = tko.generate(data={'Url': "ansjer/" + CommonService.RandomStr(6) + "/" + file_path})
             path = tko.generate(data={'Url': "ansjer/" + CommonService.RandomStr(6) + "/" + file_path})
 
 
-            url = SERVER_DOMAIN + 'OTA/downloads/' + path
+            url += 'OTA/downloads/' + path
         elif file_path.find('static/otapack') != -1:
         elif file_path.find('static/otapack') != -1:
             file_path = file_path
             file_path = file_path
             param_url = "ansjer/" + CommonService.RandomStr(6) + "/" + file_path
             param_url = "ansjer/" + CommonService.RandomStr(6) + "/" + file_path
-            data = {'Url': param_url, 'user_id': '', 'uid': uid, 'serial_number': '', 'old_version': '',
-                    'new_version': '', 'mci': ''}
+            data = {'Url': param_url, 'user_id': '', 'uid': uid, 'serial_number': '', 'old_version': ov,
+                    'new_version': eqs[0].softwareVersion, 'mci': 'NVR'}
             dvr_ota_key = 'ASJ:SERVER:VERSION:{}'.format(uid)
             dvr_ota_key = 'ASJ:SERVER:VERSION:{}'.format(uid)
             dvr_ota_value = json.dumps(data)
             dvr_ota_value = json.dumps(data)
-            expire = 3600 * 24 * 2 + 600
+            expire = 600
             redisObject.set_data(dvr_ota_key, dvr_ota_value, expire)
             redisObject.set_data(dvr_ota_key, dvr_ota_value, expire)
             # 创建url的token
             # 创建url的token
             tko = UrlTokenObject()
             tko = UrlTokenObject()
             file_path = tko.generate(data={'uid': uid})
             file_path = tko.generate(data={'uid': uid})
-            url = SERVER_DOMAIN + 'dlotapack/' + file_path
+            url += 'dlotapack/' + file_path
 
 
         res = {
         res = {
             "url": url,
             "url": url,

+ 83 - 79
Controller/IotCoreController.py

@@ -1,5 +1,6 @@
 #!/usr/bin/env python3
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
 # -*- coding: utf-8 -*-
+import logging
 import os
 import os
 import hashlib
 import hashlib
 import json
 import json
@@ -78,85 +79,88 @@ class IotCoreView(View):
         if not all([token, time_stamp, device_version, language]):
         if not all([token, time_stamp, device_version, language]):
             return response.json(444, {'param': 'token, uid_code, time_stamp, device_version, language'})
             return response.json(444, {'param': 'token, uid_code, time_stamp, device_version, language'})
 
 
-        # 时间戳token校验
-        if not CommonService.check_time_stamp_token(token, time_stamp):
-            return response.json(13)
-
-        if not uid:
-            # 使用序列号
-            serial_number = request_dict.get('serial_number', None)
-            serial_number_code = request_dict.get('serial_number_code', None)
-            if not all([serial_number, serial_number_code]):
-                return response.json(444, {'param': 'serial_number, serial_number_code'})
-
-            # 序列号编码解码校验
-            serial_number_code = CommonService.decode_data(serial_number_code)
-            if serial_number != serial_number_code:
-                return response.json(404)
-
-            serial = serial_number[0:6]
-            try:
-                SerialNumberModel.objects.get(serial_number=serial)
-            except:
-                return response.json(444)
-
-            ThingNameSuffix = serial_number  # 物品名后缀
-            iotdeviceInfo_qs = iotdeviceInfoModel.objects.filter(serial_number=serial)
-        else:
-            # 使用uid
-            # uid编码解码校验
-            uid_code = CommonService.decode_data(uid_code)
-            if uid != uid_code:
-                return response.json(404)
-
-            serial = ''     # iot_deviceInfo表写入serial_number为''
-            ThingNameSuffix = uid     # 物品名后缀
-            iotdeviceInfo_qs = iotdeviceInfoModel.objects.filter(uid=uid)
-        # 判断设备是否已注册证书
-        if not iotdeviceInfo_qs.exists():
-            thingGroup = device_version + '_' + language
-            # 设备模拟国外环境测试
-            # if SERVER_TYPE == 'Ansjer.us_config.formal_settings':  # 国外正式配置使用固定ip进行测试
-            #     ip = '67.220.90.13'
-            # else:
-            #     ip = CommonService.get_ip_address(request)
-            ip = CommonService.get_ip_address(request)
-            region_id = Device_Region().get_device_region(ip)
-
-            iotClient = IOTClient(region_id)
-            res = iotClient.create_keys_and_certificate(ThingNameSuffix, thingGroup, response)
-            token_iot_number = hashlib.md5((str(uuid.uuid1()) + str(int(time.time()))).encode('utf-8')).hexdigest()
-
-            iotdeviceInfoModel.objects.create(uid=uid,
-                                              serial_number=serial,
-                                              endpoint=res[0]['endpoint'],
-                                              certificate_id=res[0]['certificateId'],
-                                              certificate_pem=res[0]['certificatePem'],
-                                              public_key=res[0]['publicKey'],
-                                              private_key=res[0]['privateKey'],
-                                              thing_name=res[1]['ThingName'],
-                                              thing_groups=res[1]['thingGroupName'],
-                                              token_iot_number=token_iot_number
-                                              )
-            res = {
-                'certificateId': res[0]['certificateId'],
-                'certificatePem': res[0]['certificatePem'],
-                'publicKey': res[0]['publicKey'],
-                'privateKey': res[0]['privateKey'],
-                'endpoint': res[0]['endpoint']
-            }
-            return response.json(0, {'res': res})
-        else:
-            iot = iotdeviceInfo_qs[0]
-            res = {
-                'certificateId': iot.certificate_id,
-                'certificatePem': iot.certificate_pem,
-                'publicKey': iot.public_key,
-                'privateKey': iot.private_key,
-                'endpoint': iot.endpoint
-            }
-            # print('此设备已注册证书')
-            return response.json(0, {'res': res})
+        try:
+            # 时间戳token校验
+            if not CommonService.check_time_stamp_token(token, time_stamp):
+                return response.json(13)
+
+            if not uid:
+                # 使用序列号
+                serial_number = request_dict.get('serial_number', None)
+                serial_number_code = request_dict.get('serial_number_code', None)
+                if not all([serial_number, serial_number_code]):
+                    return response.json(444, {'param': 'serial_number, serial_number_code'})
+
+                # 序列号编码解码校验
+                serial_number_code = CommonService.decode_data(serial_number_code)
+                if serial_number != serial_number_code:
+                    return response.json(404)
+
+                serial = serial_number[0:6]
+                try:
+                    SerialNumberModel.objects.get(serial_number=serial)
+                except:
+                    return response.json(444)
+
+                ThingNameSuffix = serial_number  # 物品名后缀
+                iotdeviceInfo_qs = iotdeviceInfoModel.objects.filter(serial_number=serial)
+            else:
+                # 使用uid
+                # uid编码解码校验
+                uid_code = CommonService.decode_data(uid_code)
+                if uid != uid_code:
+                    return response.json(404)
+
+                serial = ''     # iot_deviceInfo表写入serial_number为''
+                ThingNameSuffix = uid     # 物品名后缀
+                iotdeviceInfo_qs = iotdeviceInfoModel.objects.filter(uid=uid)
+            # 判断设备是否已注册证书
+            if not iotdeviceInfo_qs.exists():
+                thingGroup = device_version + '_' + language
+                # 设备模拟国外环境测试
+                # if SERVER_TYPE == 'Ansjer.us_config.formal_settings':  # 国外正式配置使用固定ip进行测试
+                #     ip = '67.220.90.13'
+                # else:
+                #     ip = CommonService.get_ip_address(request)
+                ip = CommonService.get_ip_address(request)
+                region_id = Device_Region().get_device_region(ip)
+
+                iotClient = IOTClient(region_id)
+                res = iotClient.register_to_iot_core(ThingNameSuffix, thingGroup, response)
+                token_iot_number = hashlib.md5((str(uuid.uuid1()) + str(int(time.time()))).encode('utf-8')).hexdigest()
+
+                iotdeviceInfoModel.objects.create(uid=uid,
+                                                  serial_number=serial,
+                                                  endpoint=res[0]['endpoint'],
+                                                  certificate_id=res[0]['certificateId'],
+                                                  certificate_pem=res[0]['certificatePem'],
+                                                  public_key=res[0]['publicKey'],
+                                                  private_key=res[0]['privateKey'],
+                                                  thing_name=res[1]['ThingName'],
+                                                  thing_groups=res[1]['thingGroupName'],
+                                                  token_iot_number=token_iot_number
+                                                  )
+                res = {
+                    'certificateId': res[0]['certificateId'],
+                    'certificatePem': res[0]['certificatePem'],
+                    'publicKey': res[0]['publicKey'],
+                    'privateKey': res[0]['privateKey'],
+                    'endpoint': res[0]['endpoint']
+                }
+                return response.json(0, {'res': res})
+            else:
+                iot = iotdeviceInfo_qs[0]
+                res = {
+                    'certificateId': iot.certificate_id,
+                    'certificatePem': iot.certificate_pem,
+                    'publicKey': iot.public_key,
+                    'privateKey': iot.private_key,
+                    'endpoint': iot.endpoint
+                }
+                return response.json(0, {'res': res})
+        except Exception as e:
+            print(e)
+            return response.json(500, repr(e))
 
 
     def thing_regroup(self, request_dict, response, request):
     def thing_regroup(self, request_dict, response, request):
         # 物品重新分组
         # 物品重新分组

+ 1 - 4
Controller/OTAEquipment.py

@@ -22,7 +22,6 @@ from Object.TokenObject import TokenObject
 from Object.UrlTokenObject import UrlTokenObject
 from Object.UrlTokenObject import UrlTokenObject
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
 from Service.ModelService import ModelService
 from Service.ModelService import ModelService
-import uuid
 
 
 
 
 def downloadUrl(fileType, fileCode, fileVersion, fileName):
 def downloadUrl(fileType, fileCode, fileVersion, fileName):
@@ -542,7 +541,7 @@ def getNewVerInterface(request):
                     'uid': uid, 'serial_number': serial_number, 'old_version': "V" + now_ver + "." + code,
                     'uid': uid, 'serial_number': serial_number, 'old_version': "V" + now_ver + "." + code,
                     'new_version': version, 'mci': mci}
                     'new_version': version, 'mci': mci}
             device_info_value = json.dumps(data)
             device_info_value = json.dumps(data)
-            expire = 3600 * 24 * 2 + 600
+            expire = 600
 
 
             str_uuid = str(tko.userID)
             str_uuid = str(tko.userID)
             if serial_number and serial_number != 'null':
             if serial_number and serial_number != 'null':
@@ -742,8 +741,6 @@ def downloadOTAInterfaceV2(request, fullPath, *callback_args, **callback_kwargs)
                     uid=uid,
                     uid=uid,
                     mci=mci,
                     mci=mci,
                 )
                 )
-                del_data = redis_object.del_data(device_key)
-                logger.info('删除缓存={}'.format(del_data))
                 return response
                 return response
             except Exception as e:
             except Exception as e:
                 return res.json(906, repr(e))
                 return res.json(906, repr(e))

+ 2 - 2
Model/models.py

@@ -800,7 +800,7 @@ class Equipment_Version(models.Model):
     type = models.CharField(blank=True, max_length=16, verbose_name=u'设备机型')
     type = models.CharField(blank=True, max_length=16, verbose_name=u'设备机型')
     companyCode = models.CharField(blank=True, max_length=128, verbose_name=u'用户公司名称')
     companyCode = models.CharField(blank=True, max_length=128, verbose_name=u'用户公司名称')
     data_joined = models.DateTimeField(blank=True, verbose_name=u'加入时间', auto_now_add=True)
     data_joined = models.DateTimeField(blank=True, verbose_name=u'加入时间', auto_now_add=True)
-    fileSize = models.CharField(blank=True, max_length=16, verbose_name=u'文件总大小')
+    fileSize = models.IntegerField(blank=True, verbose_name=u'文件总大小')
     filePath = models.CharField(blank=True, max_length=256, verbose_name=u'升级文件路径')
     filePath = models.CharField(blank=True, max_length=256, verbose_name=u'升级文件路径')
     Description = models.TextField(blank=True, default='', verbose_name=u'描述信息')
     Description = models.TextField(blank=True, default='', verbose_name=u'描述信息')
     fileMd5 = models.CharField(blank=True, max_length=32, default='', verbose_name=u'上传文件MD5加密')
     fileMd5 = models.CharField(blank=True, max_length=32, default='', verbose_name=u'上传文件MD5加密')
@@ -878,7 +878,7 @@ class Order_Model(models.Model):
     addTime = models.IntegerField(verbose_name='添加时间', default=0)
     addTime = models.IntegerField(verbose_name='添加时间', default=0)
     updTime = models.IntegerField(verbose_name='更新时间', default=0)
     updTime = models.IntegerField(verbose_name='更新时间', default=0)
     isSelectDiscounts = models.SmallIntegerField(default=0, verbose_name=u'用户是否选择了第二年优惠 [0=否,1是]')
     isSelectDiscounts = models.SmallIntegerField(default=0, verbose_name=u'用户是否选择了第二年优惠 [0=否,1是]')
-    # 0: 待支付, 1:支付成功, 2: 取消支付, 4: 退款失败, 5: 全额退款, 6: 部分退款, 9:处理中, 10:支付失败
+    # 0: 待支付, 1:支付成功, 2: 取消支付, 4: 退款失败, 5: 全额退款, 6: 部分退款, 7: PayPal已退款, 9:处理中, 10:支付失败
     status = models.SmallIntegerField(default=0, verbose_name='付款状态')
     status = models.SmallIntegerField(default=0, verbose_name='付款状态')
     # 1: PayPal, 2: 支付宝, 3: 微信, 10: 免费体验, 11: 激活码
     # 1: PayPal, 2: 支付宝, 3: 微信, 10: 免费体验, 11: 激活码
     payType = models.SmallIntegerField(default=0, verbose_name='支付方式')
     payType = models.SmallIntegerField(default=0, verbose_name='支付方式')

+ 9 - 21
Object/IOTCore/IotObject.py

@@ -1,7 +1,6 @@
 #!/usr/bin/env python3
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
 # -*- coding: utf-8 -*-
 import json
 import json
-from abc import ABCMeta,abstractmethod
 
 
 import boto3
 import boto3
 
 
@@ -11,22 +10,10 @@ from Ansjer.config import AWS_IOT_SES_ACCESS_CHINA_REGION, AWS_IOT_SES_ACCESS_CH
     AWS_IOT_SES_ACCESS_FOREIGN_ROLE
     AWS_IOT_SES_ACCESS_FOREIGN_ROLE
 
 
 
 
-class IOTObject(metaclass=ABCMeta):
-
-    @abstractmethod
-    def create_provisioning_claim(self, templateName):
-        pass
-
-    @abstractmethod
-    def create_keys_and_certificate(self, uid):
-        pass
-
-
-class IOTClient(IOTObject):
-
+class IOTClient:
     def __init__(self, region_id=1):
     def __init__(self, region_id=1):
-
         if region_id == 1:
         if region_id == 1:
+            # 中国宁夏
             self.client = boto3.client('iot', region_name=AWS_IOT_SES_ACCESS_CHINA_REGION,
             self.client = boto3.client('iot', region_name=AWS_IOT_SES_ACCESS_CHINA_REGION,
                                        aws_access_key_id=AWS_IOT_SES_ACCESS_CHINA_ID,
                                        aws_access_key_id=AWS_IOT_SES_ACCESS_CHINA_ID,
                                        aws_secret_access_key=AWS_IOT_SES_ACCESS_CHINA_SECRET)
                                        aws_secret_access_key=AWS_IOT_SES_ACCESS_CHINA_SECRET)
@@ -34,29 +21,30 @@ class IOTClient(IOTObject):
             self.endpoint = 'a250bbr0p9u7as-ats.iot.cn-northwest-1.amazonaws.com.cn'
             self.endpoint = 'a250bbr0p9u7as-ats.iot.cn-northwest-1.amazonaws.com.cn'
             self.iotrole = AWS_IOT_SES_ACCESS_CHINA_ROLE
             self.iotrole = AWS_IOT_SES_ACCESS_CHINA_ROLE
 
 
-        if region_id == 2:
+        elif region_id == 2:
+            # 亚太新加坡
             self.client = boto3.client('iot', region_name=AWS_IOT_SES_ACCESS_FOREIGN_REGION_ASIA,
             self.client = boto3.client('iot', region_name=AWS_IOT_SES_ACCESS_FOREIGN_REGION_ASIA,
                                        aws_access_key_id=AWS_IOT_SES_ACCESS_FOREIGN_ID,
                                        aws_access_key_id=AWS_IOT_SES_ACCESS_FOREIGN_ID,
                                        aws_secret_access_key=AWS_IOT_SES_ACCESS_FOREIGN_SECRET)
                                        aws_secret_access_key=AWS_IOT_SES_ACCESS_FOREIGN_SECRET)
             self.endpoint = 'a2rqy12o004ad8-ats.iot.ap-southeast-1.amazonaws.com'
             self.endpoint = 'a2rqy12o004ad8-ats.iot.ap-southeast-1.amazonaws.com'
             self.iotrole = AWS_IOT_SES_ACCESS_FOREIGN_ROLE
             self.iotrole = AWS_IOT_SES_ACCESS_FOREIGN_ROLE
 
 
-        if region_id == 3:
+        elif region_id == 3:
+            # 美东弗吉尼亚
             self.client = boto3.client('iot', region_name=AWS_IOT_SES_ACCESS_FOREIGN_REGION_AMERICA,
             self.client = boto3.client('iot', region_name=AWS_IOT_SES_ACCESS_FOREIGN_REGION_AMERICA,
                                        aws_access_key_id=AWS_IOT_SES_ACCESS_FOREIGN_ID,
                                        aws_access_key_id=AWS_IOT_SES_ACCESS_FOREIGN_ID,
                                        aws_secret_access_key=AWS_IOT_SES_ACCESS_FOREIGN_SECRET)
                                        aws_secret_access_key=AWS_IOT_SES_ACCESS_FOREIGN_SECRET)
             self.endpoint = 'a2rqy12o004ad8-ats.iot.us-east-1.amazonaws.com'
             self.endpoint = 'a2rqy12o004ad8-ats.iot.us-east-1.amazonaws.com'
             self.iotrole = AWS_IOT_SES_ACCESS_FOREIGN_ROLE
             self.iotrole = AWS_IOT_SES_ACCESS_FOREIGN_ROLE
 
 
-        if region_id == 4:
+        elif region_id == 4:
+            # 西欧爱尔兰
             self.client = boto3.client('iot', region_name=AWS_IOT_SES_ACCESS_FOREIGN_REGION_EUROPE,
             self.client = boto3.client('iot', region_name=AWS_IOT_SES_ACCESS_FOREIGN_REGION_EUROPE,
                                        aws_access_key_id=AWS_IOT_SES_ACCESS_FOREIGN_ID,
                                        aws_access_key_id=AWS_IOT_SES_ACCESS_FOREIGN_ID,
                                        aws_secret_access_key=AWS_IOT_SES_ACCESS_FOREIGN_SECRET)
                                        aws_secret_access_key=AWS_IOT_SES_ACCESS_FOREIGN_SECRET)
             self.endpoint = 'a2rqy12o004ad8-ats.iot.eu-west-1.amazonaws.com'
             self.endpoint = 'a2rqy12o004ad8-ats.iot.eu-west-1.amazonaws.com'
             self.iotrole = AWS_IOT_SES_ACCESS_FOREIGN_ROLE
             self.iotrole = AWS_IOT_SES_ACCESS_FOREIGN_ROLE
 
 
-
-
     def create_provisioning_claim(self, templateName):
     def create_provisioning_claim(self, templateName):
 
 
         result = self.client.create_provisioning_claim(templateName=templateName)
         result = self.client.create_provisioning_claim(templateName=templateName)
@@ -70,7 +58,7 @@ class IOTClient(IOTObject):
         }
         }
         return res
         return res
 
 
-    def create_keys_and_certificate(self, ThingNameSuffix, thingGroup, response):
+    def register_to_iot_core(self, ThingNameSuffix, thingGroup, response):
         try:
         try:
             result = self.client.create_keys_and_certificate(setAsActive=True)
             result = self.client.create_keys_and_certificate(setAsActive=True)
             res = {
             res = {