From bd7bbbef0e9ff9aaf47fc298feb9001d8000b3b8 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Thu, 15 May 2025 10:03:14 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20wpr=E8=8E=B7=E5=8F=96material=5Fstart?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wpmw/models.py | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/apps/wpmw/models.py b/apps/wpmw/models.py index 14f4c33b..21932de2 100644 --- a/apps/wpmw/models.py +++ b/apps/wpmw/models.py @@ -4,8 +4,10 @@ from apps.qm.models import FtestDefect, FtestItem from apps.utils.models import BaseModel from apps.mtm.models import Material from rest_framework.exceptions import ParseError -from apps.wpm.models import WmStateOption +from apps.wpm.models import WmStateOption, Mlogbw, Handoverbw from apps.utils.tools import update_dict +from apps.inm.models import MIOItemw +from django.db.models import F, Value # Create your models here. class Wpr(BaseModel): @@ -136,6 +138,28 @@ class Wpr(BaseModel): @property def wprdefect(self): return WprDefect.objects.filter(wpr=self) + + def timeline(self): + # 获取完整时间线 + mioitemw_qs = MIOItemw.objects.filter(wpr=self, mioitem__mio__submit_time__isnull=False).values( + "id", timex=F("mioitem__mio__submit_time"), model=Value('mioitemw', output_field=models.CharField())) + mlogbw_qs = Mlogbw.objects.filter(wpr=self, mlogb__mlog__submit_time__isnull=False, mlogb__material_out__isnull=False).values( + "id", timex=F("mlogb__mlog__submit_time"), model=Value('mlogbw', output_field=models.CharField())) + h_qs = Handoverbw.objects.filter(wpr=self, handoverb__handover__submit_time__isnull=False).values( + "id", timex=F("handoverb__handover__submit_time"), model=Value('handoverbw', output_field=models.CharField())) + combined_qs = mioitemw_qs.union(mlogbw_qs, h_qs).order_by('timex') + return list(combined_qs) + + def get_material_start(self): + timeline = self.timeline() + if timeline: + x = timeline[0] + if x['model'] == 'mioitemw': + return MIOItemw.objects.get(id=x['id']).mioitem.material + elif x['model'] == 'mlogbw': + return Mlogbw.objects.get(id=x['id']).mlogb.material_out + return None + class WprDefect(BaseModel): """TN:产物缺陷项关联表"""