From 32c1488d5f52d29439b1b628a709573a5993c857 Mon Sep 17 00:00:00 2001 From: nebula_chen Date: Fri, 3 Apr 2026 17:32:29 +0800 Subject: [PATCH] =?UTF-8?q?feat(pisadmin)=EF=BC=9A=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E6=9D=82=E9=87=87=E6=9D=90=E6=96=99/=E5=8A=A0=E5=B7=A5?= =?UTF-8?q?=E5=88=B6=E7=A8=8B=E6=9C=80=E4=BD=8E=E4=BF=A1=E6=81=AF=E8=A1=A8?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E5=AE=9A=E4=B9=89=E5=8F=8A=E5=BA=8F=E5=88=97?= =?UTF-8?q?=E5=8C=96=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apps/pisadmin/miscprocurement/models.py | 54 +++++++++++++++++ .../pisadmin/miscprocurement/serializers.py | 34 +++++++++++ .../apps/pisadmin/miscprocurement/views.py | 59 ++++++++++++++++++- 3 files changed, 146 insertions(+), 1 deletion(-) diff --git a/backend/apps/pisadmin/miscprocurement/models.py b/backend/apps/pisadmin/miscprocurement/models.py index 8fd763c..9f90360 100644 --- a/backend/apps/pisadmin/miscprocurement/models.py +++ b/backend/apps/pisadmin/miscprocurement/models.py @@ -923,3 +923,57 @@ class RFQOperationLogs(CoreModel): def __str__(self) -> str: return f"{self.inquiry_no}-{self.quotation_no}" + + +class MiscProcMaterialMinPrices(CoreModel): + """杂采材料制程最低价信息表(""" + + ITEM_NUM_CHOICES = ( + ("1", "重量"), + ("2", "单价"), + ) + + part_id = models.CharField(max_length=50, db_column="partid", verbose_name="采购价料号") + material_spec = models.CharField(max_length=20, db_column="material_spec", verbose_name="材料规格") + currency_code = models.CharField(max_length=50, db_column="currency_code", verbose_name="货币代码") + item_num = models.CharField(max_length=20, db_column="item_num", verbose_name="项次名") + lowest_value = models.CharField(max_length=20, db_column="lowest_value", verbose_name="最低值") + source_number = models.CharField(max_length=50, db_column="source_number", verbose_name="报价来源单号") + quotation_time = models.DateTimeField(db_column="quotation_time", verbose_name="报价时间") + + class Meta: + db_table = table_prefix + "misc_proc_material_min_prices" + verbose_name = "杂采材料制程最低价信息表" + verbose_name_plural = verbose_name + ordering = ("-create_datetime", "id") + indexes = [ + models.Index(fields=["part_id", "material_spec", "currency_code", "item_num"]), + ] + + def __str__(self) -> str: + return f"{self.part_id}-{self.material_spec}-{self.currency_code}-{self.item_num}" + + +class MiscProcProcessingMinPrices(CoreModel): + """杂采加工费用最低价信息表 + + 按采购件料号、货币代码存储各报价单加工费合计的最低值。 + """ + + part_id = models.CharField(max_length=50, db_column="partid", verbose_name="采购件料号") + currency_code = models.CharField(max_length=50, db_column="currencycode", verbose_name="货币代码") + lowest_value = models.CharField(max_length=20, db_column="lowest_vaule", verbose_name="加工费用最低价") + source_number = models.CharField(max_length=50, null=True, blank=True, db_column="sourcenumber", verbose_name="报价来源单号") + quotation_time = models.DateTimeField(null=True, blank=True, db_column="quotationtime", verbose_name="报价时间") + + class Meta: + db_table = table_prefix + "misc_proc_processing_min_prices" + verbose_name = "杂采加工费用最低价信息表" + verbose_name_plural = verbose_name + ordering = ("-create_datetime", "id") + indexes = [ + models.Index(fields=["part_id", "currency_code"]), + ] + + def __str__(self) -> str: + return f"{self.part_id}-{self.currency_code}-{self.lowest_value}" \ No newline at end of file diff --git a/backend/apps/pisadmin/miscprocurement/serializers.py b/backend/apps/pisadmin/miscprocurement/serializers.py index 3cd62af..b055f1a 100644 --- a/backend/apps/pisadmin/miscprocurement/serializers.py +++ b/backend/apps/pisadmin/miscprocurement/serializers.py @@ -23,6 +23,8 @@ from .models import ( InquiryRfqItem, CostEstimateTemplateHead, CostEstimateTemplateBody, + MiscProcMaterialMinPrices, + MiscProcProcessingMinPrices, ) from apps.pisadmin.basicinfo.models import Company from apps.pisadmin.basicinfo.models import Unit @@ -1600,3 +1602,35 @@ class InquirySerializer(CustomModelSerializer): self._upsert_rfq_items(inquiry, rfq_items) return inquiry + + +class MiscProcMaterialMinPricesSerializer(CustomModelSerializer): + """杂采材料制程最低价信息表序列化器""" + + class Meta: + model = MiscProcMaterialMinPrices + fields = "__all__" + read_only_fields = [ + "id", + "create_datetime", + "update_datetime", + "creator", + "modifier", + "dept_belong_id", + ] + + +class MiscProcProcessingMinPricesSerializer(CustomModelSerializer): + """杂采加工费用最低价信息表序列化器""" + + class Meta: + model = MiscProcProcessingMinPrices + fields = "__all__" + read_only_fields = [ + "id", + "create_datetime", + "update_datetime", + "creator", + "modifier", + "dept_belong_id", + ] diff --git a/backend/apps/pisadmin/miscprocurement/views.py b/backend/apps/pisadmin/miscprocurement/views.py index 5ff8af7..8576234 100644 --- a/backend/apps/pisadmin/miscprocurement/views.py +++ b/backend/apps/pisadmin/miscprocurement/views.py @@ -114,6 +114,8 @@ from .models import ( InquiryRfqItem, CostEstimateTemplateHead, CostEstimateTemplateBody, + MiscProcMaterialMinPrices, + MiscProcProcessingMinPrices, ) from .serializers import ( MiscMaterialSerializer, @@ -138,6 +140,8 @@ from .serializers import ( CostEstimateTemplateHeadSerializer, CostEstimateTemplateNewVersionSerializer, create_cost_template_new_version, + MiscProcMaterialMinPricesSerializer, + MiscProcProcessingMinPricesSerializer, ) @@ -1666,4 +1670,57 @@ class RFQOperationLogsViewSet(CustomModelViewSet): if buyer: nos = Inquiry.objects.filter(buyer__icontains=buyer).values_list("inquiry_no", flat=True) queryset = queryset.filter(inquiry_no__in=list(nos)) - return queryset \ No newline at end of file + return queryset + + +class MiscProcMaterialMinPricesViewSet(CustomModelViewSet): + """杂采材料制程最低价信息表视图集 + + 按采购件料号、材料规格、货币代码、项次存储最低重量(1)和最低单价(2)信息。 + """ + + queryset = MiscProcMaterialMinPrices.objects.all() + serializer_class = MiscProcMaterialMinPricesSerializer + filter_fields = ( + "part_id", + "material_spec", + "currency_code", + "item_num", + ) + search_fields = ( + "part_id", + "material_spec", + "source_number", + ) + ordering = ("-create_datetime", "id") + + def perform_create(self, serializer): + serializer.save() + + def perform_update(self, serializer): + serializer.save() + + +class MiscProcProcessingMinPricesViewSet(CustomModelViewSet): + """杂采加工费用最低价信息表视图集 + + 按采购件料号、货币代码存储各报价单加工费合计的最低值。 + """ + + queryset = MiscProcProcessingMinPrices.objects.all() + serializer_class = MiscProcProcessingMinPricesSerializer + filter_fields = ( + "part_id", + "currency_code", + ) + search_fields = ( + "part_id", + "source_number", + ) + ordering = ("-create_datetime", "id") + + def perform_create(self, serializer): + serializer.save() + + def perform_update(self, serializer): + serializer.save() \ No newline at end of file