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

Merge branch 'pzb' of http://192.168.136.45:3000/SERVER/AnsjerServer into pzb

pzb 6 жил өмнө
parent
commit
97f510e8b7

+ 12 - 4
Ansjer/config.py

@@ -53,6 +53,12 @@ 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'
+
+# 不同环境配置
 if SERVER_TYPE == 'Ansjer.local_settings':
     NGINX_RTMP_STAT = 'http://192.168.136.45:8077/stat'
     SERVER_DOMAIN = 'http://192.168.136.45:8077/'
@@ -65,6 +71,8 @@ if SERVER_TYPE == 'Ansjer.local_settings':
         "client_id": "AeuhR7FHisO-lOd2OwtzyDu7PSLMmDZoDLgmzuEQ12WCtTu_8Z1AzcD4gG5SnymnuvJs-n5KBB8H9Z_G",
         "client_secret": "EGkMCB3RWTcUGJGDYahJ9mCO0AQzEn2AvFfx1GAFjfyyn7-8a0NObcZks89QorlFpvNWTsDXVa2INRNM"
     }
+    DETECT_PUSH_DOMAIN = 'http://test.push.dvema.com/'
+
 elif SERVER_TYPE == 'Ansjer.test_settings':
     NGINX_RTMP_STAT = 'http://test.dvema.com/stat'
     SERVER_DOMAIN = 'http://test.dvema.com/'
@@ -80,6 +88,8 @@ elif SERVER_TYPE == 'Ansjer.test_settings':
         # "client_id": "AeuhR7FHisO-lOd2OwtzyDu7PSLMmDZoDLgmzuEQ12WCtTu_8Z1AzcD4gG5SnymnuvJs-n5KBB8H9Z_G",
         # "client_secret": "EGkMCB3RWTcUGJGDYahJ9mCO0AQzEn2AvFfx1GAFjfyyn7-8a0NObcZks89QorlFpvNWTsDXVa2INRNM"
     }
+    DETECT_PUSH_DOMAIN = 'http://test.push.dvema.com/'
+
 elif SERVER_TYPE == 'Ansjer.formal_settings':
     NGINX_RTMP_STAT = 'http://www.dvema.com/stat'
     SERVER_DOMAIN = 'http://www.dvema.com/'
@@ -91,8 +101,6 @@ elif SERVER_TYPE == 'Ansjer.formal_settings':
         "client_id": "AdSRd6WBn-qLl9OiQHQuNYTDFSx0ZX0RUttqa58au8bPzoGYQUrt8bc6591RmH8_pEAIPijdvVYSVXyI",
         "client_secret": "ENT-J08N3Fw0B0uAokg4RukljAwO9hFHPf8whE6-Dwd8oBWJO8AWMgpdTKpfB1pOy89t4bsFEzMWDowm"
     }
+    DETECT_PUSH_DOMAIN = 'http://push.dvema.com/'
+
 
-# oss param
-OSS_STS_ACCESS_KEY = 'LTAIyMkGfEdogyL9'
-OSS_STS_ACCESS_SECRET = '71uIjpsqVOmF7DAITRyRuc259jHOjO'
-OSS_ROLE_ARN = 'acs:ram::1901342792446414:role/stsoss'

+ 5 - 5
Controller/CloudVod.py

@@ -25,8 +25,8 @@ from django.utils.decorators import method_decorator
 from django.views.decorators.csrf import csrf_exempt
 from django.views.generic.base import View
 
-from Ansjer.config import BASE_DIR
-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
 from Model.models import Device_Info, Order_Model, Store_Meal, VodHlsModel, OssCrdModel, UID_Bucket
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
@@ -221,6 +221,7 @@ class CloudVodView(View):
         nowTime = int(time.time())
         # 新增流程
         orderID = CommonService.createOrderID()
+
         try:
             aliPayObj = AliPayObject()
             alipay = aliPayObj.conf()
@@ -229,8 +230,8 @@ class CloudVodView(View):
                 total_amount=price,
                 subject="测试哟",
                 # subject="实用性充气式玩具",
