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
import logging
from apps.wpm.services_2 import get_alldata_with_batch_and_store
from datetime import timedelta
myLogger = logging.getLogger('log')
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()
return sflog
def get_team(team_ids: list):
from apps.mtm.models import Srule
# 获取 r_list 列表
teams_ = Srule.objects.all().values_list('rule', flat=True)
# 提取team_id
teams = [team['team'] for team in teams_[0]]
# 找到 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:
def get_team_x(sflog: SfLog):
srule = Srule.objects.filter(belong_dept=sflog.mgroup.belong_dept).first()
if srule and srule.rule:
rule = srule.rule
rule_compare = rule + rule
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]
if None in teamId_list:
pass
else:
teamId_list_len = len(teamId_list)
for i in range(len(rule_compare)-teamId_list_len+1):
if rule_compare[i:i+teamId_list_len] == teamId_list:
teamId = rule_compare[i+teamId_list_len+1]
team = Team.objects.filter(id=teamId).first()
return team
return None
# 获取匹配段的结束位置
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 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):
@ -116,10 +103,11 @@ def make_sflogs(mgroup: Mgroup, start_date: datetime.date, end_date: datetime.da
"total_sec": total_sec,
"create_by": create_by
})
# if is_created:
# sflog.team = get_team_x(sflog)
# if sflog.team:
# sflog.save(update_fields=['team'])
if is_created:
team = get_team_x(sflog)
if team:
sflog.team = team
sflog.save(update_fields=['team'])
current_date = current_date + datetime.timedelta(days=1)