Bläddra i källkod

Merge branch 'dev' into lang

lang 4 år sedan
förälder
incheckning
315ce230ea

+ 12 - 27
Controller/CloudStorage.py

@@ -34,7 +34,7 @@ from django.views.generic.base import View
 from pyfcm import FCMNotification
 from pyfcm import FCMNotification
 
 
 from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, OSS_ROLE_ARN, SERVER_DOMAIN, PAYPAL_CRD, \
 from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, OSS_ROLE_ARN, SERVER_DOMAIN, PAYPAL_CRD, \
-    SERVER_DOMAIN_SSL, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_ARN, APNS_MODE, APNS_CONFIG, BASE_DIR, JPUSH_CONFIG
+    SERVER_DOMAIN_SSL, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_ARN, APNS_MODE, APNS_CONFIG, BASE_DIR, JPUSH_CONFIG, FCM_CONFIG
 from Model.models import Device_Info, Order_Model, Store_Meal, VodHlsModel, OssCrdModel, UID_Bucket, StsCrdModel, \
 from Model.models import Device_Info, Order_Model, Store_Meal, VodHlsModel, OssCrdModel, UID_Bucket, StsCrdModel, \
     ExperienceContextModel, Pay_Type, CDKcontextModel, Device_User, SysMassModel, SysMsgModel, UidPushModel
     ExperienceContextModel, Pay_Type, CDKcontextModel, Device_User, SysMassModel, SysMsgModel, UidPushModel
 from Object.AliPayObject import AliPayObject
 from Object.AliPayObject import AliPayObject
@@ -1125,7 +1125,7 @@ class CloudStorageView(View):
         pay_type = int(request_dict.get('pay_type', None))
         pay_type = int(request_dict.get('pay_type', None))
         rank = request_dict.get('rank', None)
         rank = request_dict.get('rank', None)
         cdk = request_dict.get('cdk', None)
         cdk = request_dict.get('cdk', None)
-
+        lang = request_dict.get('lang', None)
         if cdk != None and pay_type == 11:
         if cdk != None and pay_type == 11:
             cdk_qs = CDKcontextModel.objects.filter(cdk=cdk).values('is_activate', 'rank__id', 'rank__commodity_code')
             cdk_qs = CDKcontextModel.objects.filter(cdk=cdk).values('is_activate', 'rank__id', 'rank__commodity_code')
             if not cdk_qs.exists():
             if not cdk_qs.exists():
@@ -1184,6 +1184,9 @@ class CloudStorageView(View):
 
 
         duq = Device_User.objects.filter(userID=userID).values('username')
         duq = Device_User.objects.filter(userID=userID).values('username')
         dvq = Device_Info.objects.filter(UID=uid, vodPrimaryUserID='', vodPrimaryMaster='')
         dvq = Device_Info.objects.filter(UID=uid, vodPrimaryUserID='', vodPrimaryMaster='')
+
+
+
         if dvq.exists():
         if dvq.exists():
             dvq_set_update_dict = {
             dvq_set_update_dict = {
                 'vodPrimaryUserID': userID,
                 'vodPrimaryUserID': userID,
@@ -1191,6 +1194,7 @@ class CloudStorageView(View):
             }
             }
             dvq.update(**dvq_set_update_dict)
             dvq.update(**dvq_set_update_dict)
 
 
+        sys_msg_text_list = ['成功购买云存', 'Successful purchase of cloud storage']
         # return response.json(0)
         # return response.json(0)
         returnurl = "{SERVER_DOMAIN}cloudstorage/payOK".format(SERVER_DOMAIN=SERVER_DOMAIN)
         returnurl = "{SERVER_DOMAIN}cloudstorage/payOK".format(SERVER_DOMAIN=SERVER_DOMAIN)
         if pay_type == 10:
         if pay_type == 10:
@@ -1200,6 +1204,7 @@ class CloudStorageView(View):
                 do_time=nowTime
                 do_time=nowTime
             )
             )
             returnurl = "{SERVER_DOMAIN}cloudstorage/payOK?paytype=10".format(SERVER_DOMAIN=SERVER_DOMAIN)
             returnurl = "{SERVER_DOMAIN}cloudstorage/payOK?paytype=10".format(SERVER_DOMAIN=SERVER_DOMAIN)
