125 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			125 lines
		
	
	
		
			4.5 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':
 | |
|             # 一键呼救
 | |
|             cls.one_key_alarm(data=data)
 | |
|         elif data.type == 'onOffLine':
 | |
|             if data.data.online:
 | |
|                 # 标签定位在线
 | |
|                 pass
 | |
|             else:
 | |
|                 # 标签定位离线
 | |
|                 pass
 | |
|         elif data.type == 'lowpower':
 | |
|             # 低电量
 | |
|             cls.low_power(data=data.data)
 | |
|         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 area and 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
 | |
|         elif area and (not blts):
 | |
|             # 触发未知标签进入事件
 | |
|             pass
 | |
| 
 | |
|     @classmethod
 | |
|     def rail_out(cls, data):
 | |
|         pass
 | |
| 
 | |
|     @classmethod
 | |
|     def low_power(cls, data):
 | |
|         pass
 | |
| 
 | |
|     @classmethod
 | |
|     def one_key_alarm(cls, data):
 | |
|         pass
 |