109 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Python
		
	
	
	
 | 
						|
from apps.hrm.models import Employee
 | 
						|
from apps.hrm.services import HrmService
 | 
						|
from apps.utils.sms import send_sms
 | 
						|
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.level == 10 and (not Vpeople.objects.filter(visit=visit).exists()):
 | 
						|
        raise ParseError('请至少选择一位访客')
 | 
						|
    visit.ticket = ticket
 | 
						|
    visit.state = Visit.V_AUDIT
 | 
						|
    visit.save()
 | 
						|
    ticket_data = ticket.ticket_data
 | 
						|
    ticket_data.update({
 | 
						|
        'purpose': visit.purpose,
 | 
						|
    })
 | 
						|
    ticket.ticket_data = ticket_data
 | 
						|
    ticket.belong_dept = visit.receptionist.belong_dept if visit.receptionist else None
 | 
						|
    ticket.create_by = visit.create_by
 | 
						|
    ticket.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:
 | 
						|
        if visitor.id_number:
 | 
						|
            ep = Employee.objects.get_queryset(all=True).filter(id_number=visitor.id_number).first()
 | 
						|
        elif visitor.phone:
 | 
						|
            ep = Employee.objects.get_queryset(all=True).filter(phone=visitor.phone).first()
 | 
						|
        else:
 | 
						|
            ep = Employee.objects.get_queryset(all=True).filter(name=visitor.name, id_number=None).first()
 | 
						|
        if ep:
 | 
						|
            pass
 | 
						|
        else:
 | 
						|
            ep = Employee()
 | 
						|
        ep.id_number = visitor.id_number
 | 
						|
        ep.name = visitor.name
 | 
						|
        ep.phone = visitor.phone
 | 
						|
        ep.photo = visitor.photo
 | 
						|
        ep.type = 'visitor'
 | 
						|
        ep.belong_dept = visit.receptionist.belong_dept if visit.receptionist else None
 | 
						|
        ep.is_deleted = False
 | 
						|
        ep.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.filter(id_number=visitor.id_number).first()
 | 
						|
        if ep:
 | 
						|
            pass
 | 
						|
        else:
 | 
						|
            ep = Employee()
 | 
						|
        ep.id_number = visitor.id_number
 | 
						|
        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': '拉送货入厂'})
 |