-                return_url="https://test.dvema.com/cloudVod/payOK",
-                notify_url="https://test.dvema.com/cloudVod/aliPayCallback"
+                return_url="{SERVER_DOMAIN_SSL}cloudVod/payOK".format(SERVER_DOMAIN_SSL=SERVER_DOMAIN_SSL),
+                notify_url="{SERVER_DOMAIN_SSL}cloudVod/aliPayCallback".format(SERVER_DOMAIN_SSL=SERVER_DOMAIN_SSL)
                 # return_url="http://192.168.136.40/cloudVod/payOK",
                 # notify_url="http://192.168.136.40/cloudVod/aliPayCallback"
             )
@@ -577,7 +578,6 @@ class CloudVodView(View):
             OssCrdModel.objects.create(uid=UID, channel=channel, data=json.dumps(res), addTime=now_time)
         return JsonResponse(status=200, data=res)
 
-
     def do_paypal_execute(self, request_dict, response):
         paymentId = request_dict.get('paymentId', None)
         PayerID = request_dict.get('PayerID', None)

+ 5 - 7
Controller/DetectController.py

@@ -23,9 +23,7 @@ import requests
 from django.utils.decorators import method_decorator
 from django.views.decorators.csrf import csrf_exempt
 from django.views.generic.base import View
-from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET
-from Ansjer.config import BASE_DIR
-from Ansjer.config import SERVER_DOMAIN
+from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, SERVER_DOMAIN, BASE_DIR, DETECT_PUSH_DOMAIN
 from Model.models import Device_Info, VodHlsModel, Equipment_Info, UidSetModel, UidPushModel
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
@@ -170,8 +168,8 @@ class DetectControllerView(View):
                 utko = UidTokenObject()
                 # right
                 utko.generate(data={'uid': uid})
-                detectUrl = "{SERVER_DOMAIN}notify/push?uidToken={uidToken}". \
-                    format(uidToken=utko.token, SERVER_DOMAIN=SERVER_DOMAIN)
+                detectUrl = "{DETECT_PUSH_DOMAIN}notify/push?uidToken={uidToken}". \
+                    format(uidToken=utko.token, DETECT_PUSH_DOMAIN=DETECT_PUSH_DOMAIN)
                 return response.json(0, {'detectUrl': detectUrl})
             else:
                 uid_set_qs = UidSetModel.objects.filter(uid=uid)
@@ -203,8 +201,8 @@ class DetectControllerView(View):
                 UidPushModel.objects.create(**uid_push_create_dict)
                 utko = UidTokenObject()
                 utko.generate(data={'uid': uid})
-                detectUrl = "{SERVER_DOMAIN}notify/push?uidToken={uidToken}". \
-                    format(uidToken=utko.token, SERVER_DOMAIN=SERVER_DOMAIN)
+                detectUrl = "{DETECT_PUSH_DOMAIN}notify/push?uidToken={uidToken}". \
+                    format(uidToken=utko.token, DETECT_PUSH_DOMAIN=DETECT_PUSH_DOMAIN)
                 return response.json(0, {'detectUrl': detectUrl})
         else:
             return response.json(14)

+ 27 - 16
Controller/EquipmentManager.py

@@ -1,10 +1,11 @@
 import re
 import time
 import traceback
+import threading
 
 import simplejson as json
 from django.utils import timezone
-from Model.models import Device_User, Device_Info, UID_Bucket, UID_Preview, UidSetModel
+from Model.models import Device_User, Device_Info, UID_Bucket, UID_Preview, UidSetModel, Equipment_Info
 from django.db.models import Q
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
@@ -147,7 +148,12 @@ def delUserEquipmentInterface(request):
     userID = tko.userID
     # 主用户删除设备全部删除
     try:
-        Device_Info.objects.filter(userID_id=userID, id=id).delete()
+        dv_qs = Device_Info.objects.filter(userID_id=userID, id=id)
+        if dv_qs.exists():
+            uid = dv_qs[0].UID
+            dv_qs.delete()
+            asy = threading.Thread(target=ModelService.del_eq_info, args=(userID, uid))
+            asy.start()
     except Exception as e:
         errorInfo = traceback.format_exc()
         print('删除数据库记录错误: %s' % errorInfo)
@@ -538,16 +544,22 @@ def deleteInterface(request):
         return response.json(309)
     try:
         dv_qs = Device_Info.objects.filter(userID_id=userID, id=id)
