From f0a748e304a1e176d07b3e4595922bbe0ef9bdd9 Mon Sep 17 00:00:00 2001 From: zty Date: Mon, 25 Nov 2024 17:45:08 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E4=BF=AE=E6=94=B9=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E7=94=9F=E6=88=90=E7=8F=AD=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wpm/services.py | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/apps/wpm/services.py b/apps/wpm/services.py index d24fde94..80cb1908 100644 --- a/apps/wpm/services.py +++ b/apps/wpm/services.py @@ -52,6 +52,23 @@ def get_sflog(mgroup: Mgroup, happen_time: datetime): start_time__lte=happen_time, end_time__gt=happen_time, mgroup=mgroup).order_by('-start_time').first() return sflog +def get_team(mgroup: Mgroup, team_ids: list): + from apps.mtm.models import Srule + # 获取 r_list 列表 + teams_ins = Srule.objects.get(mgroup=mgroup) + # 提取team_id + teams = [team['team'] for team in teams_ins.r_list] + # 找到 team_ids 匹配段的结束位置 + start_idx = -1 + for i in range(len(teams)-len(team_ids)+1): + if teams[i:i+len(team_ids)] == team_ids: + start_idx = i + break + if start_idx == -1: + raise ParseError("无法找到匹配的段") + # 获取匹配段的结束位置 + new_team = teams[start_idx+len(team_ids)] if start_idx != -1 and start_idx+len(team_ids) < len(teams) else None + return new_team def make_sflogs(mgroup: Mgroup, start_date: datetime.date, end_date: datetime.date, create_by=None): shift_rule = mgroup.shift_rule @@ -70,6 +87,14 @@ def make_sflogs(mgroup: Mgroup, start_date: datetime.date, end_date: datetime.da else: start_time -= datetime.timedelta(days=1) total_sec = (end_time - start_time).total_seconds() + # 创建之前查询最后三条记录 + all_teams = SfLog.objects.filter(mgroup=mgroup, start_time__lt=start_time).order_by('-start_time').values_list('team', flat=True) + # 如果最后一条记录的team_id为空,则继续向前取三条 + from itertools import islice + # 获取前三个非空值 + last_teams = list(islice(all_teams, 3)) + new_team = get_team(mgroup=mgroup, team_ids=last_teams) + # 创建SfLog记录 SfLog.objects.get_or_create(mgroup=mgroup, shift=shift, start_time=start_time, defaults={ "mgroup": mgroup, "shift": shift, @@ -78,7 +103,8 @@ def make_sflogs(mgroup: Mgroup, start_date: datetime.date, end_date: datetime.da "end_time": end_time, "total_sec_now": total_sec, "total_sec": total_sec, - "create_by": create_by + "create_by": create_by, + "team": new_team }) current_date = current_date + datetime.timedelta(days=1)