From 4c732894df7f99a8b786e86365f92026382ec6e3 Mon Sep 17 00:00:00 2001 From: zty Date: Thu, 5 Dec 2024 18:19:58 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20wpm=20=E6=8E=92=E7=8F=AD=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wpm/services.py | 55 +++++++++++++++++--------------------------- 1 file changed, 21 insertions(+), 34 deletions(-) diff --git a/apps/wpm/services.py b/apps/wpm/services.py index 7dec615e..00b6531e 100644 --- a/apps/wpm/services.py +++ b/apps/wpm/services.py @@ -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)