feat: wpm 排班修改
This commit is contained in:
parent
22abc35d4b
commit
4c732894df
|
@ -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)
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue