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 daoru_equipment(path:str):
from apps.utils.snowflake import idWorker def shutdown_or_startup(equipId: str, last_timex: datetime, last_mrs):
from openpyxl import load_workbook """
wb = load_workbook(path) last_mrs 设备运行状态值
sheet = wb.get_sheet_by_name('em_equipment') """
i = 2 from apps.wpm.models import StLog
while sheet[f'a{i}'].value: from apps.wpm.tasks import cal_exp_duration_hour
name = sheet[f'a{i}'].value from apps.wpm.services import get_sflog
number = sheet[f'b{i}'].value
model = sheet[f'c{i}'].value equip = Equipment.objects.get(id=equipId)
parameter = sheet[f'd{i}'].value equip.running_state = last_mrs
place = sheet[f'e{i}'].value equip.save(update_fields=["running_state"])
power_kw = sheet[f'f{i}'].value
belong_dept_name = sheet[f'g{i}'].value mgroup = equip.mgroup
mgroup_name = sheet[f'h{i}'].value is_core_for_mgroup = equip.is_core_for_mgroup
Equipment.objects.get_or_create( if mgroup and is_core_for_mgroup:
number=number, last_stlog = StLog.objects.filter(mgroup=mgroup, is_shutdown=True).order_by("-start_time").first() # 找到最后一次停机记录
defaults={ if last_stlog:
'id': idWorker.get_id(), if last_timex >= last_stlog.start_time: # 认为是有效信号
'name': name, if last_stlog.end_time is None and last_mrs == RuningState.RUNING: # 从停到开
'model': model, last_stlog.end_time = last_timex
'parameter': parameter, last_stlog.duration = (last_stlog.end_time - last_stlog.start_time).total_seconds() / 3600
'place': place, last_stlog.save()
'power_kw': power_kw, mgroup.is_runing = True
'belong_dept': Dept.objects.get(name=belong_dept_name) if belong_dept_name else None, mgroup.save()
'mgroup': Mgroup.objects.get(name=mgroup_name) if mgroup_name else None 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))
i = i + 1 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):
from apps.utils.snowflake import idWorker
from openpyxl import load_workbook
wb = load_workbook(path)
sheet = wb["em_equipment"]
i = 2
while sheet[f"a{i}"].value:
name = sheet[f"a{i}"].value
number = sheet[f"b{i}"].value
model = sheet[f"c{i}"].value
parameter = sheet[f"d{i}"].value
place = sheet[f"e{i}"].value
power_kw = sheet[f"f{i}"].value
belong_dept_name = sheet[f"g{i}"].value
mgroup_name = sheet[f"h{i}"].value
Equipment.objects.get_or_create(
number=number,
defaults={
"id": idWorker.get_id(),
"name": name,
"model": model,
"parameter": parameter,
"place": place,
"power_kw": power_kw,
"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,
},
)
i = i + 1