Forráskód Böngészése

优化配置文件,设备序列号相关接口

locky 2 éve
szülő
commit
c35fe733ae

+ 36 - 43
Ansjer/cn_config/config_formal.py

@@ -1,32 +1,43 @@
-#!/usr/bin/env python3  
-# -*- coding: utf-8 -*-  
 """
-@Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
-@AUTHOR: ASJRD018
-@NAME: AnsjerFormal
-@software: PyCharm
-@DATE: 2019/10/16 9:45
-@Version: python3.6
-@MODIFY DECORD:ansjer dev
-@file: config_formal.py
-@Contact: chanjunkai@163.com
+独立于config.py的配置文件
 """
-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/'
-DOMAIN_HOST = 'www.zositechc.cn'
+"""
+AWS相关
+"""
+# ======================================================================================================================
+# aws api key
+AWS_ARN_S3 = 'arn:aws-cn:s3'
+REGION_NAME = 'cn-northwest-1'
+ACCESS_KEY_ID = 'AKIA2MMWBR4DSFG67DTG'
+SECRET_ACCESS_KEY = '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'
+
+# 存储桶
+PUSH_BUCKET = 'push'                                # 推送存储桶
+PUSH_INACCURATE_BUCKET = 'push-inaccurate'          # 推送不准确存储桶
+AVATAR_BUCKET = 'avatar-cn'                         # 头像存储桶
+LOG_BUCKET = 'ansjer-statres'                       # 日志存储桶
+
+# redis节点
 SERVER_HOST = 'backendserver.3xavzq.0001.cnw1.cache.amazonaws.com.cn'
 PUSH_REDIS_ADDRESS = 'pushredis.3xavzq.0001.cnw1.cache.amazonaws.com.cn'
