feat: hour计数改为sec计数
This commit is contained in:
parent
e6fb2c8c72
commit
a3f5e48b8c
|
@ -0,0 +1,28 @@
|
|||
# Generated by Django 3.2.12 on 2024-05-15 01:49
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('enm', '0034_enstat_production_elec_unit'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='enstat',
|
||||
name='run_sec',
|
||||
field=models.PositiveIntegerField(default=0, help_text='s', verbose_name='运转时长'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='enstat',
|
||||
name='shut_sec',
|
||||
field=models.PositiveIntegerField(default=0, help_text='s', verbose_name='停机时长'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='enstat',
|
||||
name='total_sec_now',
|
||||
field=models.PositiveIntegerField(default=0, help_text='s', verbose_name='动态总时长'),
|
||||
),
|
||||
]
|
|
@ -135,6 +135,9 @@ class EnStat(BaseModel):
|
|||
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")
|
||||
total_sec_now = models.PositiveIntegerField("动态总时长", default=0, help_text="s")
|
||||
run_sec = models.PositiveIntegerField("运转时长", default=0, help_text="s")
|
||||
shut_sec = models.PositiveIntegerField("停机时长", default=0, help_text="s")
|
||||
total_hour_now = models.FloatField("动态总时长", default=0, help_text="h")
|
||||
run_hour = models.FloatField("运转时长", default=0, help_text="h")
|
||||
shut_hour = models.FloatField("停机时长", default=0, help_text="h")
|
||||
|
|
|
@ -527,14 +527,14 @@ def cal_enstat(type, sflogId, mgroupId, year, month, day, hour, year_s, month_s,
|
|||
enstat.save()
|
||||
# 运转时长相关
|
||||
if type != "hour_s" and "run_hour" in this_cal_attrs:
|
||||
enstat.total_hour_now, enstat.shut_hour = get_total_hour_now_and_shut_hour(enstat)
|
||||
enstat.run_hour = enstat.total_hour_now - enstat.shut_hour
|
||||
enstat.total_sec_now, enstat.shut_sec = get_total_hour_now_and_shut_hour(enstat)
|
||||
enstat.run_sec = enstat.total_sec_now - enstat.shut_sec
|
||||
try:
|
||||
enstat.run_rate = (enstat.run_hour / enstat.total_hour_now) * 100
|
||||
enstat.run_rate = (enstat.run_sec / enstat.total_sec_now) * 100
|
||||
except ZeroDivisionError:
|
||||
enstat.run_rate = 0
|
||||
try:
|
||||
enstat.production_hour = enstat.total_production / enstat.run_hour
|
||||
enstat.production_hour = enstat.total_production * 3600 / enstat.run_sec
|
||||
except ZeroDivisionError:
|
||||
enstat.production_hour = 0
|
||||
enstat.save()
|
||||
|
@ -562,22 +562,22 @@ def get_total_hour_now_and_shut_hour(enstat: EnStat):
|
|||
# return 1, 0
|
||||
if enstat.type == "sflog":
|
||||
sflog = enstat.sflog
|
||||
return sflog.total_hour_now, sflog.shut_hour
|
||||
return sflog.total_sec_now, sflog.shut_sec
|
||||
elif enstat.type == "day_s":
|
||||
res = SfLog.objects.filter(work_date__year=enstat.year_s, work_date__month=enstat.month_s, work_date__day=enstat.day_s, mgroup=enstat.mgroup).aggregate(
|
||||
sum1=Sum("total_hour_now"), sum2=Sum("shut_hour")
|
||||
sum1=Sum("total_sec_now"), sum2=Sum("shut_sec")
|
||||
)
|
||||
return res["sum1"] if res["sum1"] else 0, res["sum2"] if res["sum2"] else 0
|
||||
elif enstat.type == "month_st":
|
||||
res = SfLog.objects.filter(work_date__year=enstat.year_s, work_date__month=enstat.month_s, mgroup=enstat.mgroup, team=enstat.team).aggregate(
|
||||
sum1=Sum("total_hour_now"), sum2=Sum("shut_hour")
|
||||
sum1=Sum("total_sec_now"), sum2=Sum("shut_sec")
|
||||
)
|
||||
return res["sum1"] if res["sum1"] else 0, res["sum2"] if res["sum2"] else 0
|
||||
elif enstat.type == "month_s":
|
||||
res = SfLog.objects.filter(work_date__year=enstat.year_s, work_date__month=enstat.month_s, mgroup=enstat.mgroup).aggregate(sum1=Sum("total_hour_now"), sum2=Sum("shut_hour"))
|
||||
res = SfLog.objects.filter(work_date__year=enstat.year_s, work_date__month=enstat.month_s, mgroup=enstat.mgroup).aggregate(sum1=Sum("total_sec_now"), sum2=Sum("shut_sec"))
|
||||
return res["sum1"] if res["sum1"] else 0, res["sum2"] if res["sum2"] else 0
|
||||
elif enstat.type == "year_s":
|
||||
res = SfLog.objects.filter(work_date__year=enstat.year_s, mgroup=enstat.mgroup).aggregate(sum1=Sum("total_hour_now"), sum2=Sum("shut_hour"))
|
||||
res = SfLog.objects.filter(work_date__year=enstat.year_s, mgroup=enstat.mgroup).aggregate(sum1=Sum("total_sec_now"), sum2=Sum("shut_sec"))
|
||||
return res["sum1"] if res["sum1"] else 0, res["sum2"] if res["sum2"] else 0
|
||||
|
||||
|
||||
|
|
|
@ -92,7 +92,8 @@ def mgroup_run_change(mgroup: Mgroup, new_run: bool, last_timex: datetime):
|
|||
if last_timex >= last_stlog.start_time: # 认为是有效信号
|
||||
if last_stlog.end_time is None and new_run: # 从停到开
|
||||
last_stlog.end_time = last_timex
|
||||
last_stlog.duration = (last_stlog.end_time - last_stlog.start_time).total_seconds() / 3600
|
||||
last_stlog.duration_sec = (last_stlog.end_time - last_stlog.start_time).total_seconds()
|
||||
last_stlog.duration = last_stlog.duration_sec / 3600
|
||||
last_stlog.save()
|
||||
cal_exp_duration_hour(last_stlog.id) # 触发时间分配
|
||||
elif last_stlog.end_time and new_run is False and last_timex > last_stlog.end_time: # 从开到停
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
# Generated by Django 3.2.12 on 2024-05-15 01:49
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('wpm', '0043_alter_stlog_unique_together'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='sflog',
|
||||
name='shut_sec',
|
||||
field=models.PositiveIntegerField(default=0, verbose_name='停机时长'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='sflog',
|
||||
name='total_sec',
|
||||
field=models.PositiveIntegerField(default=43200, verbose_name='总时长'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='sflog',
|
||||
name='total_sec_now',
|
||||
field=models.PositiveIntegerField(default=0, verbose_name='总时长动'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='sflogexp',
|
||||
name='duration_sec',
|
||||
field=models.PositiveIntegerField(default=0, verbose_name='持续时长(s)'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='stlog',
|
||||
name='duration_sec',
|
||||
field=models.PositiveIntegerField(default=0, verbose_name='持续时长(s)'),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,23 @@
|
|||
# Generated by Django 3.2.12 on 2024-05-15 02:01
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('wpm', '0044_auto_20240515_0949'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='sflogexp',
|
||||
name='duration_sec',
|
||||
field=models.PositiveIntegerField(blank=True, null=True, verbose_name='持续时长(s)'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='stlog',
|
||||
name='duration_sec',
|
||||
field=models.PositiveIntegerField(blank=True, null=True, verbose_name='持续时长(s)'),
|
||||
),
|
||||
]
|
|
@ -29,6 +29,9 @@ class SfLog(CommonADModel):
|
|||
stlogs = models.ManyToManyField(
|
||||
'wpm.stlog', verbose_name='关联异常记录', through='wpm.sflogexp', related_name='sflog_stlogs')
|
||||
last_test_time = models.DateTimeField('最后质检时间', null=True, blank=True)
|
||||
total_sec_now = models.PositiveIntegerField('总时长动', default=0)
|
||||
total_sec = models.PositiveIntegerField('总时长', default=43200)
|
||||
shut_sec = models.PositiveIntegerField('停机时长', default=0)
|
||||
total_hour_now = models.FloatField('总时长动', default=0)
|
||||
total_hour = models.FloatField('总时长', default=12)
|
||||
shut_hour = models.FloatField('停机时长', default=0)
|
||||
|
@ -59,6 +62,7 @@ class StLog(CommonADModel):
|
|||
'wpm.sflog', verbose_name='关联所有当班', through='wpm.sflogexp', related_name='stlog_sflogs')
|
||||
start_time = models.DateTimeField('发生时间')
|
||||
end_time = models.DateTimeField('结束时间', null=True, blank=True)
|
||||
duration_sec = models.PositiveIntegerField('持续时长(s)', null=True, blank=True)
|
||||
duration = models.FloatField('持续时间(h)', null=True, blank=True)
|
||||
cate = models.CharField('原因类别', max_length=10, null=True, blank=True)
|
||||
reason = models.TextField('事件原因', default='', max_length=100)
|
||||
|
@ -79,6 +83,7 @@ class SfLogExp(CommonADModel):
|
|||
stlog = models.ForeignKey(
|
||||
StLog, verbose_name='关联异常记录', on_delete=models.CASCADE)
|
||||
duration = models.FloatField('持续时长(h)', null=True, blank=True)
|
||||
duration_sec = models.PositiveIntegerField('持续时长(s)', null=True, blank=True)
|
||||
note = models.TextField('处理备注', default='', blank=True)
|
||||
|
||||
|
||||
|
|
|
@ -43,8 +43,8 @@ def make_sflogs(mgroup: Mgroup, start_date: datetime.date, end_date: datetime.da
|
|||
end_time += datetime.timedelta(days=1)
|
||||
else:
|
||||
start_time -= datetime.timedelta(days=1)
|
||||
duration = end_time - start_time
|
||||
total_hour = duration.total_seconds() / 3600
|
||||
total_sec = (end_time - start_time).total_seconds
|
||||
total_hour = total_sec / 3600
|
||||
SfLog.objects.get_or_create(mgroup=mgroup, shift=shift, start_time=start_time, defaults={
|
||||
"mgroup": mgroup,
|
||||
"shift": shift,
|
||||
|
@ -53,6 +53,8 @@ def make_sflogs(mgroup: Mgroup, start_date: datetime.date, end_date: datetime.da
|
|||
"end_time": end_time,
|
||||
"total_hour_now": total_hour,
|
||||
"total_hour": total_hour,
|
||||
"total_sec_now": total_sec,
|
||||
"total_sec": total_sec,
|
||||
"create_by": create_by
|
||||
})
|
||||
current_date = current_date + datetime.timedelta(days=1)
|
||||
|
|
|
@ -42,18 +42,23 @@ def get_total_hour_now(sflogId: str=''):
|
|||
sflog = SfLog.objects.get(id=sflogId)
|
||||
if sflog.end_time <= now:
|
||||
sflog.total_hour_now = sflog.total_hour
|
||||
sflog.total_sec_now = sflog.total_sec
|
||||
else:
|
||||
total_hour_now = (now-sflog.start_time).total_seconds()/3600
|
||||
sflog.total_hour_now = total_hour_now if total_hour_now > 0 else 0
|
||||
total_sec_now = (now-sflog.start_time).total_seconds()
|
||||
sflog.total_sec_now = total_sec_now if total_sec_now > 0 else 0
|
||||
sflog.total_hour_now = total_sec_now/3600 if total_sec_now > 0 else 0
|
||||
sflog.save()
|
||||
return sflog.total_hour_now
|
||||
else:
|
||||
SfLog.objects.filter(end_time__lte=now).exclude(
|
||||
total_hour_now=F('total_hour')).update(total_hour_now=F('total_hour'))
|
||||
SfLog.objects.filter(end_time__lte=now).exclude(
|
||||
total_sec_now=F('total_sec')).update(total_sec_now=F('total_sec'))
|
||||
sf_qs = SfLog.objects.filter(end_time__gt=now)
|
||||
for i in sf_qs:
|
||||
total_hour_now = (now-i.start_time).total_seconds()/3600
|
||||
i.total_hour_now = total_hour_now if total_hour_now > 0 else 0
|
||||
total_sec_now = (now-i.start_time).total_seconds()
|
||||
i.total_sec_now = total_sec_now if total_sec_now > 0 else 0
|
||||
i.total_hour_now = total_sec_now/3600 if total_sec_now > 0 else 0
|
||||
i.save()
|
||||
|
||||
|
||||
|
@ -94,16 +99,20 @@ def cal_exp_duration_hour(stlogId: str='', all=False):
|
|||
total_seconds = duration_item_delta.total_seconds()
|
||||
if total_seconds < 0:
|
||||
duration_item = 0
|
||||
duration_item_sec = 0
|
||||
else:
|
||||
duration_item_sec = total_seconds
|
||||
duration_item = total_seconds/3600
|
||||
sflogexp.duration = duration_item
|
||||
sflogexp.duration_sec = duration_item_sec
|
||||
sflogexp.save()
|
||||
if is_shutdown_stlog:
|
||||
# 计算每班的总停机时间
|
||||
ret = SfLogExp.objects.filter(
|
||||
sflog=sflog, stlog__is_shutdown=True).aggregate(sum=Sum('duration'))
|
||||
sflog=sflog, stlog__is_shutdown=True).aggregate(sum=Sum('duration'), sum1=Sum('duration_sec'))
|
||||
if ret.get('sum', 0):
|
||||
sflog.shut_hour = ret['sum']
|
||||
sflog.shut_sec = ret['sum1']
|
||||
sflog.save()
|
||||
# 更新sflog总时长
|
||||
if sflog.end_time > now:
|
||||
|
|
Loading…
Reference in New Issue