feat: 投产分析

This commit is contained in:
caoqianming 2024-09-09 16:44:25 +08:00
parent 9a26529e0a
commit 1490a35a32
1 changed files with 36 additions and 9 deletions

View File

@ -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')