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

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

locky 3 жил өмнө
parent
commit
3b68ca6726

+ 7 - 6
AdminController/DeviceManagementController.py

@@ -47,8 +47,8 @@ class DeviceManagement(View):
             userID = tko.userID
             if not userID:
                 return response.json(444, 'userID')
-            if operation == 'getDeviceInfoList':
-                return self.getDeviceInfoList(request_dict, response)
+            if operation == 'getDeviceInfoList':    # 获取设备信息数据
+                return self.get_device_info_list(request_dict, response)
             elif operation == 'deleteDevice':
                 return self.deleteDevice(request_dict, response)
             elif operation == 'resetVod':   # 重置云存
@@ -64,8 +64,8 @@ class DeviceManagement(View):
             else:
                 return response.json(444, 'operation')
 
-    # 获取设备信息数据
-    def getDeviceInfoList(self, request_dict, response):
+    @staticmethod
+    def get_device_info_list(request_dict, response):
         pageNo = request_dict.get('pageNo', None)
         pageSize = request_dict.get('pageSize', None)
         UID = request_dict.get('UID', None)
@@ -91,7 +91,7 @@ class DeviceManagement(View):
                     device_info_qs = Device_Info.objects.filter(Q(userID__username__contains=username) |
                                                                 Q(userID__userEmail__contains=username) |
                                                                 Q(userID__phone__contains=username))
-                total = len(device_info_qs)
+                total = device_info_qs.count()
                 if not total:
                     return response.json(0, {'list': {}, 'total': 0})
                 device_info_qs = device_info_qs[(page - 1) * line:page * line]
@@ -114,11 +114,12 @@ class DeviceManagement(View):
                         device_type_qs = DeviceTypeModel.objects.filter(type=type).values('name')
                         if device_type_qs.exists():
                             device_info_list["datas"][k]['fields']['Type'] = device_type_qs[0]['name']
-                        uid_set_qs = UidSetModel.objects.filter(uid=device_info_list["datas"][k]['fields']['UID']).values('is_alexa', 'ip')
+                        uid_set_qs = UidSetModel.objects.filter(uid=device_info_list["datas"][k]['fields']['UID']).values('is_alexa', 'ip', 'version')
                         if uid_set_qs.exists():
                             isAlexa = '是' if uid_set_qs[0]['is_alexa'] else '否'
                             device_info_list["datas"][k]['fields']['isAlexa'] = isAlexa
                             device_info_list["datas"][k]['fields']['ip'] = uid_set_qs[0]['ip']
+                            device_info_list["datas"][k]['fields']['version'] = uid_set_qs[0]['version']
             return response.json(0, {'list': device_info_list, 'total': total})
         except Exception as e:
             print(e)

+ 3 - 0
Ansjer/cn_config/config_formal.py

@@ -13,6 +13,9 @@
 """
 import os
 
+# 配置信息
+CONFIG_INFO = 'cn'
+
 NGINX_RTMP_STAT = 'http://www.zositechc.cn/stat'
 SERVER_DOMAIN_SSL = 'https://www.zositechc.cn/'
 SERVER_DOMAIN = 'http://www.zositechc.cn/'

+ 3 - 0
Ansjer/cn_config/config_test.py

@@ -13,6 +13,9 @@
 """
 import os
 
+# 配置信息
+CONFIG_INFO = 'test'
+
 NGINX_RTMP_STAT = 'http://test.zositechc.cn/stat/'
 SERVER_DOMAIN = 'http://test.zositechc.cn/'
 SERVER_DOMAIN_SSL = 'https://test.zositechc.cn/'

+ 8 - 1
Ansjer/config.py

@@ -12,7 +12,14 @@
 @Contact: chanjunkai@163.com
 """
 # 主要静态变量配置文件
-import datetime, os
+import os
+import datetime
+
+# 配置信息
+CONFIG_TEST = 'test'
+CONFIG_CN = 'cn'
+CONFIG_US = 'us'
+CONFIG_EUR = 'eur'
 
 SERVER_TYPE = os.environ.get('DJANGO_SETTINGS_MODULE')
 print(SERVER_TYPE)

+ 3 - 0
Ansjer/eur_config/config_formal.py

@@ -13,6 +13,9 @@
 """
 import os
 
