From b4a5bb23732f7c6dec659907a1a0810d6f59c52e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E5=89=8D=E6=98=8E?= <909355014@qq.com> Date: Mon, 11 Jul 2022 16:25:03 +0800 Subject: [PATCH] =?UTF-8?q?=E9=83=A8=E5=88=86=E4=BF=A1=E6=81=AF=E9=9D=9E?= =?UTF-8?q?=E5=BF=85=E5=A1=AB=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/am/views.py | 4 +-- apps/vm/migrations/0004_auto_20220711_1624.py | 28 +++++++++++++++++++ apps/vm/models.py | 6 ++-- apps/vm/serializers.py | 9 +++++- apps/wf/services.py | 4 +-- apps/wf/views.py | 2 ++ requirements.txt | 2 +- 7 files changed, 46 insertions(+), 9 deletions(-) create mode 100644 apps/vm/migrations/0004_auto_20220711_1624.py diff --git a/apps/am/views.py b/apps/am/views.py index c1bcf024..e0fe4837 100755 --- a/apps/am/views.py +++ b/apps/am/views.py @@ -31,12 +31,12 @@ class AreaViewSet(CustomModelViewSet): third_info = obj.third_info if 'xx_rail' in third_info: data['id'] = third_info['xx_rail']['id'] - _, res = xxClient.request(**xxapis['rail_update'], json=data) + _, res = xxClient.request(**xxapis['rail_update'], json={'rail': data}) third_info['xx_rail']['detail'] = data obj.third_info = third_info obj.save() else: - _, res = xxClient.request(**xxapis['rail_create'], json=data) + _, res = xxClient.request(**xxapis['rail_create'], json={'rail': data}) rail_info = {'id': res, 'detail': data} third_info['xx_rail'] = rail_info obj.third_info = third_info diff --git a/apps/vm/migrations/0004_auto_20220711_1624.py b/apps/vm/migrations/0004_auto_20220711_1624.py new file mode 100644 index 00000000..26f1863c --- /dev/null +++ b/apps/vm/migrations/0004_auto_20220711_1624.py @@ -0,0 +1,28 @@ +# Generated by Django 3.2.12 on 2022-07-11 08:24 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('vm', '0003_visit_ticket'), + ] + + operations = [ + migrations.AlterField( + model_name='visitor', + name='id_number', + field=models.CharField(blank=True, max_length=100, null=True, verbose_name='身份证号'), + ), + migrations.AlterField( + model_name='visitor', + name='phone', + field=models.CharField(blank=True, max_length=11, null=True, verbose_name='手机号'), + ), + migrations.AlterField( + model_name='visitor', + name='photo', + field=models.CharField(blank=True, max_length=1000, null=True, verbose_name='证件照'), + ), + ] diff --git a/apps/vm/models.py b/apps/vm/models.py index 7c100313..550539a3 100644 --- a/apps/vm/models.py +++ b/apps/vm/models.py @@ -54,9 +54,9 @@ class Visitor(CommonAModel): """ employee = models.ForeignKey(Employee, verbose_name='成员信息', on_delete=models.CASCADE, null=True, blank=True) name = models.CharField('姓名', max_length=20) - phone = models.CharField('手机号', max_length=11) - photo = models.CharField('证件照', max_length=1000) - id_number = models.CharField('身份证号', max_length=100) + phone = models.CharField('手机号', max_length=11, null=True, blank=True) + photo = models.CharField('证件照', max_length=1000, null=True, blank=True) + id_number = models.CharField('身份证号', max_length=100, null=True, blank=True) visit = models.ForeignKey(Visit, verbose_name='最近所属访问项目', on_delete=models.CASCADE, null=True, blank=True) diff --git a/apps/vm/serializers.py b/apps/vm/serializers.py index 07c22e19..8ba7f31b 100644 --- a/apps/vm/serializers.py +++ b/apps/vm/serializers.py @@ -35,7 +35,8 @@ class VisitorCreateSerializer(CustomModelSerializer): def create(self, validated_data): with transaction.atomic(): # 校验上传的证件照 - dhClient.request(**dhapis['person_img_upload'], file_path_rela=validated_data['photo']) + if validated_data['photo']: + dhClient.request(**dhapis['person_img_upload'], file_path_rela=validated_data['photo']) return super().create(validated_data) @@ -53,6 +54,12 @@ class VpeopleCreateSerializer(CustomModelSerializer): def create(self, validated_data): if validated_data['visit'].state != Visit.V_CREATE: raise ParseError('项目非创建状态不可新增成员') + if validated_data['visit'].level == 10: + visitor = validated_data['visitor'] + if visitor.id_number and visitor.photo: + pass + else: + raise ParseError('访客信息不全,请完善后再试') ins = super().create(validated_data) if ins.is_main: Vpeople.objects.filter(visit=validated_data['visit']).exclude(id=ins.id).update(is_main=False) diff --git a/apps/wf/services.py b/apps/wf/services.py index 5baa5770..68c891ac 100755 --- a/apps/wf/services.py +++ b/apps/wf/services.py @@ -338,7 +338,7 @@ class WfService(object): ticket.act_state = Ticket.TICKET_ACT_STATE_BACK # 只更新必填和可选的字段 - if not created: + if not created and transition.field_require_check: for key, value in source_state.state_fields.items(): if value in (State.STATE_FIELD_REQUIRED, State.STATE_FIELD_OPTIONAL): if key in new_ticket_data: @@ -387,7 +387,7 @@ class WfService(object): f = getattr(m, func) f(ticket=ticket) # 同步执行 else: - # wf默认发送通知 + # wf默认只发送通知 last_log = TicketFlow.objects.filter(ticket=ticket).order_by('-create_time').first() if (last_log.state != state or last_log.intervene_type == Transition.TRANSITION_INTERVENE_TYPE_DELIVER or diff --git a/apps/wf/views.py b/apps/wf/views.py index e49488d1..b56ad88b 100755 --- a/apps/wf/views.py +++ b/apps/wf/views.py @@ -181,6 +181,8 @@ class TicketViewSet(CreateUpdateCustomMixin, CreateModelMixin, ListModelMixin, R save_ticket_data[key] = ticket_data[key] elif int(value) == State.STATE_FIELD_OPTIONAL: save_ticket_data[key] = ticket_data[key] + else: + save_ticket_data = ticket_data with transaction.atomic(): ticket = serializer.save(state=start_state, create_by=request.user, diff --git a/requirements.txt b/requirements.txt index 646194b3..bacd41ad 100755 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ celery==5.2.3 Django==3.2.12 django-celery-beat==2.2.1 -django-celery-results==2.3.1 +django-celery-results==2.4.0 django-cors-headers==3.11.0 django-filter==21.1 djangorestframework==3.13.1