-        uid = dv_qs[0].UID
-        if dv_qs[0].isShare:
-            dv_qs.delete()
+        if dv_qs.exists():
+            uid = dv_qs[0].UID
+            if dv_qs[0].isShare:
+                dv_qs.delete()
+            else:
+                # 主用户删除设备
+                dv_qs.delete()
+                # 分享获得用户假删除
+                ud_dv_qs = Device_Info.objects.filter(UID=uid, isShare=True, primaryUserID=userID)
+                if ud_dv_qs.exists():
+                    ud_dv_qs.update(isExist=0)
+                # 异步删除推送消息
+            asy = threading.Thread(target=ModelService.del_eq_info, args=(userID, uid))
+            asy.start()
         else:
-            # 主用户删除设备
-            dv_qs.delete()
-            # 分享获得用户假删除
-            ud_dv_qs = Device_Info.objects.filter(UID=uid, isShare=True, primaryUserID=userID)
-            if ud_dv_qs.exists():
-                ud_dv_qs.update(isExist=0)
+            return response.json(14)
     except Exception as e:
         errorInfo = traceback.format_exc()
         print('删除数据库记录错误: %s' % errorInfo)
@@ -570,6 +582,7 @@ def queryInterface(request):
     page = request_dict.get('page', None)
     line = request_dict.get('line', None)
     NickName = request_dict.get('NickName', None)
+    uid = request_dict.get('uid', None)
     page = int(page)
     line = int(line)
     tko = TokenObject(token)
@@ -578,7 +591,9 @@ def queryInterface(request):
         userID = tko.userID
         dvqs = Device_Info.objects.filter(userID_id=userID)
         if NickName:
-            dvqs.filter(NickName__icontains=NickName)
+            dvqs = dvqs.filter(NickName__icontains=NickName)
+        if uid:
+            dvqs = dvqs.filter(UID=uid)
         # count = dvqs.count()
         dvql = dvqs[(page - 1) * line:page * line].values('id', 'userID', 'NickName', 'UID', 'View_Account',
                                                           'View_Password', 'ChannelIndex', 'Type', 'isShare',
@@ -786,10 +801,6 @@ def update_device_shadow(request):
                 create_dict['cloud_vod'] = cloud_vod
             if push_status:
                 create_dict['push_status'] = push_status
-            if account:
-                create_dict['account'] = account
-            if password:
-                create_dict['password'] = password
             UidSetModel.objects.create(**create_dict)
             return JsonResponse(status=200, data={'code': 0, 'msg': 'success', 'data': {}})
     else:

+ 46 - 11
Controller/Test.py

@@ -31,12 +31,13 @@ class Test(View):
     def get(self, request, *args, **kwargs):
 
         request_dict = request.GET
-        return self.do_apns(request_dict)
+        # return self.do_apns(request_dict)
         # return self.do_get_putOss_url(request.GET)
         # from django.http import JsonResponse
         # return JsonResponse(status=200,data={
         #         'code': 173,
         #         'msg': 'data is not exist'})
+        return self.do_fcm_push(request)
         return self.do_gcm_push(request)
         return self.do_alipay_query_status()
 
@@ -67,6 +68,47 @@ class Test(View):
             print("not paid...")
             return response.json(404)
 
+    def do_fcm_push(self, request):
+        rg_id = request.GET.get('rg_id', '')
+        serverKey = request.GET.get('serverKey', '')
+        push_type = request.GET.get('push_type', None)
+        # Send to single device.
+        from pyfcm import FCMNotification
+
+        # OR initialize with proxies
+
+        # proxy_dict = {
+        #     "http": "http://127.0.0.1",
+        #     "https": "http://127.0.0.1",
+        # }
+        # push_service = FCMNotification(api_key="<api-key>", proxy_dict=proxy_dict)
+        push_service = FCMNotification(api_key=serverKey)
+
+        # Your api-key can be gotten from:  https://console.firebase.google.com/project/<project-name>/settings/cloudmessaging
+
+        registration_id = rg_id
+        message_title = "Zosi Smart(Camera 007)"
+        now_time = int(time.time())
+        data = {"alert": "Motion ", "event_time": now_time, "event_type": "51", "msg": "",
+                "received_at": now_time, "sound": "sound.aif", "uid": "XFDJUHUIOKJHYTGSFFDR", "zpush": "1"}
+        # message_body = json.dumps(data)
+
+        message_body = '警告:Motion Channel:1 日期:{tt}'.format(
+            tt=str(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))))
+        print(message_body)
+        if push_type:
+            result = push_service.notify_single_device(registration_id=registration_id, message_title=message_title,
+                                                       message_body=message_body, data_message=data)
+        else:
+            result = push_service.notify_single_device(registration_id=registration_id, message_title=message_title,
+                                                       message_body=message_body)
+
+        from var_dump import var_dump
+        var_dump(result)
+
+        response = ResponseObject()
+        return response.json(0, result)
+
     def do_apns(self, request_dict):
         token_val = request_dict.get('token_val', None)
         pem_path = os.path.join(BASE_DIR, 'Ansjer/file/apns_pem/apns-dev-test.pem')