+            sys_msg_text_list = ['成功体验云存', 'Successful experience of cloud storage']
 
 
         if pay_type == 11:
         if pay_type == 11:
             update_dict = {}
             update_dict = {}
@@ -1207,7 +1212,10 @@ class CloudStorageView(View):
             update_dict['order'] = orderID
             update_dict['order'] = orderID
             CDKcontextModel.objects.filter(cdk=cdk).update(**update_dict)
             CDKcontextModel.objects.filter(cdk=cdk).update(**update_dict)
             returnurl = "{SERVER_DOMAIN}cloudstorage/payOK?paytype=11".format(SERVER_DOMAIN=SERVER_DOMAIN)
             returnurl = "{SERVER_DOMAIN}cloudstorage/payOK?paytype=11".format(SERVER_DOMAIN=SERVER_DOMAIN)
+            sys_msg_text_list = ['成功兑换云存', 'Successful exchange of cloud storage']
+
 
 
+        self.do_vod_msg_Notice(uid, channel, userID, lang, sys_msg_text_list)
         result = returnurl
         result = returnurl
         return response.json(0, result)
         return response.json(0, result)
         # red_url =
         # red_url =
@@ -1319,7 +1327,7 @@ class CloudStorageView(View):
         except Exception as e:
         except Exception as e:
             return repr(e)
             return repr(e)
     # 云存到期续费提醒   提前1天
     # 云存到期续费提醒   提前1天
-    def do_vod_msg_end(self):
+    def do_vod_msg_end(self, request_dict):
         response = ResponseObject()
         response = ResponseObject()
         now_time = int(time.time())
         now_time = int(time.time())
 
 
@@ -1391,19 +1399,7 @@ class CloudStorageView(View):
             if tz is None or tz == '':
             if tz is None or tz == '':
                 tz = 0
                 tz = 0
 
 
-            package_title_config = {
-                'com.ansjer.customizedd_a': 'DVS',
-                'com.ansjer.zccloud_a': 'ZosiSmart',
-                'com.ansjer.zccloud_ab': '周视',
-                'com.ansjer.adcloud_a': 'ADCloud',
-                'com.ansjer.adcloud_ab': 'ADCloud',
-                'com.ansjer.accloud_a': 'ACCloud',
-                'com.ansjer.loocamccloud_a': 'Loocam',
-                'com.ansjer.loocamdcloud_a': 'Anlapus',
-                'com.ansjer.customizedb_a': 'COCOONHD',
-                'com.ansjer.customizeda_a': 'Guardian365',
-                'com.ansjer.customizedc_a': 'PatrolSecure',
-            }
+            package_title_config = FCM_CONFIG[appBundleId]
             if appBundleId in package_title_config.keys():
             if appBundleId in package_title_config.keys():
                 msg_title = package_title_config[appBundleId] + '(' + nickname + ')'
                 msg_title = package_title_config[appBundleId] + '(' + nickname + ')'
             else:
             else:
@@ -1448,17 +1444,6 @@ class CloudStorageView(View):
 
 
             elif push_type == 1:  # android gcm
             elif push_type == 1:  # android gcm
                 try:
                 try:
-                    FCM_CONFIG = {
-                        'com.ansjer.zccloud_a': 'AAAAb9YP3rk:APA91bHu8u-CTpcd0g6lKPo0WNVqCi8jZub1cPPbSAY9AucT1HxlF65ZDUko9iG8q2ch17bwu9YWHpK1xI1gHSRXCslLvZlXEmHZC0AG3JKg15XuUvlFKACIajUFV-pOeGRT8tM6-31I',
-                        'com.ansjer.loocamccloud_a': 'AAAAb9YP3rk:APA91bFCgd-kbVmpK4EVpfdHH_PJZQCYTkOGnTZdIuBWEz2r7aMRsJYHOH3sB-rwcbaRWgnufTyjX9nGQxb6KxQbWVk4ah_H-M3IqGh6Mb60WQQAuR33V6g_Jes5pGL6ViuIxGHqVMaR',
-                        'com.ansjer.loocamdcloud_a': 'AAAAb9YP3rk:APA91bGw2I2KMD4i-5T7nZO_wB8kuAOuqgyqe5rxmY-W5qkpYEx9IL2IfmC_qf6B_xOyjIDDSjckvMo-RauN__SEoxvAkis7042GRkoKpw7cjZ_H8lC-d50PC0GclPzccrOGFusyKbFY',
-                        'com.ansjer.customizedb_a': 'AAAAb9YP3rk:APA91bE7kI4vcm-9h_CJNFlOZfc-xwP4Btn6AnjOrwoKV6fgYN7fdarkO76sYxVZiAbDnxsFfOJyP7vQfwyan6mdjuyD5iHdt_XgO22VqniC0vA1V4GJiCS8Tp7LxIX8JVKZl9I_Powt',
-                        'com.ansjer.customizeda_a': 'AAAAb9YP3rk:APA91bF0HzizVWDc6dKzobY9fsaKDK4veqkOZehDXshVXs8pEEvNWjR_YWbhP60wsRYCHCal8fWN5cECVOWNMMzDsfU88Ty2AUl8S5FtZsmeDTkoGntQOswBr8Ln7Fm_LAp1VqTf9CpM',
-                        'com.ansjer.customizedd_a': 'AAAAb9YP3rk:APA91bHkxOozJWBrlv3eNT0PgwosYENI9aM4Zuzd418cX-iKkpa1zFNC5MkNDKApx1KH4fhmAfaJ6IMRZ0nj5GIxCpstDYCaZWwgC7-etqfSxG5JAq8LOwJx0o_1tUZqwjIic8ztsg0o',
-                        'com.ansjer.adcloud_a': 'AAAAb9YP3rk:APA91bFm06w8b9OKQ0gz0iaWFuRqRIkvgAz6z7Gp3dBU_X-LNGJQd1hc1QR2W7QzBglF8SHtERA45a2lbdLRa5qv7hxfd6W_sJLBK7dA8jklsOQBvy505oUzTwMKWy4TwH-exps9KrhO',
-                        'com.ansjer.accloud_a': 'AAAAb9YP3rk:APA91bFm06w8b9OKQ0gz0iaWFuRqRIkvgAz6z7Gp3dBU_X-LNGJQd1hc1QR2W7QzBglF8SHtERA45a2lbdLRa5qv7hxfd6W_sJLBK7dA8jklsOQBvy505oUzTwMKWy4TwH-exps9KrhO',
-                        'com.ansjer.zccloud_ab': 'AAAAb9YP3rk:APA91bHu8u-CTpcd0g6lKPo0WNVqCi8jZub1cPPbSAY9AucT1HxlF65ZDUko9iG8q2ch17bwu9YWHpK1xI1gHSRXCslLvZlXEmHZC0AG3JKg15XuUvlFKACIajUFV-pOeGRT8tM6-31I',
-                    }
                     serverKey = FCM_CONFIG[appBundleId]
                     serverKey = FCM_CONFIG[appBundleId]
                 except Exception as e:
                 except Exception as e:
                     return 'serverKey abnormal'
                     return 'serverKey abnormal'

+ 7 - 7
Controller/Cloudsum.py

@@ -5,7 +5,7 @@
 @File :Cloudsum.py
 @File :Cloudsum.py
 @IDE :PyCharm
 @IDE :PyCharm
 """
 """
-from Model.models import Order_Model, UID_Bucket, UserExModel, App_Info
+from Model.models import Order_Model, UID_Bucket, UserExModel
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
 from django.views import View
 from django.views import View
@@ -58,10 +58,10 @@ class Cloudsum(View):
         own_permission = ModelService.check_perm(userID=userID, permID=30)
         own_permission = ModelService.check_perm(userID=userID, permID=30)
         if own_permission is not True:
         if own_permission is not True:
             return response.json(404)
             return response.json(404)
-        res = UserExModel.objects.extra(tables=['App_Info'],
-                                        select={'appname':'App_Info.appName',
-                                                'appversion':'App_Info.newAppversion'},
-                                        where=["user_ex.appBundleId=app_Info.appBundleId"]).\
+        res = UserExModel.objects.extra(tables=['app_info'],
+                                        select={'appname':'app_info.appName',
+                                                'appversion':'app_info.newAppversion'},
+                                        where=["user_ex.appBundleId=app_info.appBundleId"]).\
             values('appBundleId','appname','appversion').annotate(dates=Count('appBundleId')).order_by()
             values('appBundleId','appname','appversion').annotate(dates=Count('appBundleId')).order_by()
         print(res.query)
         print(res.query)
         print(res)
         print(res)