+# 配置信息
+CONFIG_INFO = 'eur'
+
 NGINX_RTMP_STAT = 'http://www.dvema.com/stat'
 SERVER_DOMAIN_SSL = 'https://www.dvema.com/'
 SERVER_DOMAIN = 'http://www.dvema.com/'

+ 3 - 0
Ansjer/local_config/config_local.py

@@ -3,6 +3,9 @@
 
 import os
 
+# 配置信息
+CONFIG_INFO = 'test'
+
 OAUTH_ACCESS_TOKEN_SECRET = 'local_a+jbgnw%@1%zy^=@dn62%'
 OAUTH_REFRESH_TOKEN_SECRET = 'local_r+jbgnw%@1%zy^=@dn62%'
 

+ 2 - 2
Ansjer/server_urls/loocam_url.py

@@ -8,8 +8,8 @@
 """
 from django.urls import re_path
 
-from SensorGateway import EquipmentFamilyController, GatewayFamilyRoomController, GatewayFamilyMemberController, \
-    SubDeviceController
+from Controller.SensorGateway import GatewayFamilyRoomController, SubDeviceController, GatewayFamilyMemberController, \
+    EquipmentFamilyController
 
 urlpatterns = [
     re_path(r'^sensor/gateway/(?P<operation>.*)$', EquipmentFamilyController.EquipmentFamilyView.as_view()),

+ 1 - 1
Ansjer/urls.py

@@ -26,7 +26,7 @@ from Controller import FeedBack, EquipmentOTA, EquipmentInfo, AdminManage, AppIn
 from Controller.Cron import CronTaskController
 from Controller.MessagePush import EquipmentMessagePush
 from Controller.Surveys import CloudStorageController
-from SensorGateway import SensorGatewayController, EquipmentFamilyController
+from Controller.SensorGateway import SensorGatewayController, EquipmentFamilyController
 from django.urls import include
 
 urlpatterns = [

+ 3 - 0
Ansjer/us_config/config_formal.py

@@ -13,6 +13,9 @@
 """
 import os
 
+# 配置信息
+CONFIG_INFO = 'us'
+
 NGINX_RTMP_STAT = 'http://www.dvema.com/stat'
 SERVER_DOMAIN_SSL = 'https://www.dvema.com/'
 SERVER_DOMAIN = 'http://www.dvema.com/'

+ 3 - 8
Controller/IotCoreController.py

@@ -12,7 +12,7 @@ from django.views import View
 from Ansjer.config import AWS_IOT_GETS3_PULL_CHINA_ID, AWS_IOT_GETS3_PULL_CHINA_SECRET, \
     AWS_IOT_GETS3_PULL_FOREIGN_ID, AWS_IOT_GETS3_PULL_FOREIGN_SECRET, AWS_ARN, AWS_IOT_SES_ACCESS_CHINA_REGION, \
     AWS_IOT_SES_ACCESS_FOREIGN_REGION_ASIA, AWS_IOT_SES_ACCESS_FOREIGN_REGION_EUROPE, \
-    AWS_IOT_SES_ACCESS_FOREIGN_REGION_AMERICA
+    AWS_IOT_SES_ACCESS_FOREIGN_REGION_AMERICA, CONFIG_INFO, CONFIG_TEST, CONFIG_CN
 from Controller.DeviceConfirmRegion import Device_Region
 from Model.models import Device_Info, iotdeviceInfoModel, SerialNumberModel, UidSetModel
 from Object.IOTCore.IotObject import IOTClient
@@ -129,13 +129,8 @@ class IotCoreView(View):
                 }
                 return response.json(0, {'res': res})
             else:
-                # 根据地区id确定使用的boto3 client
-                region_id = request_dict.get('region_id', None)
-                if region_id:
-                    region_id = int(region_id)
-                else:
-                    ip = CommonService.get_ip_address(request)
-                    region_id = Device_Region().get_device_region(ip)
+                # 根据配置信息确定region_id
+                region_id = CommonService.confirm_region_id(request)
                 iotClient = IOTClient(region_id)
 
                 # 拼接物品名

+ 1 - 1
SensorGateway/EquipmentFamilyController.py → Controller/SensorGateway/EquipmentFamilyController.py

