feat: mpoint增加func_on_change以完成开停机处理需求

This commit is contained in:
caoqianming 2023-08-30 15:19:28 +08:00
parent 8b0733f1fc
commit ed936082c7
4 changed files with 60 additions and 5 deletions

View File

@ -0,0 +1,18 @@
# Generated by Django 3.2.12 on 2023-08-30 07:16
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('enm', '0021_auto_20230825_1649'),
]
operations = [
migrations.AddField(
model_name='mpoint',
name='func_on_change',
field=models.CharField(default='', max_length=100, verbose_name='数据变动时执行方法'),
),
]

View File

@ -19,6 +19,7 @@ class Mpoint(CommonBDModel):
is_auto = models.BooleanField('是否自动采集', default=True) is_auto = models.BooleanField('是否自动采集', default=True)
is_all = models.BooleanField('是否记录是整个工段', default=False) is_all = models.BooleanField('是否记录是整个工段', default=False)
formula = models.TextField('计算公式', default='') formula = models.TextField('计算公式', default='')
func_on_change = models.CharField('数据变动时执行方法', max_length=100, default='')
class MpLog(BaseModel): class MpLog(BaseModel):

View File

@ -1,9 +1,10 @@
from apps.enm.models import Mpoint, MpointStat, EnStat from apps.enm.models import Mpoint, MpointStat, EnStat, MpLog
import re import re
import traceback import traceback
from apps.mtm.services import get_mgroup_goals from apps.mtm.services import get_mgroup_goals
from django.db.models import Q from django.db.models import Q
import datetime import datetime
from django.utils.timezone import now
def translate_eval_formula(exp_str: str, year: int, month: int, day: int, hour: int): def translate_eval_formula(exp_str: str, year: int, month: int, day: int, hour: int):
@ -73,4 +74,24 @@ def get_day_s(year: int, month: int, day: int, hour: int, hour_split: int = 21):
# # enstat.save(update_fields=['goal_data', 'score']) # # enstat.save(update_fields=['goal_data', 'score'])
# except: # except:
# print(traceback.format_exc()) # print(traceback.format_exc())
# return goal_data, score # return goal_data, score
def shutdown_or_startup(mplog: MpLog):
from apps.wpm.models import StLog
from apps.wpm.tasks import cal_shut_hour
mpoint = mplog.mpoint
mgroup = mpoint.mgroup
if mplog.tag_val == 1 and mgroup.is_running is False:
# 从停到开
stlog = StLog.objects.filter(mgroup=mgroup).order_by('start_time').last()
stlog.end_time = now()
stlog.save()
mgroup.is_runing = True
mgroup.save()
cal_shut_hour(stlog.id) # 触发停机时间分配
elif mplog.tag_val == 0 and mgroup.is_runing is True:
# 从开到停
StLog.objects.create(mgroup=mgroup, start_time=now)
mgroup.is_runing = False
mgroup.save()

View File

@ -4,6 +4,7 @@ from apps.utils.tasks import CustomTask
from celery import shared_task, group, chain from celery import shared_task, group, chain
from apps.utils.sql import DbConnection from apps.utils.sql import DbConnection
from server.settings import get_sysconfig, update_sysconfig from server.settings import get_sysconfig, update_sysconfig
import importlib
from django.core.cache import cache from django.core.cache import cache
from apps.enm.models import MpLog, Mpoint, MpointStat, EnStat, EnStat2 from apps.enm.models import MpLog, Mpoint, MpointStat, EnStat, EnStat2
from apps.wpm.models import SfLog, StLog from apps.wpm.models import SfLog, StLog
@ -46,11 +47,25 @@ def get_tag_val():
for row in results: for row in results:
mr_one = MpLog() mr_one = MpLog()
mr_one.tag_id, mr_one.tag_val, mr_one.tag_code, mr_one.tag_update = row mr_one.tag_id, mr_one.tag_val, mr_one.tag_code, mr_one.tag_update = row
mr_one.mpoint, _ = Mpoint.objects.get_or_create(code=mr_one.tag_code, defaults={'name': mr_one.tag_code, 'code': mr_one.tag_code, 'unit': 'unknown'}) mpoint, _ = Mpoint.objects.get_or_create(code=mr_one.tag_code, defaults={'name': mr_one.tag_code, 'code': mr_one.tag_code, 'unit': 'unknown'})
mr_one.mpoint = mpoint
mr_one.save() mr_one.save()
last_tag_id = mr_one.tag_id last_tag_id = mr_one.tag_id
if mpoint.func_on_change:
mpoint_val_on_change.delay(mr_one.id)
update_sysconfig({'enm': {'last_tag_id': last_tag_id}}) update_sysconfig({'enm': {'last_tag_id': last_tag_id}})
@shared_task(base=CustomTask)
def mpoint_val_on_change(mpLogId: str):
"""测点值变化的时候执行任务
"""
mplog = MpLog.objects.get(id=mpLogId)
mpoint = mplog.mpoint
module, func = mpoint.func_on_change.rsplit(".", 1)
m = importlib.import_module(module)
f = getattr(m, func)
f(mplog) # 同步执行
@shared_task(base=CustomTask) @shared_task(base=CustomTask)
def cal_mpointstats_duration(start_time: str, end_time: str): def cal_mpointstats_duration(start_time: str, end_time: str):
""" """
@ -165,14 +180,14 @@ def cal_mpointstats(is_now=1, year=None, month=None, day=None, hour=None):
year, month, day, hour = pre.year, pre.month, pre.day, pre.hour year, month, day, hour = pre.year, pre.month, pre.day, pre.hour
# 先统计不带公式的测点 # 先统计不带公式的测点
mpoints_without_formula = Mpoint.objects.filter(is_auto=True, formula='') mpoints_without_formula = Mpoint.objects.filter(is_auto=True, formula='', func_on_change='')
# mpoints_without_formula_group = [] # mpoints_without_formula_group = []
for item in mpoints_without_formula: for item in mpoints_without_formula:
# mpoints_without_formula_group.append(cal_mpointstat_hour.s(item.id, year, month, day, hour)) # mpoints_without_formula_group.append(cal_mpointstat_hour.s(item.id, year, month, day, hour))
cal_mpointstat_hour(item.id, year, month, day, hour) cal_mpointstat_hour(item.id, year, month, day, hour)
# 再统计其他测点 # 再统计其他测点
mpoints_other = Mpoint.objects.filter(is_auto=True).exclude(formula='') mpoints_other = Mpoint.objects.filter(is_auto=True, func_on_change='').exclude(formula='')
# mpoints_other_group = [] # mpoints_other_group = []
for item in mpoints_other: for item in mpoints_other:
# mpoints_other_group.append(cal_mpointstat_hour.s(item.id, year, month, day, hour)) # mpoints_other_group.append(cal_mpointstat_hour.s(item.id, year, month, day, hour))