寻息修改为http订阅

This commit is contained in:
曹前明 2022-09-13 17:15:31 +08:00
parent f3355d871a
commit f0698ce3c2
4 changed files with 93 additions and 51 deletions

View File

@ -382,43 +382,6 @@ def dispatch_dahua_event(data: dict):
notify_event(event) notify_event(event)
def dispatch_xunxi_event(data: dict):
"""分发寻息事件进行处理
"""
if data.type == 'rail':
if data.data.type == 1:
# 围栏进入
rail_in(data=data.data)
elif data.data.type == 2:
# 围栏离开
rail_out(data=data.data)
elif data.type == 'onKeyAlarm':
# 一键呼救
handle_xx_event(name='one_key_alarm', data=data)
elif data.type == 'location':
# 定位信息
loc_change(data=data)
elif data.type == 'onOffLine':
if data.data.online:
# 标签定位在线
# blt_online(data=data.data)
pass
else:
# 标签定位离线
# blt_offline(data=data.data)
pass
elif data.type == 'lowpower':
# 低电量
handle_xx_event(name='low_power', data=data)
elif data.type == 'bltOnOffLineV2':
if data.data.online:
# 标签通信在线
pass
else:
# 标签通信离线
pass
def rail_in(data): def rail_in(data):
"""围栏进入 """围栏进入
""" """

View File

@ -160,6 +160,18 @@ xxapis = {
"url": "/api/devicesV3/bltInfoByMac", "url": "/api/devicesV3/bltInfoByMac",
"method": "post" "method": "post"
}, },
"subscribe": {
"url": "/Subscribe",
"method": "post"
},
"subscribe_list": {
"url": "/SubscribeList",
"method": "post"
},
"unsubscribe": {
"url": "/Unsubscribe",
"method": "post"
}
} }

View File

