Browse Source

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

locky 3 years ago
parent
commit
3b68ca6726

+ 7 - 6
AdminController/DeviceManagementController.py

@@ -47,8 +47,8 @@ class DeviceManagement(View):
             userID = tko.userID
             userID = tko.userID
             if not userID:
             if not userID:
                 return response.json(444, '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':
             elif operation == 'deleteDevice':
                 return self.deleteDevice(request_dict, response)
                 return self.deleteDevice(request_dict, response)
             elif operation == 'resetVod':   # 重置云存
             elif operation == 'resetVod':   # 重置云存
@@ -64,8 +64,8 @@ class DeviceManagement(View):
             else:
             else:
                 return response.json(444, 'operation')
                 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)
         pageNo = request_dict.get('pageNo', None)
         pageSize = request_dict.get('pageSize', None)
         pageSize = request_dict.get('pageSize', None)
         UID = request_dict.get('UID', 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) |
                     device_info_qs = Device_Info.objects.filter(Q(userID__username__contains=username) |
                                                                 Q(userID__userEmail__contains=username) |
                                                                 Q(userID__userEmail__contains=username) |
                                                                 Q(userID__phone__contains=username))
                                                                 Q(userID__phone__contains=username))
-                total = len(device_info_qs)
+                total = device_info_qs.count()
                 if not total:
                 if not total:
                     return response.json(0, {'list': {}, 'total': 0})
                     return response.json(0, {'list': {}, 'total': 0})
                 device_info_qs = device_info_qs[(page - 1) * line:page * line]
                 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')
                         device_type_qs = DeviceTypeModel.objects.filter(type=type).values('name')
                         if device_type_qs.exists():
                         if device_type_qs.exists():
                             device_info_list["datas"][k]['fields']['Type'] = device_type_qs[0]['name']
                             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():
                         if uid_set_qs.exists():
                             isAlexa = '是' if uid_set_qs[0]['is_alexa'] else '否'
                             isAlexa = '是' if uid_set_qs[0]['is_alexa'] else '否'
                             device_info_list["datas"][k]['fields']['isAlexa'] = isAlexa
                             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']['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})
             return response.json(0, {'list': device_info_list, 'total': total})
         except Exception as e:
         except Exception as e:
             print(e)
             print(e)

+ 3 - 0
Ansjer/cn_config/config_formal.py

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

+ 3 - 0
Ansjer/cn_config/config_test.py

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

+ 8 - 1
Ansjer/config.py

@@ -12,7 +12,14 @@
 @Contact: chanjunkai@163.com
 @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')
 SERVER_TYPE = os.environ.get('DJANGO_SETTINGS_MODULE')
 print(SERVER_TYPE)
 print(SERVER_TYPE)

+ 3 - 0
Ansjer/eur_config/config_formal.py

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

+ 3 - 0
Ansjer/local_config/config_local.py

@@ -3,6 +3,9 @@
 
 
 import os
 import os
 
 
+# 配置信息
+CONFIG_INFO = 'test'
+
 OAUTH_ACCESS_TOKEN_SECRET = 'local_a+jbgnw%@1%zy^=@dn62%'
 OAUTH_ACCESS_TOKEN_SECRET = 'local_a+jbgnw%@1%zy^=@dn62%'
 OAUTH_REFRESH_TOKEN_SECRET = 'local_r+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 django.urls import re_path
 
 
