add : enm 增加峰谷平电量统计
This commit is contained in:
parent
d9a1512a92
commit
c0169d25ac
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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='单位产品能耗'),
|
||||
),
|
||||
]
|
|
@ -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")
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
Loading…
Reference in New Issue