From 5904ab147597af8be0e19ce56c248a04b0bb4617 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Tue, 16 Nov 2021 08:42:45 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E4=BA=A7=E5=85=A5=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hb_server/apps/inm/serializers.py | 13 +++++++--- hb_server/apps/inm/signals.py | 2 -- .../mtm/migrations/0031_auto_20211116_0841.py | 24 ++++++++++++++++++ hb_server/apps/mtm/models.py | 2 +- .../0009_alter_testrecorditem_is_testok.py | 18 +++++++++++++ hb_server/apps/qm/models.py | 2 +- hb_server/apps/wf/services.py | 2 +- .../wpm/migrations/0013_auto_20211116_0841.py | 25 +++++++++++++++++++ hb_server/apps/wpm/models.py | 6 ++++- hb_server/apps/wpm/views.py | 20 ++++++++++++--- 10 files changed, 100 insertions(+), 14 deletions(-) create mode 100644 hb_server/apps/mtm/migrations/0031_auto_20211116_0841.py create mode 100644 hb_server/apps/qm/migrations/0009_alter_testrecorditem_is_testok.py create mode 100644 hb_server/apps/wpm/migrations/0013_auto_20211116_0841.py diff --git a/hb_server/apps/inm/serializers.py b/hb_server/apps/inm/serializers.py index e137622..f398159 100644 --- a/hb_server/apps/inm/serializers.py +++ b/hb_server/apps/inm/serializers.py @@ -1,6 +1,6 @@ from rest_framework import serializers -from apps.inm.models import FIFO, FIFOItem, IProduct, MaterialBatch, WareHouse,Inventory +from apps.inm.models import FIFO, FIFOItem, FIFOItemProduct, IProduct, MaterialBatch, WareHouse,Inventory from apps.qm.models import TestRecord, TestRecordItem from apps.system.serializers import UserSimpleSerializer @@ -105,14 +105,19 @@ class FIFOInPurSerializer(serializers.ModelSerializer): raise serializers.ValidationError('数目对不上') else: i['fifo'] = obj - fifod = FIFOItem.objects.create(**i) + fifoitem = FIFOItem.objects.create(**i) + p_list0 = [] + for x in p_details: + x['material'] = i['material'] + x['fifoitem'] = fifoitem + p_list0.append(FIFOItemProduct(**x)) + FIFOItemProduct.objects.bulk_create(p_list0) + p_list = [] for x in p_details: - x['state'] = 1 x['material'] = i['material'] x['warehouse'] = validated_data['warehouse'] x['batch'] = i['batch'] - x['fifos'] = [fifod.id] p_list.append(IProduct(**x)) IProduct.objects.bulk_create(p_list) else: diff --git a/hb_server/apps/inm/signals.py b/hb_server/apps/inm/signals.py index 7259090..66870a4 100644 --- a/hb_server/apps/inm/signals.py +++ b/hb_server/apps/inm/signals.py @@ -23,8 +23,6 @@ def update_inm(instance:FIFO, type:int=1): o2.save() material.count = material.count + i.count material.save() - # 如果有详细半成品 - pass elif instance.type in [FIFO.FIFO_TYPE_DO_OUT]: # 生产领料 # 更新相关表 for i in FIFOItem.objects.filter(fifo=instance): diff --git a/hb_server/apps/mtm/migrations/0031_auto_20211116_0841.py b/hb_server/apps/mtm/migrations/0031_auto_20211116_0841.py new file mode 100644 index 0000000..91e81b6 --- /dev/null +++ b/hb_server/apps/mtm/migrations/0031_auto_20211116_0841.py @@ -0,0 +1,24 @@ +# Generated by Django 3.2.6 on 2021-11-16 00:41 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('mtm', '0030_step_need_test'), + ] + + operations = [ + migrations.AlterField( + model_name='recordform', + name='name', + field=models.CharField(max_length=100, verbose_name='表格名称'), + ), + migrations.AlterField( + model_name='usedstep', + name='subproduction', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='usedstep_subproduction', to='mtm.subproduction', verbose_name='关联生产分解'), + ), + ] diff --git a/hb_server/apps/mtm/models.py b/hb_server/apps/mtm/models.py index 614024d..ef0426c 100644 --- a/hb_server/apps/mtm/models.py +++ b/hb_server/apps/mtm/models.py @@ -102,7 +102,7 @@ class RecordForm(CommonAModel): (RF_TYPE_DO, '生产记录'), (RF_TYPE_TEST, '检验记录') ) - name = models.CharField('表格名称', max_length=100, unique=True) + name = models.CharField('表格名称', max_length=100) type = models.IntegerField('表格类型', choices=type_choices, default=1) step = models.ForeignKey(Step, verbose_name='关联子工序', on_delete=models.CASCADE, null=True, blank=True) material = models.ForeignKey(Material, verbose_name='关联物料', on_delete=models.CASCADE, null=True, blank=True) diff --git a/hb_server/apps/qm/migrations/0009_alter_testrecorditem_is_testok.py b/hb_server/apps/qm/migrations/0009_alter_testrecorditem_is_testok.py new file mode 100644 index 0000000..6d9507f --- /dev/null +++ b/hb_server/apps/qm/migrations/0009_alter_testrecorditem_is_testok.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.6 on 2021-11-16 00:41 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('qm', '0008_auto_20211111_1405'), + ] + + operations = [ + migrations.AlterField( + model_name='testrecorditem', + name='is_testok', + field=models.BooleanField(blank=True, null=True, verbose_name='是否合格'), + ), + ] diff --git a/hb_server/apps/qm/models.py b/hb_server/apps/qm/models.py index 35d77d8..0cc9d5d 100644 --- a/hb_server/apps/qm/models.py +++ b/hb_server/apps/qm/models.py @@ -66,5 +66,5 @@ class TestRecordItem(BaseModel): field_value = models.JSONField('录入值', default=dict, blank=True) need_judge = models.BooleanField('是否需要判定', default=False) sort = models.IntegerField('排序号', default=1) - is_testok = models.BooleanField('是否合格', default=True) + is_testok = models.BooleanField('是否合格', null=True, blank=True) test_record = models.ForeignKey(TestRecord, verbose_name='关联的检测记录', on_delete=models.CASCADE, related_name='item_test_record') \ No newline at end of file diff --git a/hb_server/apps/wf/services.py b/hb_server/apps/wf/services.py index bc39a3e..badfc5e 100644 --- a/hb_server/apps/wf/services.py +++ b/hb_server/apps/wf/services.py @@ -121,7 +121,7 @@ class WfService(object): for i in transition.condition_expression: expression = i['expression'].format(**ticket_all_value) import datetime, time # 用于支持条件表达式中对时间的操作 - if eval(expression, {"__builtins__":None}, {'datetime':datetime, 'time':time}): + if eval(expression, {'__builtins__':None}, {'datetime':datetime, 'time':time}): destination_state = State.objects.get(pk=i['target_state']) return destination_state diff --git a/hb_server/apps/wpm/migrations/0013_auto_20211116_0841.py b/hb_server/apps/wpm/migrations/0013_auto_20211116_0841.py new file mode 100644 index 0000000..b5264ba --- /dev/null +++ b/hb_server/apps/wpm/migrations/0013_auto_20211116_0841.py @@ -0,0 +1,25 @@ +# Generated by Django 3.2.6 on 2021-11-16 00:41 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('inm', '0016_auto_20211112_1124'), + ('wpm', '0012_auto_20211111_1056'), + ] + + operations = [ + migrations.AddField( + model_name='wproduct', + name='warehouse', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='inm.warehouse', verbose_name='所在仓库'), + ), + migrations.AlterField( + model_name='wproduct', + name='act_state', + field=models.IntegerField(choices=[(1, '生产中'), (2, '待检测'), (3, '已合格'), (4, '库存中')], default=0, verbose_name='进行状态'), + ), + ] diff --git a/hb_server/apps/wpm/models.py b/hb_server/apps/wpm/models.py index 0d8d4b8..83dfcf1 100644 --- a/hb_server/apps/wpm/models.py +++ b/hb_server/apps/wpm/models.py @@ -2,6 +2,7 @@ from django.db import models from django.db.models.base import Model import django.utils.timezone as timezone from django.db.models.query import QuerySet +from apps.inm.models import WareHouse from apps.pm.models import ProductionPlan, SubProductionPlan from apps.system.models import CommonAModel, CommonBModel, Organization, User, Dict, File from utils.model import SoftModel, BaseModel @@ -24,10 +25,12 @@ class WProduct(CommonAModel): WPR_ACT_STATE_DOING = 1 WPR_ACT_STATE_TOTEST = 2 WPR_ACT_STATE_OK = 3 + WPR_ACT_STATE_INM = 4 act_state_choices=( (WPR_ACT_STATE_DOING, '生产中'), (WPR_ACT_STATE_TOTEST, '待检测'), - (WPR_ACT_STATE_OK, '已合格') + (WPR_ACT_STATE_OK, '已合格'), + (WPR_ACT_STATE_INM, '库存中'), ) number = models.CharField('物品编号', unique=True, null=True, blank=True, max_length=50) m_state = models.ForeignKey(Material, verbose_name='所属物料状态', on_delete=models.CASCADE) @@ -40,6 +43,7 @@ class WProduct(CommonAModel): remark = models.CharField('备注', max_length=200, null=True, blank=True) subproduction_plan = models.ForeignKey(SubProductionPlan, verbose_name='当前子生产计划', on_delete=models.CASCADE) production_plan = models.ForeignKey(ProductionPlan, verbose_name='关联主生产计划', on_delete=models.CASCADE) + warehouse = models.ForeignKey(WareHouse, verbose_name='所在仓库', on_delete=models.SET_NULL, null=True, blank=True) class Operation(CommonAModel): diff --git a/hb_server/apps/wpm/views.py b/hb_server/apps/wpm/views.py index 88fa039..eebdae6 100644 --- a/hb_server/apps/wpm/views.py +++ b/hb_server/apps/wpm/views.py @@ -5,7 +5,7 @@ from rest_framework.utils import serializer_helpers from rest_framework.utils.field_mapping import get_relation_kwargs from rest_framework.views import APIView from rest_framework.viewsets import GenericViewSet, ModelViewSet -from apps.inm.models import FIFO, FIFOItem, FIFOItemProduct +from apps.inm.models import FIFO, FIFOItem, FIFOItemProduct, IProduct from apps.inm.signals import update_inm from apps.mtm.models import Material, RecordForm, Step, SubprodctionMaterial from apps.mtm.serializers import RecordFormDetailSerializer @@ -77,9 +77,21 @@ class WPlanViewSet(ListModelMixin, GenericViewSet): ip['material'] = material ips.append(FIFOItemProduct(**ip)) FIFOItemProduct.objects.bulk_create(ips) - # 更新库存隐藏半成品 + # 创建IProduct + ips2 = [] + for i in wproducts: + ip = {} + ip['warehouse'] = vdata['warehouse'] + ip['batch'] = batch + ip['wproduct'] = i + ip['number'] = i.number + ip['material'] = material + ips2.append(IProduct(**ip)) + IProduct.objects.bulk_create(ips2) + # 更新库存并修改半成品进行状态 update_inm(fifo) - wproducts.update(is_hidden=True) + wproducts.update(act_sate=WProduct.WPR_ACT_STATE_INM, warehouse=vdata['warehouse']) + return Response() @@ -143,7 +155,7 @@ class WProductViewSet(ListModelMixin, GenericViewSet): m['field_value'] = m['field_value'] m['sort'] = form_field.sort m['need_judge'] = form_field.need_judge - m['is_testok'] = m['is_testok'] if 'is_testok' in m else True + m['is_testok'] = m['is_testok'] if 'is_testok' in m else None m['test_record'] = obj tris.append(TestRecordItem(**m)) TestRecordItem.objects.bulk_create(tris)