相关方 访客绑卡接口优化

This commit is contained in:
曹前明 2022-09-01 15:46:13 +08:00
parent 543a460090
commit 3fb7abca32
8 changed files with 83 additions and 5 deletions

View File

@ -0,0 +1,18 @@
# Generated by Django 3.2.12 on 2022-09-01 07:17
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('hrm', '0002_initial'),
]
operations = [
migrations.AlterField(
model_name='employee',
name='type',
field=models.CharField(choices=[('employee', '内部员工'), ('remployee', '相关方人员'), ('visitor', '访客'), ('driver', '司机')], default='employee', max_length=10, verbose_name='人员类型'),
),
]

View File

@ -1,5 +1,4 @@
from datetime import datetime, timedelta
from apps.hrm.errors import PHONE_F_WRONG
from rest_framework.serializers import ModelSerializer
from rest_framework import serializers
from apps.hrm.services import HrmService
@ -61,10 +60,10 @@ class EmployeeCreateUpdateSerializer(CustomModelSerializer):
old_photo = instance.photo
old_job_state = instance.job_state
instance = super().update(instance, validated_data)
if instance.type == 'remployee':
if instance.type == 'remployee': # 如果是相关方
from apps.rpm.services import sync_to_rep
sync_to_rep(instance)
elif instance.type == 'visitor':
elif instance.type in ['visitor', 'driver']: # 如果是访客或司机
from apps.vm.services import sync_to_visitor
sync_to_visitor(instance)
if instance.job_state == 20 and instance.user: # 如果离职了关闭账户

View File

@ -261,6 +261,7 @@ class RpjcertificateSerializer(CustomModelSerializer):
class RpjmemberSerializer(CustomModelSerializer):
remployee_ = RemployeeSerializer(source='remployee', read_only=True)
rcertificates_ = serializers.SerializerMethodField()
blt_ = serializers.SerializerMethodField()
class Meta:
model = Rpjmember
@ -270,6 +271,12 @@ class RpjmemberSerializer(CustomModelSerializer):
cs = Rpjcertificate.objects.filter(rpj_member=obj)
return RpjcertificateSerializer(instance=cs, many=True).data
def get_blt_(self, obj):
from apps.third.serializers import TDeviceSimpleSerializer
ep = obj.employee
if ep and hasattr(ep, 'tdevice'):
return TDeviceSimpleSerializer(instance=ep.tdevice).data
class RpjfileSerializer(CustomModelSerializer):
file_cate_ = DictSimpleSerializer(source='file_cate', read_only=True)

View File

@ -0,0 +1,20 @@
# Generated by Django 3.2.12 on 2022-09-01 07:17
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('hrm', '0003_alter_employee_type'),
('third', '0002_alter_tdevice_areas'),
]
operations = [
migrations.AlterField(
model_name='tdevice',
name='employee',
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='ep_tdevice', to='hrm.employee', verbose_name='当前绑定人员'),
),
]

View File

@ -41,7 +41,7 @@ class TDevice(BaseModel):
related_name='tareas', blank=True)
obj_cate = models.CharField('绑定对象', max_length=20, help_text='people/...', null=True, blank=True)
employee = models.OneToOneField(Employee, verbose_name='当前绑定人员', on_delete=models.SET_NULL,
null=True, blank=True)
null=True, blank=True, related_name='ep_tdevice')
is_clock = models.BooleanField('是否打卡设备', default=False)
access_list = models.JSONField('自动下发人员类型', default=list,
null=False, blank=True, help_text='employee/remployee/visitor')

View File

@ -0,0 +1,26 @@
# Generated by Django 3.2.12 on 2022-09-01 07:17
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('vm', '0002_alter_visit_state'),
]
operations = [
migrations.AlterField(
model_name='visit',
name='purpose',
field=models.PositiveSmallIntegerField(choices=[(10, '参观'), (20, '拜访'), (30, '面试'), (40, '开会'), (50, '拉送货')], verbose_name='来访事由'),
),
migrations.AlterField(
model_name='visit',
name='receptionist',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='接待人'),
),
]

View File

@ -1,4 +1,5 @@
from apps.hrm.serializers import EmployeeSimpleSerializer
from apps.utils.fields import MyFilePathField
from apps.utils.serializers import CustomModelSerializer
from apps.utils.tools import check_phone_e
@ -45,11 +46,18 @@ class VisitorCreateSerializer(CustomModelSerializer):
class VisitorSerializer(CustomModelSerializer):
photo_f = MyFilePathField(source='photo', read_only=True)
blt_ = serializers.SerializerMethodField()
class Meta:
model = Visitor
fields = '__all__'
def get_blt_(self, obj):
from apps.third.serializers import TDeviceSimpleSerializer
ep = obj.employee
if ep and hasattr(ep, 'tdevice'):
return TDeviceSimpleSerializer(instance=ep.tdevice).data
class VpeopleCreateSerializer(CustomModelSerializer):
class Meta:

View File

@ -88,4 +88,4 @@ def visit_driver_end(visit: Visit):
# 同步至大华人员库并下发人脸
HrmService.sync_dahua_employee(ep, '', visit.visit_time, visit.leave_time)
visit.state = Visit.V_ENTER
visit.save()
visit.save()