Эх сурвалжийг харах

获取域名返回推送region参数,更新deviceShadow/updateV2代码

locky 2 жил өмнө
parent
commit
504e211673

+ 42 - 29
Controller/DeviceConfirmRegion.py

@@ -42,21 +42,27 @@ class ConfirmRegion(View):
                     if not device_domain_qs.exists():
                         DeviceDomainModel.objects.create(ip=ip, country_name=country_code, api=api)
 
-                    return response.json(0, {'request_api_url': api, 'push_api_url': push_api})
+                    region = get_push_region(api)
+                    res = {
+                        'request_api_url': api,
+                        'push_api_url': push_api,
+                        'region': region
+                    }
+                    return response.json(0, res)
 
             # 不存在则返回美洲域名
-            region_qs = RegionModel.objects.filter(continent_code='NA').values('api', 'push_api')
-            api = region_qs[0]['api']
-            push_api = region_qs[0]['push_api']
-
+            api, push_api, region_id, region = get_default_api()
             if not device_domain_qs.exists():
                 DeviceDomainModel.objects.create(ip=ip, country_name='NA', api=api)
 
-            return response.json(0, {'request_api_url': api, 'push_api_url': push_api})
+            res = {
+                'request_api_url': api,
+                'push_api_url': push_api,
+                'region': region
+            }
+            return response.json(0, res)
         except Exception as e:
-            print(e)
-            return response.json(0, {'request_api_url': 'https://www.dvema.com',
-                                     'push_api_url': 'https://push.dvema.com'})
+            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
 
 class ConfirmRegionV2(View):
@@ -65,7 +71,8 @@ class ConfirmRegionV2(View):
     def dispatch(self, *args, **kwargs):
         return super(ConfirmRegionV2, self).dispatch(*args, **kwargs)
 
-    def get(self, request, *args, **kwargs):
+    @staticmethod
+    def get(request, *args, **kwargs):
         response = ResponseObject()
         serial_number = request.GET.get('serial_number', None)
         if not serial_number:
@@ -95,14 +102,15 @@ class ConfirmRegionV2(View):
                     api = country_qs[0]['region__api']
                     push_api = country_qs[0]['region__push_api']
                     region_id = country_qs[0]['region__id']
+                    region = get_push_region(api)
                 else:
                     # 返回美洲域名
                     data_dict['country_code'] = 'NA'
-                    api, push_api, region_id = self.get_default_api()
+                    api, push_api, region_id, region = get_default_api()
             else:
                 # 返回美洲域名
                 data_dict['country_code'] = 'NA'
-                api, push_api, region_id = self.get_default_api()
+                api, push_api, region_id, region = get_default_api()
 
             # 更新或创建设备域名数据
             data_dict['region_id'] = region_id
@@ -115,27 +123,32 @@ class ConfirmRegionV2(View):
             res = {
                 'request_api_url': api,
                 'push_api_url': push_api,
-                'region_id': region_id
+                'region_id': region_id,
+                'region': region
             }
             return response.json(0, res)
         except Exception as e:
-            print(repr(e))
-            api, push_api, region_id = self.get_default_api()
-            res = {
-                'request_api_url': api,
-                'push_api_url': push_api,
-                'region_id': region_id
-            }
-            return response.json(0, res)
+            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
 
-    # 获取区域表美洲的相关数据
-    @staticmethod
-    def get_default_api():
-        region_qs = RegionModel.objects.filter(continent_code='NA').values('api', 'push_api', 'id')
-        api = region_qs[0]['api']
-        push_api = region_qs[0]['push_api']
-        region_id = region_qs[0]['id']
-        return api, push_api, region_id
+
+def get_default_api():
+    # 获取默认域名(美洲服域名)
+    region_qs = RegionModel.objects.filter(continent_code='NA').values('api', 'push_api', 'id')
+    api = region_qs[0]['api']
+    push_api = region_qs[0]['push_api']
+    region_id = region_qs[0]['id']
+    region = 1  # 推送图片S3存储地区,1:国外, 2:国内
+    return api, push_api, region_id, region
+
+
+def get_push_region(api):
+    """
+    根据域名获取推送图片S3存储地区
+    @param api:
+    @return: region
+    """
+    region = 2 if '.cn' in api else 1
+    return region
 
 
 class Device_Region(object):

+ 17 - 5
Controller/ShadowController.py

@@ -5,7 +5,7 @@ from django.http import JsonResponse
 
 from Ansjer.config import SERVER_TYPE, LOGGER
 from Model.models import Device_Info, UidSetModel, UID_Preview, VoicePromptModel, UID_Bucket, UidChannelSetModel, \
-    AiService, CountryModel, CityInformation
+    AiService, CountryModel, CityInformation, IPAddr
 from Object.ETkObject import ETkObject
 from Service.CommonService import CommonService
 from Object.IPWeatherObject import IPQuery
@@ -75,8 +75,9 @@ def update_device_shadow(request):
             uid_set_qs = UidSetModel.objects.filter(uid=uid).values('ip')
             if uid_set_qs.exists():
                 if ip != uid_set_qs[0]['ip']:
-                    ip_qs = IPQuery(ip)
-                    district = ip_qs.district
+                    # 查询ip区级信息
+                    district = get_district(ip)
+
                     city_information_qs = CityInformation.objects.filter(district=district).values('city_id')
                     if city_information_qs.exists():
                         city_id = city_information_qs[0]['city_id']
@@ -148,8 +149,9 @@ def update_device_shadow(request):
             qs_dict['tb_country'] = country
         LOGGER.info('{} qs_dict: {}'.format(uid, qs_dict))
 
-        ip_qs = IPQuery(ip)
-        district = ip_qs.district
+        # 查询ip区级信息
+        district = get_district(ip)
+
         city_information_qs = CityInformation.objects.filter(district=district).values('city_id')
         if city_information_qs.exists():
             city_id = city_information_qs[0]['city_id']
@@ -172,3 +174,13 @@ def update_device_shadow(request):
     except Exception as e:
         LOGGER.info('更新设备影子异常: {}'.format(repr(e)))
         return JsonResponse(status=200, data={'code': 1000001, 'update_shadow_error': repr(e)})
+
+
+def get_district(ip):
+    ip_addr_qs = IPAddr.objects.filter(ip=ip).values('district')
+    if ip_addr_qs.exists():
+        district = ip_addr_qs[0]['district']
+    else:
+        ip_qs = IPQuery(ip)
+        district = ip_qs.district
+    return district