From 3ccf7a87b07600e74ef7e3ca1dfaed57d6a72620 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Tue, 11 Nov 2025 08:19:20 +0800 Subject: [PATCH 1/6] =?UTF-8?q?feat:=20base=20=E5=88=9B=E5=BB=BA=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=97=B6=E6=A3=80=E9=AA=8C=E4=B8=8D=E5=8C=85=E5=90=AB?= =?UTF-8?q?id2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/utils/mixins.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/utils/mixins.py b/apps/utils/mixins.py index ac80731d..c3df566c 100755 --- a/apps/utils/mixins.py +++ b/apps/utils/mixins.py @@ -94,10 +94,10 @@ class BulkCreateModelMixin(CreateModelMixin): for item in rdata: if "id" in item and item["id"]: raise ParseError('创建数据中不能包含id字段') + many = True else: if "id" in rdata and rdata["id"]: raise ParseError('创建数据中不能包含id字段') - many = True sr = self.get_serializer(data=rdata, many=many) sr.is_valid(raise_exception=True) self.perform_create(sr) From acf09d005653e776c49828cc0e8720e62ae57137 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Tue, 11 Nov 2025 09:35:43 +0800 Subject: [PATCH 2/6] =?UTF-8?q?feat:=20=E6=94=B9=E7=89=88=E4=BA=A4?= =?UTF-8?q?=E6=8E=A5=E5=BF=85=E9=A1=BB=E4=B8=BA=E5=90=88=E6=89=B9=E6=93=8D?= =?UTF-8?q?=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wpm/serializers.py | 5 +++-- apps/wpm/services.py | 2 -- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index 8143d366..107d0909 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -1189,14 +1189,15 @@ class HandoverSerializer(CustomModelSerializer): def validate(self, attrs): if "mtype" not in attrs: attrs['mtype'] = Handover.H_NORMAL - mtype = attrs["mtype"] if 'type' not in attrs: attrs['type'] = Handover.H_NORMAL + if attrs["type"] == Handover.H_CHANGE: + attrs["mtype"] = Handover.H_MERGE if "material_changed" not in attrs: raise ParseError("必须指定改版后的物料") - if mtype == Handover.H_MERGE: + if attrs["mtype"] == Handover.H_MERGE: new_state = None new_wm:WMaterial = attrs.get("new_wm", None) if new_wm: diff --git a/apps/wpm/services.py b/apps/wpm/services.py index f6d1a27c..7bb9a5d5 100644 --- a/apps/wpm/services.py +++ b/apps/wpm/services.py @@ -720,8 +720,6 @@ def handover_submit(handover:Handover, user: User, now: Union[datetime.datetime, recive_mgroup = handover.recive_mgroup recive_dept = handover.recive_dept - if handover.type == Handover.H_CHANGE: - handover.mtype = Handover.H_MERGE new_batch = handover.new_batch if new_batch and mtype != Handover.H_MERGE: raise ParseError("只有合并时才能提供新批次号") From aa62b04fcf1e0668b90530aaeb8eacd1f9deaf54 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Tue, 11 Nov 2025 10:00:03 +0800 Subject: [PATCH 3/6] =?UTF-8?q?feat:=20=E4=BA=A4=E6=8E=A5=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E8=BF=94=E5=9B=9Ematerial=5Fchanged=5Ffname?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/mtm/models.py | 4 ++++ apps/wpm/serializers.py | 6 ++++-- apps/wpm/views.py | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/apps/mtm/models.py b/apps/mtm/models.py index d68d90e0..c81b87ed 100644 --- a/apps/mtm/models.py +++ b/apps/mtm/models.py @@ -119,6 +119,10 @@ class Material(CommonAModel): def __str__(self): return f'{self.name}|{self.specification if self.specification else ""}|{self.model if self.model else ""}|{self.process.name if self.process else ""}' + @property + def fname(self): + return f'{self.name}|{self.specification if self.specification else ""}|{self.model if self.model else ""}|{self.process.name if self.process else ""}' + class Shift(CommonBModel): """TN:班次 diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index 107d0909..4e2dd35e 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -1182,6 +1182,7 @@ class HandoverSerializer(CustomModelSerializer): material_ = MaterialSimpleSerializer(source='material', read_only=True) material_name = serializers.StringRelatedField( source='material', read_only=True) + material_changed_fname = serializers.CharField(source='material_changed.fname', read_only=True) wm_notok_sign = serializers.CharField(source='wm.notok_sign', read_only=True) handoverb = HandoverbSerializer(many=True, required=False) ticket_ = TicketSimpleSerializer(source='ticket', read_only=True) @@ -1196,8 +1197,9 @@ class HandoverSerializer(CustomModelSerializer): attrs["mtype"] = Handover.H_MERGE if "material_changed" not in attrs: raise ParseError("必须指定改版后的物料") - - if attrs["mtype"] == Handover.H_MERGE: + + mtype = attrs["mtype"] + if mtype == Handover.H_MERGE: new_state = None new_wm:WMaterial = attrs.get("new_wm", None) if new_wm: diff --git a/apps/wpm/views.py b/apps/wpm/views.py index fe600205..91222c14 100644 --- a/apps/wpm/views.py +++ b/apps/wpm/views.py @@ -524,7 +524,7 @@ class HandoverViewSet(CustomModelViewSet): queryset = Handover.objects.all() list_serializer_class = HandoverListSerializer serializer_class = HandoverSerializer - select_related_fields = ["send_user", "send_mgroup", "send_dept", "recive_user", "recive_mgroup", "recive_dept", "wm"] + select_related_fields = ["send_user", "send_mgroup", "send_dept", "recive_user", "recive_mgroup", "recive_dept", "wm", "material_changed"] filterset_class = HandoverFilter search_fields = ["id", "material__name", "material__number", "material__specification", "batch", "material__model", "b_handover__batch", "new_batch", "wm__batch"] prefetch_related_fields = [Prefetch("b_handover", queryset=Handoverb.objects.select_related("wm__defect"))] From 55292558d1992ddf0811e4d7470edf192dd0d584 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Tue, 11 Nov 2025 10:52:54 +0800 Subject: [PATCH 4/6] =?UTF-8?q?feat:=20handover=E6=B7=BB=E5=8A=A0selectfie?= =?UTF-8?q?ld?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wpm/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/wpm/views.py b/apps/wpm/views.py index 91222c14..d6c0ca6a 100644 --- a/apps/wpm/views.py +++ b/apps/wpm/views.py @@ -524,7 +524,7 @@ class HandoverViewSet(CustomModelViewSet): queryset = Handover.objects.all() list_serializer_class = HandoverListSerializer serializer_class = HandoverSerializer - select_related_fields = ["send_user", "send_mgroup", "send_dept", "recive_user", "recive_mgroup", "recive_dept", "wm", "material_changed"] + select_related_fields = ["send_user", "send_mgroup", "send_dept", "recive_user", "recive_mgroup", "recive_dept", "wm", "material_changed", "material"] filterset_class = HandoverFilter search_fields = ["id", "material__name", "material__number", "material__specification", "batch", "material__model", "b_handover__batch", "new_batch", "wm__batch"] prefetch_related_fields = [Prefetch("b_handover", queryset=Handoverb.objects.select_related("wm__defect"))] From 2300d5bfad35e2daede00e4761fa14ba3f048bf3 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Tue, 11 Nov 2025 10:53:49 +0800 Subject: [PATCH 5/6] =?UTF-8?q?feat:=20DatasetRecord=E6=B7=BB=E5=8A=A0filt?= =?UTF-8?q?er?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/bi/views.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/bi/views.py b/apps/bi/views.py index 87e88192..6912ae74 100644 --- a/apps/bi/views.py +++ b/apps/bi/views.py @@ -146,7 +146,9 @@ class DatasetRecordViewSet(ListModelMixin, CustomGenericViewSet): queryset = DatasetRecord.objects.all() serializer_class = DatasetRecordSerializer filterset_fields = { - "timex": ["year", "month", "day"] + "timex": ["year", "month", "day"], + "dataset": ["exact"], + "dataset__code": ["exact"] } From 5109d6aa222313bfb16dfbc9537cf4420b0fe240 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Tue, 11 Nov 2025 15:42:59 +0800 Subject: [PATCH 6/6] =?UTF-8?q?feat:=20base=20handle=5Fticket=20=E5=AE=8C?= =?UTF-8?q?=E5=96=84transition=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wf/services.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/wf/services.py b/apps/wf/services.py index cddccfd4..3b6dcad3 100755 --- a/apps/wf/services.py +++ b/apps/wf/services.py @@ -304,7 +304,7 @@ class WfService(object): if ticket is None: # 创建工单逻辑 if transition: - if transition.workflow.id != workflow.id: + if workflow and transition.workflow.id != workflow.id: raise ParseError("当前流转不属于该工作流") workflow = transition.workflow