feat: 设备运行状态改变触发函数

This commit is contained in:
caoqianming 2024-04-16 15:02:07 +08:00
parent e78511b556
commit 86e9bf6776
1 changed files with 68 additions and 29 deletions

View File

@ -1,33 +1,72 @@
from .models import Equipment from .models import Equipment
from apps.system.models import Dept from apps.system.models import Dept
from apps.mtm.models import Mgroup from apps.mtm.models import Mgroup
import datetime
from .models import RuningState
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"])
mgroup = equip.mgroup
is_core_for_mgroup = equip.is_core_for_mgroup
if mgroup and is_core_for_mgroup:
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 last_mrs == RuningState.RUNING: # 从停到开
last_stlog.end_time = last_timex
last_stlog.duration = (last_stlog.end_time - last_stlog.start_time).total_seconds() / 3600
last_stlog.save()
mgroup.is_runing = True
mgroup.save()
cal_exp_duration_hour(last_stlog.id) # 触发时间分配
elif last_stlog.end_time and last_mrs != RuningState.RUNING 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))
mgroup.is_runing = False
mgroup.save()
else:
StLog.objects.create(title="停机", is_shutdown=True, mgroup=mgroup, end_time=None, start_time=last_timex, sflog=get_sflog(mgroup, last_timex))
mgroup.is_runing = False
mgroup.save()
def daoru_equipment(path: str): def daoru_equipment(path: str):
from apps.utils.snowflake import idWorker from apps.utils.snowflake import idWorker
from openpyxl import load_workbook from openpyxl import load_workbook
wb = load_workbook(path) wb = load_workbook(path)
sheet = wb.get_sheet_by_name('em_equipment') sheet = wb["em_equipment"]
i = 2 i = 2
while sheet[f'a{i}'].value: while sheet[f"a{i}"].value:
name = sheet[f'a{i}'].value name = sheet[f"a{i}"].value
number = sheet[f'b{i}'].value number = sheet[f"b{i}"].value
model = sheet[f'c{i}'].value model = sheet[f"c{i}"].value
parameter = sheet[f'd{i}'].value parameter = sheet[f"d{i}"].value
place = sheet[f'e{i}'].value place = sheet[f"e{i}"].value
power_kw = sheet[f'f{i}'].value power_kw = sheet[f"f{i}"].value
belong_dept_name = sheet[f'g{i}'].value belong_dept_name = sheet[f"g{i}"].value
mgroup_name = sheet[f'h{i}'].value mgroup_name = sheet[f"h{i}"].value
Equipment.objects.get_or_create( Equipment.objects.get_or_create(
number=number, number=number,
defaults={ defaults={
'id': idWorker.get_id(), "id": idWorker.get_id(),
'name': name, "name": name,
'model': model, "model": model,
'parameter': parameter, "parameter": parameter,
'place': place, "place": place,
'power_kw': power_kw, "power_kw": power_kw,
'belong_dept': Dept.objects.get(name=belong_dept_name) if belong_dept_name else None, "belong_dept": Dept.objects.get(name=belong_dept_name) if belong_dept_name else None,
'mgroup': Mgroup.objects.get(name=mgroup_name) if mgroup_name else None "mgroup": Mgroup.objects.get(name=mgroup_name) if mgroup_name else None,
} },
) )
i = i + 1 i = i + 1