@@ -90,7 +90,7 @@ class Cloudsum(View):
     # 类型:云存服务统计
     # 类型:云存服务统计
     # 统计开通云存的设备有多少台√
     # 统计开通云存的设备有多少台√
     # 统计未支付,支付成功的订单√
     # 统计未支付,支付成功的订单√
-    # 统计开通云存的增长率    (每个月开通云存的总数)√
+    # 统计开通云存的增长率    (每个月开通云存套餐的总数)√
     # 统计已开通云存的各套餐总数√
     # 统计已开通云存的各套餐总数√
     # 统计已支付的订单总金额√
     # 统计已支付的订单总金额√
     def cloudservicesum(self, userID, response):
     def cloudservicesum(self, userID, response):
@@ -111,7 +111,7 @@ class Cloudsum(View):
         }
         }
         return response.json(0, data_dict)
         return response.json(0, data_dict)
 
 
-    # 每个月开通云存的总数
+    # 每个月开通云存套餐的总数
     def usercloud(self, userID, response):
     def usercloud(self, userID, response):
         own_permission = ModelService.check_perm(userID=userID, permID=30)
         own_permission = ModelService.check_perm(userID=userID, permID=30)
         if own_permission is not True:
         if own_permission is not True:

+ 1 - 1
Controller/EquipmentManager.py

@@ -399,7 +399,7 @@ def addInterface(request):
                     vodPrimaryUserID = main_exist[0]['vodPrimaryUserID']
                     vodPrimaryUserID = main_exist[0]['vodPrimaryUserID']
                     vodPrimaryMaster = main_exist[0]['vodPrimaryMaster']
                     vodPrimaryMaster = main_exist[0]['vodPrimaryMaster']
 
 
-                is_bind = Device_Info.objects.filter(UID=UID, isShare=False).values('userID__userID')
+                is_bind = Device_Info.objects.filter(UID=UID, isShare=False).values('userID__userID', 'vodPrimaryUserID')
                 # 判断是否有已绑定用户
                 # 判断是否有已绑定用户
                 isvodPrimaryUserID = ''
                 isvodPrimaryUserID = ''
 
 

+ 11 - 2
Controller/EquipmentManagerV2.py

@@ -168,10 +168,17 @@ class EquipmentManagerV2(View):
             nowTime = int(time.time())
             nowTime = int(time.time())
             data = []
             data = []
             # 设备拓展信息表
             # 设备拓展信息表
-            us_qs = UidSetModel.objects.filter(uid__in=uid_list).values('uid', 'version', 'nickname', 'ucode','detect_interval')
+            us_qs = UidSetModel.objects.filter(uid__in=uid_list).values('uid', 'version', 'nickname', 'ucode','detect_interval', 'is_human', 'is_custom_voice')
             uv_dict = {}
             uv_dict = {}
             for us in us_qs:
             for us in us_qs:
-                uv_dict[us['uid']] = {'version': us['version'], 'nickname': us['nickname'], 'ucode': us['ucode'],'detect_interval':us['detect_interval']}
+                uv_dict[us['uid']] = {
+                    'version': us['version'],
+                    'nickname': us['nickname'],
+                    'ucode': us['ucode'],
+                    'detect_interval': us['detect_interval'],
+                    'is_human': us['is_human'],
+                    'is_custom_voice': us['is_custom_voice'],
+                }
             for p in dvls:
             for p in dvls:
                 p['vod'] = []
                 p['vod'] = []
                 for dm in ubqs:
                 for dm in ubqs:
@@ -190,6 +197,8 @@ class EquipmentManagerV2(View):
                     p['uid_version'] = uv_dict[p_uid]['version']
                     p['uid_version'] = uv_dict[p_uid]['version']
                     p['ucode'] = uv_dict[p_uid]['ucode']
                     p['ucode'] = uv_dict[p_uid]['ucode']
                     p['detect_interval'] = uv_dict[p_uid]['detect_interval']
                     p['detect_interval'] = uv_dict[p_uid]['detect_interval']