@@ -698,7 +698,7 @@ class EquipmentFamilyView(View):
         room_qs = room_qs.values('id', 'name', 'sort')
         room_list = []
         if not room_qs.exists():
-            return response.json(0, {'total': 0, 'data': room_list, 'deviceTotal': 0})
+            return response.json(0, {'total': 0, 'data': room_list, 'deviceTotal': count})
         for item in room_qs:
             item['deviceCount'] = FamilyRoomDevice.objects.filter(family_id=family_id, room_id=item['id']).count()
             room_list.append(item)

+ 59 - 1
SensorGateway/GatewayFamilyMemberController.py → Controller/SensorGateway/GatewayFamilyMemberController.py

@@ -7,12 +7,17 @@
 @Software: PyCharm
 """
 
+import json
+import time
+
 from django.views.generic.base import View
 
+from Controller.SensorGateway.EquipmentFamilyController import EquipmentFamilyView
 from Model.models import FamilyMemberJoin, UserFamily
+from Object.RedisObject import RedisObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
-from SensorGateway.EquipmentFamilyController import EquipmentFamilyView
+from Service.CommonService import CommonService
 
 
 # 家庭房间管理
@@ -41,6 +46,10 @@ class GatewayFamilyMemberView(View):
             return self.member_join(app_user_id, request_dict, response)
         elif operation == 'join/page':
             return self.member_join_page(request_dict, response)
+        elif operation == 'qrcode/generate':
+            return self.generate_token_url(app_user_id, request_dict, response)
+        elif operation == 'qrcode/check':
+            return self.check_qrcode(app_user_id, request_dict, response)
 
     @classmethod
     def member_join(cls, app_user_id, request_dict, response):
@@ -103,3 +112,52 @@ class GatewayFamilyMemberView(View):
             print(e)
             return response.json(173, repr(e))
         pass
+
+    @classmethod
+    def generate_token_url(cls, app_user_id, request_dict, response):
+        family_id = request_dict.get('familyId', None)
+        if not family_id:
+            return response.json(444)
+        family_id = int(family_id)
+        family_qs = UserFamily.objects.filter(id=family_id, user_id=app_user_id) \
+            .values('name', 'user__userEmail',
+                    'user__userIconUrl',
+                    'user__phone', 'user__NickName',
+                    'user__username')
+        if not family_qs.exists():
+            return response.json(173)
+        family_qs = family_qs.first()
+        data = {'sharer': app_user_id, 'familyId': family_id}
+        # -----------------
+        # share_token = jwt.encode(data, '.#^^&', algorithm='HS256').decode('utf-8')
+        # +++++++++++++++++
+        redisObj = RedisObject()
+        share_token = str(int(time.time())) + CommonService.RandomStr(8)
+        if not redisObj.set_data(key=share_token, val=json.dumps(data), expire=300):
+            return response.json(10, '生成失败')
+        return response.json(0, {
+            'shareToken': share_token,
+            'userPhone': family_qs['user__phone'],
+            'nickName': family_qs['user__NickName'],
+            'userIconUrl': family_qs['user__userIconUrl'],
+            'userName': family_qs['user__username'],
+            'familyName': family_qs['name'],
+            'userEmail': family_qs['user__userEmail'],
+        })
+
+    @classmethod
+    def check_qrcode(cls, app_user_id, request_dict, response):
+        share_token = request_dict.get('shareToken', None)
+        if not share_token:
+            return response.json(444)
+        redisObj = RedisObject()
+        share_data = redisObj.get_data(key=share_token)
+        if not share_data:
+            return response.json(119)
+        data = json.loads(share_data)
+        sharer = data.get('sharer', None)
+        family_id = data.get('familyId', None)
+        if not all([sharer, family_id]):
+            return response.json(137)
+        print(app_user_id)
+        return response.json(0)

+ 64 - 66
SensorGateway/GatewayFamilyRoomController.py → Controller/SensorGateway/GatewayFamilyRoomController.py

@@ -11,10 +11,10 @@ from django.db import transaction
 from django.db.models import Q, Count
 from django.views.generic.base import View
 
+from Controller.SensorGateway.EquipmentFamilyController import EquipmentFamilyView
 from Model.models import FamilyRoomDevice, FamilyRoom
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
-from SensorGateway.EquipmentFamilyController import EquipmentFamilyView
 
 
 # 家庭房间管理
@@ -49,7 +49,7 @@ class GatewayFamilyRoomView(View):
             return self.room_del(app_user_id, request_dict, response)
         # 房间详情
         elif operation == 'details':
-            return self.get_room_details(app_user_id, request_dict, response)
+            return self.get_room_details(request_dict, response)
 
     @classmethod
     def room_device_save(cls, app_user_id, request_dict, response):
@@ -61,24 +61,34 @@ class GatewayFamilyRoomView(View):
         @return:
         """
         family_id = request_dict.get('familyId', None)
