feat: 增加wpm 数据分析

This commit is contained in:
caoqianming 2024-09-09 10:48:53 +08:00
parent 01cff014ff
commit 1f8bdd0461
2 changed files with 66 additions and 7 deletions

View File

@ -1,19 +1,75 @@
from apps.utils.viewsets import GenericViewSet
from rest_framework.decorators import action
from apps.em.models import Equipment
from apps.wpm.modes import Mlog
from apps.wpm.models import Mlog, Mlogb
from apps.mtm.models import Mgroup
from django.utils import timezone
from django.db.models import Sum
from datetime import datetime, timedelta
from rest_framework.response import Response
from rest_framework.serializers import Serializer
def tran_time_to_mstate(mstate_json, reminder_interval_list, work_start_time: datetime, now: datetime):
if len(reminder_interval_list) != len(mstate_json):
return '未运行'
for ind, val in enumerate(reminder_interval_list):
if work_start_time + timedelta(minutes=val) > now:
return mstate_json[ind]
return '未运行'
class AnaViewSet(GenericViewSet):
perms_map = {}
@action(methods=['post'], detail=False, perms_map={'post': '*'})
def 设备最后生产日志(self, request):
@action(methods=['post'], detail=False, perms_map={'post': '*'}, serializer_class=Serializer)
def equip_last_mlog(self, request):
"""设备最后生产日志
设备最后生产日志
"""
data = request.data
now = timezone.now()
mgroup_name = data["mgroup_name"]
mgroup: Mgroup = Mgroup.objects.get(name=data['mgroup_name'])
# 子状态
mstate_json = mgroup.process.mstate_json
# 生产设备
equip_qs = Equipment.objects.filter(mgroup__name=mgroup_name, type = 10)
equip_qs = Equipment.objects.filter(mgroup=mgroup, type = 10)
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(equip__in=equip_qs)
mlog_qs = Mlog.objects.filter(equipment__in=equip_qs)
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 = mlog_qs | Mlog.objects.filter(work_start_time__lte=now, work_end_time__gte=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')
mlog_qs_l = list(mlog_qs_v)
mlog_dict = {item['equipment__id']: item for item in mlog_qs_l}
# 统计数据
保温 = 0
冷却 = 0
未运行 = 0
故障 = 0
now = timezone.now()
for item in equip_qs_l:
item['mstate'] = '未运行'
if item['id'] in mlog_dict:
item['t_count_use'] = mlog_dict[item['id']]['t_count_use']
mlog_dict_v = mlog_dict[item['id']]
item['reminder_interval_list'] = mlog_dict_v['reminder_interval_list']
item['mstate'] = tran_time_to_mstate(mstate_json, mlog_dict_v['reminder_interval_list'], mlog_dict_v['work_start_time'], now)
if item['state'] in [Equipment.EQUIP_STATE_SCRAP, Equipment.EQUIP_STATE_FIX]:
item['mstate'] = '故障'
if item['mstate'] == '保温':
保温 += 1
elif item['mstate'] == '冷却':
冷却 += 1
elif item['mstate'] == '未运行':
未运行 += 1
elif item['mstate'] == '故障':
故障 += 1
ret = {"保温": 保温, "冷却": 冷却, "未运行": 未运行, "故障": 故障}
ret["rows"] = equip_qs_l
return Response(ret)

View File

@ -5,6 +5,7 @@ from apps.wpm.views import (SfLogViewSet, StLogViewSet, SfLogExpViewSet,
WMaterialViewSet, MlogViewSet, HandoverViewSet,
AttlogViewSet, OtherLogViewSet, MlogbViewSet, MlogbInViewSet,
MlogbOutViewSet, FmlogViewSet)
from apps.wpm.datax import AnaViewSet
API_BASE_URL = 'api/wpm/'
@ -23,6 +24,8 @@ router.register('mlogb/out', MlogbOutViewSet)
router.register('handover', HandoverViewSet, basename='handover')
router.register('attlog', AttlogViewSet, basename='attlog')
router.register('otherlog', OtherLogViewSet, basename='otherlog')
router.register('ana', AnaViewSet, basename='ana')
urlpatterns = [
path(API_BASE_URL, include(router.urls)),
]