117 lines
4.3 KiB
Python
117 lines
4.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
|
|
from apps.utils.queryset import get_child_queryset2
|
|
|
|
|
|
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_blt = blts.employee # 标签绑定人员
|
|
if ep_blt:
|
|
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_blt in eps_access and i.type == Access.ACCESS_IN_YES:
|
|
return
|
|
elif ep_blt in eps_access and i.type == Access.ACCESS_IN_NO:
|
|
# 触发非法进入事件
|
|
pass
|
|
elif i.dept: # 如果是按部门设定的
|
|
if i.dept.type == 'dept': # 如果是内部部门
|
|
depts = get_child_queryset2(i.dept)
|
|
if ep_blt.belong_dept in depts and i.type == Access.ACCESS_IN_YES:
|
|
return
|
|
elif ep_blt.belong_dept in depts and i.type == Access.ACCESS_IN_NO:
|
|
# 触发非法进入事件
|
|
pass
|
|
elif i.dept.type == 'rparty': # 如果是相关方
|
|
if ep_blt.belong_dept == i.dept and i.type == Access.ACCESS_IN_YES:
|
|
return
|
|
elif ep_blt.belong_dept == i.dept and i.type == Access.ACCESS_IN_NO:
|
|
# 触发非法进入事件
|
|
pass
|
|
elif i.employee: # 如果是按人设定的
|
|
if ep_blt == i.employee and i.type == Access.ACCESS_IN_YES:
|
|
return
|
|
elif ep_blt == i.employee and i.type == Access.ACCESS_IN_NO:
|
|
# 触发非法进入事件
|
|
pass
|
|
# 通用权限设置过滤
|
|
if ep_blt.type == 'employee' and area.employee_yes:
|
|
return
|
|
elif ep_blt.type == 'remployee' and area.remployee_yes:
|
|
return
|
|
elif ep_blt.type == 'visitor' and area.visitor_yes:
|
|
return
|
|
else:
|
|
# 触发非法进入事件
|
|
pass
|
|
else:
|
|
# 触发未知标签进入事件
|
|
pass
|
|
|
|
@classmethod
|
|
def rail_out(cls, data):
|
|
pass
|