-        device_ids = request_dict.getlist('deviceIds', None)
+        device_ids = request_dict.get('deviceIds', None)
         room_id = request_dict.get('roomId', None)
-        operate = request_dict.get('operate', None)
-        if not all([family_id, device_ids, operate, room_id]):
+        if not all([family_id, room_id]):
             return response.json(444)
-        operate = int(operate)
+        family_id = int(family_id)
+        room_id = int(room_id)
         is_owner = EquipmentFamilyView.get_family_owner(app_user_id, family_id)
         if not is_owner:
             return response.json(404)
-        with transaction.atomic():
-            room_qs = FamilyRoom.objects.filter(family_id=family_id, id=room_id)
-            if not room_qs.exists():
-                return response.json(173)
-            for item in device_ids:
-                qs = FamilyRoomDevice.objects.filter(family_id=family_id, device_id=item)
+        try:
+            with transaction.atomic():
+                room_qs = FamilyRoom.objects.filter(family_id=family_id, id=room_id)
+                if not room_qs.exists():
+                    return response.json(173)
+                qs = FamilyRoomDevice.objects.filter(family_id=family_id, room_id=room_id)
                 if qs.exists():
-                    qs.update(room_id=0) if operate == 1 else qs.update(room_id=int(room_id))
-            return response.json(0)
+                    qs.update(room_id=0, sort=0)
+                if device_ids:
+                    device_ids = device_ids.split(',')
+                    for i, item in enumerate(device_ids):
+                        device_id = int(item)
+                        device_qs = FamilyRoomDevice.objects.filter(device_id=device_id)
+                        if device_qs.exists():
+                            device_qs.update(room_id=room_id, sort=i)
+                return response.json(0)
+        except Exception as e:
+            print(e)
+            return response.json(177, repr(e))
 
     @classmethod
     def room_del(cls, user_id, request_dict, response):
@@ -89,9 +99,10 @@ class GatewayFamilyRoomView(View):
         @param response: 响应参数
         @return:
         """
-        ids = request_dict.getlist('roomIds', None)
+        ids = request_dict.get('roomIds', None)
         if not ids:
             return response.json(444)
+        ids = ids.split(',')
         room_id = ids[0]
         room_info = FamilyRoom.objects.filter(id=room_id)
         if not room_info.exists():
@@ -120,74 +131,61 @@ class GatewayFamilyRoomView(View):
         @param response: 响应参数
         @return:
         """
-        ids = request_dict.getlist('ids', None)
+        ids = request_dict.get('ids', None)
         if not ids:
             return response.json(444)
-        for item in ids:
-            items = item.split(',')
-            room_id = items[0]
-            sort = items[1]
+        items = ids.split(',')
+        for item in items:
+            vals = item.split('-')
+            room_id = vals[0]
+            sort = vals[1]
             family_room = FamilyRoom.objects.filter(id=int(room_id))
             if family_room.exists():
                 family_room.update(sort=int(sort))
         return response.json(0)
 
     @classmethod
-    def get_room_details(cls, app_user_id, request_dict, response):
+    def get_room_details(cls, request_dict, response):
         """
-        房间设备详情
-        @param app_user_id:
+        房间设备详情(所在当前房间下,和所在家庭不在当前房间下的主设备)
         @param request_dict:
         @param response:
         @return:
         """
         family_id = request_dict.get('familyId', None)
         room_id = request_dict.get('roomId', None)
-        page_no = request_dict.get('pageNo', None)
-        page_size = request_dict.get('pageSize', None)
-        if not all([family_id, room_id, page_no, page_size]):
+        if not all([family_id, room_id]):
             return response.json(444)
