From 321be5032308a476a762bfdefb291660f87c15f4 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Tue, 30 Jul 2024 17:05:55 +0800 Subject: [PATCH 1/7] =?UTF-8?q?feat:=20MaterialBatchSerializer=20=E6=94=B9?= =?UTF-8?q?=E5=8F=98material=5Fname?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/inm/serializers.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/inm/serializers.py b/apps/inm/serializers.py index 31850e11..1984cc16 100644 --- a/apps/inm/serializers.py +++ b/apps/inm/serializers.py @@ -30,8 +30,8 @@ class MaterialBatchAListSerializer(CustomModelSerializer): class MaterialBatchSerializer(CustomModelSerializer): warehouse_name = serializers.CharField( source='warehouse.name', read_only=True) - material_name = serializers.CharField( - source='material.name', read_only=True) + material_name = serializers.StringRelatedField( + source='material', read_only=True) material_ = MaterialSerializer(source='material', read_only=True) class Meta: From fa56d61ffc3c640d3c87fbde57a3edf827b29114 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 2 Aug 2024 16:39:07 +0800 Subject: [PATCH 2/7] =?UTF-8?q?feat:=20=E4=BF=AE=E6=94=B9nowx=E4=BD=BF?= =?UTF-8?q?=E7=94=A8aware?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/enm/tasks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/enm/tasks.py b/apps/enm/tasks.py index 9f9211c0..18bd4eb1 100644 --- a/apps/enm/tasks.py +++ b/apps/enm/tasks.py @@ -255,7 +255,7 @@ def cal_mpointstats(is_now=1, year=None, month=None, day=None, hour=None, m_code # 先调整一下班时间,以防计算错误 # 为了保持一致使用统计的时间点 - nowx = datetime.now() + nowx = timezone.now() get_total_sec_now(now=nowx) # 再处理total_sec cal_exp_duration_sec(now=nowx) # 先处理shut_sec From c58e34a7fd734e03e90a638c27ec1ad23bff0e25 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 2 Aug 2024 21:00:13 +0800 Subject: [PATCH 3/7] =?UTF-8?q?feat:=20route=E6=B7=BB=E5=8A=A0filter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/mtm/filters.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/mtm/filters.py b/apps/mtm/filters.py index 1fbb636e..c36c4568 100644 --- a/apps/mtm/filters.py +++ b/apps/mtm/filters.py @@ -51,7 +51,7 @@ class RouteFilter(filters.FilterSet): "material_out": ["exact", "in"], "process": ["exact", "in"], "is_autotask": ["exact"], - "routepack": ["exact"], + "routepack": ["exact", "isnull"], "routepack__state": ["exact"], "mgroup": ["exact", "in", "isnull"], "mgroup__name": ["exact", "contains"], From 1003e0aea74a7874e37ee415fea648038c8b96d3 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 2 Aug 2024 21:00:13 +0800 Subject: [PATCH 4/7] =?UTF-8?q?feat:=20route=E6=B7=BB=E5=8A=A0filter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/mtm/filters.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/mtm/filters.py b/apps/mtm/filters.py index 1ba30f9f..c36c4568 100644 --- a/apps/mtm/filters.py +++ b/apps/mtm/filters.py @@ -51,6 +51,8 @@ class RouteFilter(filters.FilterSet): "material_out": ["exact", "in"], "process": ["exact", "in"], "is_autotask": ["exact"], + "routepack": ["exact", "isnull"], + "routepack__state": ["exact"], "mgroup": ["exact", "in", "isnull"], "mgroup__name": ["exact", "contains"], "mgroup__belong_dept": ["exact"], From fe97d36f54503f4be78a97adc4bb2a53ab812cd7 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Sun, 4 Aug 2024 18:50:42 +0800 Subject: [PATCH 5/7] =?UTF-8?q?feat:=20opl=E6=B7=BB=E5=8A=A0=E5=AD=97?= =?UTF-8?q?=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../opm/migrations/0014_auto_20240804_1846.py | 24 +++++++++++++++++++ apps/opm/models.py | 4 ++++ apps/opm/services.py | 11 ++++++++- 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 apps/opm/migrations/0014_auto_20240804_1846.py diff --git a/apps/opm/migrations/0014_auto_20240804_1846.py b/apps/opm/migrations/0014_auto_20240804_1846.py new file mode 100644 index 00000000..4e7847da --- /dev/null +++ b/apps/opm/migrations/0014_auto_20240804_1846.py @@ -0,0 +1,24 @@ +# Generated by Django 3.2.12 on 2024-08-04 10:46 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('system', '0005_alter_permission_type'), + ('opm', '0013_auto_20230605_1429'), + ] + + operations = [ + migrations.AddField( + model_name='opl', + name='audit_imgs', + field=models.ManyToManyField(blank=True, related_name='opl_audit_imgs', to='system.File', verbose_name='作业审批照片'), + ), + migrations.AddField( + model_name='opl', + name='work_imgs', + field=models.ManyToManyField(blank=True, related_name='opl_work_imgs', to='system.File', verbose_name='作业工作照片'), + ), + ] diff --git a/apps/opm/models.py b/apps/opm/models.py index ef85bf2e..c5fac745 100644 --- a/apps/opm/models.py +++ b/apps/opm/models.py @@ -105,6 +105,10 @@ class Opl(CommonBDModel): workers = models.ManyToManyField('system.user', verbose_name='作业人员', through='opm.oplworker') create_imgs = models.ManyToManyField('system.file', verbose_name='作业审批照片', related_name='opl_create_imgs', blank=True) + audit_imgs = models.ManyToManyField('system.file', verbose_name='作业审批照片', + related_name='opl_audit_imgs', blank=True) + work_imgs = models.ManyToManyField('system.file', verbose_name='作业工作照片', + related_name='opl_work_imgs', blank=True) close_imgs = models.ManyToManyField('system.file', verbose_name='作业关闭照片', related_name='opl_close_imgs', blank=True) close_note = models.PositiveSmallIntegerField('作业关闭情况', diff --git a/apps/opm/services.py b/apps/opm/services.py index a74e49df..c22df23f 100644 --- a/apps/opm/services.py +++ b/apps/opm/services.py @@ -179,4 +179,13 @@ def opl_monitor(opl: Opl, tv: str): for i in vchannels: Thread(target=snap_and_analyse, args=(i, algo_codes, opl), daemon=True).start() time.sleep(10) - cache.delete(tkey) \ No newline at end of file + cache.delete(tkey) + +def check_opl_audit_imgs(ticket: Ticket, transition: Transition, new_ticket_data: dict): + audit_imgs = new_ticket_data.get('audit_imgs', []) + if audit_imgs: + opl = Opl.objects.get(ticket=ticket) + opl.audit_imgs = audit_imgs + opl.save() + else: + raise Exception('需提交审核照片') \ No newline at end of file From 6931c49b3b6d6dad8bec7eddedc348b1688af3a6 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Sun, 4 Aug 2024 20:28:18 +0800 Subject: [PATCH 6/7] =?UTF-8?q?feat:=20oplserializer=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/opm/serializers.py | 2 ++ apps/opm/views.py | 1 + 2 files changed, 3 insertions(+) diff --git a/apps/opm/serializers.py b/apps/opm/serializers.py index 54cb60bd..ab3f27c8 100644 --- a/apps/opm/serializers.py +++ b/apps/opm/serializers.py @@ -252,6 +252,8 @@ class OplDetailSerializer(CustomModelSerializer): measures_checked_ = serializers.SerializerMethodField() close_dos_ = serializers.SerializerMethodField() create_imgs_ = FileSerializer(source='create_imgs', many=True) + audit_imgs_ = FileSerializer(source='audit_imgs', many=True) + work_imgs_ = FileSerializer(source='work_imgs', many=True) close_imgs_ = FileSerializer(source='close_imgs', many=True) mtask_uid = serializers.SerializerMethodField() diff --git a/apps/opm/views.py b/apps/opm/views.py index 9c91ff3c..71549e13 100644 --- a/apps/opm/views.py +++ b/apps/opm/views.py @@ -82,6 +82,7 @@ class OplViewSet(CustomModelViewSet): serializer_class = OplListSerializer retrieve_serializer_class = OplDetailSerializer select_related_fields = ['cate', 'operation', 'dept_do', 'charger', 'monitor', 'ticket'] + prefetch_related_fields = ['close_imgs', 'audit_imgs', 'work_imgs', 'create_imgs'] filterset_fields = ['operation', 'cate'] @transaction.atomic From 42c1386efde916b51e9289523a0984da09ba812a Mon Sep 17 00:00:00 2001 From: caoqianming Date: Tue, 6 Aug 2024 08:29:21 +0800 Subject: [PATCH 7/7] =?UTF-8?q?feat:=20sflogexp=E5=A2=9E=E5=8A=A0=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wpm/serializers.py | 1 + apps/wpm/views.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index ad68cd6b..71ae1f60 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -160,6 +160,7 @@ class SflogExpSerializer(CustomModelSerializer): # happen_time = serializers.DateTimeField(required=True, label='发生时间') # cate = serializers.CharField(required=True, label='原因类别') sflog_ = SfLogSerializer(source='sflog', read_only=True) + stlog_ = StLogSerializer(source='stlog', read_only=True) class Meta: model = SfLogExp diff --git a/apps/wpm/views.py b/apps/wpm/views.py index 4efcaf80..f3827da4 100644 --- a/apps/wpm/views.py +++ b/apps/wpm/views.py @@ -99,7 +99,7 @@ class SfLogExpViewSet(ListModelMixin, UpdateModelMixin, CustomGenericViewSet): perms_map = {'get': '*', 'put': 'sflogexp.update'} queryset = SfLogExp.objects.all() serializer_class = SflogExpSerializer - select_related_fields = ['sflog', 'sflog__mgroup', 'stlog', 'sflog__team', 'sflog__shift', 'sflog__leader'] + select_related_fields = ['sflog', 'sflog__mgroup', 'stlog', 'sflog__team', 'sflog__shift', 'sflog__leader', 'stlog'] filterset_fields = ['sflog', 'stlog']