@@ -121,16 +163,9 @@ class Test(View):
         serverKey = request.GET.get('serverKey', '')
         if not rg_id or not serverKey:
             return response.json(444)
-        data = {
-            "received_at": "1",
-            "msg": "1",
-            "uid": "1",
-            "alert": "1",
-            "sound": "1",
-            "event_time": "1",
-            "event_type": "1",
-        }
-
+        now_time = int(time.time())
+        data = {"alert": "Motion ", "event_time": now_time, "event_type": "51", "msg": "",
+                "received_at": now_time, "sound": "sound.aif", "uid": "XFDJUHUIOKJHYTGSFFDR", "zpush": "1"}
         json_data = {
             "collapse_key": "WhatYouWant",
             "data": data,

+ 1 - 0
Model/models.py

@@ -669,6 +669,7 @@ class UidSetModel(models.Model):
     video_code = models.SmallIntegerField(default=0, verbose_name='编码类型')  # 0:264,1:265
 
     nickname = models.CharField(default='', max_length=64, verbose_name='设备昵称')
+    ip = models.CharField(blank=True, max_length=20, default='', verbose_name=u'设备ip')
 
     class Meta:
         db_table = 'uid_set'

+ 1 - 1
Object/TokenObject.py

@@ -21,7 +21,7 @@ class TokenObject:
 
     def __init__(self, token=None):
         if token == 'local':
-            token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySUQiOiIxNTQzOTA5MDUwNDEzMTM4MDAxMzgwMDAiLCJsYW5nIjoiZW4iLCJ1c2VyIjoiMTM4MDAxMzgwMDEiLCJtX2NvZGUiOiIxMjM0MTMyNDMyMTQiLCJleHAiOjE1NjQzMDc0MzZ9.xGTQTwcLvU4tH9pm45Y-nCi-P7wkWl-1EzsVKeudMhQ'
+            token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySUQiOiIxNTQzOTA5MDUwNDEzMTM4MDAxMzgwMDAiLCJsYW5nIjoiZW4iLCJ1c2VyIjoiMTM4MDAxMzgwMDEiLCJtX2NvZGUiOiIxMjM0MTMyNDMyMTQiLCJleHAiOjE1NjcyMzE5MzZ9.tCRQzNTSUH-4gdI26iQW13rSvsevOXEwLVs44Yx4LrE'
         if token == 'test':
             token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoiMTM4MDAxMzgwMDEiLCJ1c2VySUQiOiIxNTE1NjQyNjIzMzc5Mzk1MTM4MDAxMzgwMDEiLCJsYW5nIjoiZW4iLCJleHAiOjE1NTI2MTIxOTF9.sO8BtSclN6B-qwqNmYWbICatHYEtyMdoqzZ0hcOSsmg'
         self.token = token

+ 8 - 0
Service/ModelService.py

@@ -119,3 +119,11 @@ class ModelService:
         userID_list = Device_User.objects.filter(Q(username=username) | Q(userEmail=username) | Q(phone=username)). \
             values_list('userID', flat=True)
         return userID_list
+
+    @staticmethod
+    def del_eq_info(userID,uid):
+        ei_qs = Equipment_Info.objects.filter(userID_id=userID, devUid=uid)
+        ei_qs.delete()
+        # ei_count = ei_qs.count()
+        # while (ei_count > 1000):
+        #     ei_qs[0:1000].delete()

+ 1 - 0
Service/TemplateService.py

@@ -52,6 +52,7 @@ class TemplateService:
             'cloudVod/filterVod',
             'cloudVod/findVod',
             'cloudVod/aliPayCreateOrder',
+            'cloudVod/aliPayCallback',
 
             'equipment/add',
             'deviceShare/queryUser',