-        room_count = FamilyRoomDevice.objects.filter(family_id=int(family_id), room_id=int(room_id)).values(
-            'device_id').annotate(count=Count('device_id')).count()
+        family_id = int(family_id)
+        room_id = int(room_id)
+        room_device_qs = FamilyRoomDevice.objects.filter(family_id=family_id, room_id=room_id).order_by('sort').values(
+            'device_id').annotate(count=Count('device_id')).values('device_id', 'device__Type', 'device__NickName')
         device_room = []
-        # 房间设备列表
-        if room_count > 0:
-            device_room_list = EquipmentFamilyView.get_family_device_list(user_id=app_user_id, page_no=1,
-                                                                          page_size=room_count,
-                                                                          family_id=int(family_id),
-                                                                          room_id=int(room_id))
-
-            if device_room_list:
-                room_name = FamilyRoom.objects.get(id=room_id).name
+        if room_device_qs.exists():
+            room_name = FamilyRoom.objects.filter(id=room_id)
+            for item in room_device_qs:
+                device_room.append({
+                    'deviceId': item['device_id'],
+                    'deviceType': item['device__Type'],
+                    'nickName': item['device__NickName'],
+                    'roomName': room_name.first().name if room_name.exists() else '',
+                })
 
-                for item in device_room_list:
-                    device_room.append({
-                        'deviceId': item['id'],
-                        'deviceType': item['Type'],
-                        'nickName': item['NickName'],
-                        'roomName': room_name,
-                    })
         device_not_room = []
-        device_not_room_count = FamilyRoomDevice.objects.filter(family_id=int(family_id), room_id=0).values(
-            'device_id').annotate(count=Count('device_id')).count()
-        if device_not_room_count > 0:
-            not_room_device_list = EquipmentFamilyView.get_family_device_list(user_id=app_user_id, page_no=int(page_no),
-                                                                              page_size=int(page_size),
-                                                                              family_id=int(family_id), room_id=0,
-                                                                              is_room_other=True)
-            if not_room_device_list:
-                for item in not_room_device_list:
-                    room_device_qs = FamilyRoomDevice.objects.filter(family_id=int(family_id))
-                    room_device_qs = room_device_qs.filter(~Q(room_id=0))
-                    name = ''
-                    if room_device_qs.exists():
-                        family_room_qs = FamilyRoom.objects.filter(id=room_device_qs.first().room_id)
-                        if family_room_qs.exists():
-                            name = family_room_qs.first().name
-                    device_not_room.append({
-                        'deviceId': item['id'],
-                        'deviceType': item['Type'],
-                        'nickName': item['NickName'],
-                        'roomName': name
-                    })
+        device_not_room_qs = FamilyRoomDevice.objects.filter(family_id=family_id)
+        device_not_room_qs = device_not_room_qs.filter(~Q(room_id=room_id)).values('device_id').annotate(
+            count=Count('device_id')).values('room_id', 'device_id', 'device__Type', 'device__NickName')
+        if device_not_room_qs.exists():
+            for item in device_not_room_qs:
+                name = ''
+                if room_device_qs.exists():
+                    family_room_qs = FamilyRoom.objects.filter(id=item['room_id'])
+                    if family_room_qs.exists():
+                        name = family_room_qs.first().name
+                device_not_room.append({
+                    'deviceId': item['device_id'],
+                    'deviceType': item['device__Type'],
+                    'nickName': item['device__NickName'],
+                    'roomName': name
+                })
         return response.json(0, {'deviceRooms': device_room, 'deviceNotRooms': device_not_room})

+ 0 - 0
SensorGateway/SensorGatewayController.py → Controller/SensorGateway/SensorGatewayController.py


+ 0 - 0
SensorGateway/SubDeviceController.py → Controller/SensorGateway/SubDeviceController.py


+ 23 - 33
Controller/SerialNumberController.py

@@ -2,27 +2,23 @@
 # -*- coding: utf-8 -*-
 import json
 import logging
-import random
-import requests
 import time
 
+import requests
 from django.db import transaction
 from django.views import View
 
