diff --git a/apps/em/services.py b/apps/em/services.py index 19867949..00a09e58 100644 --- a/apps/em/services.py +++ b/apps/em/services.py @@ -2,8 +2,9 @@ from .models import Equipment from apps.system.models import Dept from apps.mtm.models import Mgroup import datetime +from django.conf import settings +from dateutil import tz from django.core.cache import cache -from django.utils.timezone import localtime from apps.utils.tasks import ctask_run import logging myLogger = logging.getLogger("log") @@ -11,7 +12,7 @@ myLogger = logging.getLogger("log") def get_eq_rs(equipId: str): """获取设备运行状态缓存 """ - return cache.get(f"equipment_{equipId}", {"running_state": Equipment.OFFLINE, "running_state_timex": localtime()}) + return cache.get(f"equipment_{equipId}", {"running_state": Equipment.OFFLINE, "running_state_timex": datetime.datetime(year=1990, month=4, day=4, hour=0, minute=0, second=0, tzinfo=tz.gettz(settings.TIME_ZONE))}) def set_eq_rs(equipId, last_timex: datetime, last_mrs: int): """更新设备运行状态(包括缓存和数据库) @@ -43,6 +44,7 @@ def shutdown_or_startup(equipId: str, last_timex: datetime, last_mrs): equip.running_state = last_mrs equip.save(update_fields=["running_state"]) + # 设备运行状态决定工段运行状态 mgroup: Mgroup = equip.mgroup indicate = equip.indicate_mgroup_running new_run = None diff --git a/apps/em/tasks.py b/apps/em/tasks.py index 1dad00c9..b04b5f29 100644 --- a/apps/em/tasks.py +++ b/apps/em/tasks.py @@ -4,20 +4,35 @@ from apps.utils.tasks import CustomTask from celery import shared_task from django.utils.timezone import localtime from apps.em.models import Equipment -from apps.em.services import set_eq_rs, get_eq_rs +from apps.em.services import set_eq_rs, get_eq_rs, shutdown_or_startup from apps.mtm.models import Mgroup @shared_task(base=CustomTask) def check_equipment_offline(seconds=30): - """监测设备是否掉线(根据测点采集)及工段是否运行 + """监测设备是否掉线 监测设备是否掉线 """ - Mgroup.objects.filter(equip_mgroup__isnull=True, equip_mgroup__indicate_mgroup_running__isnull=True).update(is_running=False) - equips = Equipment.objects.filter(mp_ep_monitored__is_rep_ep_running_state=True, mp_ep_monitored__enabled=True) + # equips = Equipment.objects.filter(mp_ep_monitored__is_rep_ep_running_state=True, mp_ep_monitored__enabled=True) + equips = Equipment.objects.all() now = localtime() for equip in equips: rs = get_eq_rs(equip.id) if (now - rs['running_state_timex']).total_seconds() > seconds: - set_eq_rs(equip.id, now, Equipment.OFFLINE) \ No newline at end of file + set_eq_rs(equip.id, now, Equipment.OFFLINE) + + +@shared_task(base=CustomTask) +def check_mgroup_running(): + """监测工段是否运行 + """ + # 没有设备的工段直接干停 + Mgroup.objects.filter(equip_mgroup__isnull=True, equip_mgroup__indicate_mgroup_running__isnull=True).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) + if rs['running_state'] == Equipment.OFFLINE: # 如果掉线了不关心 + pass + else: + shutdown_or_startup(equip.id, rs["running_state_timex"], rs["running_state"]) \ No newline at end of file diff --git a/apps/enm/tasks.py b/apps/enm/tasks.py index 7777fb9a..4beb1dac 100644 --- a/apps/enm/tasks.py +++ b/apps/enm/tasks.py @@ -21,7 +21,9 @@ from django.utils import timezone 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 +from apps.enm.services import insert_mplogx_from_king_rest_chunk, get_mpoint_cache +from django.core.cache import cache +from django.utils.timezone import localtime myLogger = logging.getLogger("log") @@ -730,3 +732,21 @@ def king_insert_mplogx(): ml.append({"N": m.replace('K_', '')}) _, res = kingClient.request(**kapis['read_batchtagrealvalue'], json={"objs": ml}) insert_mplogx_from_king_rest_chunk(res) + + +@shared_task(base=CustomTask) +def check_mpoint_offline(seconds=300): + """监测测点采集掉线""" + now = localtime() + for mpoint in Mpoint.objects.filter(enabled=True, type=Mpoint.MT_AUTO): + cache_key = Mpoint.cache_key(mpoint.code) + mpoint_data = get_mpoint_cache(mpoint.id) + last_data = mpoint_data.get('last_data', None) + is_offline = True + if last_data and last_data['last_timex'] and (now-last_data['last_timex']).total_seconds() < seconds: + is_offline = False + if is_offline: + mpoint_data['gather_state'] = -2 # 掉线了 + cache.set(cache_key, mpoint_data, timeout=None) + + \ No newline at end of file