feat: 增加wpm 数据分析
This commit is contained in:
parent
01cff014ff
commit
1f8bdd0461
|
@ -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)
|
||||
|
||||
|
|
|
@ -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)),
|
||||
]
|
||||
|
|
Loading…
Reference in New Issue