+                    p['is_human'] = uv_dict[p_uid]['is_human']
+                    p['is_custom_voice'] = uv_dict[p_uid]['is_custom_voice']
                     # 设备昵称 调用影子信息昵称,先阶段不可
                     # 设备昵称 调用影子信息昵称,先阶段不可
                     if uv_dict[p_uid]['nickname']:
                     if uv_dict[p_uid]['nickname']:
                         p['NickName'] = uv_dict[p_uid]['nickname']
                         p['NickName'] = uv_dict[p_uid]['nickname']

+ 6 - 2
Controller/EquipmentManagerV3.py

@@ -324,7 +324,7 @@ class EquipmentManagerV3(View):
                                                                         'TimeZone', 'TimeStatus', 'SpaceUsable',
                                                                         'TimeZone', 'TimeStatus', 'SpaceUsable',
                                                                         'SpaceSum', 'MirrorType', 'RecordType',
                                                                         'SpaceSum', 'MirrorType', 'RecordType',
                                                                         'OutdoorModel', 'WIFIName', 'isDetector',
                                                                         'OutdoorModel', 'WIFIName', 'isDetector',
-                                                                        'DetectorRank')
+                                                                        'DetectorRank', 'is_human', 'is_custom_voice')
             uv_dict = {}
             uv_dict = {}
             for us in us_qs:
             for us in us_qs:
                 uv_dict[us['uid']] = {
                 uv_dict[us['uid']] = {
@@ -346,7 +346,9 @@ class EquipmentManagerV3(View):
                     'OutdoorModel': us['OutdoorModel'],
                     'OutdoorModel': us['OutdoorModel'],
                     'WIFIName': us['WIFIName'],
                     'WIFIName': us['WIFIName'],
                     'isDetector': us['isDetector'],
                     'isDetector': us['isDetector'],
-                    'DetectorRank': us['DetectorRank']
+                    'DetectorRank': us['DetectorRank'],
+                    'is_human': us['is_human'],
+                    'is_custom_voice': us['is_custom_voice']
                 }
                 }
                 # 从uid_channel里面取出通道配置信息
                 # 从uid_channel里面取出通道配置信息
                 ucs_qs = UidChannelSetModel.objects.filter(uid__id=us['id']).values('channel', 'pir_audio', 'mic_audio',
                 ucs_qs = UidChannelSetModel.objects.filter(uid__id=us['id']).values('channel', 'pir_audio', 'mic_audio',
@@ -412,6 +414,8 @@ class EquipmentManagerV3(View):
                     p['WIFIName'] = uv_dict[p_uid]['WIFIName']
                     p['WIFIName'] = uv_dict[p_uid]['WIFIName']
                     p['isDetector'] = uv_dict[p_uid]['isDetector']
                     p['isDetector'] = uv_dict[p_uid]['isDetector']
                     p['DetectorRank'] = uv_dict[p_uid]['DetectorRank']
                     p['DetectorRank'] = uv_dict[p_uid]['DetectorRank']
+                    p['is_human'] = uv_dict[p_uid]['is_human']
+                    p['is_custom_voice'] = uv_dict[p_uid]['is_custom_voice']
                     p['channels'] = uv_dict[p_uid]['channels']
                     p['channels'] = uv_dict[p_uid]['channels']
                     # 设备昵称 调用影子信息昵称,先阶段不可
                     # 设备昵称 调用影子信息昵称,先阶段不可
                     if uv_dict[p_uid]['nickname']:
                     if uv_dict[p_uid]['nickname']:

+ 3 - 1
Controller/UidSetController.py

@@ -23,7 +23,8 @@ from django.views.decorators.csrf import csrf_exempt
 from django.views.generic.base import View
 from django.views.generic.base import View
 
 
 from Model.models import UidSetModel, Device_User, Device_Info, UidPushModel, Equipment_Info, UID_Preview, UID_Bucket, \
 from Model.models import UidSetModel, Device_User, Device_Info, UidPushModel, Equipment_Info, UID_Preview, UID_Bucket, \
-    VodHlsModel, Order_Model, OssCrdModel, UidUserModel, UidChannelSetModel, User_Brand, ExperienceContextModel
+    VodHlsModel, Order_Model, OssCrdModel, UidUserModel, UidChannelSetModel, User_Brand, ExperienceContextModel, \
+    StsCrdModel
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
@@ -495,6 +496,7 @@ class UidSetView(View):
                     # 删除和更新设备云存相关数据
                     # 删除和更新设备云存相关数据
                     UID_Bucket.objects.filter(uid=uid).delete()
                     UID_Bucket.objects.filter(uid=uid).delete()
                     Order_Model.objects.filter(UID=uid).delete()
                     Order_Model.objects.filter(UID=uid).delete()
+                    StsCrdModel.objects.filter(uid=uid).delete()
                     VodHlsModel.objects.filter(uid=uid).delete()
                     VodHlsModel.objects.filter(uid=uid).delete()
                     ExperienceContextModel.objects.filter(uid=uid).delete()
                     ExperienceContextModel.objects.filter(uid=uid).delete()
                     Device_Info.objects.filter(UID=uid).update(vodPrimaryUserID='', vodPrimaryMaster='')
                     Device_Info.objects.filter(UID=uid).update(vodPrimaryUserID='', vodPrimaryMaster='')

+ 11 - 8
Controller/VodBucket.py

@@ -18,10 +18,11 @@ from django.utils.decorators import method_decorator
 from django.views.decorators.csrf import csrf_exempt
 from django.views.decorators.csrf import csrf_exempt
 from django.views.generic.base import View
 from django.views.generic.base import View
 
 
-from Model.models import VodBucketModel, UID_Bucket, Store_Meal, Device_Info, OssCrdModel
+from Model.models import VodBucketModel, UID_Bucket, Store_Meal, Device_Info, OssCrdModel, VodHlsModel, StsCrdModel
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
 from Service.ModelService import ModelService
 from Service.ModelService import ModelService
+from django.db import transaction
 import time
 import time
 
 
 
 
@@ -239,13 +240,15 @@ class UidBucketView(View):
             id = request_dict.get('id', None)
             id = request_dict.get('id', None)
             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))