-from Controller.DetectController import DetectControllerView
-from Controller.DeviceConfirmRegion import Device_Region
-from Model.models import SerialNumberModel, CompanySerialModel, UIDCompanySerialModel, CompanyModel, RegionModel, \
-    CountryModel, UIDModel, Device_Info, iotdeviceInfoModel, UidPushModel, LogModel, MacModel, UidSetModel, UID_Bucket, \
-    Unused_Uid_Meal, Order_Model, StsCrdModel, VodHlsModel, ExperienceContextModel, Equipment_Info, UidUserModel
+from Ansjer.config import CRCKey, SERVER_DOMAIN_US, SERVER_DOMAIN_CN, CONFIG_INFO, CONFIG_TEST, CONFIG_US, \
+    CONFIG_CN
+from Model.models import SerialNumberModel, CompanySerialModel, UIDCompanySerialModel, UIDModel, Device_Info, \
+    iotdeviceInfoModel, LogModel, UidSetModel, UID_Bucket, \
+    Unused_Uid_Meal, Order_Model, StsCrdModel, VodHlsModel, ExperienceContextModel, UidUserModel
 from Object.RedisObject import RedisObject
-from Object.uidManageResponseObject import uidManageResponseObject
 from Object.TokenObject import TokenObject
+from Object.uidManageResponseObject import uidManageResponseObject
 from Service.AlgorithmService import AlgorithmBaseOn35
 from Service.CommonService import CommonService
-from Ansjer.config import CRCKey, SERVER_TYPE, SERVER_DOMAIN_US, SERVER_DOMAIN_CN
 from Service.EquipmentInfoService import EquipmentInfoService
-from Service.ModelService import ModelService
-from Object.AWS.S3Email import S3Email
 
 
 class SerialNumberView(View):
@@ -45,9 +41,9 @@ class SerialNumberView(View):
 
         if operation == 'getUID':
             return self.do_get_uid(request_dict, response)
-        elif operation == 'attachUID':      # 绑定uid
+        elif operation == 'attachUID':  # 绑定uid
             return self.do_attach_uid(request_dict, response, request)
-        elif operation == 'detachUID':      # 解绑uid
+        elif operation == 'detachUID':  # 解绑uid
             return self.do_detach_uid(request, request_dict, response)
         elif operation == 'create':
             return self.do_create(request_dict, response)
@@ -155,14 +151,8 @@ class SerialNumberView(View):
 
         try:
             if not country_id:
-                # 设备模拟国外环境测试
-                # 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)
-                country_id = Device_Region().get_device_region(ip)
+                # 根据配置信息确定region_id
+                country_id = CommonService.confirm_region_id(request)
 
             # 判断序列号是否已和企业关联
             company_serial_qs = CompanySerialModel.objects.filter(company__secret=company_id, serial_number=serial)
@@ -174,7 +164,7 @@ class SerialNumberView(View):
 
             if company_serial.status == 0:  # 该序列号未绑定企业
                 return response.json(173)
-            elif company_serial.status == 1:    # 绑定uid
+            elif company_serial.status == 1:  # 绑定uid
                 # redis加锁,防止同一个序列号重复绑定
                 key = serial + 'do_attach_uid'
                 redisObj = RedisObject()
@@ -188,7 +178,7 @@ class SerialNumberView(View):
                         # 查询是否存在未绑定序列号的uid
                         uid_qs = UIDModel.objects.filter(vpg__company_id=company_serial.company.id,
                                                          vpg__region_id=country_id, status=0, p2p_type=p2p_type). \
-                                                         order_by('id')
+                            order_by('id')
                         if not uid_qs.exists():
                             return response.json(375)
 
@@ -199,7 +189,7 @@ class SerialNumberView(View):
                             return response.json(377)
 
                         result = UIDModel.objects.filter(id=uid.id, status=0).update(status=2, update_time=now_time)
-                        if int(result) <= 0:    # 更新失败
+                        if int(result) <= 0:  # 更新失败
                             count += 1
                             continue
 
@@ -216,7 +206,7 @@ class SerialNumberView(View):
 
                         full_uid_code = uid.full_uid_code
                         if uid.platform in CRCKey.keys():
