feat: 根据排班规则填入班组

This commit is contained in:
caoqianming 2024-12-05 18:59:55 +08:00
parent 2b10f3bfff
commit 17622f230e
1 changed files with 22 additions and 34 deletions

View File

@ -17,6 +17,7 @@ from apps.wf.models import Ticket
from apps.utils.thread import MyThread from apps.utils.thread import MyThread
import logging import logging
from apps.wpm.services_2 import get_alldata_with_batch_and_store from apps.wpm.services_2 import get_alldata_with_batch_and_store
from datetime import timedelta
myLogger = logging.getLogger('log') myLogger = logging.getLogger('log')
def generate_new_batch(old_batch: str, mlog: Mlog): def generate_new_batch(old_batch: str, mlog: Mlog):
@ -55,36 +56,22 @@ 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() start_time__lte=happen_time, end_time__gt=happen_time, mgroup=mgroup).order_by('-start_time').first()
return sflog return sflog
def get_team(team_ids: list): def get_team_x(sflog: SfLog):
from apps.mtm.models import Srule srule = Srule.objects.filter(belong_dept=sflog.mgroup.belong_dept).first()
# 获取 r_list 列表 if srule and srule.rule:
teams_ = Srule.objects.all().values_list('rule', flat=True) rule = srule.rule
# 提取team_id rule_compare = rule + rule
teams = [team['team'] for team in teams_[0]] teamId_list = (SfLog.objects.filter(mgroup=sflog.mgroup, start_time__lt=sflog.start_time, start_time__gte=sflog.start_time - timedelta(days=5)).order_by('-start_time').values_list('team_id', flat=True)[:3])[::-1]
# 找到 team_ids 匹配段的结束位置 if None in teamId_list:
start_idx = -1 pass
for i in range(len(teams)-len(team_ids)+1): else:
if teams[i:i+len(team_ids)] == team_ids: teamId_list_len = len(teamId_list)
start_idx = i for i in range(len(rule_compare)-teamId_list_len+1):
break if rule_compare[i:i+teamId_list_len] == teamId_list:
if start_idx == -1: teamId = rule_compare[i+teamId_list_len+1]
return None team = Team.objects.filter(id=teamId).first()
# 获取匹配段的结束位置 return team
new_team = teams[start_idx+len(team_ids)] if start_idx != -1 and start_idx+len(team_ids) < len(teams) else None return None
return new_team
# def get_team_x(sflog: SfLog):
# return None
# srule = Srule.objects.filter(belong_dept=sflog.mgroup.belong_dept).first()
# if srule:
# rule = srule.rule
# teamId_list_x = [x["team"] for x in rule]
# teamId_list = SfLog.objects.filter().values_list('team_id', flat=True)
# if None in teamId_list:
# pass
# else:
# pass
# return None
def make_sflogs(mgroup: Mgroup, start_date: datetime.date, end_date: datetime.date, create_by=None): def make_sflogs(mgroup: Mgroup, start_date: datetime.date, end_date: datetime.date, create_by=None):
@ -116,10 +103,11 @@ def make_sflogs(mgroup: Mgroup, start_date: datetime.date, end_date: datetime.da
"total_sec": total_sec, "total_sec": total_sec,
"create_by": create_by "create_by": create_by
}) })
# if is_created: if is_created:
# sflog.team = get_team_x(sflog) team = get_team_x(sflog)
# if sflog.team: if team:
# sflog.save(update_fields=['team']) sflog.team = team
sflog.save(update_fields=['team'])
current_date = current_date + datetime.timedelta(days=1) current_date = current_date + datetime.timedelta(days=1)