feat: 优化shutdown_or_startup导致的并发存库问题
This commit is contained in:
parent
61e84bd302
commit
1f227c7645
|
@ -44,39 +44,40 @@ def shutdown_or_startup(equipId: str, last_timex: datetime, last_mrs):
|
|||
equip.save(update_fields=["running_state"])
|
||||
|
||||
mgroup: Mgroup = equip.mgroup
|
||||
old_run = mgroup.is_runing
|
||||
indicate = equip.indicate_mgroup_running
|
||||
new_run = None
|
||||
|
||||
if mgroup and indicate:
|
||||
mrun = None
|
||||
if last_mrs in [Equipment.STOP, Equipment.FAILURE, Equipment.STANDBY]: # 设备停止信号
|
||||
if indicate in [Equipment.IM_DANDAN, Equipment.IM_DOUDAN]:
|
||||
mrun= False
|
||||
new_run = False
|
||||
else:
|
||||
if not Equipment.objects.filter(mgroup=mgroup, indicate_mgroup_running=indicate, running_state=Equipment.RUNING).exists():
|
||||
mrun = False
|
||||
new_run = False
|
||||
elif last_mrs == Equipment.RUNING: # 设备启动信号
|
||||
if indicate in [Equipment.IM_DANDAN, Equipment.IM_DANDOU]:
|
||||
mrun= True
|
||||
new_run = True
|
||||
else:
|
||||
if not Equipment.objects.filter(mgroup=mgroup, indicate_mgroup_running=indicate, running_state__in=[Equipment.STOP, Equipment.FAILURE, Equipment.STANDBY]).exists():
|
||||
mrun = True
|
||||
new_run = True
|
||||
|
||||
if mrun is not None:
|
||||
mgroup.is_runing = mrun
|
||||
if new_run is not None and new_run != old_run:
|
||||
mgroup.is_runing = new_run
|
||||
mgroup.save(update_fields=["is_runing"])
|
||||
|
||||
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 mrun: # 从停到开
|
||||
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 mrun is False and last_timex > last_stlog.end_time: # 从开到停
|
||||
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 mrun is False:
|
||||
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_runing = False
|
||||
mgroup.save()
|
||||
|
|
Loading…
Reference in New Issue