diff --git a/apps/wpm/datax.py b/apps/wpm/datax.py index e0dab95a..5843df32 100644 --- a/apps/wpm/datax.py +++ b/apps/wpm/datax.py @@ -8,6 +8,7 @@ from django.db.models import Sum from datetime import datetime, timedelta from rest_framework.response import Response from rest_framework.serializers import Serializer +from apps.inm.models import MIOItem, MIO def tran_time_to_mstate(mstate_json, reminder_interval_list, work_start_time: datetime, now: datetime): if len(reminder_interval_list) != len(mstate_json): @@ -35,9 +36,8 @@ class AnaViewSet(GenericViewSet): equip_qs_v = equip_qs.values('id', 'name', 'number', 'state').order_by('number') equip_qs_l = list(equip_qs_v) # 设备最后生产日志 - mlog_qs = Mlog.objects.filter(equipment__in=equip_qs, mgroup=mgroup) - mlog_qs = mlog_qs | Mlog.objects.filter(work_start_time__lte=now, work_end_time__isnull=True) - mlog_qs = mlog_qs | Mlog.objects.filter(work_start_time__lte=now, work_end_time__gte=now) + mlog_qs_0 = Mlog.objects.filter(equipment__in=equip_qs, mgroup=mgroup) + mlog_qs = mlog_qs_0.exclude(work_end_time__lt=now) mlog_qs = mlog_qs.annotate(t_count_use=Sum('b_mlog__count_use')) mlog_qs = mlog_qs.order_by('work_start_time') mlog_qs_v = mlog_qs.values('id', 'equipment__id', 't_count_use', 'reminder_interval_list', 'work_start_time', 'work_end_time') @@ -82,13 +82,40 @@ class AnaViewSet(GenericViewSet): """ 投产分析 """ - tomorrow = datetime.now() + timedelta(days=1) - for i in range(8): - timex = tomorrow - timedelta(days=i) + now = timezone.now() + tomorrow = now + timedelta(days=1) + now_2 = now.replace(hour=2, minute=0, second=0, microsecond=0) + timex_2 = tomorrow.replace(hour=2, minute=0, second=0, microsecond=0) + timex_8_ago = timex_2 - timedelta(days=8) mgroup: Mgroup = Mgroup.objects.get(name='退火') # 子状态 mstate_json = mgroup.process.mstate_json - # 生产记录 - handover_qs = Handover.objects.filter(material__process=mgroup.process, send_mgroup=mgroup, type=Handover.H_NORMAL) - pass + ret = {} + ret['今日退火投产预测'] = 0 + ret['明日退火投产预测'] = 0 + ret['rows'] = {} + # 生产记录/今日退火投产预测 + # 昨日2点 + now_2_yesterday = now_2 - timedelta(days=1) + + mlog_qs_0 = Mlog.objects.filter(mgroup=mgroup) + mlog_qs = mlog_qs_0.exclude(work_end_time__lt=now_2_yesterday).annotate(t_count_use=Sum('b_mlog__count_use')).order_by('work_start_time') + mlog_qs_v = mlog_qs.values('id', 'equipment__id', 't_count_use', 'reminder_interval_list', 'work_start_time', 'work_end_time') + mlog_qs_l = list(mlog_qs_v) + + for item in mlog_qs_l: + if tran_time_to_mstate(mstate_json, item['reminder_interval_list'], item['work_start_time'], now) == '冷却': + if item['work_end_time'] is None or item['work_end_time'] > now_2: + ret['明日退火投产预测'] += item['t_count_use'] + ret['今日退火投产预测'] += item['t_count_use'] + return ret + # # 交接记录 + # handover_qs = Handover.objects.filter(material__process=mgroup.process, send_mgroup=mgroup, type=Handover.H_NORMAL, + # submit_time__range=[timex_8_ago, timex_2]).values('id', 'submit_time', 'count') + # handover_qs_l = list(handover_qs) + + # # 生产入库 + # mioitem_qs = MIOItem.objects.filter(mio__mgroup=mgroup, material__process=mgroup.process, mio__type=MIO.MIO_TYPE_DO_IN, + # mio__submit_time__range=[timex_8_ago, timex_2]).values('id', 'mio__submit_time', 'count') +