factory/apps/ecm/service.py

102 lines
3.3 KiB
Python

from apps.am.models import Access, Area
from apps.hrm.models import Employee
from apps.system.models import User
from apps.third.clients import xxClient
from apps.third.models import TDevice
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:
# 围栏离开
cls.rail_out(data=data.data)
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()
# 找到进入对象
blts = TDevice.objects.filter(code=data['userId']).first()
if blts and blts.employee: # 如果是人
ep_blts = blts.employee # 标签绑定人员
if ep_blts:
for i in Access.objects.filter(area=area).order_by('sort'):
# 优先自定义权限过滤
if i.post: # 如果是按岗位设定的
eps_access = Employee.objects.filter(user__posts=i.post)
if ep_blts in eps_access and i.type == Access.ACCESS_IN_YES:
return
elif ep_blts in eps_access and i.type == Access.ACCESS_IN_NO:
# 触发非法进入事件
pass
elif i.employee: # 如果是按人设定的
if ep_blts == i.employee and i.type == Access.ACCESS_IN_YES:
return
elif ep_blts == i.employee and i.type == Access.ACCESS_IN_NO:
# 触发非法进入事件
pass
# 通用权限设置过滤
if ep_blts.type == 'employee' and area.employee_yes:
return
elif ep_blts.type == 'remployee' and area.remployee_yes:
return
elif ep_blts.type == 'visitor' and area.visitor_yes:
return
else:
# 触发非法进入事件
pass
else:
# 触发未知标签进入事件
pass
@classmethod
def rail_out(cls, data):
pass