-from SensorGateway import EquipmentFamilyController, GatewayFamilyRoomController, GatewayFamilyMemberController, \
-    SubDeviceController
+from Controller.SensorGateway import GatewayFamilyRoomController, SubDeviceController, GatewayFamilyMemberController, \
+    EquipmentFamilyController
 
 
 urlpatterns = [
 urlpatterns = [
     re_path(r'^sensor/gateway/(?P<operation>.*)$', EquipmentFamilyController.EquipmentFamilyView.as_view()),
     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.Cron import CronTaskController
 from Controller.MessagePush import EquipmentMessagePush
 from Controller.MessagePush import EquipmentMessagePush
 from Controller.Surveys import CloudStorageController
 from Controller.Surveys import CloudStorageController
-from SensorGateway import SensorGatewayController, EquipmentFamilyController
+from Controller.SensorGateway import SensorGatewayController, EquipmentFamilyController
 from django.urls import include
 from django.urls import include
 
 
 urlpatterns = [
 urlpatterns = [

+ 3 - 0
Ansjer/us_config/config_formal.py

@@ -13,6 +13,9 @@
 """
 """
 import os
 import os
 
 
+# 配置信息
+CONFIG_INFO = 'us'
+
 NGINX_RTMP_STAT = 'http://www.dvema.com/stat'
 NGINX_RTMP_STAT = 'http://www.dvema.com/stat'
 SERVER_DOMAIN_SSL = 'https://www.dvema.com/'
 SERVER_DOMAIN_SSL = 'https://www.dvema.com/'
 SERVER_DOMAIN = 'http://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, \
 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_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_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 Controller.DeviceConfirmRegion import Device_Region
 from Model.models import Device_Info, iotdeviceInfoModel, SerialNumberModel, UidSetModel
 from Model.models import Device_Info, iotdeviceInfoModel, SerialNumberModel, UidSetModel
 from Object.IOTCore.IotObject import IOTClient
 from Object.IOTCore.IotObject import IOTClient
@@ -129,13 +129,8 @@ class IotCoreView(View):
                 }
                 }
                 return response.json(0, {'res': res})
                 return response.json(0, {'res': res})
             else:
             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)
                 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_qs = room_qs.values('id', 'name', 'sort')
         room_list = []
         room_list = []
         if not room_qs.exists():
         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:
         for item in room_qs:
             item['deviceCount'] = FamilyRoomDevice.objects.filter(family_id=family_id, room_id=item['id']).count()
             item['deviceCount'] = FamilyRoomDevice.objects.filter(family_id=family_id, room_id=item['id']).count()
             room_list.append(item)
             room_list.append(item)

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

@@ -7,12 +7,17 @@
 @Software: PyCharm
 @Software: PyCharm
 """
 """
 
 
+import json
+import time
+
 from django.views.generic.base import View
 from django.views.generic.base import View
 
 
+from Controller.SensorGateway.EquipmentFamilyController import EquipmentFamilyView
 from Model.models import FamilyMemberJoin, UserFamily
 from Model.models import FamilyMemberJoin, UserFamily
+from Object.RedisObject import RedisObject
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 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)
             return self.member_join(app_user_id, request_dict, response)
         elif operation == 'join/page':
         elif operation == 'join/page':
             return self.member_join_page(request_dict, response)
             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
     @classmethod
     def member_join(cls, app_user_id, request_dict, response):
     def member_join(cls, app_user_id, request_dict, response):
@@ -103,3 +112,52 @@ class GatewayFamilyMemberView(View):
             print(e)
             print(e)
             return response.json(173, repr(e))
             return response.json(173, repr(e))
         pass
         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.db.models import Q, Count
 from django.views.generic.base import View
 from django.views.generic.base import View
 
 
+from Controller.SensorGateway.EquipmentFamilyController import EquipmentFamilyView
 from Model.models import FamilyRoomDevice, FamilyRoom
 from Model.models import FamilyRoomDevice, FamilyRoom
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 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)
             return self.room_del(app_user_id, request_dict, response)
         # 房间详情
         # 房间详情
         elif operation == 'details':
         elif operation == 'details':
-            return self.get_room_details(app_user_id, request_dict, response)
+            return self.get_room_details(request_dict, response)
 
 
     @classmethod
     @classmethod
     def room_device_save(cls, app_user_id, request_dict, response):
     def room_device_save(cls, app_user_id, request_dict, response):
@@ -61,24 +61,34 @@ class GatewayFamilyRoomView(View):
         @return:
         @return:
         """
         """
         family_id = request_dict.get('familyId', None)
         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)
         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)
             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)
         is_owner = EquipmentFamilyView.get_family_owner(app_user_id, family_id)
         if not is_owner:
         if not is_owner:
             return response.json(404)
             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():
                 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
     @classmethod
     def room_del(cls, user_id, request_dict, response):
     def room_del(cls, user_id, request_dict, response):
@@ -89,9 +99,10 @@ class GatewayFamilyRoomView(View):
         @param response: 响应参数
         @param response: 响应参数
         @return:
         @return:
         """
         """
