From 02a8693a65b05533f3fe071413c67f1895fa103b Mon Sep 17 00:00:00 2001 From: caoqianming Date: Tue, 7 May 2024 09:58:32 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20cal=5Fenstat=E5=89=8D=E8=B0=83=E7=94=A8?= =?UTF-8?q?=E4=B8=80=E4=B8=8Bget=5Ftotal=5Fhour=5Fnow?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/em/services.py | 24 ++---------------------- apps/em/tasks.py | 2 +- apps/enm/tasks.py | 13 ++++++------- apps/mtm/services.py | 28 ++++++++++++++++++++++++++++ 4 files changed, 37 insertions(+), 30 deletions(-) diff --git a/apps/em/services.py b/apps/em/services.py index 00a09e58..4e5b0cd7 100644 --- a/apps/em/services.py +++ b/apps/em/services.py @@ -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): diff --git a/apps/em/tasks.py b/apps/em/tasks.py index b04b5f29..076cafd9 100644 --- a/apps/em/tasks.py +++ b/apps/em/tasks.py @@ -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) diff --git a/apps/enm/tasks.py b/apps/enm/tasks.py index 16d3701f..6c8887a3 100644 --- a/apps/enm/tasks.py +++ b/apps/enm/tasks.py @@ -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) \ No newline at end of file + mc.set_fail(-2, now) \ No newline at end of file diff --git a/apps/mtm/services.py b/apps/mtm/services.py index 2322dbac..14d3cf90 100644 --- a/apps/mtm/services.py +++ b/apps/mtm/services.py @@ -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() \ No newline at end of file