From 15812bf04816eafdd5b3b37c923890c5c6629488 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 27 Dec 2021 14:56:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=AE=A1=E5=88=92=E6=8C=89?= =?UTF-8?q?=E5=B7=A5=E5=BA=8F=E5=AD=97=E6=AE=B5=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hb_server/apps/pm/models.py | 2 +- hb_server/apps/pm/services.py | 21 +++++++++++++++++++-- hb_server/apps/pm/signals.py | 3 +++ 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/hb_server/apps/pm/models.py b/hb_server/apps/pm/models.py index 539d523..d9bf331 100644 --- a/hb_server/apps/pm/models.py +++ b/hb_server/apps/pm/models.py @@ -29,7 +29,7 @@ class ProductionPlan(CommonAModel): count_ok = models.PositiveIntegerField('合格数', default=0) start_date = models.DateField('计划开工日期') end_date = models.DateField('计划完工日期') - process_json = models.JSONField('按工序的统计数', default=list, null=True, blank=True) + process_json = models.JSONField('按工序的统计数', default=dict, null=True, blank=True) is_planed = models.BooleanField('是否已排产', default=False) class Meta: verbose_name = '生产计划' diff --git a/hb_server/apps/pm/services.py b/hb_server/apps/pm/services.py index c308f1f..abcf581 100644 --- a/hb_server/apps/pm/services.py +++ b/hb_server/apps/pm/services.py @@ -1,10 +1,27 @@ +from django.db.models.aggregates import Sum from apps.pm.models import ProductionPlan, SubProductionPlan +import math class PmService: @classmethod def update_plan_process_json(cls, plan:ProductionPlan): """ - 更新计划统计字段 + 更新计划按工序统计字段 """ ret = {} - subplans = SubProductionPlan.objects.filter() \ No newline at end of file + subplans = SubProductionPlan.objects.filter(production_plan=plan, is_deleted=False) + qs = subplans.values('process', 'process__name', 'process_number').annotate(count=Sum('main_count'), + count_real=Sum('main_count_real'), count_ok=Sum('main_count_ok')) + qs_list = list(qs) + for i in qs_list: + ret[i['process_number']] = { + 'count':i['count'], + 'count_real':i['count_real'], + 'count_ok':i['count_ok'], + 'rate': round((i['count_ok']/i['count_real'])*100,2) if i['count_real'] > 0 else 0 + } + plan.process_json = ret + plan.save() + + + diff --git a/hb_server/apps/pm/signals.py b/hb_server/apps/pm/signals.py index bed7671..b3cc7bb 100644 --- a/hb_server/apps/pm/signals.py +++ b/hb_server/apps/pm/signals.py @@ -2,6 +2,7 @@ from django.db.models.signals import post_save from django.dispatch import receiver from apps.mtm.models import Material from apps.pm.models import SubProductionPlan, SubProductionProgress +from apps.pm.services import PmService @receiver(post_save, sender=SubProductionProgress) def update_subplan_main(sender, instance, created, **kwargs): @@ -26,6 +27,8 @@ def update_subplan_main(sender, instance, created, **kwargs): plan.count_real = subplan.main_count_real plan.count_ok = subplan.main_count_ok plan.save() + # 更新子计划工序统计字段 + PmService.update_plan_process_json(subplan.production_plan)