-            d_ubqs = UID_Bucket.objects.filter(id=id)
-            uid = d_ubqs[0].uid
-            channel = d_ubqs[0].channel
-            d_ubqs.delete()
-            oss_crd_qs = OssCrdModel.objects.filter(uid=uid, channel=channel)
-            if oss_crd_qs.exists():
-                oss_crd_qs.delete()
+            uid_bucket_qs = UID_Bucket.objects.filter(id=id)
+            uid = uid_bucket_qs[0].uid
+            bucket_id = uid_bucket_qs[0].bucket_id
+            # channel = uid_bucket_qs[0].channel
+            with transaction.atomic():
+                uid_bucket_qs.delete()
+                # OssCrdModel.objects.filter(uid=uid, channel=channel).delete()
+                VodHlsModel.objects.filter(uid=uid).delete()
+                StsCrdModel.objects.filter(uid=uid).delete()
         except Exception as e:
         except Exception as e:
             return response.json(10, repr(e))
             return response.json(10, repr(e))
         else:
         else:

+ 3 - 1
Model/models.py

@@ -720,7 +720,9 @@ class UidSetModel(models.Model):
     WIFIName = models.CharField(blank=True, max_length=50, default='', verbose_name=u'无线名称')
     WIFIName = models.CharField(blank=True, max_length=50, default='', verbose_name=u'无线名称')
     isDetector = models.SmallIntegerField(default=0, verbose_name=u'侦测开关0:关闭,1:开启')
     isDetector = models.SmallIntegerField(default=0, verbose_name=u'侦测开关0:关闭,1:开启')
     DetectorRank = models.IntegerField(default=0, verbose_name=u'侦测灵敏度 0:低,1:中,2:高,3:最高')
     DetectorRank = models.IntegerField(default=0, verbose_name=u'侦测灵敏度 0:低,1:中,2:高,3:最高')
-
+    is_human = models.IntegerField(default=0, verbose_name='是否支持人形追踪。0:不支持,1:支持')
+    is_custom_voice = models.IntegerField(default=0, verbose_name='是否支持自定义语音。0:不支持,1:支持')
+    double_wifi = models.IntegerField(default=0, verbose_name='是否支持双频wifi。0:不支持,1:支持')
 
 
     class Meta:
     class Meta:
         db_table = 'uid_set'
         db_table = 'uid_set'