76 lines
2.1 KiB
Python
76 lines
2.1 KiB
Python
|
|
|
|
from apps.am.models import Area
|
|
from apps.third.clients import xxClient
|
|
from apps.third.tapis import xxapis
|
|
|
|
|
|
class EcmService:
|
|
"""事件处理服务
|
|
"""
|
|
|
|
def create_remind_and_speak(cls):
|
|
"""
|
|
创建事件提醒并发送短信/微信/音响
|
|
"""
|
|
pass
|
|
|
|
@classmethod
|
|
def dispatch_dahua_event(cls, data: dict):
|
|
"""分发大华事件进行处理
|
|
"""
|
|
pass
|
|
|
|
@classmethod
|
|
def dispatch_xunxi_event(cls, data: dict):
|
|
"""分发寻息事件进行处理
|
|
"""
|
|
if data.type == 'rail':
|
|
if data.data.type == 1:
|
|
# 围栏进入
|
|
cls.rail_in(data=data.data)
|
|
elif data.data.type == 2:
|
|
# 围栏离开
|
|
pass
|
|
elif data.type == 'onKeyAlarm':
|
|
# 一键呼救
|
|
pass
|
|
elif data.type == 'onOffLine':
|
|
if data.data.online:
|
|
# 标签定位在线
|
|
pass
|
|
else:
|
|
# 标签定位离线
|
|
pass
|
|
elif data.type == 'lowpower':
|
|
# 低电量
|
|
pass
|
|
elif data.type == 'bltOnOffLineV2':
|
|
if data.data.online:
|
|
# 标签通信在线
|
|
pass
|
|
else:
|
|
# 标签通信离线
|
|
pass
|
|
|
|
@classmethod
|
|
def rail_in(cls, data):
|
|
"""围栏进入事件
|
|
"""
|
|
# 判断区域是否超员
|
|
area = Area.objects.filter(third_info__xx_rail__id=data['railId']).first()
|
|
if area:
|
|
json = {"railId": data['railId'], "type": ""}
|
|
_, res = xxClient.request(**xxapis['rail_ibeacon_list'], json=json)
|
|
total_count = res['totalCount']
|
|
if total_count >= area.count_people_max:
|
|
# 触发超员事件
|
|
area.count_people = total_count
|
|
area.save()
|
|
pass
|
|
elif total_count < area.count_people_min:
|
|
# 触发缺员事件
|
|
area.count_people_min = total_count
|
|
area.save()
|
|
pass
|