-        ids = request_dict.getlist('roomIds', None)
+        ids = request_dict.get('roomIds', None)
         if not ids:
         if not ids:
             return response.json(444)
             return response.json(444)
+        ids = ids.split(',')
         room_id = ids[0]
         room_id = ids[0]
         room_info = FamilyRoom.objects.filter(id=room_id)
         room_info = FamilyRoom.objects.filter(id=room_id)
         if not room_info.exists():
         if not room_info.exists():
@@ -120,74 +131,61 @@ class GatewayFamilyRoomView(View):
         @param response: 响应参数
         @param response: 响应参数
         @return:
         @return:
         """
         """
-        ids = request_dict.getlist('ids', None)
+        ids = request_dict.get('ids', None)
         if not ids:
         if not ids:
             return response.json(444)
             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))
             family_room = FamilyRoom.objects.filter(id=int(room_id))
             if family_room.exists():
             if family_room.exists():
                 family_room.update(sort=int(sort))
                 family_room.update(sort=int(sort))
         return response.json(0)
         return response.json(0)
 
 
     @classmethod
     @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 request_dict:
         @param response:
         @param response:
         @return:
         @return:
         """
         """
         family_id = request_dict.get('familyId', None)
         family_id = request_dict.get('familyId', None)
         room_id = request_dict.get('roomId', 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)
             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 = []
         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 = []
-        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})
         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 -*-
 # -*- coding: utf-8 -*-
 import json
 import json
 import logging
 import logging
-import random
-import requests
 import time
 import time
 
 
+import requests
 from django.db import transaction
 from django.db import transaction
 from django.views import View
 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.RedisObject import RedisObject
-from Object.uidManageResponseObject import uidManageResponseObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
+from Object.uidManageResponseObject import uidManageResponseObject
 from Service.AlgorithmService import AlgorithmBaseOn35
 from Service.AlgorithmService import AlgorithmBaseOn35
 from Service.CommonService import CommonService
 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.EquipmentInfoService import EquipmentInfoService
-from Service.ModelService import ModelService
-from Object.AWS.S3Email import S3Email
 
 
 
 
 class SerialNumberView(View):
 class SerialNumberView(View):
@@ -45,9 +41,9 @@ class SerialNumberView(View):
 
 
         if operation == 'getUID':
         if operation == 'getUID':
             return self.do_get_uid(request_dict, response)
             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)
             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)
             return self.do_detach_uid(request, request_dict, response)
         elif operation == 'create':
         elif operation == 'create':
             return self.do_create(request_dict, response)
             return self.do_create(request_dict, response)
@@ -155,14 +151,8 @@ class SerialNumberView(View):
 
 
         try:
         try:
             if not country_id:
             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)
             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:  # 该序列号未绑定企业
             if company_serial.status == 0:  # 该序列号未绑定企业
                 return response.json(173)
                 return response.json(173)
-            elif company_serial.status == 1:    # 绑定uid
+            elif company_serial.status == 1:  # 绑定uid
                 # redis加锁,防止同一个序列号重复绑定
                 # redis加锁,防止同一个序列号重复绑定
                 key = serial + 'do_attach_uid'
                 key = serial + 'do_attach_uid'
                 redisObj = RedisObject()
                 redisObj = RedisObject()
@@ -188,7 +178,7 @@ class SerialNumberView(View):
                         # 查询是否存在未绑定序列号的uid
                         # 查询是否存在未绑定序列号的uid
                         uid_qs = UIDModel.objects.filter(vpg__company_id=company_serial.company.id,
                         uid_qs = UIDModel.objects.filter(vpg__company_id=company_serial.company.id,
                                                          vpg__region_id=country_id, status=0, p2p_type=p2p_type). \
                                                          vpg__region_id=country_id, status=0, p2p_type=p2p_type). \
-                                                         order_by('id')
+                            order_by('id')
                         if not uid_qs.exists():
                         if not uid_qs.exists():
                             return response.json(375)
                             return response.json(375)
 
 
@@ -199,7 +189,7 @@ class SerialNumberView(View):
                             return response.json(377)
                             return response.json(377)
 
 
                         result = UIDModel.objects.filter(id=uid.id, status=0).update(status=2, update_time=now_time)
                         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
                             count += 1
                             continue
                             continue
 
 
