add : enm 增加峰谷平电量统计

This commit is contained in:
zty 2024-12-02 15:26:12 +08:00
parent d9a1512a92
commit c0169d25ac
4 changed files with 67 additions and 9 deletions

View File

@ -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

View File

@ -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='单位产品能耗'),
),
]

View File

@ -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")

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
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)