-# PAYPAL_CRD = {
-#     "mode": "live",  # sandbox or live
-#     "client_id": "AdSRd6WBn-qLl9OiQHQuNYTDFSx0ZX0RUttqa58au8bPzoGYQUrt8bc6591RmH8_pEAIPijdvVYSVXyI",
-#     "client_secret": "ENT-J08N3Fw0B0uAokg4RukljAwO9hFHPf8whE6-Dwd8oBWJO8AWMgpdTKpfB1pOy89t4bsFEzMWDowm"
-# }
+# ======================================================================================================================
+
+# 域名
+DOMAIN_HOST = 'www.zositechc.cn'
+SERVER_DOMAIN = 'http://www.zositechc.cn/'
+SERVER_DOMAIN_SSL = 'https://www.zositechc.cn/'
+NGINX_RTMP_STAT = 'http://www.zositechc.cn/stat'
+DETECT_PUSH_DOMAIN = 'http://push.zositechc.cn/'
+DETECT_PUSH_DOMAINS = 'https://push.zositechc.cn/'
+DETECT_PUSH_DOMAIN_JIUAN = 'http://jiuan.push.zositechc.cn/'
+DETECT_PUSH_DOMAINS_JIUAN = 'https://jiuan.push.zositechc.cn/'
+TUTK_PUSH_DOMAIN = 'http://push.iotcplatform.com/tpns'
+
+# PayPal
 PAYPAL_CRD = {
     "mode": "sandbox",  # sandbox or live
     "client_id": "AVLoQVq3xHZ6FrF4mxHwlCPgVBAw4Fw5RtMkuxmYd23SkUTIY643n2g3KdK-Al8wV05I28lza5uoQbAA",
@@ -35,15 +46,12 @@ PAYPAL_CRD = {
 PAYPAL_WEB_HOOK_ID = '6TS30758D98835230'
 PAYPAL_WEB_HOOK_ID_TWO = '2BH56575UJ9324151'
 
-DETECT_PUSH_DOMAIN = 'http://push.zositechc.cn/'
-DETECT_PUSH_DOMAINS = 'https://push.zositechc.cn/'
-DETECT_PUSH_DOMAIN_JIUAN = 'http://jiuan.push.zositechc.cn/'
-DETECT_PUSH_DOMAINS_JIUAN = 'https://jiuan.push.zositechc.cn/'
 # 数据库dyanamo品牌日志数据库
 USER_BRAND = 'user_brand'
 USER_BRAND_ALL = 'user_brand_all'
 
-# type =2
+APNS_MODE = 'prod'
+
 JPUSH_CONFIG = {
     'com.ansjer.accloud_ab': {
         'Key': 'f0dc047e5e53fd14199de5b0',
@@ -88,7 +96,7 @@ JPUSH_CONFIG = {
         'Key': 'ecdde95cd272f410ee029139',
         'Secret': '9ddca1e92bfa331126fd8826'},
 }
-# type =1
+
 FCM_CONFIG = {
     'com.ansjer.zccloud_a': 'AAAAb9YP3rk:APA91bHu8u-CTpcd0g6lKPo0WNVqCi8jZub1cPPbSAY9AucT1HxlF65ZDUko9iG8q2ch17bwu9YWHpK1xI1gHSRXCslLvZlXEmHZC0AG3JKg15XuUvlFKACIajUFV-pOeGRT8tM6-31I',
     'com.ansjer.loocamccloud_a': 'AAAAb9YP3rk:APA91bFCgd-kbVmpK4EVpfdHH_PJZQCYTkOGnTZdIuBWEz2r7aMRsJYHOH3sB-rwcbaRWgnufTyjX9nGQxb6KxQbWVk4ah_H-M3IqGh6Mb60WQQAuR33V6g_Jes5pGL6ViuIxGHqVMaR',
@@ -101,6 +109,7 @@ FCM_CONFIG = {
     'com.ansjer.zccloud_ab': 'AAAAb9YP3rk:APA91bHu8u-CTpcd0g6lKPo0WNVqCi8jZub1cPPbSAY9AucT1HxlF65ZDUko9iG8q2ch17bwu9YWHpK1xI1gHSRXCslLvZlXEmHZC0AG3JKg15XuUvlFKACIajUFV-pOeGRT8tM6-31I',
     'com.ansjer.customizedc_a': 'AAAAb9YP3rk:APA91bHu8u-CTpcd0g6lKPo0WNVqCi8jZub1cPPbSAY9AucT1HxlF65ZDUko9iG8q2ch17bwu9YWHpK1xI1gHSRXCslLvZlXEmHZC0AG3JKg15XuUvlFKACIajUFV-pOeGRT8tM6-31I',
 }
+
 APNS_CONFIG = {
     'com.ansjer.loocamccloud': {
         'pem_path': 'Ansjer/file/apns_pem/lcc-dev.pem',
@@ -127,19 +136,3 @@ APNS_CONFIG = {
         'pem_path': 'Ansjer/file/apns_pem/customizedc.pem',
     }
 }
-APNS_MODE = 'prod'
-# 根路径
-BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
-SERVER_TYPE = os.environ.get('DJANGO_SETTINGS_MODULE')
-
-TUTK_PUSH_DOMAIN = 'http://push.iotcplatform.com/tpns'
-
-# aws api key
-AWS_ARN_S3 = 'arn:aws-cn:s3'
-REGION_NAME = 'cn-northwest-1'
-ACCESS_KEY_ID = 'AKIA2MMWBR4DSFG67DTG'
-SECRET_ACCESS_KEY = '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'
-
-# 存储桶名
-AVATAR_BUCKET = 'avatar-cn'         # 头像存储桶
-LOG_BUCKET = 'ansjer-statres'       # 日志存储桶

+ 36 - 51
Ansjer/cn_config/config_test.py

@@ -1,60 +1,61 @@
-#!/usr/bin/env python3  
-# -*- coding: utf-8 -*-  
 """
-@Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
-@AUTHOR: ASJRD018
-@NAME: AnsjerFormal
-@software: PyCharm
-@DATE: 2019/10/16 9:45
-@Version: python3.6
-@MODIFY DECORD:ansjer dev
-@file: config_test.py
-@Contact: chanjunkai@163.com
+独立于config.py的配置文件
 """
-import os
 
 # 配置信息
 CONFIG_INFO = 'test'
 
-NGINX_RTMP_STAT = 'http://test.zositechc.cn/stat/'
+"""
+AWS相关
+"""
+# ======================================================================================================================
+# aws api key
+AWS_ARN_S3 = 'arn:aws-cn:s3'
+REGION_NAME = 'cn-northwest-1'
+ACCESS_KEY_ID = 'AKIA2MMWBR4DSFG67DTG'
+SECRET_ACCESS_KEY = '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'
+
+# 存储桶
+PUSH_BUCKET = 'push'                                # 推送存储桶
+PUSH_INACCURATE_BUCKET = 'push-inaccurate'          # 推送不准确存储桶
+AVATAR_BUCKET = 'avatar-cn'                         # 头像存储桶
+LOG_BUCKET = 'ansjer-statres'                       # 日志存储桶
+
+# redis节点
+SERVER_HOST = 'backendserver.3xavzq.0001.cnw1.cache.amazonaws.com.cn'
+PUSH_REDIS_ADDRESS = 'pushredis.3xavzq.0001.cnw1.cache.amazonaws.com.cn'
+# ======================================================================================================================
+
+# 域名
+DOMAIN_HOST = 'test.zositechc.cn'
 SERVER_DOMAIN = 'http://test.zositechc.cn/'
 SERVER_DOMAIN_SSL = 'https://test.zositechc.cn/'
-
+NGINX_RTMP_STAT = 'http://test.zositechc.cn/stat/'
+DETECT_PUSH_DOMAIN = 'http://test.push.dvema.com/'
+DETECT_PUSH_DOMAINS = 'https://test.push.dvema.com/'
+DETECT_PUSH_DOMAIN_JIUAN = 'http://jiuan.push.dvema.com/'
+DETECT_PUSH_DOMAINS_JIUAN = 'https://jiuan.push.dvema.com/'
+TUTK_PUSH_DOMAIN = 'http://push.iotcplatform.com/tpns'
 
 # token的secret
 OAUTH_ACCESS_TOKEN_SECRET = 'test_a+jbgnw%@1%zy^=@dn62%'
 OAUTH_REFRESH_TOKEN_SECRET = 'test_r+jbgnw%@1%zy^=@dn62%'
 
-DOMAIN_HOST = 'test.zositechc.cn'
-SERVER_HOST = 'backendserver.3xavzq.0001.cnw1.cache.amazonaws.com.cn'
-PUSH_REDIS_ADDRESS = 'pushredis.3xavzq.0001.cnw1.cache.amazonaws.com.cn'
+# PayPal
 PAYPAL_CRD = {
-    # "mode": "live",  # sandbox or live
-    # "client_id": "AdSRd6WBn-qLl9OiQHQuNYTDFSx0ZX0RUttqa58au8bPzoGYQUrt8bc6591RmH8_pEAIPijdvVYSVXyI",
-    # "client_secret": "ENT-J08N3Fw0B0uAokg4RukljAwO9hFHPf8whE6-Dwd8oBWJO8AWMgpdTKpfB1pOy89t4bsFEzMWDowm"
-    # "mode": "sandbox",  # sandbox or live
-    # "client_id": "AeuhR7FHisO-lOd2OwtzyDu7PSLMmDZoDLgmzuEQ12WCtTu_8Z1AzcD4gG5SnymnuvJs-n5KBB8H9Z_G",
-    # "client_secret": "EGkMCB3RWTcUGJGDYahJ9mCO0AQzEn2AvFfx1GAFjfyyn7-8a0NObcZks89QorlFpvNWTsDXVa2INRNM"
     "mode": "sandbox",  # sandbox or live
     "client_id": "AVLoQVq3xHZ6FrF4mxHwlCPgVBAw4Fw5RtMkuxmYd23SkUTIY643n2g3KdK-Al8wV05I28lza5uoQbAA",
     "client_secret": "EO8kRc8yioDk0i2Qq-QMcVFfwkmyMJorTvBSLDTnxDJJ_wb9VoM_0jkUY9iEng2Flp1ze8wQOGpH5nB2"
 }
 PAYPAL_WEB_HOOK_ID = '6TS30758D98835230'
 PAYPAL_WEB_HOOK_ID_TWO = '2BH56575UJ9324151'
-# PAYPAL_CRD = {
-#     "mode": "sandbox",  # sandbox or live
-#     "client_id": "ATXTpWs8sajNYeU46jNs1yzpy4H_o3RRrGVIJ8Tscc312BjMx12cpRgCucfWX07a4G6GbK8hzElB04Pd",
-#     "client_secret": "EHcnfrpL1o1ev9WnlQ-C1uymeRKDoJ6li6Y0d6iHoRGj4u8Sx5lSEEH774XphP4LQZ0DrDUdvxbux0T2"
-# }
-DETECT_PUSH_DOMAIN = 'http://test.push.dvema.com/'
-DETECT_PUSH_DOMAINS = 'https://test.push.dvema.com/'
-DETECT_PUSH_DOMAIN_JIUAN = 'http://jiuan.push.dvema.com/'
-DETECT_PUSH_DOMAINS_JIUAN = 'https://jiuan.push.dvema.com/'
+
 # 数据库dyanamo品牌日志数据库
 USER_BRAND = 'test_user_brand'
 USER_BRAND_ALL = 'test_user_brand_all'
 
-# type =2
+APNS_MODE = 'dev'
+
 JPUSH_CONFIG = {
     'com.ansjer.accloud_ab': {
         'Key': 'f0dc047e5e53fd14199de5b0',
@@ -99,7 +100,7 @@ JPUSH_CONFIG = {
         'Key': 'ecdde95cd272f410ee029139',
         'Secret': '9ddca1e92bfa331126fd8826'},
 }
-# type =1
+
 FCM_CONFIG = {
     'com.ansjer.zccloud_a': 'AAAAb9YP3rk:APA91bHu8u-CTpcd0g6lKPo0WNVqCi8jZub1cPPbSAY9AucT1HxlF65ZDUko9iG8q2ch17bwu9YWHpK1xI1gHSRXCslLvZlXEmHZC0AG3JKg15XuUvlFKACIajUFV-pOeGRT8tM6-31I',
     'com.ansjer.loocamccloud_a': 'AAAAb9YP3rk:APA91bFCgd-kbVmpK4EVpfdHH_PJZQCYTkOGnTZdIuBWEz2r7aMRsJYHOH3sB-rwcbaRWgnufTyjX9nGQxb6KxQbWVk4ah_H-M3IqGh6Mb60WQQAuR33V6g_Jes5pGL6ViuIxGHqVMaR',
@@ -112,6 +113,7 @@ FCM_CONFIG = {
     'com.ansjer.zccloud_ab': 'AAAAb9YP3rk:APA91bHu8u-CTpcd0g6lKPo0WNVqCi8jZub1cPPbSAY9AucT1HxlF65ZDUko9iG8q2ch17bwu9YWHpK1xI1gHSRXCslLvZlXEmHZC0AG3JKg15XuUvlFKACIajUFV-pOeGRT8tM6-31I',
     'com.ansjer.customizedc_a': 'AAAAb9YP3rk:APA91bHu8u-CTpcd0g6lKPo0WNVqCi8jZub1cPPbSAY9AucT1HxlF65ZDUko9iG8q2ch17bwu9YWHpK1xI1gHSRXCslLvZlXEmHZC0AG3JKg15XuUvlFKACIajUFV-pOeGRT8tM6-31I',
 }
+
 APNS_CONFIG = {
     'com.ansjer.loocamccloud': {
         'pem_path': 'Ansjer/file/apns_pem/lcc-dev.pem',
@@ -138,20 +140,3 @@ APNS_CONFIG = {
         'pem_path': 'Ansjer/file/apns_pem/customizedc.pem',
     }
 }
-# 根路径
-BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
-APNS_MODE = 'dev'
-SERVER_TYPE = os.environ.get('DJANGO_SETTINGS_MODULE')
-
-TUTK_PUSH_DOMAIN = 'http://push.iotcplatform.com/tpns'
-
-
-# aws api key
-AWS_ARN_S3 = 'arn:aws-cn:s3'
-REGION_NAME = 'cn-northwest-1'
-ACCESS_KEY_ID = 'AKIA2MMWBR4DSFG67DTG'
-SECRET_ACCESS_KEY = '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'
-
-# 存储桶名
-AVATAR_BUCKET = 'avatar-cn'         # 头像存储桶
-LOG_BUCKET = 'ansjer-statres'       # 日志存储桶

+ 15 - 13
Ansjer/config.py

@@ -1,3 +1,7 @@
+"""
+公用配置文件
+"""
+
 import os
 import datetime
 
@@ -7,13 +11,14 @@ CONFIG_CN = 'cn'
 CONFIG_US = 'us'
 CONFIG_EUR = 'eur'
 
-# redis列表
+# 配置模式和根路径
+SERVER_TYPE = os.environ.get('DJANGO_SETTINGS_MODULE')
+BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+
+# 序列号redis列表
 USED_SERIAL_REDIS_LIST = 'used_serial_redis_list'
 UNUSED_SERIAL_REDIS_LIST = 'unused_serial_redis_list'
 
-SERVER_TYPE = os.environ.get('DJANGO_SETTINGS_MODULE')
-print(SERVER_TYPE)
-
 # 亚马逊的数据库DynamoDB的密钥
 AWS_DynamoDB_REGION = 'us-west-1'
 AWS_DynamoDB_ACCESS_KEY = 'AKIA2E67UIMD6X23FEBG'
@@ -40,7 +45,6 @@ OAUTH_ACCESS_TOKEN_SECRET = 'a+jbgnw%@1%zy^=@dn62%'
 OAUTH_REFRESH_TOKEN_SECRET = 'r+jbgnw%@1%zy^=@dn62%'
 
 # access_token超时
-# OAUTH_ACCESS_TOKEN_TIME = datetime.timedelta(hours=1)
 OAUTH_ACCESS_TOKEN_TIME = datetime.timedelta(days=30)
 # refresh_token超时
 OAUTH_REFRESH_TOKEN_TIME = datetime.timedelta(days=30)
@@ -52,8 +56,7 @@ TX_PHONE_APP_KEY = '7705976ca6e85fe7b86d6bc2d11f7783'
 AuthCode_Expire = 600
 
 RTMP_PUSH_URL = 'http://13.56.215.252:8091/hls'
-# 根路径
-BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+
 ADDR_URL = []
 # uid token key
 UID_TOKEN_KEY = 'c+565*j@%^'
@@ -68,13 +71,13 @@ OSS_STS_ACCESS_SECRET = '71uIjpsqVOmF7DAITRyRuc259jHOjO'
 OSS_ROLE_ARN = 'acs:ram::1901342792446414:role/stsoss'
 
 # aws api key
-AWS_ACCESS_KEY_ID = ['AKIA2MMWBR4DSFG67DTG','AKIA2E67UIMD45Y3HL53']  #0国内, 1国外
-AWS_SECRET_ACCESS_KEY = ['aI9gxcAKPmiGgPy9axrtFKzjYGbvpuytEX4xWweL','ckYLg4Lo9ZXJIcJEAKkzf2rWvs8Xth1FCjqiAqUw']
-AWS_ARN = ['arn:aws-cn:s3','arn:aws:s3']
+AWS_ACCESS_KEY_ID = ['AKIA2MMWBR4DSFG67DTG', 'AKIA2E67UIMD45Y3HL53']  #0国内, 1国外
+AWS_SECRET_ACCESS_KEY = ['aI9gxcAKPmiGgPy9axrtFKzjYGbvpuytEX4xWweL', 'ckYLg4Lo9ZXJIcJEAKkzf2rWvs8Xth1FCjqiAqUw']
+AWS_ARN = ['arn:aws-cn:s3', 'arn:aws:s3']
 
 
-#尚云服务器CRCKey
-CRCKey = {'AUS':'CRCKey', 'ACN':'CRCKey'}   #{平台名:CRCKey值}
+# 尚云服务器CRCKey
+CRCKey = {'AUS': 'CRCKey', 'ACN': 'CRCKey'}   # {平台名:CRCKey值}
 
 # 各个服务器域名
 SERVER_DOMAIN_US = 'http://www.dvema.com/'
@@ -414,7 +417,6 @@ APNS_CONFIG = {
     },
 }
 APNS_MODE = 'dev'
-SERVER_TYPE = os.environ.get('DJANGO_SETTINGS_MODULE')
 
 JPUSH_CODE = {
     -1: '只库存不推送',

+ 35 - 39
Ansjer/eur_config/config_formal.py

@@ -1,28 +1,43 @@
-#!/usr/bin/env python3  
-# -*- coding: utf-8 -*-  
 """
-@Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
-@AUTHOR: ASJRD018
-@NAME: AnsjerFormal
-@software: PyCharm
-@DATE: 2019/10/16 9:45
-@Version: python3.6
-@MODIFY DECORD:ansjer dev
-@file: config_formal.py
-@Contact: chanjunkai@163.com
+独立于config.py的配置文件
 """
-import os
 
 # 配置信息
 CONFIG_INFO = 'eur'
 
-NGINX_RTMP_STAT = 'http://www.zositeche.com/stat'
-SERVER_DOMAIN_SSL = 'https://www.zositeche.com/'
-SERVER_DOMAIN = 'http://www.zositeche.com/'
-DOMAIN_HOST = 'www.zositeche.com'
+"""
+AWS相关
+"""
+# ======================================================================================================================
+# aws api key
+AWS_ARN_S3 = 'arn:aws:s3'
+REGION_NAME = 'us-east-1'
+ACCESS_KEY_ID = 'AKIA2E67UIMD45Y3HL53'
+SECRET_ACCESS_KEY = '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'
+
+# 存储桶名
+PUSH_BUCKET = 'foreignpush'                         # 推送存储桶
+PUSH_INACCURATE_BUCKET = 'push-inaccurate'          # 推送不准确存储桶
+AVATAR_BUCKET = 'avatar-us'                         # 头像存储桶
+LOG_BUCKET = 'ansjer-statres'                       # 日志存储桶
+
+# redis节点
 SERVER_HOST = 'server-redis.av1kep.ng.0001.euw1.cache.amazonaws.com'
 PUSH_REDIS_ADDRESS = 'push-redis.av1kep.ng.0001.euw1.cache.amazonaws.com'
+# ======================================================================================================================
+
+# 域名
+DOMAIN_HOST = 'www.zositeche.com'
+SERVER_DOMAIN = 'http://www.zositeche.com/'
+SERVER_DOMAIN_SSL = 'https://www.zositeche.com/'
+NGINX_RTMP_STAT = 'http://www.zositeche.com/stat'
+DETECT_PUSH_DOMAIN = 'http://push.zositeche.com/'
+DETECT_PUSH_DOMAINS = 'https://push.zositeche.com/'
+DETECT_PUSH_DOMAIN_JIUAN = 'http://jiuan.push.dvema.com/'
+DETECT_PUSH_DOMAINS_JIUAN = 'https://jiuan.push.dvema.com/'
+TUTK_PUSH_DOMAIN = 'http://push.iotcplatform.com/tpns'
 
+# PayPal
 PAYPAL_CRD = {
     "mode": "sandbox",  # sandbox or live
     "client_id": "AVLoQVq3xHZ6FrF4mxHwlCPgVBAw4Fw5RtMkuxmYd23SkUTIY643n2g3KdK-Al8wV05I28lza5uoQbAA",
@@ -31,16 +46,12 @@ PAYPAL_CRD = {
 PAYPAL_WEB_HOOK_ID = '3YH86681TH784461T'
 PAYPAL_WEB_HOOK_ID_TWO = '7TN87895N70389928'
 
-
-DETECT_PUSH_DOMAIN = 'http://push.zositeche.com/'
-DETECT_PUSH_DOMAINS = 'https://push.zositeche.com/'
-DETECT_PUSH_DOMAIN_JIUAN = 'http://jiuan.push.dvema.com/'
-DETECT_PUSH_DOMAINS_JIUAN = 'https://jiuan.push.dvema.com/'
 # 数据库dyanamo品牌日志数据库
 USER_BRAND = 'user_brand'
 USER_BRAND_ALL = 'user_brand_all'
 
-# type =2
+APNS_MODE = 'prod'
+
 JPUSH_CONFIG = {
     'com.ansjer.accloud_ab': {
         'Key': 'f0dc047e5e53fd14199de5b0',
@@ -85,7 +96,7 @@ JPUSH_CONFIG = {
         'Key': 'ecdde95cd272f410ee029139',
         'Secret': '9ddca1e92bfa331126fd8826'},
 }
-# type =1
+
 FCM_CONFIG = {
     'com.ansjer.zccloud_a': 'AAAAb9YP3rk:APA91bHu8u-CTpcd0g6lKPo0WNVqCi8jZub1cPPbSAY9AucT1HxlF65ZDUko9iG8q2ch17bwu9YWHpK1xI1gHSRXCslLvZlXEmHZC0AG3JKg15XuUvlFKACIajUFV-pOeGRT8tM6-31I',
     'com.ansjer.loocamccloud_a': 'AAAAb9YP3rk:APA91bFCgd-kbVmpK4EVpfdHH_PJZQCYTkOGnTZdIuBWEz2r7aMRsJYHOH3sB-rwcbaRWgnufTyjX9nGQxb6KxQbWVk4ah_H-M3IqGh6Mb60WQQAuR33V6g_Jes5pGL6ViuIxGHqVMaR',
@@ -98,6 +109,7 @@ FCM_CONFIG = {
     'com.ansjer.zccloud_ab': 'AAAAb9YP3rk:APA91bHu8u-CTpcd0g6lKPo0WNVqCi8jZub1cPPbSAY9AucT1HxlF65ZDUko9iG8q2ch17bwu9YWHpK1xI1gHSRXCslLvZlXEmHZC0AG3JKg15XuUvlFKACIajUFV-pOeGRT8tM6-31I',
     'com.ansjer.customizedc_a': 'AAAAb9YP3rk:APA91bHu8u-CTpcd0g6lKPo0WNVqCi8jZub1cPPbSAY9AucT1HxlF65ZDUko9iG8q2ch17bwu9YWHpK1xI1gHSRXCslLvZlXEmHZC0AG3JKg15XuUvlFKACIajUFV-pOeGRT8tM6-31I',
 }
+
 APNS_CONFIG = {
     'com.ansjer.loocamccloud': {
         'pem_path': 'Ansjer/file/apns_pem/lcc-dev.pem',
@@ -124,19 +136,3 @@ APNS_CONFIG = {
         'pem_path': 'Ansjer/file/apns_pem/customizedc.pem',
     }
 }
-APNS_MODE = 'prod'
-# 根路径
-BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
-SERVER_TYPE = os.environ.get('DJANGO_SETTINGS_MODULE')
-
-TUTK_PUSH_DOMAIN = 'http://push.iotcplatform.com/tpns'
-
-# aws api key
-AWS_ARN_S3 = 'arn:aws:s3'
-REGION_NAME = 'us-east-1'
-ACCESS_KEY_ID = 'AKIA2E67UIMD45Y3HL53'
-SECRET_ACCESS_KEY = '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'
-
-# 存储桶名
-AVATAR_BUCKET = 'avatar-us'         # 头像存储桶
-LOG_BUCKET = 'ansjer-statres'       # 日志存储桶

+ 37 - 29
Ansjer/local_config/config_local.py

@@ -1,23 +1,47 @@
-#!/usr/bin/env python3  
-# -*- coding: utf-8 -*-  
+"""
+独立于config.py的配置文件
+"""
 
-import os
+# 配置信息,配置模式和根路径
+CONFIG_INFO = 'local'
 
-# 配置信息
-CONFIG_INFO = 'test'
+"""
+AWS相关
+"""
+# ======================================================================================================================
+# aws api key
+AWS_ARN_S3 = 'arn:aws-cn:s3'
+REGION_NAME = 'cn-northwest-1'
+ACCESS_KEY_ID = 'AKIA2MMWBR4DSFG67DTG'
+SECRET_ACCESS_KEY = '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'
+
+# 存储桶
+PUSH_BUCKET = 'push'                                # 推送存储桶
+PUSH_INACCURATE_BUCKET = 'push-inaccurate'          # 推送不准确存储桶
+AVATAR_BUCKET = 'avatar-cn'                         # 头像存储桶
+LOG_BUCKET = 'ansjer-statres'                       # 日志存储桶
+
+# redis节点
+SERVER_HOST = '127.0.0.1'
+PUSH_REDIS_ADDRESS = '127.0.0.1'
+# ======================================================================================================================
+
+# 域名
 
 OAUTH_ACCESS_TOKEN_SECRET = 'local_a+jbgnw%@1%zy^=@dn62%'
 OAUTH_REFRESH_TOKEN_SECRET = 'local_r+jbgnw%@1%zy^=@dn62%'
 
-NGINX_RTMP_STAT = 'http://127.0.0.1:8000/stat'
+DOMAIN_HOST = '127.0.0.1'
 SERVER_DOMAIN = 'http://127.0.0.1:8000/'
 SERVER_DOMAIN_SSL = 'http://127.0.0.1:8000/'
-SERVER_HOST = '127.0.0.1'
-DOMAIN_HOST = '127.0.0.1'
-PUSH_REDIS_ADDRESS = '127.0.0.1'
-# SERVER_HOST = '127.0.0.1'
-# DOMAIN_HOST = '127.0.0.1'
-RTMP_PUSH_URL = 'rtmp://127.0.0.1:1935/hls'
+NGINX_RTMP_STAT = 'http://127.0.0.1:8000/stat'
+DETECT_PUSH_DOMAIN = 'http://test.push.dvema.com/'
+DETECT_PUSH_DOMAINS = 'https://test.push.dvema.com/'
+DETECT_PUSH_DOMAIN_JIUAN = 'http://jiuan.push.dvema.com/'
+DETECT_PUSH_DOMAINS_JIUAN = 'https://jiuan.push.dvema.com/'
+TUTK_PUSH_DOMAIN = 'http://push.iotcplatform.com/tpns'
+
+# PayPal
 PAYPAL_CRD = {
     "mode": "sandbox",  # sandbox or live
     "client_id": "AVLoQVq3xHZ6FrF4mxHwlCPgVBAw4Fw5RtMkuxmYd23SkUTIY643n2g3KdK-Al8wV05I28lza5uoQbAA",
@@ -26,14 +50,11 @@ PAYPAL_CRD = {
 PAYPAL_WEB_HOOK_ID = '6TS30758D98835230'
 PAYPAL_WEB_HOOK_ID_TWO = '2BH56575UJ9324151'
 
-DETECT_PUSH_DOMAIN = 'http://test.push.dvema.com/'
-DETECT_PUSH_DOMAINS = 'https://test.push.dvema.com/'
-DETECT_PUSH_DOMAIN_JIUAN = 'http://jiuan.push.dvema.com/'
-DETECT_PUSH_DOMAINS_JIUAN = 'https://jiuan.push.dvema.com/'
 # 数据库dyanamo品牌日志数据库
 USER_BRAND = 'test_user_brand'
 USER_BRAND_ALL = 'test_user_brand_all'
 
+APNS_MODE = 'dev'
 
 APNS_CONFIG = {
     'com.ansjer.loocamccloud': {
@@ -58,16 +79,3 @@ APNS_CONFIG = {
         'pem_path': 'Ansjer/file/apns_pem/ZhouShi-dev.pem',
     },
 }
-BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
-APNS_MODE = 'dev'
-TUTK_PUSH_DOMAIN = 'http://push.iotcplatform.com/tpns'
-
-# aws api key
-AWS_ARN_S3 = 'arn:aws-cn:s3'
-REGION_NAME = 'cn-northwest-1'
-ACCESS_KEY_ID = 'AKIA2MMWBR4DSFG67DTG'
-SECRET_ACCESS_KEY = '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'
-
-# 存储桶名
-AVATAR_BUCKET = 'avatar-cn'         # 头像存储桶
-LOG_BUCKET = 'ansjer-statres'       # 日志存储桶

+ 36 - 44
Ansjer/us_config/config_formal.py

@@ -1,27 +1,43 @@
-#!/usr/bin/env python3  
-# -*- coding: utf-8 -*-  
 """
-@Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
-@AUTHOR: ASJRD018
-@NAME: AnsjerFormal
-@software: PyCharm
-@DATE: 2019/10/16 9:45
-@Version: python3.6
-@MODIFY DECORD:ansjer dev
-@file: config_formal.py
-@Contact: chanjunkai@163.com
+独立于config.py的配置文件
 """
-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/'
-DOMAIN_HOST = 'www.dvema.com'
+"""
+AWS相关
+"""
+# ======================================================================================================================
+# aws api key
+AWS_ARN_S3 = 'arn:aws:s3'
+REGION_NAME = 'us-east-1'
+ACCESS_KEY_ID = 'AKIA2E67UIMD45Y3HL53'
+SECRET_ACCESS_KEY = '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'
+
+# 存储桶
+PUSH_BUCKET = 'foreignpush'                         # 推送存储桶
+PUSH_INACCURATE_BUCKET = 'push-inaccurate'          # 推送不准确存储桶
+AVATAR_BUCKET = 'avatar-us'                         # 头像存储桶
+LOG_BUCKET = 'ansjer-statres'                       # 日志存储桶
+
+# redis节点
 SERVER_HOST = 'backendserver.5tgle2.0001.usw1.cache.amazonaws.com'
 PUSH_REDIS_ADDRESS = 'pushredis.5tgle2.0001.usw1.cache.amazonaws.com'
+# ======================================================================================================================
+
+# 域名
+DOMAIN_HOST = 'www.dvema.com'
+SERVER_DOMAIN = 'http://www.dvema.com/'
+SERVER_DOMAIN_SSL = 'https://www.dvema.com/'
+NGINX_RTMP_STAT = 'http://www.dvema.com/stat'
+DETECT_PUSH_DOMAIN = 'http://push.dvema.com/'
+DETECT_PUSH_DOMAINS = 'https://push.dvema.com/'
+DETECT_PUSH_DOMAIN_JIUAN = 'http://jiuan.push.dvema.com/'
+DETECT_PUSH_DOMAINS_JIUAN = 'https://jiuan.push.dvema.com/'
+TUTK_PUSH_DOMAIN = 'http://push.iotcplatform.com/tpns'
+
+# PayPal
 PAYPAL_CRD = {
     "mode": "live",  # sandbox or live
     "client_id": "AdSRd6WBn-qLl9OiQHQuNYTDFSx0ZX0RUttqa58au8bPzoGYQUrt8bc6591RmH8_pEAIPijdvVYSVXyI",
@@ -30,21 +46,12 @@ PAYPAL_CRD = {
 PAYPAL_WEB_HOOK_ID = '3YH86681TH784461T'
 PAYPAL_WEB_HOOK_ID_TWO = '7TN87895N70389928'
 
-# PAYPAL_CRD = {
-#     "mode": "sandbox",  # sandbox or live
-#     "client_id": "AVLoQVq3xHZ6FrF4mxHwlCPgVBAw4Fw5RtMkuxmYd23SkUTIY643n2g3KdK-Al8wV05I28lza5uoQbAA",
-#     "client_secret": "EO8kRc8yioDk0i2Qq-QMcVFfwkmyMJorTvBSLDTnxDJJ_wb9VoM_0jkUY9iEng2Flp1ze8wQOGpH5nB2"
-# }
-
-DETECT_PUSH_DOMAIN = 'http://push.dvema.com/'
-DETECT_PUSH_DOMAINS = 'https://push.dvema.com/'
-DETECT_PUSH_DOMAIN_JIUAN = 'http://jiuan.push.dvema.com/'
-DETECT_PUSH_DOMAINS_JIUAN = 'https://jiuan.push.dvema.com/'
 # 数据库dyanamo品牌日志数据库
 USER_BRAND = 'user_brand'
 USER_BRAND_ALL = 'user_brand_all'
 
-# type =2
+APNS_MODE = 'prod'
+
 JPUSH_CONFIG = {
     'com.ansjer.accloud_ab': {
         'Key': 'f0dc047e5e53fd14199de5b0',
@@ -89,7 +96,7 @@ JPUSH_CONFIG = {
         'Key': 'ecdde95cd272f410ee029139',
         'Secret': '9ddca1e92bfa331126fd8826'},
 }
-# type =1
+
 FCM_CONFIG = {
     'com.ansjer.zccloud_a': 'AAAAb9YP3rk:APA91bHu8u-CTpcd0g6lKPo0WNVqCi8jZub1cPPbSAY9AucT1HxlF65ZDUko9iG8q2ch17bwu9YWHpK1xI1gHSRXCslLvZlXEmHZC0AG3JKg15XuUvlFKACIajUFV-pOeGRT8tM6-31I',
     'com.ansjer.loocamccloud_a': 'AAAAb9YP3rk:APA91bFCgd-kbVmpK4EVpfdHH_PJZQCYTkOGnTZdIuBWEz2r7aMRsJYHOH3sB-rwcbaRWgnufTyjX9nGQxb6KxQbWVk4ah_H-M3IqGh6Mb60WQQAuR33V6g_Jes5pGL6ViuIxGHqVMaR',
@@ -102,6 +109,7 @@ FCM_CONFIG = {
     'com.ansjer.zccloud_ab': 'AAAAb9YP3rk:APA91bHu8u-CTpcd0g6lKPo0WNVqCi8jZub1cPPbSAY9AucT1HxlF65ZDUko9iG8q2ch17bwu9YWHpK1xI1gHSRXCslLvZlXEmHZC0AG3JKg15XuUvlFKACIajUFV-pOeGRT8tM6-31I',
     'com.ansjer.customizedc_a': 'AAAAb9YP3rk:APA91bHu8u-CTpcd0g6lKPo0WNVqCi8jZub1cPPbSAY9AucT1HxlF65ZDUko9iG8q2ch17bwu9YWHpK1xI1gHSRXCslLvZlXEmHZC0AG3JKg15XuUvlFKACIajUFV-pOeGRT8tM6-31I',
 }
+
 APNS_CONFIG = {
     'com.ansjer.loocamccloud': {
         'pem_path': 'Ansjer/file/apns_pem/lcc-dev.pem',
@@ -128,19 +136,3 @@ APNS_CONFIG = {
         'pem_path': 'Ansjer/file/apns_pem/customizedc.pem',
     }
 }
-APNS_MODE = 'prod'
-# 根路径
-BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
-SERVER_TYPE = os.environ.get('DJANGO_SETTINGS_MODULE')
-
-TUTK_PUSH_DOMAIN = 'http://push.iotcplatform.com/tpns'
-
-# aws api key
-AWS_ARN_S3 = 'arn:aws:s3'
-REGION_NAME = 'us-east-1'
-ACCESS_KEY_ID = 'AKIA2E67UIMD45Y3HL53'
-SECRET_ACCESS_KEY = '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'
-
-# 存储桶名
-AVATAR_BUCKET = 'avatar-us'         # 头像存储桶
-LOG_BUCKET = 'ansjer-statres'       # 日志存储桶

+ 14 - 35
Controller/FeedBack.py

@@ -5,9 +5,8 @@ import oss2
 from django.db import transaction
 from django.views.generic.base import View
 
-from Ansjer.config import CONFIG_TEST, CONFIG_CN, CONFIG_INFO, AWS_IOT_SES_ACCESS_CHINA_REGION, \
-    AWS_SES_ACCESS_REGION
-from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY
+from Ansjer.config import ACCESS_KEY_ID, SECRET_ACCESS_KEY, REGION_NAME, PUSH_BUCKET, PUSH_INACCURATE_BUCKET
+from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET
 from Model.models import FeedBackModel, StatResModel, PushInaccurateFeedback
 from Object.AWS.AmazonS3Util import AmazonS3Util
 from Object.ResponseObject import ResponseObject
@@ -49,7 +48,7 @@ class FeedBackView(View):
                 return self.do_delete_image(userID, request_dict, response)
             elif operation == 'submitted':  # 查询是否已提交过推送图片反馈
                 return self.submitted(userID, request_dict, response)
-            elif operation == 'pushInaccurate':     # 用户反馈推送不准确
+            elif operation == 'pushInaccurate':  # 用户反馈推送不准确
                 return self.push_inaccurate(userID, request_dict, response)
             else:
                 return response.json(414)
@@ -307,32 +306,23 @@ class FeedBackView(View):
         # 查询数据是否存在
         push_inaccurate_feedback_qs = PushInaccurateFeedback.objects.filter(equipment_info_id=equipment_info_id,
                                                                             user_id=user_id, uid=uid, channel=channel,
-                                                                            event_type=event_type, event_time=event_time,
+                                                                            event_type=event_type,
+                                                                            event_time=event_time,
                                                                             is_st=is_st)
         if push_inaccurate_feedback_qs.exists():
             return response.json(174)
         # 查询图片是否存在s3
-        if CONFIG_INFO == CONFIG_TEST or CONFIG_INFO == CONFIG_CN:  # 国内
-            region_name = AWS_IOT_SES_ACCESS_CHINA_REGION
-            aws_access_key_id = AWS_ACCESS_KEY_ID[0]
-            secret_access_key = AWS_SECRET_ACCESS_KEY[0]
-            bucket = 'push'
-        else:  # 国外
-            region_name = AWS_SES_ACCESS_REGION
-            aws_access_key_id = AWS_ACCESS_KEY_ID[1]
-            secret_access_key = AWS_SECRET_ACCESS_KEY[1]
-            bucket = 'foreignpush'
         if is_st == 3:
             key = '{uid}/{channel}/{event_time}_0.jpeg'.format(uid=uid, channel=channel, event_time=event_time)
         else:
             key = '{uid}/{channel}/{event_time}.jpeg'.format(uid=uid, channel=channel, event_time=event_time)
         try:
             s3 = AmazonS3Util(
-                aws_access_key_id=aws_access_key_id,
-                secret_access_key=secret_access_key,
-                region_name=region_name
+                aws_access_key_id=ACCESS_KEY_ID,
+                secret_access_key=SECRET_ACCESS_KEY,
+                region_name=REGION_NAME
             )
-            have_object = s3.get_object(bucket, key)
+            have_object = s3.get_object(PUSH_BUCKET, key)
             if have_object:
                 return response.json(0)
             else:
@@ -351,37 +341,26 @@ class FeedBackView(View):
         if not all([equipment_info_id, uid, is_st, event_type, event_time, channel]):
             return response.json(444)
 
-        if CONFIG_INFO == CONFIG_TEST or CONFIG_INFO == CONFIG_CN:  # 国内
-            region_name = AWS_IOT_SES_ACCESS_CHINA_REGION
-            aws_access_key_id = AWS_ACCESS_KEY_ID[0]
-            secret_access_key = AWS_SECRET_ACCESS_KEY[0]
-            source_bucket = 'push'
-        else:  # 国外
-            region_name = AWS_SES_ACCESS_REGION
-            aws_access_key_id = AWS_ACCESS_KEY_ID[1]
-            secret_access_key = AWS_SECRET_ACCESS_KEY[1]
-            source_bucket = 'foreignpush'
-
         now_time = int(time.time())
         is_st = int(is_st)
         try:
             s3 = AmazonS3Util(
-                aws_access_key_id=aws_access_key_id,
-                secret_access_key=secret_access_key,
-                region_name=region_name
+                aws_access_key_id=ACCESS_KEY_ID,
+                secret_access_key=SECRET_ACCESS_KEY,
+                region_name=REGION_NAME
             )
             if is_st != 3:
                 file_path = '{uid}/{channel}/{event_time}.jpeg'.format(uid=uid,
                                                                        channel=channel,
                                                                        event_time=event_time)
-                s3.copy_obj(source_bucket, 'push-inaccurate', file_path)
+                s3.copy_obj(PUSH_BUCKET, PUSH_INACCURATE_BUCKET, file_path)
             else:
                 for index in range(3):
                     file_path = '{uid}/{channel}/{event_time}_{index}.jpeg'.format(uid=uid,
                                                                                    channel=channel,
                                                                                    event_time=event_time,
                                                                                    index=index)
-                    s3.copy_obj(source_bucket, 'push-inaccurate', file_path)
+                    s3.copy_obj(PUSH_BUCKET, PUSH_INACCURATE_BUCKET, file_path)
             PushInaccurateFeedback.objects.create(equipment_info_id=equipment_info_id,
                                                   user_id=user_id, event_type=event_type,
                                                   uid=uid, channel=channel, add_time=now_time,

+ 121 - 123
Controller/SerialNumberController.py

@@ -1,5 +1,3 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
 import json
 import logging
 import time
@@ -8,12 +6,12 @@ import requests
 from django.db import transaction
 from django.views import View
 
-from Ansjer.config import CRCKey, SERVER_DOMAIN_US, SERVER_DOMAIN_CN, CONFIG_INFO, CONFIG_TEST, CONFIG_US, \
-    CONFIG_CN, USED_SERIAL_REDIS_LIST, UNUSED_SERIAL_REDIS_LIST
+from Ansjer.config import CRCKey, CONFIG_INFO, CONFIG_TEST, CONFIG_US, \
+    CONFIG_CN, USED_SERIAL_REDIS_LIST, UNUSED_SERIAL_REDIS_LIST, SERVER_DOMAIN_US
 from Model.models import SerialNumberModel, CompanySerialModel, UIDCompanySerialModel, UIDModel, Device_Info, \
     iotdeviceInfoModel, LogModel, UidSetModel, UID_Bucket, \
     Unused_Uid_Meal, Order_Model, StsCrdModel, VodHlsModel, ExperienceContextModel, UidUserModel, ExperienceAiModel, \
-    AiService
+    AiService, DeviceDomainRegionModel, RegionModel
 from Object.RedisObject import RedisObject
 from Object.TokenObject import TokenObject
 from Object.uidManageResponseObject import uidManageResponseObject
@@ -37,35 +35,27 @@ class SerialNumberView(View):
         return self.validate(request_dict, operation, request)
 
     def validate(self, request_dict, operation, request):
-        token = TokenObject(request_dict.get('token', None))
         response = uidManageResponseObject()
 
-        if operation == 'getUID':
-            return self.do_get_uid(request_dict, response)
-        elif operation == 'attachUID':  # 绑定uid
+        if operation == 'attachUID':  # 绑定uid
             return self.do_attach_uid(request_dict, response, request)
         elif operation == 'detachUID':  # 解绑uid
             return self.do_detach_uid(request, request_dict, response)
-        elif operation == 'create':
+        elif operation == 'create':  # 创建序列号
             return self.do_create(request_dict, response)
-        elif operation == 'changeSerialNumberStatus':
-            return self.changeSerialNumberStatus(request_dict, response)
-        elif operation == 'getRegionInfo':
+        elif operation == 'getUID':  # 根据序列号获取uid
+            return self.do_get_uid(request_dict, response)
+        elif operation == 'getRegionInfo':  # 根据序列号状态确认uid地区(PC工具使用)
             return self.get_region_info(request_dict, response)
+        elif operation == 'saveRegion':  # 保存设备地区信息(app使用)
+            return self.save_region(request, request_dict, response)
+        elif operation == 'getDomain':  # 获取域名(设备使用)
+            return self.get_domain(request_dict, response)
         else:
-            if token.code != 0:
-                return response.json(token.code)
-
-            # if operation == 'create':
-            #     return self.do_create(request_dict, response)
-            elif operation == 'list':
-                return self.do_list(token.userID, request_dict, response)
-            elif operation == 'update':
-                return self.do_update(token.userID, request_dict, response)
-            else:
-                return response.json(404)
+            return response.json(414)
 
-    def do_create(self, request_dict, response):
+    @staticmethod
+    def do_create(request_dict, response):
         quantity = int(request_dict.get('quantity', 0))
 
         if not quantity:
@@ -73,15 +63,15 @@ class SerialNumberView(View):
 
         try:
             try:
-                sum = SerialNumberModel.objects.last().id
+                number = SerialNumberModel.objects.last().id
             except:
-                sum = 0
+                number = 0
             serial_number_bulk = []
             now_time = int(time.time())
             algorithm = AlgorithmBaseOn35()
             for i in range(quantity):
-                serial_number = algorithm.getLetter(sum)
-                sum += 1  # sum每次递增1
+                serial_number = algorithm.getLetter(number)
+                number += 1  # sum每次递增1
                 # 前面补0至六位
                 serial_number = (6 - len(serial_number)) * '0' + serial_number
                 serial_number_bulk.append(SerialNumberModel(serial_number=serial_number, add_time=now_time))
@@ -93,43 +83,6 @@ class SerialNumberView(View):
             print(e)
             return response.json(500, repr(e))
 
-    def do_list(self, userID, request_dict, response):
-        # perm = ModelService.check_perm_uid_manage(userID, 0)
-        # if not perm:
-        #     return response.json(309)
-
-        page = request_dict.get('page', None)
-        line = request_dict.get('limit', None)
-        serial_number = request_dict.get('serial_number', None)
-        status = request_dict.get('status', None)
-
-        if page and line:
-            page = int(page)
-            line = int(line)
-
-            serial_qs = SerialNumberModel.objects.filter().order_by('-id')
-
-            if serial_number:
-                serial_qs = serial_qs.filter(serial_number__contains=serial_number)
-
-            if status:
-                serial_qs = serial_qs.filter(status=status)
-
-            count = serial_qs.count()
-
-            start = (page - 1) * line
-            end = start + line
-
-            serial_qs = serial_qs[start: end].values()
-            res = {
-                'count': count,
-                'data': list(serial_qs)
-            }
-
-            return response.json(0, res)
-        else:
-            return response.json(444)
-
     def do_attach_uid(self, request_dict, response, request):
         serial_number = request_dict.get('serial_number', None)
         token = request_dict.get('token', None)
@@ -378,69 +331,13 @@ class SerialNumberView(View):
             djangoLogger.exception(repr(e))
             return response.json(176, str(e))
 
-    @staticmethod
-    def update_serial_status(serial, status):
-        if CONFIG_INFO == CONFIG_TEST:  # 测试服不处理
-            return True
-        server_domain = SERVER_DOMAIN_CN
-        if CONFIG_INFO == CONFIG_US:
-            server_domain = SERVER_DOMAIN_CN
-        elif CONFIG_INFO == CONFIG_CN:
-            server_domain = SERVER_DOMAIN_US
-        url = server_domain + 'serialNumber/changeSerialNumberStatus'
-        data = {'serial': serial, 'status': status}
-        req_res = requests.post(url=url, data=data, timeout=2)
-        if req_res.status_code != 200:
-            return False
-        req_res = req_res.json()
-        if req_res['result_code'] != 0:
-            return False
-        return True
-
-    def do_update(self, userID, request_dict, response):
-        # perm = ModelService.check_perm_uid_manage(userID, 0)
-        # if not perm:
-        #     return response.json(309)
-
-        id = request_dict.get('id', None)
-        status = request_dict.get('status', None)
-
-        if id and status:
-            serial_number_qs = SerialNumberModel.objects.filter(id=id)
-            if serial_number_qs.exists():
-                serial_number_qs.update(**{'status': status})
-                return response.json(0)
-            else:
-                return response.json(173)
-        else:
-            return response.json(444)
-
-    # 序列号绑定和解绑uid时修改其他数据库序列号的使用状态
-    def changeSerialNumberStatus(self, request_dict, response):
-        serial = request_dict.get('serial', None)
-        status = request_dict.get('status', None)
-        if not all([serial, status]):
-            return response(444)
-
-        try:
-            # 更新CompanySerialModel表的序列号使用状态
-            update = CompanySerialModel.objects.filter(serial_number=serial).update(status=int(status))
-            if update:
-                return response.json(0)
-            else:
-                return response.json(378)
-        except Exception as e:
-            djangoLogger = logging.getLogger('django')
-            djangoLogger.exception(repr(e))
-            return response.json(500, str(e))
-
     @staticmethod
     def get_region_info(request_dict, response):
         """
         根据序列号状态确认uid地区
         @param request_dict: 请求参数
         @param response: 响应对象
-        @request_dict endTime: 结束时间
+        @request_dict serial_number: 序列号
         @return: response
         """
         serial_number = request_dict.get('serial_number', None)
@@ -461,3 +358,104 @@ class SerialNumberView(View):
             elif CONFIG_INFO == CONFIG_US:
                 return response.json(0, {'region': 1})
         return response.json(0)
+
+    @staticmethod
+    def save_region(request, request_dict, response):
+        """
+        保存设备地区信息
+        @param request: 请求体
+        @param request_dict: 请求参数
+        @param response: 响应对象
+        @request_dict token: 令牌
+        @request_dict time_stamp: 时间戳
+        @return: response
+        """
+        token = request_dict.get('token', None)
+        serial_number = request_dict.get('serial_number', None)
+        if not all([serial_number, token]):
+            return response(444)
+
+        try:
+            token_obj = TokenObject(token)
+            if token_obj.code != 0:
+                return response.json(token_obj.code)
+            response.lang = token_obj.lang
+
+            serial_number = serial_number[:9]
+
+            # 不是美洲服,请求美洲域名保存数据
+            if CONFIG_INFO != CONFIG_US:
+                url = SERVER_DOMAIN_US + 'serialNumber/saveRegion'
+                data = request_dict.dict()
+                data['ip'] = CommonService.get_ip_address(request)
+                data['region_id'] = CommonService.confirm_region_id()
+                try:
+                    r = requests.post(url=url, data=data, timeout=3)
+                    assert r.status_code == 200
+                    res = r.json()
+                    assert res['result_code'] == 0
+                except (TimeoutError, AssertionError):
+                    return response.json(5)
+            else:
+                data = {}
+
+                # 处理其他服务器发起请求的情况
+                region_id = request_dict.get('region_id', None)
+                if region_id is not None:
+                    region_id = int(region_id)
+                    data['region_id'] = region_id
+                    data['ip'] = request_dict.get('ip', '')
+                else:
+                    region_id = CommonService.confirm_region_id()
+                    data['region_id'] = region_id
+                    data['ip'] = CommonService.get_ip_address(request)
+
+                # 写入数据
+                device_domain_region_qs = DeviceDomainRegionModel.objects.filter(serial_number=serial_number).\
+                    values('region_id')
+                if not device_domain_region_qs.exists():
+                    data['serial_number'] = serial_number
+                    DeviceDomainRegionModel.objects.create(**data)
+                else:
+                    # 设备解绑过uid,更新region_id
+                    if device_domain_region_qs[0]['region_id'] == 0:
+                        device_domain_region_qs.update(**data)
+            return response.json(0)
+        except Exception as e:
+            return response.json(500, repr(e))
+
+    @staticmethod
+    def get_domain(request_dict, response):
+        """
+        获取域名
+        @param request_dict: 请求参数
+        @param response: 响应对象
+        @request_dict serial_number: 序列号
+        @request_dict time_stamp_token: 时间戳token
+        @request_dict time_stamp: 时间戳
+        @return: response
+        """
+        serial_number = request_dict.get('serial_number', None)
+        time_stamp_token = request_dict.get('time_stamp_token', None)
+        time_stamp = request_dict.get('time_stamp', None)
+        if not all([serial_number, time_stamp_token, time_stamp]):
+            return response(444)
+        # 时间戳token校验
+        if not CommonService.check_time_stamp_token(time_stamp_token, time_stamp):
+            return response.json(13)
+
+        try:
+            serial_number = serial_number[:9]
+
+            device_domain_region_qs = DeviceDomainRegionModel.objects.filter(serial_number=serial_number).values(
+                'region_id')
+            if not device_domain_region_qs.exists():
+                return response.json(173)
+            region_id = device_domain_region_qs[0]['region_id']
+            region_qs = RegionModel.objects.filter(id=region_id).values('api')
+            res = {
+                'api': region_qs[0]['api']
+            }
+            return response.json(0, res)
+        except Exception as e:
+            return response.json(500, repr(e))

+ 8 - 8
Model/models.py

@@ -2276,18 +2276,18 @@ class DeviceDomainModel(models.Model):
 
 
 class DeviceDomainRegionModel(models.Model):
-    id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
-    serial_number = models.CharField(max_length=9, default='', verbose_name='序列号')
+    id = models.AutoField(primary_key=True, verbose_name='主键')
+    serial_number = models.CharField(default='', max_length=9, verbose_name='序列号')
     ip = models.CharField(default='', max_length=32, verbose_name='ip')
-    country_name = models.CharField(max_length=20, default='', verbose_name='国家名')
-    api = models.CharField(max_length=50, default='', verbose_name='使用的域名')
-    region_id = models.SmallIntegerField(default=0, verbose_name='地区id')
-    add_time = models.DateTimeField(blank=True, auto_now_add=True, verbose_name=u'添加时间')
-    update_time = models.DateTimeField(blank=True, auto_now=True, verbose_name=u'更新时间')
+    country_name = models.CharField(default='', max_length=20, verbose_name='国家名')
+    api = models.CharField(default='', max_length=50, verbose_name='使用的域名')
+    region_id = models.SmallIntegerField(default=0, verbose_name='对应tb_region表id')
+    add_time = models.DateTimeField(blank=True, auto_now_add=True, verbose_name='添加时间')
+    update_time = models.DateTimeField(blank=True, auto_now=True, verbose_name='更新时间')
 
     class Meta:
         db_table = 'device_domain_region'
-        verbose_name = u'设备域名地区表'
+        verbose_name = '设备域名地区表'
         verbose_name_plural = verbose_name
 
 

+ 25 - 25
Object/ResponseObject.py

@@ -7,10 +7,13 @@ class ResponseObject(object):
         self.lang = lang
         self.returntype = returntype
 
-    def data(self, code, res={}):
+    def data(self, code, res=None):
+        if res is None:
+            res = {}
+
         data_en = {
             0: 'Success',
-            5: 'Please try again one minute later!',
+            5: 'Please try again one minute later!',
             10: res,
             12: 'You are not the primary user of the device!',
             13: 'Timestamp token verification failed',
@@ -23,12 +26,12 @@ class ResponseObject(object):
             89: 'Already send the code, please check it or get it again after 10m',
             90: 'please check code or get it again after 1m',
             99: 'Mail doesn\'t exist!',
-            100: 'Phone format error',
+            100: 'Phone format error!',
             101: 'Phone already existed!',
             102: 'Phone doesn\'t exist!',
             103: 'Mail already existed!',
             104: 'Account doesn\'t exist!',
-            105: 'Email format error',
+            105: 'Email format error!',
             107: 'The username not conform to the rules!',
             109: 'The password not conform to the rules!',
             110: 'user doesn\'t activated',
@@ -52,9 +55,9 @@ class ResponseObject(object):
             414: 'Please confirm the request url!',
             424: 'Database Error !',
             444: 'Wrong parameters!',
-            474: 'System Maintaining',
+            474: 'System Maintaining!',
             475: 'App Version too low, please upgrade!',
-            500: 'Query Database Error:',
+            500: 'Internal error!',
             700: 'Upload file error',
             701: 'The file does not exist!',
             711: 'Do not downgrade',
@@ -164,7 +167,7 @@ class ResponseObject(object):
             444: '参数错误!',
             474: '系统维护中!',
             475: '版本过低,请升级程序!',
-            500: '查询数据库错误!',
+            500: '内部错误!',
             700: '上传文件错误',
             701: '文件不存在',
             711: '不可降级',
@@ -228,28 +231,25 @@ class ResponseObject(object):
             10057: '不能删除',
             10058: '默认家庭不能删除'
         }
-        if self.lang == 'cn':
-            msg = data_cn
-        elif self.lang == 'zh-Hans':
-            msg = data_cn
-        elif self.lang == 'zh-Hant':
-            msg = data_cn
-        else:
-            msg = data_en
-        try:
-            message = msg[code]
-        except Exception as e:
-            message = '系统错误,code不存在'
-        print(self.lang == 'cn')
-        print(msg)
+
+        msg = data_cn if self.lang == 'cn' or self.lang == 'zh-Hans' or self.lang == 'zh-Hant' else data_en
+
+        reason = msg.get(code)
+        if reason is None:
+            reason = 'code不存在'
+
         if self.returntype == 'pc':
-            return {'code': code, 'msg': message, 'data': res, 'error_code': code}
-        return {'result_code': code, 'reason': message, 'result': res, 'error_code': code}
+            return {'code': code, 'msg': reason, 'data': res, 'error_code': code}
+        return {'result_code': code, 'reason': reason, 'result': res, 'error_code': code}
 
-    def formal(self, code, res={}):
+    def formal(self, code, res=None):
+        if res is None:
+            res = {}
         formal_data = self.data(code, res)
         return json.dumps(formal_data, ensure_ascii=False)
 
-    def json(self, code, res={}):
+    def json(self, code, res=None):
+        if res is None:
+            res = {}
         result = self.formal(code, res)
         return HttpResponse(result)

+ 33 - 25
Object/uidManageResponseObject.py

@@ -7,7 +7,10 @@ class uidManageResponseObject(object):
     def __init__(self, lang='cn'):
         self.lang = lang
 
-    def data(self, code, res={}):
+    def data(self, code, res=None):
+        if res is None:
+            res = {}
+
         data_cn = {
             0: '成功',
             5: '请一分钟后再尝试',
@@ -18,10 +21,10 @@ class uidManageResponseObject(object):
             42: '两次输入的新密码错误',
             43: '客户端服务器已关闭,请下载新版本使用',
             44: '系统错误,发送邮件失败',
-            45: '系统错误,生成令牌出错!',
-            46: '系统错误,发送短信失败!',
+            45: '系统错误,生成令牌出错',
+            46: '系统错误,发送短信失败',
             47: '旧密码不正确',
-            74: '关联旧用户失败!',
+            74: '关联旧用户失败',
             79: '您已经申请过重置密码,请到邮箱进行确认!',
             89: '您已经获得了验证码,请在10分钟后检查或再次确认。',
             99: '账户或密码错误',
@@ -41,7 +44,7 @@ class uidManageResponseObject(object):
             175: 'mac地址已用完',
             176: '数据库异常',
             305: '令牌格式是错误的,相关参数是不存在的!',
-            307: '令牌已过期!',
+            307: '令牌已过期',
             308: '此次下载已失效',
             309: '你没有权限访问',
             373: '没有相应的公司',
@@ -51,17 +54,20 @@ class uidManageResponseObject(object):
             377: 'uid已使用',
             378: '更新序列号状态失败',
             379: '序列号不存在',
-            404: '没有访问权限!',
+            404: '没有访问权限!',
+            414: '请确认请求url!',
             444: '请确认参数的正确性!',
+            500: '内部错误!',
             1112: '您输入的两次密码不一致!',
             208: '只能预定当天的或者以后的!',
             10041: '已超出序列号剩余可绑定数',
             10042: '序列号已被占用',
             10043: '无法解绑,序列号的状态为被占用',
         }
+
         data_en = {
             0: 'Success',
-            5: 'Please try again one minute later',
+            5: 'Please try again one minute later!',
             8: 'User accounts already exist',
             9: 'User accounts is not exist',
             10: res,
@@ -69,10 +75,10 @@ class uidManageResponseObject(object):
             42: 'The new password entered twice is incorrect',
             43: 'The client server is closed. Please download the new version for use',
             44: 'System error,send email fail!',
-            45: 'System error,generate token fail',
-            46: 'System error, sending SMS failed',
+            45: 'System error,generate token fail!',
+            46: 'System error, sending SMS failed!',
             47: 'Old password is incorrect',
-            74: 'Failed to connect old users',
+            74: 'Failed to connect old users!',
             79: 'You have applied for reset password, please go to email for confirmation!',
             89: 'You have already obtained the verification code, please check it or get it again after 10 minutes.',
             99: ' ERROR Incorrect account or password',
@@ -83,7 +89,7 @@ class uidManageResponseObject(object):
             107: 'The username format does not conform to the rules!',
             108: 'The mailbox format does not conform to the rules! ',
             110: 'Because the user is not activated, the user is an invalid user!',
-            111: 'The password you entered is incorrect',
+            111: 'The password you entered is incorrect!',
             120: 'The captcha has expired or does not exist, please obtain the captcha again!',
             121: 'The verification code is wrong!',
             138: 'The phone format does not conform to the rules! ',
@@ -103,27 +109,29 @@ class uidManageResponseObject(object):
             378: 'Failed to update serial number status',
             379: 'Serial number does not exist',
             404: 'You don not have permission to access this!',
+            414: 'Please confirm the request url!',
             444: 'Please confirm the correctness of the parameters!',
-            1112: 'The two passwords you entered do not match!',
+            500: 'Internal error!',
+            1112: 'The two passwords you entered do not match!',
             10041: 'The remaining number of serial numbers that can be bound has exceeded',
             10042: 'Serial number is already occupied',
             10043: 'Unable to unbind, the status of the serial number is occupied',
         }
 
-        if self.lang == 'cn':
-            msg = data_cn
-        else:
-            msg = data_en
-        try:
-            message = msg[code]
-        except Exception as e:
-            message = '系统错误,code不存在'
-        return {'result_code': code, 'reason': message, 'result': res, 'error_code': code}
+        msg = data_cn if self.lang == 'cn' else data_en
+        reason = msg.get(code)
+        if reason is None:
+            reason = 'code不存在'
+        return {'result_code': code, 'reason': reason, 'result': res, 'error_code': code}
 
-    def formal(self, code, res={}):
+    def formal(self, code, res=None):
+        if res is None:
+            res = {}
         formal_data = self.data(code, res)
-        return json.dumps(formal_data,ensure_ascii=False)
+        return json.dumps(formal_data, ensure_ascii=False)
 
-    def json(self, code, res={}):
+    def json(self, code, res=None):
+        if res is None:
+            res = {}
         result = self.formal(code, res)
-        return HttpResponse(result)
+        return HttpResponse(result)