Quellcode durchsuchen

Merge remote-tracking branch 'origin/master' into test

# Conflicts:
#	AnsjerPush/config.py
#	AnsjerPush/urls.py
#	Controller/DetectControllerV2.py
locky vor 3 Jahren
Ursprung
Commit
a30c19d336

+ 161 - 0
AnsjerPush/cn_formal_config.py

@@ -0,0 +1,161 @@
+#!/usr/bin/env python3  
+# -*- coding: utf-8 -*-  
+"""
+@Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
+@AUTHOR: ASJRD018
+@NAME: Ansjer
+@software: PyCharm
+@DATE: 2018/7/2 14:06
+@Version: python3.6
+@MODIFY DECORD:ansjer dev
+@file: Conf.py
+@Contact: chanjunkai@163.com
+"""
+# 主要静态变量配置文件
+import datetime, os
+
+
+DEBUG_MODE = 'DEV'
+# MODE = 'PRO'
+# 阿里云发邮箱
+ALY_SES_ACCESS_NAME = 'message@dvema.com'
+ALY_SES_ACCESS_PAW = 'SMtp123456'
+ALY_SES_ACCESS_REPLYTO = '***'
+
+# 发送邮件邮箱
+SES_COMPANY_EMAIL = 'user_server@nsst.com'
+AWS_SES_ACCESS_ID = 'AKIAJKPU23EU5QWHFPKQ'
+AWS_SES_ACCESS_SECRET = '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'
+AWS_SES_ACCESS_REGION = 'us-east-1'
+AWS_BUCKET = 'ansjertest'
+# 设定离线时间为5分钟
+OFF_LINE_TIME_DELTA = 5
+
+# token的secret
+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)
+# 腾讯验证,短信发送
+TX_PHONE_APP_ID = '1400052907'
+TX_PHONE_APP_KEY = '7705976ca6e85fe7b86d6bc2d11f7783'
+
+# 验证码超时时间
+AuthCode_Expire = 600
+
+# 根路径
+BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+# uid token key
+UID_TOKEN_KEY = 'c+565*j@%^'
+
+# oss param
+OSS_STS_ACCESS_KEY = 'LTAIyMkGfEdogyL9'
+OSS_STS_ACCESS_SECRET = '71uIjpsqVOmF7DAITRyRuc259jHOjO'
+OSS_ROLE_ARN = 'acs:ram::1901342792446414:role/stsoss'
+
+SERVER_TYPE = 'Ansjer.cn_formal_settings'
+
+NGINX_RTMP_STAT = 'http://www.dvema.com/stat'
+SERVER_DOMAIN = 'http://www.dvema.com/'
+SERVER_DOMAIN_SSL = 'https://www.dvema.com/'
+DOMAIN_HOST = 'www.dvema.com'
+SERVER_HOST = '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"
+}
+DETECT_PUSH_DOMAIN = 'http://push.dvema.com/'
+
+
+JPUSH_CONFIG = {
+    'com.ansjer.accloud_ab': {
+        'Key': 'f0dc047e5e53fd14199de5b0',
+        'Secret': 'aa7f7db33e9f0a7f3871aa1c'},
+    'com.ansjer.adcloud_ab': {
+        'Key': '76d97b535185114985608234',
+        'Secret': 'c9a92b301043cc9c52778692'},
+    'com.ansjer.zccloud_ab': {
+        'Key': 'd9924f56d3cc7c6017965130',
+        'Secret': '869d832d126a232f158b5987'},
+    'com.ansjer.loocamccloud_ab': {
+        'Key': 'd1cc44797b4642b0e05304fe',
+        'Secret': 'c3e8b4ca8c576de61401e56a'},
+    'com.ansjer.loocamdcloud_ab': {
+        'Key': '76d97b535185114985608234',
+        'Secret': 'c9a92b301043cc9c52778692'},
+    'com.ansjer.zccloud_a': {
+        'Key': '57de2a80d68bf270fd6bdf5a',
+        'Secret': '3d354eb6a0b49c2610decf42'},
+    'com.ansjer.accloud_a': {
+        'Key': 'ff95ee685f49c0dc4013347b',
+        'Secret': 'de2c20959f5516fdeeafe78e'},
+    'com.ansjer.adcloud_a': {
+        'Key': '2e47eb1aee9b164460df3668',
+        'Secret': 'b9137d8d684bc248f1809b6d'},
+    'com.ansjer.loocamccloud_a': {
+        'Key': '23c9213215c7ca0ec945629b',
+        'Secret': '81e4b1e859cc8387e2e6c431'},
+    'com.ansjer.loocamdcloud_a': {
+        'Key': '1dbdd60a16e9892d6f68a073',
+        'Secret': '80a97690e7e043109059b403'},
+    'com.ansjer.customizedb_a': {
+        'Key': '9d79630aa49adfa291fe2568',
+        'Secret': '4d8ff52f88136561875a0212'},
+    'com.ansjer.customizedd_a': {
+        'Key': '8fc4f495685bde53341ee25d',
+        'Secret': 'f1da11fa466509fa2670fb66',
+    }
+}
+# 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',
+    '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',
+}
+
+APNS_CONFIG = {
+    'com.ansjer.loocamccloud': {
+        'pem_path': 'AnsjerPush/file/apns_pem/lcc.pem',
+    },
+    'com.ansjer.zosidcloud': {
+        'pem_path': 'AnsjerPush/file/apns_pem/zosidcloud.pem',
+    },
+    'com.ansjer.customizedb': {
+        'pem_path': 'AnsjerPush/file/apns_pem/customizedb.pem',
+    },
+    'com.ansjer.customizedd': {
+        'pem_path': 'AnsjerPush/file/apns_pem/customizedd.pem',
+    },
+    'com.ansjer.customizede': {
+        'pem_path': 'AnsjerPush/file/apns_pem/customizede.pem',
+    },
+    'com.ansjer.customizeda': {
+        'pem_path': 'AnsjerPush/file/apns_pem/customizeda.pem',
+    },
+    'com.ansjer.zccloud': {
+        'pem_path': 'AnsjerPush/file/apns_pem/zccloud.pem',
+    },
+    'com.ansjer.accloud': {
+        'pem_path': 'AnsjerPush/file/apns_pem/accloud.pem',
+    },
+    'com.ansjer.adcloud': {
+        'pem_path': 'AnsjerPush/file/apns_pem/apns-dis-adcloud.pem',
+    },
+    'com.ansjer.customizedc':{
+        'pem_path': 'AnsjerPush/file/apns_pem/customizedc.pem',
+    }
+}
+APNS_MODE = 'prod'
+REDIS_ADDRESS = 'pushredis.3xavzq.0001.cnw1.cache.amazonaws.com.cn'
+# REDIS_ADDRESS = '192.168.136.45'