@ -1,7 +1,7 @@
import json import json
import logging import logging
from rest_framework.exceptions import ParseError, APIException from rest_framework.exceptions import ParseError, APIException
from apps.ecm.service import dispatch_dahua_event, dispatch_xunxi_event from apps.ecm.service import dispatch_dahua_event, handle_xx_event, loc_change, rail_in, rail_out
from apps.hrm.services import HrmService from apps.hrm.services import HrmService
from apps.third.tapis import dhapis, xxapis, spapis from apps.third.tapis import dhapis, xxapis, spapis
from apps.third.errors import TAPI_CODE_WRONG from apps.third.errors import TAPI_CODE_WRONG
@ -16,6 +16,7 @@ from rest_framework.decorators import action
from apps.third.serializers import PicSerializer, RequestCommonSerializer from apps.third.serializers import PicSerializer, RequestCommonSerializer
from rest_framework import serializers from rest_framework import serializers
from django.conf import settings
import stomp import stomp
from django.conf import settings from django.conf import settings
myLogger = logging.getLogger('log') myLogger = logging.getLogger('log')
@ -81,21 +82,21 @@ class XxTestView(APIView):
# 寻息事件订阅 # 寻息事件订阅
class XxListener(stomp.ConnectionListener): # class XxListener(stomp.ConnectionListener):
def on_error(self, frame): # def on_error(self, frame):
print('received an error "%s"' % frame.body) # print('received an error "%s"' % frame.body)
def on_message(self, frame): # def on_message(self, frame):
data = json.loads(frame.body) # data = json.loads(frame.body)
dispatch_xunxi_event(data) # dispatch_xunxi_event(data)
print('received a message "%s"' % frame.body) # print('received a message "%s"' % frame.body)
if settings.XX_ENABLED: # if settings.XX_ENABLED:
c = stomp.Connection([(settings.XX_MQ_HOST, settings.XX_MQ_PORT)]) # c = stomp.Connection([(settings.XX_MQ_HOST, settings.XX_MQ_PORT)])
c.set_listener('', XxListener()) # c.set_listener('', XxListener())
c.connect(settings.XX_USERNAME, settings.XX_LICENCE) # c.connect(settings.XX_USERNAME, settings.XX_LICENCE)
c.subscribe(settings.XX_QUEUE, id='') # c.subscribe(settings.XX_QUEUE, id='')
class XxCommonViewSet(CreateModelMixin, CustomGenericViewSet): class XxCommonViewSet(CreateModelMixin, CustomGenericViewSet):
@ -142,6 +143,64 @@ class XxCommonViewSet(CreateModelMixin, CustomGenericViewSet):
""" """
return Response({'token': xxClient.token}) return Response({'token': xxClient.token})
@action(methods=['post'], detail=False,
permission_classes=[IsAdminUser],
serializer_class=serializers.Serializer)
def subscribe(self, request, pk=None):
"""寻息事件一键订阅
寻息事件一键订阅
"""
xxClient.subscribe('location', '/third/xunxi/c_location/')
xxClient.subscribe('rail', '/third/xunxi/c_rail/')
xxClient.subscribe('oneKeyAlarm', '/third/xunxi/c_one_key_alarm/')
xxClient.subscribe('lowpower', '/third/xunxi/c_lowpower/')
return Response()
@action(methods=['post'], detail=False,
permission_classes=[IsAdminUser],
serializer_class=serializers.Serializer)
def unsubscribe(self, request, pk=None):
"""取消订阅
取消订阅
"""
pass
@action(methods=['post'], detail=False,
authentication_classes=[], permission_classes=[],
serializer_class=serializers.Serializer, logging_methods=[]) # 日志
def c_location(self, request, pk=None):
loc_change(data=request.data)
return Response()
@action(methods=['post'], detail=False,
authentication_classes=[], permission_classes=[],
serializer_class=serializers.Serializer, logging_methods=['POST']) # 日志
def c_rail(self, request, pk=None):
data = request.data
if data.data.type == 1:
# 围栏进入
rail_in(data=data.data)
elif data.data.type == 2:
# 围栏离开
rail_out(data=data.data)
return Response()
@action(methods=['post'], detail=False,
authentication_classes=[], permission_classes=[],
serializer_class=serializers.Serializer, logging_methods=['POST']) # 日志
def c_one_key_alarm(self, request, pk=None):
handle_xx_event(name='one_key_alarm', data=request.data)
return Response()
@action(methods=['post'], detail=False,
authentication_classes=[], permission_classes=[],
serializer_class=serializers.Serializer, logging_methods=[]) # 日志
def c_lowpower(self, request, pk=None):
handle_xx_event(name='low_power', data=request.data)
return Response()
class DhCommonViewSet(CreateModelMixin, CustomGenericViewSet): class DhCommonViewSet(CreateModelMixin, CustomGenericViewSet):
perms_map = {'post': '*'} perms_map = {'post': '*'}

View File

@ -11,7 +11,7 @@ from apps.third.errors import XX_REQUEST_ERROR
from apps.third.models import Tlog from apps.third.models import Tlog
from apps.utils.tools import print_roundtrip from apps.utils.tools import print_roundtrip
from django.utils.timezone import now from django.utils.timezone import now
from apps.third.tapis import xxapis
requests.packages.urllib3.disable_warnings() requests.packages.urllib3.disable_warnings()
myLogger = logging.getLogger('log') myLogger = logging.getLogger('log')
@ -74,6 +74,7 @@ class XxClient:
params['accessToken'] = self.token params['accessToken'] = self.token
json['username'] = self.username json['username'] = self.username
json['buildId'] = settings.XX_BUILDID json['buildId'] = settings.XX_BUILDID
json['licence'] = settings.XX_LICENCE
self.log = {"requested_at": now(), "id": uuid.uuid4(), "path": url, "method": method, self.log = {"requested_at": now(), "id": uuid.uuid4(), "path": url, "method": method,
"params": params, "body": json, "target": "xunxi", "result": 10} "params": params, "body": json, "target": "xunxi", "result": 10}
if self.isGetingToken: if self.isGetingToken:
@ -126,3 +127,10 @@ class XxClient:
"errors": errors "errors": errors
}) })
Tlog(**self.log).save() Tlog(**self.log).save()
def subscribe(self, type: str, rurl: str):
# 订阅 location, /third/xunxi/c_location
json_data = {"type": type,
"data": {"buildIds": [settings.XX_BUILDID], "serverUrl": settings.BASE_URL_IN + rurl},
"licence": settings.XX_LICENCE}
self.request(**xxapis['subscribe'], json=json_data)