@@ -216,7 +206,7 @@ class SerialNumberView(View):
 
 
                         full_uid_code = uid.full_uid_code
                         full_uid_code = uid.full_uid_code
                         if uid.platform in CRCKey.keys():
                         if uid.platform in CRCKey.keys():
-                            full_uid_code += ':'+CRCKey[uid.platform]
+                            full_uid_code += ':' + CRCKey[uid.platform]
 
 
                         res = {
                         res = {
                             'full_uid_code': CommonService.encode_data(full_uid_code),
                             'full_uid_code': CommonService.encode_data(full_uid_code),
@@ -249,7 +239,7 @@ class SerialNumberView(View):
                         redisObj.del_data(key=key)
                         redisObj.del_data(key=key)
                         return response.json(0, res)
                         return response.json(0, res)
                     return response.json(5)
                     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)
                 uid_qs = UIDCompanySerialModel.objects.filter(company_serial_id=company_serial.id)
                 if not uid_qs.exists():
                 if not uid_qs.exists():
                     return response.json(173)
                     return response.json(173)
@@ -257,7 +247,7 @@ class SerialNumberView(View):
                                     'uid__platform', 'uid__init_string', 'uid__init_string_app')[0]
                                     'uid__platform', 'uid__init_string', 'uid__init_string_app')[0]
                 full_uid_code = uid['uid__full_uid_code']
                 full_uid_code = uid['uid__full_uid_code']
                 if uid['uid__platform'] in CRCKey.keys():
                 if uid['uid__platform'] in CRCKey.keys():
