diff --git a/apps/mtm/services.py b/apps/mtm/services.py index 0891e21d..218fb39b 100644 --- a/apps/mtm/services.py +++ b/apps/mtm/services.py @@ -116,12 +116,13 @@ def mgroup_run_change(mgroup: Mgroup, new_run: bool, last_timex: datetime, note: """ from apps.wpm.services import get_sflog from apps.wpm.tasks import cal_exp_duration_sec - from apps.wpm.models import StLog + from apps.wpm.models import StLog, SfLogExp mgroup.is_running = new_run mgroup.save(update_fields=["is_running"]) last_stlog = StLog.objects.filter(mgroup=mgroup, is_shutdown=True).order_by("-start_time").first() # 找到最后一次停机记录 + need_cal_exp = True if last_stlog: if last_timex >= last_stlog.start_time: # 认为是有效信号 if last_stlog.end_time is None and new_run: # 从停到开 @@ -129,22 +130,29 @@ def mgroup_run_change(mgroup: Mgroup, new_run: bool, last_timex: datetime, note: last_stlog.duration_sec = (last_stlog.end_time - last_stlog.start_time).total_seconds() last_stlog.save() elif last_stlog.end_time and new_run is False and last_timex > last_stlog.end_time: # 从开到停 - last_stlog, _ = StLog.objects.get_or_create( + cur_sflog = get_sflog(mgroup, last_timex) + last_stlog, is_created = StLog.objects.get_or_create( mgroup=mgroup, is_shutdown=True, start_time=last_timex, defaults={ 'title': '停机', 'end_time': None, - 'sflog': get_sflog(mgroup, last_timex), + 'sflog': cur_sflog, 'reason':note, } ) + if is_created: + SfLogExp.objects.get_or_create(stlog=last_stlog, sflog=cur_sflog) + need_cal_exp = False elif new_run is False: - last_stlog = StLog.objects.create(title="停机", is_shutdown=True, mgroup=mgroup, end_time=None, start_time=last_timex, sflog=get_sflog(mgroup, last_timex), reason = note) + cur_sflog = get_sflog(mgroup, last_timex) + last_stlog = StLog.objects.create(title="停机", is_shutdown=True, mgroup=mgroup, end_time=None, start_time=last_timex, sflog=cur_sflog, reason = note) mgroup.is_running = False mgroup.save() - if last_stlog: + SfLogExp.objects.get_or_create(stlog=last_stlog, sflog=cur_sflog) + need_cal_exp = False + if last_stlog and need_cal_exp: cal_exp_duration_sec(last_stlog.id) # 触发时间分配 def bind_routepack(ticket: Ticket, transition, new_ticket_data: dict):