From 8563a0c7f92db20084ef455efca26a192c2193a7 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 29 Dec 2021 09:17:04 +0800 Subject: [PATCH] =?UTF-8?q?pm=E7=9B=B8=E5=85=B3=E8=A1=A8=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?count=5Fnotok=E5=AD=97=E6=AE=B5=EF=BC=8C=20update=5Fwproduct=5F?= =?UTF-8?q?log?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hb_server/apps/develop/apps.py | 4 +- hb_server/apps/develop/migrations/__init__.py | 0 hb_server/apps/develop/models.py | 3 ++ hb_server/apps/develop/tests.py | 3 ++ hb_server/apps/develop/urls.py | 10 ++++ hb_server/apps/develop/views.py | 22 ++++++--- .../pm/migrations/0020_auto_20211229_0912.py | 48 +++++++++++++++++++ hb_server/apps/pm/models.py | 11 +++-- hb_server/apps/pm/signals.py | 2 + hb_server/apps/wpm/services.py | 17 ++++--- hb_server/apps/wpm/signals.py | 1 + hb_server/apps/wpm/views.py | 3 ++ hb_server/server/settings.py | 3 +- hb_server/server/urls.py | 1 + 14 files changed, 107 insertions(+), 21 deletions(-) create mode 100644 hb_server/apps/develop/migrations/__init__.py create mode 100644 hb_server/apps/develop/models.py create mode 100644 hb_server/apps/develop/tests.py create mode 100644 hb_server/apps/develop/urls.py create mode 100644 hb_server/apps/pm/migrations/0020_auto_20211229_0912.py diff --git a/hb_server/apps/develop/apps.py b/hb_server/apps/develop/apps.py index afbb5ed..8df4e56 100644 --- a/hb_server/apps/develop/apps.py +++ b/hb_server/apps/develop/apps.py @@ -1,7 +1,5 @@ from django.apps import AppConfig + class DevelopConfig(AppConfig): name = 'apps.develop' - verbose_name = '开发调试接口' - - diff --git a/hb_server/apps/develop/migrations/__init__.py b/hb_server/apps/develop/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/hb_server/apps/develop/models.py b/hb_server/apps/develop/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/hb_server/apps/develop/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/hb_server/apps/develop/tests.py b/hb_server/apps/develop/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/hb_server/apps/develop/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/hb_server/apps/develop/urls.py b/hb_server/apps/develop/urls.py new file mode 100644 index 0000000..6c1c780 --- /dev/null +++ b/hb_server/apps/develop/urls.py @@ -0,0 +1,10 @@ +from django.db.models import base +from rest_framework import urlpatterns +from django.urls import path, include +from rest_framework.routers import DefaultRouter +from apps.develop.views import CleanDataView + +urlpatterns = [ + path('cleandata/', CleanDataView.as_view()), +] + diff --git a/hb_server/apps/develop/views.py b/hb_server/apps/develop/views.py index 69c1d41..ae3a2d8 100644 --- a/hb_server/apps/develop/views.py +++ b/hb_server/apps/develop/views.py @@ -1,12 +1,20 @@ from django.shortcuts import render -from rest_framework.exceptions import APIException from rest_framework.views import APIView -from rest_framework.viewsets import ModelViewSet - -from rest_framework import serializers, status +from rest_framework.permissions import IsAdminUser from rest_framework.response import Response +from apps.inm.models import FIFO +from apps.mtm.models import Material +from apps.sam.models import Order +# Create your views here. +class CleanDataView(APIView): + permission_classes = [IsAdminUser] - -class CleanData(APIView): - pass + def post(self, request, format=None): + """ + 清空数据库 + """ + Order.objects.delete() + FIFO.objects.delete() + Material.objects.filter(type__in=[Material.MA_TYPE_GOOD, Material.MA_TYPE_HALFGOOD]).delete() + return Response() \ No newline at end of file diff --git a/hb_server/apps/pm/migrations/0020_auto_20211229_0912.py b/hb_server/apps/pm/migrations/0020_auto_20211229_0912.py new file mode 100644 index 0000000..b914ef2 --- /dev/null +++ b/hb_server/apps/pm/migrations/0020_auto_20211229_0912.py @@ -0,0 +1,48 @@ +# Generated by Django 3.2.9 on 2021-12-29 01:12 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('pm', '0019_alter_productionplan_process_json'), + ] + + operations = [ + migrations.AddField( + model_name='productionplan', + name='count_notok', + field=models.PositiveIntegerField(default=0, verbose_name='不合格数量'), + ), + migrations.AddField( + model_name='subproductionplan', + name='main_count_notok', + field=models.PositiveIntegerField(default=0, verbose_name='不合格数量'), + ), + migrations.AddField( + model_name='subproductionprogress', + name='count_notok', + field=models.PositiveIntegerField(default=0, verbose_name='不合格数量'), + ), + migrations.AlterField( + model_name='subproductionprogress', + name='count', + field=models.PositiveIntegerField(verbose_name='应出入数'), + ), + migrations.AlterField( + model_name='subproductionprogress', + name='count_ok', + field=models.PositiveIntegerField(default=0, verbose_name='合格数量'), + ), + migrations.AlterField( + model_name='subproductionprogress', + name='count_pick', + field=models.PositiveIntegerField(default=0, verbose_name='实际领用数'), + ), + migrations.AlterField( + model_name='subproductionprogress', + name='count_real', + field=models.PositiveIntegerField(default=0, verbose_name='实际消耗/产出数'), + ), + ] diff --git a/hb_server/apps/pm/models.py b/hb_server/apps/pm/models.py index d9bf331..327209a 100644 --- a/hb_server/apps/pm/models.py +++ b/hb_server/apps/pm/models.py @@ -27,6 +27,7 @@ class ProductionPlan(CommonAModel): count = models.PositiveIntegerField('生产数量', default=1) count_real = models.PositiveIntegerField('实际产出数', default=0) count_ok = models.PositiveIntegerField('合格数', default=0) + count_notok = models.PositiveIntegerField('不合格数量', default=0) start_date = models.DateField('计划开工日期') end_date = models.DateField('计划完工日期') process_json = models.JSONField('按工序的统计数', default=dict, null=True, blank=True) @@ -67,6 +68,7 @@ class SubProductionPlan(CommonAModel): main_count = models.PositiveIntegerField('应产出数', default=0) main_count_real = models.PositiveIntegerField('实际产出数', default=0) main_count_ok = models.PositiveIntegerField('合格数', default=0) + main_count_notok = models.PositiveIntegerField('不合格数量', default=0) steps = models.JSONField('工艺步骤', default=list) @@ -88,7 +90,8 @@ class SubProductionProgress(BaseModel): material = models.ForeignKey(Material, verbose_name='关联物料', on_delete=models.CASCADE) is_main = models.BooleanField('是否主产出', default=False) type = models.IntegerField('物料应用类型', default=SubprodctionMaterial.type_choices) - count = models.IntegerField('应出入数') - count_pick = models.IntegerField('实际领用数', default=0) - count_real = models.IntegerField('实际消耗/产出数', default=0) - count_ok = models.IntegerField('合格数量', default=0) + count = models.PositiveIntegerField('应出入数') + count_pick = models.PositiveIntegerField('实际领用数', default=0) + count_real = models.PositiveIntegerField('实际消耗/产出数', default=0) + count_ok = models.PositiveIntegerField('合格数量', default=0) + count_notok = models.PositiveIntegerField('不合格数量', default=0) diff --git a/hb_server/apps/pm/signals.py b/hb_server/apps/pm/signals.py index afd8411..5d1d209 100644 --- a/hb_server/apps/pm/signals.py +++ b/hb_server/apps/pm/signals.py @@ -17,6 +17,7 @@ def update_subplan_main(sender, instance, created, **kwargs): subplan.main_count_real = instance.count_real subplan.main_count_ok = instance.count_ok + subplan.main_count_notok = instance.count_notok if instance.count_ok >= instance.count and instance.count_ok > 0: subplan.state = SubProductionPlan.SUBPLAN_STATE_DONE elif instance.count_ok < instance.count and instance.count_ok > 0: @@ -27,6 +28,7 @@ def update_subplan_main(sender, instance, created, **kwargs): plan = subplan.production_plan plan.count_real = subplan.main_count_real plan.count_ok = subplan.main_count_ok + plan.count_notok = subplan.main_count_notok plan.save() # 更新计划工序统计字段 PmService.update_plan_process_json(subplan.production_plan) diff --git a/hb_server/apps/wpm/services.py b/hb_server/apps/wpm/services.py index 096b514..8974041 100644 --- a/hb_server/apps/wpm/services.py +++ b/hb_server/apps/wpm/services.py @@ -1,3 +1,4 @@ +from django.utils import timezone from typing import List from django.db.models.expressions import F @@ -67,6 +68,7 @@ class WpmServies(object): wproduct.act_state = WProduct.WPR_ACT_STATE_NOTOK # 需要走不合格品审理的工单 wproduct.update_by = user + wproduct.update_time = timezone.now() wproduct.test = None wproduct.save() @@ -78,10 +80,13 @@ class WpmServies(object): objs = WproductFlow.objects.filter(subproduction_plan=sp, is_lastlog=True) count_ok = objs.filter(act_state__in=[WProduct.WPR_ACT_STATE_INM, WProduct.WPR_ACT_STATE_OK, WProduct.WPR_ACT_STATE_SELLED]).count() + count_notok = objs.filter(act_state__in=[WProduct.WPR_ACT_STATE_NOTOK, WProduct.WPR_ACT_STATE_SCRAP]).count() count_real = objs.exclude(act_state__in=[WProduct.WPR_ACT_STATE_TORETEST, - WProduct.WPR_ACT_STATE_DOWAIT, WProduct.WPR_ACT_STATE_DOING]) - ins = SubProductionProgress.objects.get(subproduction_plan=sp, - is_main=True, type=SubprodctionMaterial.SUB_MA_TYPE_OUT) - ins.count_ok = count_ok - ins.count_real = count_real - ins.save() \ No newline at end of file + WProduct.WPR_ACT_STATE_DOWAIT, WProduct.WPR_ACT_STATE_DOING]).count() + ins = SubProductionProgress.objects.filter(subproduction_plan=sp, + is_main=True, type=SubprodctionMaterial.SUB_MA_TYPE_OUT).first() + if ins: + ins.count_ok = count_ok + ins.count_notok = count_notok + ins.count_real = count_real + ins.save() \ No newline at end of file diff --git a/hb_server/apps/wpm/signals.py b/hb_server/apps/wpm/signals.py index 4c936b8..57d398b 100644 --- a/hb_server/apps/wpm/signals.py +++ b/hb_server/apps/wpm/signals.py @@ -88,6 +88,7 @@ def update_wproduct_log(sender, instance, created, **kwargs): """ 更新产品变动日志 """ + # update_fields = kwargs['update_fields'] WproductFlow.objects.filter(wproduct=instance, subproduction_plan=instance.subproduction_plan).update(is_lastlog=False) ins = WproductFlow() ins.wproduct = instance diff --git a/hb_server/apps/wpm/views.py b/hb_server/apps/wpm/views.py index e11db5d..c20c99a 100644 --- a/hb_server/apps/wpm/views.py +++ b/hb_server/apps/wpm/views.py @@ -233,6 +233,8 @@ class WProductViewSet(ListModelMixin, GenericViewSet): savedict['type'] = TestRecord.TEST_COMB tr = TestRecord.objects.create(**savedict) wproduct.test = tr + wproduct.update_by = request.user + wproduct.update_time = timezone.now() wproduct.save() # 创建检验条目 for i in RecordFormField.objects.filter(form=form, is_deleted=False): @@ -366,6 +368,7 @@ class WProductViewSet(ListModelMixin, GenericViewSet): raise exceptions.APIException('该产品不可报废') obj.act_state = WProduct.WPR_ACT_STATE_SCRAP obj.update_by = request.user + obj.update_time = timezone.now() obj.save() return Response() diff --git a/hb_server/server/settings.py b/hb_server/server/settings.py index 7338007..7c3dc19 100644 --- a/hb_server/server/settings.py +++ b/hb_server/server/settings.py @@ -58,7 +58,8 @@ INSTALLED_APPS = [ 'apps.qm', 'apps.pm', 'apps.wpm', - 'apps.srm' + 'apps.srm', + 'apps.develop' ] MIDDLEWARE = [ diff --git a/hb_server/server/urls.py b/hb_server/server/urls.py index b1893f2..65fdbf1 100644 --- a/hb_server/server/urls.py +++ b/hb_server/server/urls.py @@ -70,6 +70,7 @@ urlpatterns = [ path('api/pm/', include('apps.pm.urls')), path('api/wpm/', include('apps.wpm.urls')), path('api/srm/', include('apps.srm.urls')), + path('api/develop/', include('apps.develop.urls')), # 工具 path('api/utils/signature/', GenSignature.as_view()), path('api/utils/develop/', UpdateDevelop.as_view()),