diff --git a/apps/em/filters.py b/apps/em/filters.py index cbe92c62..4d8e55f9 100644 --- a/apps/em/filters.py +++ b/apps/em/filters.py @@ -27,14 +27,24 @@ class EquipFilterSet(filters.FilterSet): "cate__is_car": ['exact'] } + # def filter_tag(self, queryset, name, value): + # now = datetime.now() + # if value == 'near_check': + # queryset = queryset.filter( + # next_check_date__lt=datetime.date(now + timedelta(days=F('remind_day_number'))), next_check_date__gte=datetime.date(now)) + + # elif value == 'out_check': + # queryset = queryset.filter( + # next_check_date__lte=datetime.date(now)) + # return queryset + def filter_tag(self, queryset, name, value): now = datetime.now() + day7_after = now + timedelta(days=7) if value == 'near_check': queryset = queryset.filter( - next_check_date__lt=datetime.date(now + timedelta(days=F('remind_day_number'))), next_check_date__gte=datetime.date(now)) + next_check_date__lt=datetime.date(day7_after), next_check_date__gte=datetime.date(now)) elif value == 'out_check': queryset = queryset.filter( - next_check_date__lte=datetime.date(now)) + next_check_date__lte=datetime.date(now)) return queryset - - diff --git a/apps/enm/migrations/0048_auto_20241129_1649.py b/apps/enm/migrations/0048_auto_20241129_1649.py new file mode 100644 index 00000000..89daaf85 --- /dev/null +++ b/apps/enm/migrations/0048_auto_20241129_1649.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.12 on 2024-11-29 08:49 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('enm', '0047_enstat2_cliker_price_cost'), + ] + + operations = [ + migrations.AddField( + model_name='mpointstat', + name='val_level', + field=models.CharField(blank=True, help_text='peak/high/flat/low/deep', max_length=50, null=True, verbose_name='峰谷平'), + ), + migrations.AlterField( + model_name='enstat', + name='en_consume_unit', + field=models.FloatField(default=0, help_text='kgce/t', verbose_name='单位产品能耗'), + ), + ] diff --git a/apps/enm/models.py b/apps/enm/models.py index edd1abf9..2b06f3fd 100644 --- a/apps/enm/models.py +++ b/apps/enm/models.py @@ -100,6 +100,7 @@ class MpointStat(CommonADModel): mgroup = models.ForeignKey(Mgroup, verbose_name="关联测点集", on_delete=models.CASCADE, null=True, blank=True) mpoint = models.ForeignKey(Mpoint, verbose_name="关联测点", on_delete=models.CASCADE) val = models.FloatField("统计值", default=0) + val_level = models.CharField("峰谷平", max_length=50, null=True, blank=True, help_text="peak/high/flat/low/deep") val_origin = models.FloatField("统计原始值", default=0) val_correct = models.FloatField("统计矫正值", null=True, blank=True) total_production = models.FloatField("总产量", default=0, help_text="t") @@ -144,7 +145,7 @@ class EnStat(BaseModel): elec_consume_unit = models.FloatField("单位产品分布电耗", default=0, help_text="kw·h/t") celec_consume_unit = models.FloatField("单位产品综合电耗", default=0, help_text="kw·h/t") coal_consume_unit = models.FloatField("单位产品标煤耗", default=0, help_text="kgce/t") - en_consume_unit = models.FloatField("单位产品能耗", default=0, help_text="tce/t") + en_consume_unit = models.FloatField("单位产品能耗", default=0, help_text="kgce/t") cen_consume_unit = models.FloatField("单位产品综合能耗", default=0, help_text="kgce/t") production_hour = models.FloatField("台时产量/发电功率", default=0, help_text="t/h") production_elec_unit = models.FloatField("吨熟料发电量", default=0, help_text="kw·h/t") diff --git a/apps/wpm/services.py b/apps/wpm/services.py index abacb360..4be872f7 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 +from apps.mtm.models import Mgroup, Shift, Material, Route, RoutePack, Team from .models import SfLog, WMaterial, Mlog, Mlogb, Handover, Handoverb from apps.mtm.services import cal_material_count @@ -67,11 +67,27 @@ def get_team(team_ids: list): start_idx = i break if start_idx == -1: - raise ParseError("无法找到匹配的段") + 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 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 make_sflogs(mgroup: Mgroup, start_date: datetime.date, end_date: datetime.date, create_by=None): shift_rule = mgroup.shift_rule shifts = Shift.objects.filter(rule=shift_rule) # 根据排班规则制定排班记录 @@ -95,7 +111,14 @@ def make_sflogs(mgroup: Mgroup, start_date: datetime.date, end_date: datetime.da from itertools import islice # 获取前三个非空值并且列表反转 last_teams = list(islice(all_teams, 3)) - new_team = get_team(team_ids=last_teams[::-1]) + # 甲乙丙丁的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}, transfer_id: {last_teams_ids}, new_team: {new_team}---leader_obj---: {leader_obj}' ) + # 在创建SfLog记录之前检查SfLog记录中的team_id 如果没有则生成team_id + SfLog.objects.filter(mgroup=mgroup, shift=shift, start_time=start_time, team__isnull=True).update(team=team_obj, leader=leader_obj) # 创建SfLog记录 SfLog.objects.get_or_create(mgroup=mgroup, shift=shift, start_time=start_time, defaults={ "mgroup": mgroup, @@ -106,7 +129,8 @@ def make_sflogs(mgroup: Mgroup, start_date: datetime.date, end_date: datetime.da "total_sec_now": total_sec, "total_sec": total_sec, "create_by": create_by, - "team_id": new_team + "team": team_obj if team_obj else None, + "leader": leader_obj, }) current_date = current_date + datetime.timedelta(days=1)