125 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			125 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Python
		
	
	
	
| 
 | |
| from apps.hrm.models import Employee
 | |
| from apps.hrm.services import HrmService
 | |
| from apps.utils.sms import send_sms
 | |
| from apps.utils.tools import get_info_from_id
 | |
| from apps.vm.models import Visit, Visitor, Vpeople
 | |
| from rest_framework.exceptions import ParseError
 | |
| 
 | |
| 
 | |
| def sync_to_visitor(ep: Employee):
 | |
|     # 个人信息完善时同步到visitor表
 | |
|     Visitor.objects.filter(employee=ep).update(name=ep.name, phone=ep.phone, id_number=ep.id_number, photo=ep.photo)
 | |
|     if not Visitor.objects.filter(employee=ep, create_by=ep.user).exists():
 | |
|         Visitor.objects.create(employee=ep, name=ep.name, phone=ep.phone,
 | |
|                                id_number=ep.id_number, photo=ep.photo, create_by=ep.user)
 | |
| 
 | |
| 
 | |
| def bind_visit(ticket, transition, new_ticket_data: dict):
 | |
|     visit = Visit.objects.get(id=new_ticket_data['visit'])
 | |
|     if visit.ticket and visit.ticket.id!=ticket.id:
 | |
|         raise ParseError('重复创建工单')
 | |
|     if visit.level == 10 and (not Vpeople.objects.filter(visit=visit).exists()):
 | |
|         raise ParseError('请至少选择一位访客')
 | |
|     ticket_data = ticket.ticket_data
 | |
|     ticket_data.update({
 | |
|         'purpose': visit.purpose,
 | |
|         'belong_dept': visit.belong_dept.id
 | |
|     })
 | |
|     ticket.ticket_data = ticket_data
 | |
|     ticket.belong_dept = visit.belong_dept
 | |
|     ticket.create_by = visit.create_by
 | |
|     ticket.save()
 | |
|     if visit.ticket is None:
 | |
|         visit.ticket = ticket
 | |
|         visit.state = Visit.V_AUDIT
 | |
|         visit.save()
 | |
| 
 | |
| 
 | |
| def get_receptionist(state, ticket, new_ticket_data, handler):
 | |
|     visit = Visit.objects.filter(ticket=ticket).first()
 | |
|     if visit:
 | |
|         return [visit.receptionist.id]
 | |
| 
 | |
| 
 | |
| def visit_audit_end(ticket):
 | |
|     visit = Visit.objects.get(ticket=ticket)
 | |
|     # 更新企业访客人员库
 | |
|     for i in Vpeople.objects.filter(visit=visit):
 | |
|         visitor = i.visitor
 | |
|         # if visitor.id_number and visitor.photo:
 | |
|         ep = Employee.objects.get_queryset(all=True).filter(id_number=visitor.id_number).first()
 | |
|         ep2 = Employee.objects.get_queryset(all=True).filter(phone=visitor.phone).first()
 | |
|         if ep:
 | |
|             pass
 | |
|         elif ep2:
 | |
|             ep = ep2
 | |
|         else:
 | |
|             ep = Employee()
 | |
|         ep.id_number = visitor.id_number
 | |
|         ep.gender = get_info_from_id(visitor.id_number).get('gender', '男')
 | |
|         ep.name = visitor.name
 | |
|         ep.phone = visitor.phone
 | |
|         ep.photo = visitor.photo
 | |
|         eptype = 'visitor'
 | |
|         if visit.purpose == 50:
 | |
|             eptype = 'driver'
 | |
|         ep.type = eptype
 | |
|         ep.belong_dept = visit.receptionist.belong_dept if visit.receptionist else visit.belong_dept
 | |
|         ep.is_deleted = False
 | |
|         ep.save()
 | |
|         if ep.user:
 | |
|             user = ep.user
 | |
|             user.type = eptype
 | |
|             user.save()
 | |
|         visitor.employee = ep
 | |
|         visitor.visit = visit  # 更新当前所属访客项目
 | |
|         visitor.save()
 | |
|         # 同步至大华人员库并下发人脸
 | |
|         HrmService.sync_dahua_employee(ep, '', visit.visit_time, visit.leave_time)
 | |
|     visit.state = Visit.V_ENTER
 | |
|     visit.save()
 | |
|     # 发送通知?
 | |
|     phone = visit.create_by.phone if visit.create_by else None
 | |
|     if phone:
 | |
|         send_sms(phone=phone, template_code=1004, template_param={'name': '访客项目'})
 | |
| 
 | |
| 
 | |
| def visit_driver_end(ticket):
 | |
|     visit = Visit.objects.get(ticket=ticket)
 | |
|     # 更新企业司机人员库
 | |
|     for i in Vpeople.objects.filter(visit=visit):
 | |
|         visitor = i.visitor
 | |
|         # 尝试找到人员
 | |
|         ep = Employee.objects.get_queryset(all=True).filter(id_number=visitor.id_number).first()
 | |
|         ep2 = Employee.objects.get_queryset(all=True).filter(phone=visitor.phone).first()
 | |
|         if ep:
 | |
|             pass
 | |
|         elif ep2:
 | |
|             ep = ep2
 | |
|         else:
 | |
|             ep = Employee()
 | |
|         ep.id_number = visitor.id_number
 | |
|         ep.gender = get_info_from_id(visitor.id_number).get('gender', '男')
 | |
|         ep.name = visitor.name
 | |
|         ep.phone = visitor.phone
 | |
|         ep.photo = visitor.photo
 | |
|         ep.type = 'driver'
 | |
|         ep.belong_dept = visit.belong_dept
 | |
|         ep.save()
 | |
|         if ep.user:
 | |
|             user = ep.user
 | |
|             user.type = 'driver'
 | |
|             user.save()
 | |
|         visitor.employee = ep
 | |
|         visitor.visit = visit  # 更新当前所属访客项目
 | |
|         visitor.save()
 | |
|         # 同步至大华人员库并下发人脸
 | |
|         HrmService.sync_dahua_employee(ep, '', visit.visit_time, visit.leave_time)
 | |
|     visit.state = Visit.V_ENTER
 | |
|     visit.save()
 | |
|     # 发送通知?
 | |
|     phone = visit.create_by.phone if visit.create_by else None
 | |
|     if phone:
 | |
|         send_sms(phone=phone, template_code=1004, template_param={'name': '拉送货入厂'})
 |