-                    full_uid_code += ':'+CRCKey[uid['uid__platform']]
+                    full_uid_code += ':' + CRCKey[uid['uid__platform']]
                 res = {
                 res = {
                     'full_uid_code': CommonService.encode_data(full_uid_code),
                     'full_uid_code': CommonService.encode_data(full_uid_code),
                     'uid': CommonService.encode_data(uid['uid__uid']),
                     'uid': CommonService.encode_data(uid['uid__uid']),
@@ -333,7 +323,7 @@ class SerialNumberView(View):
         try:
         try:
             with transaction.atomic():
             with transaction.atomic():
                 uid = uid_serial.uid.uid
                 uid = uid_serial.uid.uid
-                company_serial_qs.update(status=1)      # 更新序列号状态
+                company_serial_qs.update(status=1)  # 更新序列号状态
                 # 删除设备相关数据,参考后台的设备重置删除的数据
                 # 删除设备相关数据,参考后台的设备重置删除的数据
                 Device_Info.objects.filter(UID=uid).delete()
                 Device_Info.objects.filter(UID=uid).delete()
                 UidSetModel.objects.filter(uid=uid).delete()
                 UidSetModel.objects.filter(uid=uid).delete()
@@ -358,7 +348,7 @@ class SerialNumberView(View):
                 except AssertionError:
                 except AssertionError:
                     return response.json(378)
                     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()
                 uid_serial.delete()
 
 
                 # 记录操作日志
                 # 记录操作日志
@@ -382,11 +372,12 @@ class SerialNumberView(View):
 
 
     @staticmethod
     @staticmethod
     def update_serial_status(serial, status):
     def update_serial_status(serial, status):
-        if SERVER_TYPE == 'Ansjer.cn_config.test_settings':   # 测试服不处理
+        if CONFIG_INFO == CONFIG_TEST:  # 测试服不处理
             return True
             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
             server_domain = SERVER_DOMAIN_CN
-        elif SERVER_TYPE == 'Ansjer.cn_config.formal_settings':
+        elif CONFIG_INFO == CONFIG_CN:
             server_domain = SERVER_DOMAIN_US
             server_domain = SERVER_DOMAIN_US
         url = server_domain + 'serialNumber/changeSerialNumberStatus'
         url = server_domain + 'serialNumber/changeSerialNumberStatus'
         data = {'serial': serial, 'status': status}
         data = {'serial': serial, 'status': status}
@@ -434,4 +425,3 @@ class SerialNumberView(View):
             djangoLogger = logging.getLogger('django')
             djangoLogger = logging.getLogger('django')
             djangoLogger.exception(repr(e))
             djangoLogger.exception(repr(e))
             return response.json(500, str(e))
             return response.json(500, str(e))
-

+ 42 - 20
Service/CommonService.py

@@ -3,27 +3,29 @@
 import base64
 import base64
 import datetime
 import datetime
 import time
 import time
+from base64 import encodebytes
 from pathlib import Path
 from pathlib import Path
 from random import Random
 from random import Random
+
+import OpenSSL.crypto as ct
 import ipdb
 import ipdb
 import requests
 import requests
 import simplejson as json
 import simplejson as json
 from django.core import serializers
 from django.core import serializers
-from django.http import HttpResponseRedirect
 from django.utils import timezone
 from django.utils import timezone
 from pyipip import IPIPDatabase
 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 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:
 class CommonService:
     # 添加模糊搜索
     # 添加模糊搜索
     @staticmethod
     @staticmethod
-    def get_kwargs(data={}):
+    def get_kwargs(data=None):
+        if data is None:
+            data = {}
         kwargs = {}
         kwargs = {}
         for (k, v) in data.items():
         for (k, v) in data.items():
             if v is not None and v != u'':
             if v is not None and v != u'':
@@ -46,7 +48,7 @@ class CommonService:
         key_list = []
         key_list = []
         value_list = []
         value_list = []
         for k, v in request_dict.items():
         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':
             if v == 'true':
                 v = True
                 v = True
             elif v == 'false':
             elif v == 'false':
@@ -72,8 +74,10 @@ class CommonService:
         return mb_size
         return mb_size
 
 
     @staticmethod
     @staticmethod
-    def get_param_flag(data=[]):
+    def get_param_flag(data=None):
         # print(data)
         # print(data)
+        if data is None:
+            data = []
         flag = True
         flag = True
         for v in data:
         for v in data:
             if v is None:
             if v is None:
@@ -286,17 +290,17 @@ class CommonService:
             return ''
             return ''
         for i in range(start, end):
         for i in range(start, end):
             if i == 1:
             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')
                 content = base64.b64encode(str(content).encode("utf-8")).decode('utf8')
             if i == 2:
             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')
                 content = base64.b64encode(str(content).encode("utf-8")).decode('utf8')
             if i == 3:
             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')
                 content = base64.b64encode(str(content).encode("utf-8")).decode('utf8')
         return content
         return content
 
 
-    #把格式化时间转换成时间戳
+    # 把格式化时间转换成时间戳
     @staticmethod
     @staticmethod
     def str_to_timestamp(str_time=None, format='%Y-%m-%d %H:%M:%S'):
     def str_to_timestamp(str_time=None, format='%Y-%m-%d %H:%M:%S'):
         if str_time:
         if str_time:
@@ -305,9 +309,6 @@ class CommonService:
             return int(result)
             return int(result)
         return int(time.time())
         return int(time.time())
 
 
-
-
-
     # 把时间戳转换成格式化
     # 把时间戳转换成格式化
     @staticmethod
     @staticmethod
     def timestamp_to_str(timestamp=None, format='%Y-%m-%d %H:%M:%S'):
     def timestamp_to_str(timestamp=None, format='%Y-%m-%d %H:%M:%S'):
@@ -318,8 +319,7 @@ class CommonService:
         else:
         else:
             return time.strptime(format)
             return time.strptime(format)
 
 
-
-    #计算N个月后的时间戳
+    # 计算N个月后的时间戳
     @staticmethod
     @staticmethod
     def calcMonthLater(addMonth, unix_timestamp=None):
     def calcMonthLater(addMonth, unix_timestamp=None):
         if unix_timestamp:
         if unix_timestamp:
@@ -346,8 +346,8 @@ class CommonService:
         for is_format in range(4):
         for is_format in range(4):
             try:
             try:
                 date_format = '{now_year}-{now_month}-{now_day} {now_hour}:{now_min}:{now_second}' \
                 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)
                 timestamps = CommonService.str_to_timestamp(date_format)
             except Exception as e:
             except Exception as e:
                 if str(e) == 'day is out of range for month':
                 if str(e) == 'day is out of range for month':
@@ -597,3 +597,25 @@ GCqvlyw5dfxNA+EtxNE2wCW/LW7ENJlACgcfgPlBZtpLheWoZB/maw4=
             return 'Loocam_Device_' + thing_name_suffix
             return 'Loocam_Device_' + thing_name_suffix
         else:
         else:
             return thing_name_suffix
             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