-                            full_uid_code += ':'+CRCKey[uid.platform]
+                            full_uid_code += ':' + CRCKey[uid.platform]
 
                         res = {
                             'full_uid_code': CommonService.encode_data(full_uid_code),
@@ -249,7 +239,7 @@ class SerialNumberView(View):
                         redisObj.del_data(key=key)
                         return response.json(0, res)
                     return response.json(5)
-            elif company_serial.status == 2:   # 返回uid
+            elif company_serial.status == 2:  # 返回uid
                 uid_qs = UIDCompanySerialModel.objects.filter(company_serial_id=company_serial.id)
                 if not uid_qs.exists():
                     return response.json(173)
@@ -257,7 +247,7 @@ class SerialNumberView(View):
                                     'uid__platform', 'uid__init_string', 'uid__init_string_app')[0]
                 full_uid_code = uid['uid__full_uid_code']
                 if uid['uid__platform'] in CRCKey.keys():
-                    full_uid_code += ':'+CRCKey[uid['uid__platform']]
+                    full_uid_code += ':' + CRCKey[uid['uid__platform']]
                 res = {
                     'full_uid_code': CommonService.encode_data(full_uid_code),
                     'uid': CommonService.encode_data(uid['uid__uid']),
@@ -333,7 +323,7 @@ class SerialNumberView(View):
         try:
             with transaction.atomic():
                 uid = uid_serial.uid.uid
-                company_serial_qs.update(status=1)      # 更新序列号状态
+                company_serial_qs.update(status=1)  # 更新序列号状态
                 # 删除设备相关数据,参考后台的设备重置删除的数据
                 Device_Info.objects.filter(UID=uid).delete()
                 UidSetModel.objects.filter(uid=uid).delete()
@@ -358,7 +348,7 @@ class SerialNumberView(View):
                 except AssertionError:
                     return response.json(378)
 
-                UIDModel.objects.filter(uid=uid).update(status=0, mac='')    # 重置uid的使用状态为未使用
+                UIDModel.objects.filter(uid=uid).update(status=0, mac='')  # 重置uid的使用状态为未使用
                 uid_serial.delete()
 
                 # 记录操作日志
@@ -382,11 +372,12 @@ class SerialNumberView(View):
 
     @staticmethod
     def update_serial_status(serial, status):
-        if SERVER_TYPE == 'Ansjer.cn_config.test_settings':   # 测试服不处理
+        if CONFIG_INFO == CONFIG_TEST:  # 测试服不处理
             return True
-        if SERVER_TYPE == 'Ansjer.us_config.formal_settings':
+        server_domain = SERVER_DOMAIN_CN
+        if CONFIG_INFO == CONFIG_US:
             server_domain = SERVER_DOMAIN_CN
-        elif SERVER_TYPE == 'Ansjer.cn_config.formal_settings':
+        elif CONFIG_INFO == CONFIG_CN:
             server_domain = SERVER_DOMAIN_US
         url = server_domain + 'serialNumber/changeSerialNumberStatus'
         data = {'serial': serial, 'status': status}
@@ -434,4 +425,3 @@ class SerialNumberView(View):
             djangoLogger = logging.getLogger('django')
             djangoLogger.exception(repr(e))
             return response.json(500, str(e))
-

+ 42 - 20
Service/CommonService.py

@@ -3,27 +3,29 @@
 import base64
 import datetime
 import time
+from base64 import encodebytes
 from pathlib import Path
 from random import Random
+
+import OpenSSL.crypto as ct
 import ipdb
 import requests
 import simplejson as json
 from django.core import serializers
-from django.http import HttpResponseRedirect
 from django.utils import timezone
 from pyipip import IPIPDatabase
-from Ansjer.config import BASE_DIR, UNICODE_ASCII_CHARACTER_SET, SERVER_DOMAIN_SSL
-import OpenSSL.crypto as ct
-from base64 import encodebytes
+
+from Ansjer.config import BASE_DIR, SERVER_DOMAIN_SSL, CONFIG_INFO, CONFIG_TEST, CONFIG_CN
 from Controller.CheckUserData import RandomStr
-from Model.models import iotdeviceInfoModel, Device_Info
-from Service.ModelService import ModelService
+from Model.models import iotdeviceInfoModel, Device_Info, CountryModel, RegionModel
 
 
 class CommonService:
     # 添加模糊搜索
     @staticmethod
-    def get_kwargs(data={}):
+    def get_kwargs(data=None):
+        if data is None:
+            data = {}
         kwargs = {}
         for (k, v) in data.items():
             if v is not None and v != u'':
@@ -46,7 +48,7 @@ class CommonService:
         key_list = []
         value_list = []
         for k, v in request_dict.items():
-            key_list.append(k[k.index('[')+1:k.index(']')] if 'meta' in k else k)
+            key_list.append(k[k.index('[') + 1:k.index(']')] if 'meta' in k else k)
             if v == 'true':
                 v = True
             elif v == 'false':
@@ -72,8 +74,10 @@ class CommonService:
         return mb_size
 
     @staticmethod
-    def get_param_flag(data=[]):
+    def get_param_flag(data=None):
         # print(data)
+        if data is None:
+            data = []
         flag = True
         for v in data:
             if v is None:
@@ -286,17 +290,17 @@ class CommonService:
             return ''
         for i in range(start, end):
             if i == 1:
-                content = RandomStr(3, False)+content+RandomStr(3, False)
+                content = RandomStr(3, False) + content + RandomStr(3, False)
                 content = base64.b64encode(str(content).encode("utf-8")).decode('utf8')
             if i == 2:
-                content = RandomStr(2, False)+str(content)+RandomStr(2, False)
+                content = RandomStr(2, False) + str(content) + RandomStr(2, False)
                 content = base64.b64encode(str(content).encode("utf-8")).decode('utf8')
             if i == 3:
-                content = RandomStr(1, False)+str(content)+RandomStr(1, False)
+                content = RandomStr(1, False) + str(content) + RandomStr(1, False)
                 content = base64.b64encode(str(content).encode("utf-8")).decode('utf8')
         return content
 
-    #把格式化时间转换成时间戳
+    # 把格式化时间转换成时间戳
     @staticmethod
     def str_to_timestamp(str_time=None, format='%Y-%m-%d %H:%M:%S'):
         if str_time:
@@ -305,9 +309,6 @@ class CommonService:
             return int(result)
         return int(time.time())
 
-
-
-
     # 把时间戳转换成格式化
     @staticmethod
     def timestamp_to_str(timestamp=None, format='%Y-%m-%d %H:%M:%S'):
@@ -318,8 +319,7 @@ class CommonService:
         else:
             return time.strptime(format)
 
-
-    #计算N个月后的时间戳
+    # 计算N个月后的时间戳
     @staticmethod
     def calcMonthLater(addMonth, unix_timestamp=None):
         if unix_timestamp:
@@ -346,8 +346,8 @@ class CommonService:
         for is_format in range(4):
             try:
                 date_format = '{now_year}-{now_month}-{now_day} {now_hour}:{now_min}:{now_second}' \
-                    .format(now_year=now_year,now_month=now_month,now_day=now_day,now_hour=now_hour,
-                            now_min=now_min,now_second=now_second)
+                    .format(now_year=now_year, now_month=now_month, now_day=now_day, now_hour=now_hour,
+                            now_min=now_min, now_second=now_second)
                 timestamps = CommonService.str_to_timestamp(date_format)
             except Exception as e:
                 if str(e) == 'day is out of range for month':
@@ -597,3 +597,25 @@ GCqvlyw5dfxNA+EtxNE2wCW/LW7ENJlACgcfgPlBZtpLheWoZB/maw4=
             return 'Loocam_Device_' + thing_name_suffix
         else:
             return thing_name_suffix
+
+    @staticmethod
+    def confirm_region_id(request):
+        """
+        根据配置信息确定region_id
+        @param request: 请求体
+        @return: region_id
+        """
+        region_id = 3
+        if CONFIG_INFO == CONFIG_TEST or CONFIG_INFO == CONFIG_CN:
+            region_id = 1
+        else:  # 国外配置暂时通过ip确认
+            ip = CommonService.get_ip_address(request)
+            ipInfo = CommonService.getIpIpInfo(ip, 'CN')
+            if ipInfo['country_code']:
+                country_qs = CountryModel.objects.filter(country_code=ipInfo['country_code']).values('region__id')
+                if country_qs.exists():
+                    region_id = country_qs[0]['region__id']
+            else:  # 不存在默认返回美洲地区api
+                region_qs = RegionModel.objects.filter(continent_code='NA').values("id")
+                region_id = region_qs[0]['id']
+        return region_id