factory/apps/ecm/service.py

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