feat: wpm 排班修改

This commit is contained in:
zty 2024-12-05 18:19:58 +08:00
parent 22abc35d4b
commit 4c732894df
1 changed files with 21 additions and 34 deletions

View File

@ -9,7 +9,7 @@ from rest_framework.exceptions import ParseError
from apps.system.models import User from apps.system.models import User
from apps.pm.models import Mtask from apps.pm.models import Mtask
from apps.mtm.models import Mgroup, Shift, Material, Route, RoutePack, Team from apps.mtm.models import Mgroup, Shift, Material, Route, RoutePack, Team, Srule
from .models import SfLog, WMaterial, Mlog, Mlogb, Handover, Handoverb from .models import SfLog, WMaterial, Mlog, Mlogb, Handover, Handoverb
from apps.mtm.services import cal_material_count from apps.mtm.services import cal_material_count
@ -73,21 +73,19 @@ def get_team(team_ids: list):
new_team = teams[start_idx+len(team_ids)] if start_idx != -1 and start_idx+len(team_ids) < len(teams) else 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 return new_team
def transfer_id(ids: list): # def get_team_x(sflog: SfLog):
# 定义映射关系 # return None
myLogger.info(f'ids: {ids}') # srule = Srule.objects.filter(belong_dept=sflog.mgroup.belong_dept).first()
id_map = { # if srule:
'3638336850428891136': '3638336268729290752', # 甲班 # rule = srule.rule
'3638336641443454976': '3638336268729290752', # teamId_list_x = [x["team"] for x in rule]
'3638336974311886848': '3638336467035951104', # 乙班 # teamId_list = SfLog.objects.filter().values_list('team_id', flat=True)
'3638336755830394880': '3638336467035951104', # if None in teamId_list:
'3658828429509636096': '3658827531760709632', # 丙班 # pass
'3658828156108124160': '3658827531760709632', # else:
'3658828538804809728': '3658828006002499584', # 丁班 # pass
'3658828324081610752': '3658828006002499584', # return None
}
# 使用列表推导式进行转换
return [id_map.get(i, i) for i in ids]
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):
shift_rule = mgroup.shift_rule shift_rule = mgroup.shift_rule
@ -106,24 +104,9 @@ def make_sflogs(mgroup: Mgroup, start_date: datetime.date, end_date: datetime.da
else: else:
start_time -= datetime.timedelta(days=1) start_time -= datetime.timedelta(days=1)
total_sec = (end_time - start_time).total_seconds() total_sec = (end_time - start_time).total_seconds()
# 创建之前查询最后三条记录
if SfLog.objects.filter(mgroup=mgroup, shift=shift, start_time=start_time, team__isnull=True):
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))
# 甲乙丙丁的id 是根据车间划分需要处理
last_teams_ids = transfer_id(last_teams)
new_team = get_team(team_ids=list(reversed(last_teams_ids)))
team_obj = Team.objects.filter(id=new_team).first() if new_team else None
leader_obj = getattr(team_obj, 'leader', None)
myLogger.info(f'mgrop_name: {mgroup.name},last_teams: {last_teams[::-1]}, transfer_id: {last_teams_ids[::-1]}, team_name: {team_obj.name}---new_team: {new_team}---leader_obj---: {leader_obj}' )
SfLog.objects.filter(mgroup=mgroup, shift=shift, start_time=start_time, team__isnull=True).update(team=team_obj, leader=leader_obj)
else:
pass
# 创建SfLog记录 # 创建SfLog记录
SfLog.objects.get_or_create(mgroup=mgroup, shift=shift, start_time=start_time, defaults={ sflog, is_created = SfLog.objects.get_or_create(mgroup=mgroup, shift=shift, start_time=start_time, defaults={
"mgroup": mgroup, "mgroup": mgroup,
"shift": shift, "shift": shift,
"work_date": current_date, "work_date": current_date,
@ -131,8 +114,12 @@ def make_sflogs(mgroup: Mgroup, start_date: datetime.date, end_date: datetime.da
"end_time": end_time, "end_time": end_time,
"total_sec_now": total_sec, "total_sec_now": total_sec,
"total_sec": total_sec, "total_sec": total_sec,
"create_by": create_by, "create_by": create_by
}) })
# if is_created:
# sflog.team = get_team_x(sflog)
# if sflog.team:
# sflog.save(update_fields=['team'])
current_date = current_date + datetime.timedelta(days=1) current_date = current_date + datetime.timedelta(days=1)