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)