+ 219 - 0
AnsjerPush/cn_formal_settings.py

@@ -0,0 +1,219 @@
+import os
+
+BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+SECRET_KEY = '$2hf5g$a%_^kk0-l25l$!o5)yc=dvtnfpc8(+$rh4fq4twa_xx'
+DEBUG = False
+ALLOWED_HOSTS = ["*"]
+
+INSTALLED_APPS = [
+    'django.contrib.admin',
+    'django.contrib.auth',
+    'django.contrib.contenttypes',
+    'django.contrib.sessions',
+    'django.contrib.messages',
+    'django.contrib.staticfiles',
+    'corsheaders',
+    'imagekit',
+    'Model'
+]
+
+MIDDLEWARE = [
+    'django.middleware.security.SecurityMiddleware',
+    'django.contrib.sessions.middleware.SessionMiddleware',
+    'corsheaders.middleware.CorsMiddleware',
+    'django.middleware.common.CommonMiddleware',
+    # 'django.middleware.csrf.CsrfViewMiddleware',
+    'django.contrib.auth.middleware.AuthenticationMiddleware',
+    'django.contrib.messages.middleware.MessageMiddleware',
+    'django.middleware.clickjacking.XFrameOptionsMiddleware',
+]
+
+ROOT_URLCONF = 'AnsjerPush.urls'
+
+TEMPLATES = [
+    {
+        'BACKEND': 'django.template.backends.django.DjangoTemplates',
+        'DIRS': [os.path.join(BASE_DIR, 'templates')]
+        ,
+        'APP_DIRS': True,
+        'OPTIONS': {
+            'context_processors': [
+                'django.template.context_processors.debug',
+                'django.template.context_processors.request',
+                'django.contrib.auth.context_processors.auth',
+                'django.contrib.messages.context_processors.messages',
+            ],
+        },
+    },
+]
+
+WSGI_APPLICATION = 'AnsjerPush.cn_formal_wsgi.application'
+
+
+# Database
+# https://docs.djangoproject.com/en/2.1/ref/settings/#databases
+# 国内数据库
+DATABASE_DATA = 'Ansjer81'
+SERVER_HOST = 'business-server.cvp7gfpnmziz.rds.cn-northwest-1.amazonaws.com.cn'
+DATABASES_USER = 'azrds'
+DATABASES_PASS = 'UKv78ezQhiGMmSef5U5s'
+
+DATABASE_DATA2 = 'Ansjer81'
+SERVER_HOST2 = 'ansjerpush.cvp7gfpnmziz.rds.cn-northwest-1.amazonaws.com.cn'
+DATABASES_USER2 = 'azrds'
+DATABASES_PASS2 = 'azrds.x.x'
+
+DATABASES = {
+    'default': {
+        'ENGINE': 'django.db.backends.mysql',
+        'NAME': DATABASE_DATA,
+        'USER': DATABASES_USER,
+        'PASSWORD': DATABASES_PASS,
+        'HOST': SERVER_HOST,
+        'PORT': '3306',
+        'OPTIONS': {'charset': 'utf8mb4', 'use_unicode': True, 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"},
+        'AUTOCOMMIT': True
+    },
+    'mysql02': {
+        'ENGINE': 'django.db.backends.mysql',
+        'NAME': DATABASE_DATA2,
+        'USER': DATABASES_USER2,
+        'PASSWORD': DATABASES_PASS2,
+        'HOST': SERVER_HOST2,
+        'PORT': '3306',
+        'OPTIONS': {'charset': 'utf8mb4', 'use_unicode': True, 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"},
+        'AUTOCOMMIT': True
+    }
+}
+DATABASE_ROUTERS = ['AnsjerPush.database_router.DatabaseAppsRouter']
+DATABASE_APPS_MAPPING = {
+    'db1': 'default',
+    'db2': 'mysql02',
+}
+
+
+# Password validation
+# https://docs.djangoproject.com/en/2.1/ref/settings/#auth-password-validators
+
+AUTH_PASSWORD_VALIDATORS = [
+    {
+        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
+    },
+    {
+        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
+    },
+    {
+        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
+    },
+    {
+        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
+    },
+]
+
+
+# Internationalization
+# https://docs.djangoproject.com/en/2.1/topics/i18n/
+
+LANGUAGE_CODE = 'en-us'
+
+TIME_ZONE = 'UTC'
+
+USE_I18N = True
+
+USE_L10N = True
+
+USE_TZ = True
+
+
+# Static files (CSS, JavaScript, Images)
+# https://docs.djangoproject.com/en/2.1/howto/static-files/
+
+STATIC_URL = '/static/'
+# 跨域增加忽略
+# 跨域增加忽略
+CORS_ALLOW_CREDENTIALS = True
+CORS_ORIGIN_ALLOW_ALL = True
+CORS_ORIGIN_WHITELIST = ()
+
+CORS_ALLOW_METHODS = (
+    'DELETE',
+    'GET',
+    'OPTIONS',
+    'PATCH',
+    'POST',
+    'PUT',
+    'VIEW',
+)
+
+CORS_ALLOW_HEADERS = (
+    'accept',
+    'accept-encoding',
+    'authorization',
+    'content-type',
+    'dnt',
+    'origin',
+    'user-agent',
+    'x-csrftoken',
+    'x-requested-with',
+)
+
+
+# 日志模块
+LOGGING = {
+    'version': 1,
+    'disable_existing_loggers': True,
+    'formatters': {
+        'error_format': {
+            # 'format': '{"asctime":"%(asctime)s","thread":"%(threadName)s:%(thread)d","errorline":"%(lineno)d","errorlevel":"%(levelname)s","errorcontent":"%(message)s"}'
+            'format': '%(asctime)s %(threadName)s %(thread)d %(lineno)d %(levelname)s %(message)s'
+        },
+        'standard': {
+            'format': '[%(asctime)s] [%(filename)s:%(lineno)d] [%(module)s:%(funcName)s] '
+                      '[%(levelname)s]- %(message)s'},
+    },
+    'filters': {
+    },
+    'handlers': {
+        'mail_admins': {
+            'level': 'ERROR',
+            'class': 'django.utils.log.AdminEmailHandler',
+            'include_html': True,
+        },
+        'default': {
+            'level': 'ERROR',
+            'class': 'logging.handlers.RotatingFileHandler',
+            'filename': BASE_DIR + '/static/log/error.log',
+            'maxBytes': 1024 * 1024 * 5,  # 5 MB
+            'backupCount': 5,
+            'formatter': 'error_format',
+        },
+        'console': {
+            'level': 'ERROR',
+            'class': 'logging.StreamHandler',
+            'formatter': 'error_format'
+        },
+        'info': {
+            'level': 'INFO',
+            'class': 'logging.handlers.RotatingFileHandler',
+            'filename': BASE_DIR + '/static/log/info/info.log',
+            'maxBytes': 1024 * 1024 * 300,  # 300M
+            'backupCount': 30,
+            'formatter': 'standard',
+            'encoding': 'utf-8',
+        },
+    },
+    'loggers': {
+        'django': {
+            'handlers': ['default', 'console'],
+            # 'handlers': ['mail_admins','default','console'],
+            'level': 'ERROR',
+            'propagate': False
+        },
+        # log 调用时需要当作参数传入
+        'info': {
+            'handlers': ['info'],
+            'level': 'INFO',
+            'propagate': False
+        }
+    }
+}

+ 16 - 0
AnsjerPush/cn_formal_wsgi.py

@@ -0,0 +1,16 @@
+"""
+WSGI config for AnsjerPush project.
+
+It exposes the WSGI callable as a module-level variable named ``application``.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/2.1/howto/deployment/wsgi/
+"""
+
+import os
+
+from django.core.wsgi import get_wsgi_application
+
+os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'AnsjerPush.cn_formal_settings')
+
+application = get_wsgi_application()

+ 2 - 1
AnsjerPush/config.py

@@ -152,7 +152,6 @@ APNS_CONFIG = {
     }
 }
 APNS_MODE = 'dev'
