From 4e5eead1a8c062f6ab2307af92b61b5ab7bde337 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 17 Nov 2021 16:38:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=93=8D=E4=BD=9C=E6=97=B6=E6=8E=89=E5=87=BA?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E5=B7=A5=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mtm/migrations/0035_auto_20211117_1637.py | 34 +++++++++++++++++++ hb_server/apps/mtm/models.py | 7 ++-- hb_server/apps/mtm/serializers.py | 4 +-- hb_server/apps/mtm/views.py | 3 +- ...3_alter_subproductionplan_subproduction.py | 20 +++++++++++ hb_server/apps/pm/models.py | 2 +- hb_server/apps/pm/views.py | 4 ++- hb_server/apps/wpm/views.py | 13 +++++-- 8 files changed, 77 insertions(+), 10 deletions(-) create mode 100644 hb_server/apps/mtm/migrations/0035_auto_20211117_1637.py create mode 100644 hb_server/apps/pm/migrations/0013_alter_subproductionplan_subproduction.py diff --git a/hb_server/apps/mtm/migrations/0035_auto_20211117_1637.py b/hb_server/apps/mtm/migrations/0035_auto_20211117_1637.py new file mode 100644 index 0000000..4899c49 --- /dev/null +++ b/hb_server/apps/mtm/migrations/0035_auto_20211117_1637.py @@ -0,0 +1,34 @@ +# Generated by Django 3.2.6 on 2021-11-17 08:37 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('mtm', '0034_auto_20211116_1603'), + ] + + operations = [ + migrations.AddField( + model_name='techdoc', + name='enabled', + field=models.BooleanField(default=True, verbose_name='是否启用'), + ), + migrations.AlterField( + model_name='step', + name='type', + field=models.IntegerField(choices=[(1, '常规'), (2, '分割'), (3, '结合')], default=1, verbose_name='操作类型'), + ), + migrations.AlterField( + model_name='subprodctionmaterial', + name='subproduction', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='subm_subprod', to='mtm.subproduction', verbose_name='关联生产分解'), + ), + migrations.AlterField( + model_name='techdoc', + name='subproduction', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='tech_subprod', to='mtm.subproduction', verbose_name='关联生产分解'), + ), + ] diff --git a/hb_server/apps/mtm/models.py b/hb_server/apps/mtm/models.py index 6a92190..46e82b4 100644 --- a/hb_server/apps/mtm/models.py +++ b/hb_server/apps/mtm/models.py @@ -72,7 +72,7 @@ class Step(CommonAModel): STEP_TYPE_DIV = 2 STEP_TYPE_COMB = 3 step_type_choices=( - (STEP_TYPE_NOM, '普通'), + (STEP_TYPE_NOM, '常规'), (STEP_TYPE_DIV, '分割'), (STEP_TYPE_COMB, '结合') ) @@ -199,7 +199,7 @@ class SubprodctionMaterial(CommonADModel): material = models.ForeignKey(Material, verbose_name='物料', on_delete=models.CASCADE, related_name='subplan_material') is_main = models.BooleanField('是否主产出', default=False) # 以该产品完成度计算进度 count = models.FloatField('消耗量/产出量', default=0) - subproduction = models.ForeignKey(SubProduction, verbose_name='关联生产分解', on_delete=models.CASCADE) + subproduction = models.ForeignKey(SubProduction, verbose_name='关联生产分解', on_delete=models.CASCADE, related_name='subm_subprod') type = models.IntegerField('物料应用类型', default=1) sort = models.IntegerField('排序号', default=1) @@ -223,8 +223,9 @@ class TechDoc(CommonADModel): """ name = models.CharField('名称', max_length=50) file = models.ForeignKey(File, verbose_name='技术文件', on_delete=models.CASCADE) - subproduction = models.ForeignKey(SubProduction, verbose_name='关联生产分解', on_delete=models.CASCADE) + subproduction = models.ForeignKey(SubProduction, verbose_name='关联生产分解', on_delete=models.CASCADE, related_name='tech_subprod') content = models.TextField('内容', null=True, blank=True) + enabled = models.BooleanField('是否启用', default=True) class Meta: verbose_name = '技术文件' diff --git a/hb_server/apps/mtm/serializers.py b/hb_server/apps/mtm/serializers.py index b07ccb7..3e7a46d 100644 --- a/hb_server/apps/mtm/serializers.py +++ b/hb_server/apps/mtm/serializers.py @@ -241,9 +241,9 @@ class TechDocListSerializer(serializers.ModelSerializer): class TechDocCreateSerializer(serializers.ModelSerializer): class Meta: model = TechDoc - fields = ['file', 'subproduction', 'name', 'content'] + fields = ['file', 'subproduction', 'name', 'content', 'enabled'] class TechDocUpdateSerializer(serializers.ModelSerializer): class Meta: model = TechDoc - fields = ['file', 'name', 'content'] + fields = ['file', 'name', 'content', 'enabled'] diff --git a/hb_server/apps/mtm/views.py b/hb_server/apps/mtm/views.py index 679f7d2..947ca5d 100644 --- a/hb_server/apps/mtm/views.py +++ b/hb_server/apps/mtm/views.py @@ -153,7 +153,8 @@ class RecordFormViewSet(OptimizationMixin, CreateUpdateModelAMixin, ModelViewSet queryset = RecordForm.objects.all() filterset_fields = ['step', 'type', 'material'] search_fields = ['name'] - ordering='id' + ordering='sort' + ordering_fields = ['sort', 'id'] def get_serializer_class(self): if self.action =='create': diff --git a/hb_server/apps/pm/migrations/0013_alter_subproductionplan_subproduction.py b/hb_server/apps/pm/migrations/0013_alter_subproductionplan_subproduction.py new file mode 100644 index 0000000..7896e13 --- /dev/null +++ b/hb_server/apps/pm/migrations/0013_alter_subproductionplan_subproduction.py @@ -0,0 +1,20 @@ +# Generated by Django 3.2.6 on 2021-11-17 08:37 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('mtm', '0035_auto_20211117_1637'), + ('pm', '0012_alter_subproductionprogress_type'), + ] + + operations = [ + migrations.AlterField( + model_name='subproductionplan', + name='subproduction', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='subplan_subprod', to='mtm.subproduction', verbose_name='关联生产分解'), + ), + ] diff --git a/hb_server/apps/pm/models.py b/hb_server/apps/pm/models.py index ddddd78..b63e1c1 100644 --- a/hb_server/apps/pm/models.py +++ b/hb_server/apps/pm/models.py @@ -40,7 +40,7 @@ class SubProductionPlan(CommonAModel): (4, '已完成') ) production_plan = models.ForeignKey(ProductionPlan, verbose_name='关联主生产计划', on_delete=models.CASCADE) - subproduction = models.ForeignKey(SubProduction, verbose_name='关联生产分解', on_delete=models.CASCADE) + subproduction = models.ForeignKey(SubProduction, verbose_name='关联生产分解', on_delete=models.CASCADE, related_name='subplan_subprod') start_date = models.DateField('计划开工日期') end_date = models.DateField('计划完工日期') diff --git a/hb_server/apps/pm/views.py b/hb_server/apps/pm/views.py index 2128aab..c1999ea 100644 --- a/hb_server/apps/pm/views.py +++ b/hb_server/apps/pm/views.py @@ -1,4 +1,5 @@ from datetime import timezone +from django.db import transaction from rest_framework import serializers from rest_framework.views import APIView from apps.em.models import Equipment @@ -49,7 +50,8 @@ class ProductionPlanViewSet(CreateUpdateModelAMixin, ListModelMixin, CreateModel elif self.action == 'list': return ProductionPlanSerializer return super().get_serializer_class() - + + @transaction.atomic() def create(self, request, *args, **kwargs): data = request.data serializer = self.get_serializer(data=data) diff --git a/hb_server/apps/wpm/views.py b/hb_server/apps/wpm/views.py index 7a5f9c3..a43f942 100644 --- a/hb_server/apps/wpm/views.py +++ b/hb_server/apps/wpm/views.py @@ -7,8 +7,8 @@ from rest_framework.views import APIView from rest_framework.viewsets import GenericViewSet, ModelViewSet from apps.inm.models import FIFO, FIFOItem, FIFOItemProduct, IProduct, WareHouse from apps.inm.signals import update_inm -from apps.mtm.models import Material, RecordForm, Step, SubprodctionMaterial -from apps.mtm.serializers import RecordFormDetailSerializer +from apps.mtm.models import Material, RecordForm, Step, SubprodctionMaterial, TechDoc +from apps.mtm.serializers import RecordFormDetailSerializer, SubprodctionMaterialListSerializer, TechDocListSerializer from apps.pm.models import SubProductionPlan, SubProductionProgress from apps.pm.serializers import SubProductionPlanListSerializer, SubProductionPlanUpdateSerializer from apps.qm.models import TestRecordItem @@ -319,6 +319,15 @@ class DoFormInit(CreateAPIView, GenericAPIView): ret['forms'] = [] ret_0['id'] = 0 ret_0['name'] = '基本信息' + # 查询工具工装 + ret_0['tools'] = SubprodctionMaterialListSerializer(instance= + SubprodctionMaterial.objects.filter(type=SubprodctionMaterial.SUB_MA_TYPE_TOOL, + subproduction__subplan_subprod__in = splans), many=True).data + # 查询技术文档 + ret_0['techdocs'] = TechDocListSerializer(instance = + TechDoc.objects.filter(subproduction__subplan_subprod__in = splans, enabled=True)\ + .distinct(), many=True).data + ret['forms'].append(ret_0) forms = RecordForm.objects.filter(step=vdata['step'], type=RecordForm.RF_TYPE_DO) if forms.exists():