From a1c74a0fa643b392c4c4751827407ceafeed2f23 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 23 Oct 2023 09:02:37 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E5=A4=9A?= =?UTF-8?q?=E4=B8=AA=E5=8F=8B=E5=A5=BD=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/pm/models.py | 12 ++++++++++++ apps/pm/views.py | 34 ++++++++++++++-------------------- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/apps/pm/models.py b/apps/pm/models.py index 1b8785cf..d73b5f50 100644 --- a/apps/pm/models.py +++ b/apps/pm/models.py @@ -63,3 +63,15 @@ class Mtask(CommonADModel): end_date = models.DateField('计划完工日期') utask = models.ForeignKey( Utask, verbose_name='关联大任务', on_delete=models.CASCADE, null=True, blank=True, related_name='mtask_utask') + + @property + def related(self): + """ + 当天已下达的所有的兄弟小任务 + """ + if self.utask: + return Mtask.objects.filter( + utask=self.utask, mgroup__belong_dept=self.mgroup.belong_dept, start_date=self.start_date, end_date=self.start_date, state=self.MTASK_ASSGINED).order_by( + 'utask', 'mgroup__process__sort', 'create_time' + ) + return Mtask.objects.none() diff --git a/apps/pm/views.py b/apps/pm/views.py index 9659b2fc..f5bdc311 100644 --- a/apps/pm/views.py +++ b/apps/pm/views.py @@ -119,26 +119,23 @@ class MtaskViewSet(CustomModelViewSet): res_data.append(val) return Response(res_data) - # @action(methods=['post'], detail=False, perms_map={'post': 'mtask.schedue'}, serializer_class=SchedueSerializer) - # @transaction.atomic - # def schedue_from_orderitems(self, request, *args, **kwargs): - # """从多个订单明细自动排产 + @action(methods=['get'], detail=True, perms_map={'get': '*'}) + @transaction.atomic + def related(self, request, *args, **kwargs): + """获取已下达的所有的兄弟小任务 - # 从多个订单明细自动排产 - # """ - # sr = SchedueSerializer(data=request.data) - # sr.is_valid(raise_exception=True) - # vdata = sr.validated_data - # PmService.schedue_from_orderitems(request.user, - # request.data['orderitems'], vdata['start_date'], vdata.get('end_date', None)) - # return Response() + 获取已下达的所有的兄弟小任务 + """ + obj = self.get_object() + rdata = MtaskSerializer(instance=obj.related, many=True).data + return Response(rdata) def perform_destroy(self, instance): if instance.state != Mtask.MTASK_CREATED: raise ParseError('该任务非创建中不可删除') return super().perform_destroy(instance) - @action(methods=['post'], detail=True, perms_map={'post': 'mtask.submit'}, serializer_class=PkSerializer) + @action(methods=['post'], detail=False, perms_map={'post': 'mtask.submit'}, serializer_class=PkSerializer) @transaction.atomic def submit(self, request): """提交任务(根据任务ID) @@ -154,14 +151,11 @@ class MtaskViewSet(CustomModelViewSet): @action(methods=['post'], detail=True, perms_map={'post': 'mtask.submit'}, serializer_class=Serializer) @transaction.atomic def submit_related_same_day(self, request): - """提交同一天该部门下的所有兄弟小任务 + """提交同一天该部门下大任务的所有兄弟小任务 - 提交同一天的该部门下的所有兄弟小任务 + 提交同一天的该部门下大任务的所有兄弟小任务 """ mtask = self.get_object() - utask = mtask.utask - if utask: - mtasks = Mtask.objects.filter(utask=utask, belong_dept=mtask.belong_dept, - start_date=mtask.start_date, end_date=mtask.end_date, state=Mtask.MTASK_ASSGINED) - PmService.mtasks_submit(mtasks) + mtasks = mtask.related + PmService.mtasks_submit(mtasks) return Response() From 2725a97213259629acf2d17c435641567137e00c Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 23 Oct 2023 09:02:57 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20handle=5Fuser=E4=B9=9F=E4=BD=9C?= =?UTF-8?q?=E4=B8=BA=E7=BA=A6=E6=9D=9F=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wpm/serializers.py | 6 +++++- apps/wpm/views.py | 27 +++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index d03698e8..9dafd816 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -92,7 +92,10 @@ class MlogSerializer(CustomModelSerializer): mtask = validated_data['mtask'] batch = validated_data['batch'] handle_date = validated_data['handle_date'] - if Mlog.objects.filter(mtask=mtask, batch=batch, handle_date=handle_date).exists(): + handle_user = validated_data['handle_user'] + if not WMaterial.objects.filter(batch=batch).exists(): + raise ValidationError('批次号不存在') + if Mlog.objects.filter(mtask=mtask, batch=batch, handle_date=handle_date, handle_user=handle_user).exists(): raise ValidationError('存在相同的日志的记录') return super().create(validated_data) @@ -100,6 +103,7 @@ class MlogSerializer(CustomModelSerializer): validated_data.pop('mtask', None) validated_data.pop('batch', None) validated_data.pop('handle_date', None) + validated_data.pop('handle_user', None) return super().update(instance, validated_data) def validate(self, attrs): diff --git a/apps/wpm/views.py b/apps/wpm/views.py index 43767dd5..238a2334 100644 --- a/apps/wpm/views.py +++ b/apps/wpm/views.py @@ -113,3 +113,30 @@ class MlogViewSet(CustomModelViewSet): if instance.mtask.state == Mtask.MTASK_DONE: raise ParseError('任务已提交日志不可变动') return super().perform_destroy(instance) + + @action(methods=['post'], detail=False, perms_map={'post': '*'}, serializer_class=MtaskDaySerializer) + @transaction.atomic + def day(self, request): + """获取指定车间指定日期的第一道工序日志 + + 获取指定车间指定日期的第一道工序日志 + """ + sr = MtaskDaySerializer(data=request.data) + sr.is_valid(raise_exception=True) + vdata = sr.validated_data + mtasks = Mtask.objects.filter(mgroup__belong_dept__name=vdata['belong_dept_name'], start_date__lte=vdata['date'], end_date__gte=vdata['date']).order_by( + 'utask', 'mgroup__process__sort', 'create_time' + ) + data = MtaskSerializer(instance=mtasks, many=True).data + res_data = [] + len_data = len(data) + for ind, val in enumerate(data): + if val['utask'] is None: + res_data.append(val) + elif ind > 1: + before = data[ind-1] + if val['utask'] != before['utask']: + res_data.append(before) + elif ind == len_data - 1: + res_data.append(val) + return Response(res_data)