-REDIS_ADDRESS = 'pushredis.5tgle2.0001.usw1.cache.amazonaws.com'
 
 if SERVER_TYPE == 'AnsjerPush.local_settings':
     from AnsjerPush.local_config import *
@@ -160,6 +159,8 @@ elif SERVER_TYPE == 'AnsjerPush.test_settings':
     from AnsjerPush.test_config import *
 elif SERVER_TYPE == 'AnsjerPush.formal_settings':
     from AnsjerPush.formal_config import *
+elif SERVER_TYPE == 'AnsjerPush.cn_formal_settings':
+    from AnsjerPush.cn_formal_config import *
 
 APNS_CODE = {
     -1: '只库存不推送',

+ 1 - 1
AnsjerPush/formal_config.py

@@ -157,5 +157,5 @@ APNS_CONFIG = {
     }
 }
 APNS_MODE = 'prod'
-REDIS_ADDRESS = '127.0.0.1'
+REDIS_ADDRESS = 'pushredis.5tgle2.0001.usw1.cache.amazonaws.com'
 # REDIS_ADDRESS = '192.168.136.45'

+ 2 - 2
AnsjerPush/urls.py

@@ -15,7 +15,7 @@ Including another URLconf
 """
 from django.contrib import admin
 from django.urls import path
-from Controller import DetectController, ShadowController, TestDetectController, EquipmentInfo, DetectControllerV2, TestController
+from Controller import DetectController, ShadowController, TestDetectController, EquipmentInfo, DetectControllerV2
 
 urlpatterns = [
     path('admin/', admin.site.urls),
@@ -26,5 +26,5 @@ urlpatterns = [
     path('deviceShadow/generateUTK', ShadowController.generate_utk),
     path('test/notify/push', TestDetectController.NotificationView.as_view()),
     path('eq/del', EquipmentInfo.deleteExpireEquipmentInfo),
-    path('test/',TestController.NotificationView.as_view()),
+    path('push/healthCheck', EquipmentInfo.healthCheck),
 ]

+ 41 - 30
Controller/DetectController.py

@@ -245,19 +245,7 @@ class NotificationView(View):
             userID_id = up["userID_id"]
             int_is_st = int(is_st)
             if userID_id not in userID_ids:
-                eq_list.append(Equipment_Info(
-                    userID_id=userID_id,
-                    eventTime=n_time,
-                    eventType=event_type,
-                    devUid=uid,
-                    devNickName=nickname,
-                    Channel=channel,
-                    alarm='Motion \tChannel:{channel}'.format(channel=channel),
-                    is_st=int_is_st,
-                    receiveTime=n_time,
-                    addTime=now_time,
-                    storage_location=1
-                ))
+
                 if is_sys_msg:
                     sys_msg_text = self.get_msg_text(channel=channel, n_time=n_time, lang=lang, tz=tz,
                                                      event_type=event_type, is_sys=1)
@@ -268,10 +256,25 @@ class NotificationView(View):
                         updTime=now_time,
                         uid=uid,
                         eventType=event_type))
+                else:
+                    eq_list.append(Equipment_Info(
+                        userID_id=userID_id,
+                        eventTime=n_time,
+                        eventType=event_type,
+                        devUid=uid,
+                        devNickName=nickname,
+                        Channel=channel,
+                        alarm='Motion \tChannel:{channel}'.format(channel=channel),
+                        is_st=int_is_st,
+                        receiveTime=n_time,
+                        addTime=now_time,
+                        storage_location=1
+                    ))
                 userID_ids.append(userID_id)
         if is_sys_msg:
             SysMsgModel.objects.bulk_create(sys_msg_list)
-        Equipment_Info.objects.bulk_create(eq_list)
+        else:
+            Equipment_Info.objects.bulk_create(eq_list)
         if is_st == '0' or is_st == '2':
             print("is_st=0or2")
             for up in redis_list:
@@ -431,9 +434,15 @@ class NotificationView(View):
                                 extras=push_data)
         push.notification = jpush.notification(android=android)
         push.platform = jpush.all_
-        res = push.send()
-        print(res)
-        return res.status_code
+        try:
+            res = push.send()
+            print(res)
+            status_code = res.status_code
+        except Exception as e:
+            logger = logging.getLogger('info')
+            logger.info(e)
+            status_code = 100
+        return status_code
         # try:
         #     res = push.send()
         #     print(res)
@@ -624,19 +633,7 @@ class PushNotificationView(View):
             tz = ua['tz']
             userID_id = ua["userID_id"]
             if userID_id not in userID_ids:
-                eq_list.append(Equipment_Info(
-                    userID_id=userID_id,
-                    eventTime=n_time,
-                    eventType=event_type,
-                    devUid=uid,
-                    devNickName=nickname,
-                    Channel=channel,
-                    alarm='Motion \tChannel:{channel}'.format(channel=channel),
-                    is_st=is_st,
-                    receiveTime=n_time,
-                    addTime=now_time,
-                    storage_location=1
-                ))
+
                 if is_sys_msg:
                     sys_msg_text = self.get_msg_text(channel=channel, n_time=n_time, lang=lang, tz=tz,
                                                      event_type=event_type, is_sys=1)
@@ -647,6 +644,20 @@ class PushNotificationView(View):
                         updTime=now_time,
                         uid=uid,
                         eventType=event_type))
+                else:
+                    eq_list.append(Equipment_Info(
+                        userID_id=userID_id,
+                        eventTime=n_time,
+                        eventType=event_type,
+                        devUid=uid,
+                        devNickName=nickname,
+                        Channel=channel,
+                        alarm='Motion \tChannel:{channel}'.format(channel=channel),
+                        is_st=is_st,
+                        receiveTime=n_time,
+                        addTime=now_time,
+                        storage_location=1
+                    ))
         if eq_list:
             print('eq_list')
             Equipment_Info.objects.bulk_create(eq_list)

+ 12 - 12
Controller/DetectControllerV2.py

@@ -65,6 +65,7 @@ class NotificationView(View):
         is_st = request_dict.get('is_st', None)
         company_secrete = request_dict.get('company_secrete', None)
         region = request_dict.get('region', None)
+        electricity = request_dict.get('electricity', None)
 
         if not all([channel, n_time]):
             return JsonResponse(status=200, data={
@@ -167,7 +168,7 @@ class NotificationView(View):
                 msg_title = self.get_msg_title(appBundleId=appBundleId, nickname=nickname)
                 # 发送内容
                 msg_text = self.get_msg_text(channel=channel, n_time=n_time, lang=lang, tz=tz,
-                                             event_type=event_type)
+                                             event_type=event_type, electricity=electricity)
                 kwag_args['appBundleId'] = appBundleId
                 kwag_args['token_val'] = token_val
                 kwag_args['msg_title'] = msg_title
@@ -189,7 +190,7 @@ class NotificationView(View):
                     now_time = int(time.time())
                     if is_sys_msg:
                         sys_msg_text = self.get_msg_text(channel=channel, n_time=n_time, lang=lang, tz=tz,
-                                                         event_type=event_type, is_sys=1)
+                                                         event_type=event_type, electricity=electricity, is_sys=1)
                         sys_msg_list.append(SysMsgModel(
                             userID_id=userID_id,
                             msg=sys_msg_text,
@@ -318,12 +319,12 @@ class NotificationView(View):
             return True
         return False
 
-    def get_msg_text(self, channel, n_time, lang, tz, event_type, is_sys=0):
+    def get_msg_text(self, channel, n_time, lang, tz, event_type, electricity='', is_sys=0):
         n_date = CommonService.get_now_time_str(n_time=n_time, tz=tz,lang=lang)
         etype = int(event_type)
         if lang == 'cn':
             if etype == 704:
-                msg_type = '电量过低'
+                msg_type = '剩余电量:' + electricity
             elif etype == 702:
                 msg_type = '摄像头休眠'
             elif etype == 703:
@@ -337,7 +338,7 @@ class NotificationView(View):
                 # send_text = '{msg_type} 通道:{channel} 日期:{date}'.format(msg_type=msg_type, channel=channel, date=n_date)
         else:
             if etype == 704:
-                msg_type = 'Low battery'
+                msg_type = 'Battery remaining:' + electricity
             elif etype == 702:
                 msg_type = 'Camera sleep'
             elif etype == 703:
@@ -667,7 +668,7 @@ class PushNotificationView(View):
         etype = int(event_type)
         if lang == 'cn':
             if etype == 704:
-                msg_type = '电量过低'
+                msg_type = '剩余电量:'
             elif etype == 702:
                 msg_type = '摄像头休眠'
             elif etype == 703:
@@ -680,7 +681,7 @@ class PushNotificationView(View):
                 send_text = '{msg_type} 通道:{channel} 日期:{date}'.format(msg_type=msg_type, channel=channel, date=n_date)
         else:
             if etype == 704:
-                msg_type = 'Low battery'
+                msg_type = 'Battery remaining:'
             elif etype == 702:
                 msg_type = 'Camera sleep'
             elif etype == 703:
@@ -729,7 +730,7 @@ class PWnotificationView(View):
                 redis_list.append(qs)
 
             if not redis_list:
-                res_data = {'code': 0, 'msg': 'test: no redis_list success!'}
+                res_data = {'code': 0, 'msg': 'no redis_list success!'}
                 return JsonResponse(status=200, data=res_data)
 
             nickname = redis_list[0]['uid_set__nickname']
@@ -779,7 +780,7 @@ class PWnotificationView(View):
                 userID_id = up["userID_id"]
                 if userID_id not in userID_ids:
                     sys_msg_text = self.get_msg_text(channel=channel, n_time=now_time, lang=lang, tz=tz,
-                                                     event_type=event_type, is_sys=1, electricity= electricity)
+                                                     event_type=event_type, is_sys=1, electricity=electricity)
                     sys_msg_list.append(SysMsgModel(
                         userID_id=userID_id,
                         msg=sys_msg_text,
@@ -787,7 +788,6 @@ class PWnotificationView(View):
                         updTime=now_time,
                         uid=uid,
                         eventType=event_type,
-                        electricity=electricity,
                     ))
                     userID_ids.append(userID_id)
             SysMsgModel.objects.bulk_create(sys_msg_list)
@@ -826,7 +826,7 @@ class PWnotificationView(View):
         etype = int(event_type)
         if lang == 'cn':
             if etype == 704:
-                msg_type = '电量已剩:'+electricity+'%'
+                msg_type = '剩余电量:' + electricity
             elif etype == 702:
                 msg_type = '摄像头休眠'
             elif etype == 703:
@@ -840,7 +840,7 @@ class PWnotificationView(View):
                 # send_text = '{msg_type} 通道:{channel} 日期:{date}'.format(msg_type=msg_type, channel=channel, date=n_date)
         else:
             if etype == 704:
-                msg_type = 'Battery is left: '+electricity+'%'
+                msg_type = 'Battery remaining:' + electricity
             elif etype == 702:
                 msg_type = 'Camera sleep'
             elif etype == 703:

+ 4 - 1
Controller/EquipmentInfo.py

@@ -4,6 +4,7 @@ import traceback
 import requests
 
 import oss2
+from django.http import JsonResponse
 from django.utils.decorators import method_decorator
 from django.views.decorators.csrf import csrf_exempt
 from django.views.generic import TemplateView
@@ -317,4 +318,6 @@ def deleteExpireEquipmentInfo(request):
     except Exception as e:
         return response.json(500, repr(e))
 
-
+# aws负载均衡health检查
+def healthCheck(request):
+    return JsonResponse(status=200, data='health', safe=False)

+ 12 - 1
Controller/ShadowController.py

@@ -18,6 +18,9 @@
 # 设备影子更新
 import logging
 
+import requests
+
+from AnsjerPush.config import SERVER_TYPE
 from Object.LogUtil import LogUtil
 from Object.ResponseObject import ResponseObject
 from Object.ETkObject import ETkObject
@@ -70,8 +73,13 @@ def update_device_shadow(request):
     if not uid:
         return JsonResponse(status=200, data={'code': 403, 'msg': 'error etk'})
 
-    nowTime = int(time.time())
     logger = logging.getLogger('info')
+    logger.info('使用配置: {}'.format(SERVER_TYPE))
+    logger.info('data: {}'.format(request_dict.dict()))
+    if SERVER_TYPE != 'Ansjer.cn_formal_settings':
+        requests.post(url='http://shadow.zositechc.cn/deviceShadow/update', data=request_dict.dict(), timeout=2)
+    nowTime = int(time.time())
+
     # 重置按钮
     is_reset = request_dict.get('is_reset', None)
     # 传1则重置设备信息
@@ -102,6 +110,9 @@ def update_device_shadow(request):
         if voice_qs.exists():
             voice_qs.delete()
 
+        # 关闭移动侦测的消息提醒
+        Device_Info.objects.filter(UID=uid).update(NotificationMode=0)
+
     # return JsonResponse(status=200, data={'code': 0, 'msg': 'success', 'data': {}})
     ucode = request_dict.get('ucode', None)
     version = request_dict.get('version', None)

+ 1 - 1
Model/models.py

@@ -292,7 +292,7 @@ class Equipment_Info(models.Model):
 class SysMsgModel(models.Model):
     #更新
     id = models.AutoField(primary_key=True, verbose_name='自增id')
-    userID_id =  models.CharField(default='', blank=True, max_length=32, verbose_name=u'用户ID')
+    userID_id = models.CharField(default='', blank=True, max_length=32, verbose_name=u'用户ID')
     msg = models.TextField(blank=True, default='', verbose_name=u'消息发送内容')
     status = models.SmallIntegerField(verbose_name='是否已读', default=0)  # 0:否,1:是
     addTime = models.IntegerField(verbose_name='添加时间', default=0)

+ 22 - 0
cn_formal_manage.py

@@ -0,0 +1,22 @@
+#!/usr/bin/env python
+import os
+import sys
+
+if __name__ == '__main__':
+    arg_m = sys.argv[1]
+    if arg_m == 'makemigrations':
+        print('do not makemigrations')
+        exit()
+    if arg_m == 'migrate':
+        print('do not migrate')
+        exit()
+    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'AnsjerPush.cn_formal_settings')
+    try:
+        from django.core.management import execute_from_command_line
+    except ImportError as exc:
+        raise ImportError(
+            "Couldn't import Django. Are you sure it's installed and "
+            "available on your PYTHONPATH environment variable? Did you "
+            "forget to activate a virtual environment?"
+        ) from exc
+    execute_from_command_line(sys.argv)