fix: cal_enstat前调用一下get_total_hour_now

This commit is contained in:
caoqianming 2024-05-07 09:58:32 +08:00
parent 35d6d7beb9
commit 02a8693a65
4 changed files with 37 additions and 30 deletions

View File

@ -7,6 +7,7 @@ from dateutil import tz
from django.core.cache import cache
from apps.utils.tasks import ctask_run
import logging
from apps.mtm.services import mgroup_run_change
myLogger = logging.getLogger("log")
def get_eq_rs(equipId: str):
@ -36,10 +37,6 @@ def shutdown_or_startup(equipId: str, last_timex: datetime, last_mrs):
"""
last_mrs 设备运行状态值
"""
from apps.wpm.models import StLog
from apps.wpm.tasks import cal_exp_duration_hour
from apps.wpm.services import get_sflog
equip = Equipment.objects.get(id=equipId)
equip.running_state = last_mrs
equip.save(update_fields=["running_state"])
@ -64,24 +61,7 @@ def shutdown_or_startup(equipId: str, last_timex: datetime, last_mrs):
new_run = True
if new_run is not None:
mgroup.is_running = new_run
mgroup.save(update_fields=["is_running"])
last_stlog = StLog.objects.filter(mgroup=mgroup, is_shutdown=True).order_by("-start_time").first() # 找到最后一次停机记录
if last_stlog:
if last_timex >= last_stlog.start_time: # 认为是有效信号
if last_stlog.end_time is None and new_run: # 从停到开
last_stlog.end_time = last_timex
last_stlog.duration = (last_stlog.end_time - last_stlog.start_time).total_seconds() / 3600
last_stlog.save()
cal_exp_duration_hour(last_stlog.id) # 触发时间分配
elif last_stlog.end_time and new_run is False and last_timex > last_stlog.end_time: # 从开到停
StLog.objects.create(title="停机", is_shutdown=True, mgroup=mgroup, end_time=None, start_time=last_timex, sflog=get_sflog(mgroup, last_timex))
elif new_run is False:
StLog.objects.create(title="停机", is_shutdown=True, mgroup=mgroup, end_time=None, start_time=last_timex, sflog=get_sflog(mgroup, last_timex))
mgroup.is_running = False
mgroup.save()
mgroup_run_change(mgroup, new_run, last_timex)
def daoru_equipment(path: str):

View File

@ -28,7 +28,7 @@ def check_mgroup_running():
"""监测工段是否运行
"""
# 没有设备的工段直接干停
Mgroup.objects.filter(equip_mgroup__isnull=True, equip_mgroup__indicate_mgroup_running__isnull=True).update(is_running=False)
Mgroup.objects.filter(equip_mgroup__indicate_mgroup_running__isnull=True).distinct().update(is_running=False)
equips = Equipment.objects.filter(indicate_mgroup_running__isnull=False, mgroup__isnull=False)
for equip in equips:
rs = get_eq_rs(equip.id)

View File

@ -22,9 +22,8 @@ from django.db.models import Max
from apps.third.king.k import kingClient
from apps.third.king.king_api import kapis
from apps.enm.services import insert_mplogx_from_king_rest_chunk, MpointCache
from django.core.cache import cache
from django.utils.timezone import localtime
from apps.em.services import set_eq_rs
from apps.wpm.tasks import get_total_hour_now
myLogger = logging.getLogger("log")
@ -225,6 +224,9 @@ def cal_mpointstats(is_now=1, year=None, month=None, day=None, hour=None):
# mpoints_other_group.append(cal_mpointstat_hour.s(item.id, year, month, day, hour))
cal_mpointstat_hour(item.id, year, month, day, hour)
# 先调整一下班时间,以防计算错误
get_total_hour_now()
# 开始计算enstat
mgroups = Mgroup.objects.filter(need_enm=True).order_by("sort")
# mgroups_group = []
@ -738,7 +740,7 @@ def king_insert_mplogx():
def check_mpoint_offline(seconds=100):
"""监测测点采集掉线"""
now = localtime()
for mpoint in Mpoint.objects.filter(enabled=True, type=Mpoint.MT_AUTO):
for mpoint in Mpoint.objects.filter(enabled=True, type=Mpoint.MT_AUTO)| Mpoint.objects.filter(enabled=True, type=Mpoint.MT_COMPUTE, is_rep_ep_running_state=True):
mc = MpointCache(mpoint.code)
mpoint_data = mc.data
last_data = mpoint_data.get('last_data', None)
@ -746,7 +748,4 @@ def check_mpoint_offline(seconds=100):
if last_data and last_data['last_timex'] and (now-last_data['last_timex']).total_seconds() < seconds:
is_offline = False
if is_offline:
mc.set_fail(-2, now)
if mpoint.mpoint_affect:
mct = MpointCache(mpoint.mpoint_affect)
mct.set_fail(-2, now)
mc.set_fail(-2, now)

View File

@ -4,6 +4,10 @@ from django.db.models import Q
from apps.mtm.models import Material, Process
from rest_framework.exceptions import ParseError
from apps.utils.tools import ranstr
from datetime import datetime
from apps.wpm.models import StLog
from apps.wpm.services import get_sflog
from apps.wpm.tasks import cal_exp_duration_hour
def get_mgroup_goals(mgroupId, year, reload=False):
@ -73,3 +77,27 @@ def daoru_material(path: str):
raise ParseError(f'{i}行物料有误, 导入失败--{e}')
i = i + 1
print(type, name, specification, model, unit, '导入成功')
def mgroup_run_change(mgroup: Mgroup, new_run: bool, last_timex: datetime):
"""
调用工段运行变动
"""
mgroup.is_running = new_run
mgroup.save(update_fields=["is_running"])
last_stlog = StLog.objects.filter(mgroup=mgroup, is_shutdown=True).order_by("-start_time").first() # 找到最后一次停机记录
if last_stlog:
if last_timex >= last_stlog.start_time: # 认为是有效信号
if last_stlog.end_time is None and new_run: # 从停到开
last_stlog.end_time = last_timex
last_stlog.duration = (last_stlog.end_time - last_stlog.start_time).total_seconds() / 3600
last_stlog.save()
cal_exp_duration_hour(last_stlog.id) # 触发时间分配
elif last_stlog.end_time and new_run is False and last_timex > last_stlog.end_time: # 从开到停
StLog.objects.create(title="停机", is_shutdown=True, mgroup=mgroup, end_time=None, start_time=last_timex, sflog=get_sflog(mgroup, last_timex))
elif new_run is False:
StLog.objects.create(title="停机", is_shutdown=True, mgroup=mgroup, end_time=None, start_time=last_timex, sflog=get_sflog(mgroup, last_timex))
mgroup.is_running = False
mgroup.save()