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.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 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
return new_team
def transfer_id(ids: list):
# 定义映射关系
myLogger.info(f'ids: {ids}')
id_map = {
'3638336850428891136': '3638336268729290752', # 甲班
'3638336641443454976': '3638336268729290752',
'3638336974311886848': '3638336467035951104', # 乙班
'3638336755830394880': '3638336467035951104',
'3658828429509636096': '3658827531760709632', # 丙班
'3658828156108124160': '3658827531760709632',
'3658828538804809728': '3658828006002499584', # 丁班
'3658828324081610752': '3658828006002499584',
}
# 使用列表推导式进行转换
return [id_map.get(i, i) for i in ids]
# 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):
shift_rule = mgroup.shift_rule
@ -106,24 +104,9 @@ 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()
# 创建之前查询最后三条记录
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.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,
"shift": shift,
"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,
"total_sec_now": 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)