From 543a46009013a52119e3cef67cb10ce4513b2b6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E5=89=8D=E6=98=8E?= <909355014@qq.com> Date: Thu, 1 Sep 2022 11:55:49 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BF=E5=AE=A2=E5=A2=9E=E5=8A=A0=E6=8B=89?= =?UTF-8?q?=E9=80=81=E8=B4=A7=E9=A1=B9=E7=9B=AE,=20=E4=BA=BA=E5=91=98?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E5=A2=9E=E5=8A=A0=E5=8F=B8=E6=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/hrm/models.py | 3 ++- apps/vm/models.py | 5 +++-- apps/vm/serializers.py | 1 + apps/vm/services.py | 25 +++++++++++++++++++++++++ apps/vm/views.py | 23 ++++++++++++++++++++--- 5 files changed, 51 insertions(+), 6 deletions(-) diff --git a/apps/hrm/models.py b/apps/hrm/models.py index 81ef63fb..bfe7b92a 100755 --- a/apps/hrm/models.py +++ b/apps/hrm/models.py @@ -17,7 +17,8 @@ class Employee(CommonBModel): PEOPLE_TYPE_CHOICES = ( ('employee', '内部员工'), ('remployee', '相关方人员'), - ('visitor', '访客') + ('visitor', '访客'), + ('driver', '司机') ) type = models.CharField('人员类型', default='employee', max_length=10, choices=PEOPLE_TYPE_CHOICES) user = models.OneToOneField(User, diff --git a/apps/vm/models.py b/apps/vm/models.py index 101f72bd..ff0d8d02 100644 --- a/apps/vm/models.py +++ b/apps/vm/models.py @@ -15,7 +15,8 @@ class Visit(CommonBModel): (10, '参观'), (20, '拜访'), (30, '面试'), - (40, '开会') + (40, '开会'), + (50, '拉送货') ) V_CREATE = 10 V_AUDIT = 20 @@ -44,7 +45,7 @@ class Visit(CommonBModel): visit_time = models.DateTimeField('来访时间') leave_time = models.DateTimeField('离开时间') count_people = models.PositiveSmallIntegerField('来访人数', null=True, blank=True) - receptionist = models.ForeignKey(User, verbose_name='接待人', on_delete=models.CASCADE) + receptionist = models.ForeignKey(User, verbose_name='接待人', on_delete=models.CASCADE, null=True, blank=True) visitors = models.ManyToManyField('vm.visitor', through='vm.vpeople', related_name='v_visitors') ticket = models.ForeignKey(Ticket, verbose_name='关联工单', on_delete=models.SET_NULL, null=True, blank=True) diff --git a/apps/vm/serializers.py b/apps/vm/serializers.py index 06071804..fe38a5bb 100644 --- a/apps/vm/serializers.py +++ b/apps/vm/serializers.py @@ -86,6 +86,7 @@ class VpeopleSerializer(CustomModelSerializer): class VisitorRegisterSerializer(serializers.Serializer): + type = serializers.CharField(label="人员类型") name = serializers.CharField(label="姓名") phone = serializers.CharField(label="手机号") code = serializers.CharField(label='手机号验证码') diff --git a/apps/vm/services.py b/apps/vm/services.py index 18023988..0ab905dc 100644 --- a/apps/vm/services.py +++ b/apps/vm/services.py @@ -64,3 +64,28 @@ def visit_audit_end(ticket): send_sms(phone=phone, template_code=1004, template_param={'name': '访客项目'}) except Exception: pass + + +def visit_driver_end(visit: Visit): + # 更新企业司机人员库 + 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() + 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() \ No newline at end of file diff --git a/apps/vm/views.py b/apps/vm/views.py index 3ebb21fc..7a1ec97f 100644 --- a/apps/vm/views.py +++ b/apps/vm/views.py @@ -14,6 +14,9 @@ from rest_framework.exceptions import ParseError from rest_framework.mixins import ListModelMixin, RetrieveModelMixin, CreateModelMixin, DestroyModelMixin from django.contrib.auth.hashers import make_password from django.db import transaction +from rest_framework.serializers import Serializer + +from apps.vm.services import visit_driver_end # Create your views here. @@ -52,6 +55,18 @@ class VisitViewSet(CustomModelViewSet): raise ParseError('项目非创建状态不可删除') return super().destroy(request, *args, **kwargs) + @action(methods=['post'], detail=True, permission_classes=[], + serializer_class=Serializer) + @transaction.atomic + def submit(self, request, *args, **kwargs): + """司机直接提交不走工单 + + 司机直接提交不走工单 + """ + obj = self.get_object() + visit_driver_end(obj) + return Response() + class VisitorViewSet(CustomModelViewSet): queryset = Visitor.objects.all() @@ -72,9 +87,9 @@ class VisitorViewSet(CustomModelViewSet): serializer_class=VisitorRegisterSerializer) @transaction.atomic def register(self, request, *args, **kwargs): - """访客账户注册 + """访客/司机账户注册 - 访客账户注册 + 访客/司机账户注册 """ serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) @@ -88,9 +103,11 @@ class VisitorViewSet(CustomModelViewSet): user = User.objects.filter(phone=phone).first() if user: raise ParseError('该手机号已注册,请直接登录') - # 访客账户创建 + # 访客/司机账户创建 user = User() user.type = 'visitor' + if vdata['type'] == 'driver': + user.type = 'driver' user.name = name user.username = 'V_' + ranstr(10) user.phone = phone