feat: 值班记录增加电耗统计
This commit is contained in:
parent
ddd3f6a5f0
commit
07a8e5977f
|
@ -6,6 +6,7 @@ from apps.utils.sql import DbConnection
|
||||||
from server.settings import get_sysconfig
|
from server.settings import get_sysconfig
|
||||||
from django.core.cache import cache
|
from django.core.cache import cache
|
||||||
from apps.enm.models import MpLog, Mpoint, MpointStat
|
from apps.enm.models import MpLog, Mpoint, MpointStat
|
||||||
|
from apps.wpm.models import SfLog
|
||||||
import datetime
|
import datetime
|
||||||
from django.db.models import Sum
|
from django.db.models import Sum
|
||||||
|
|
||||||
|
@ -14,23 +15,6 @@ def get_current_and_previous_time():
|
||||||
pre = now - datetime.timedelta(hours=1)
|
pre = now - datetime.timedelta(hours=1)
|
||||||
return now, pre
|
return now, pre
|
||||||
|
|
||||||
def get_current_and_previous_hour():
|
|
||||||
now = datetime.datetime.now()
|
|
||||||
current_hour = now.hour
|
|
||||||
current_date = now.date()
|
|
||||||
|
|
||||||
current_start_time = datetime.datetime.combine(current_date, datetime.time(current_hour, 0, 0))
|
|
||||||
current_end_time = datetime.datetime.combine(current_date, datetime.time(current_hour, 59, 59))
|
|
||||||
current_time_range = (current_start_time, current_end_time)
|
|
||||||
|
|
||||||
previous_hour = current_hour - 1 if current_hour > 0 else 23
|
|
||||||
previous_date = current_date if previous_hour < current_hour else current_date - datetime.timedelta(days=1)
|
|
||||||
|
|
||||||
previous_start_time = datetime.datetime.combine(previous_date, datetime.time(previous_hour, 0, 0))
|
|
||||||
previous_end_time = datetime.datetime.combine(previous_date, datetime.time(previous_hour, 59, 59))
|
|
||||||
previous_time_range = (previous_start_time, previous_end_time)
|
|
||||||
|
|
||||||
return current_time_range, previous_time_range
|
|
||||||
|
|
||||||
@shared_task(base=CustomTask)
|
@shared_task(base=CustomTask)
|
||||||
def get_tag_val():
|
def get_tag_val():
|
||||||
|
@ -69,7 +53,7 @@ def cal_mpointstat_hour(mpointId: str, year: int, month: int, day: int, hour: in
|
||||||
tag_update__hour= params['hour']).order_by('tag_update')
|
tag_update__hour= params['hour']).order_by('tag_update')
|
||||||
val = 0
|
val = 0
|
||||||
if mrs.exists():
|
if mrs.exists():
|
||||||
val = mrs.last() - mrs.first()
|
val = mrs.last().tag_val - mrs.first().tag_val
|
||||||
ms, _ = MpointStat.objects.get_or_create(**params, defaults=params)
|
ms, _ = MpointStat.objects.get_or_create(**params, defaults=params)
|
||||||
ms.val = val
|
ms.val = val
|
||||||
ms.save()
|
ms.save()
|
||||||
|
@ -106,3 +90,38 @@ def cal_mpointstats(is_now=1):
|
||||||
cal_mpointstat_hour.delay(mpoint.id, pre.year, pre.month, pre.day, pre.hour)
|
cal_mpointstat_hour.delay(mpoint.id, pre.year, pre.month, pre.day, pre.hour)
|
||||||
|
|
||||||
|
|
||||||
|
def cal_sflog_en_val(sflogId: str):
|
||||||
|
"""
|
||||||
|
计算某值班记录相应能耗
|
||||||
|
"""
|
||||||
|
sflog = SfLog.objects.get(id=sflogId)
|
||||||
|
mpoints = Mpoint.objects.filter(mgroup=sflog.mgroup)
|
||||||
|
# 统计电耗
|
||||||
|
mpoints_elec = mpoints.filter(cate='elec')
|
||||||
|
elec_val = 0
|
||||||
|
params = {'mpoint': mpoint, 'tag_update__gte': sflog.create_time, 'tag_update__lt': sflog.end_time}
|
||||||
|
for mpoint in mpoints_elec:
|
||||||
|
mrs = MpLog.objects.filter(**params).order_by('tag_update')
|
||||||
|
if mrs.exists():
|
||||||
|
elec_val += mrs.last().tag_val - mrs.first().tag_val
|
||||||
|
SfLog.objects.filter(id=sflog).update(elec_val=elec_val, cal_time=datetime.datetime.now())
|
||||||
|
|
||||||
|
|
||||||
|
@shared_task(base=CustomTask)
|
||||||
|
def cal_sflogs_en_val(is_today=1):
|
||||||
|
"""
|
||||||
|
计算班组能耗值, 默认开始时间是当天的
|
||||||
|
"""
|
||||||
|
now = datetime.datetime.now()
|
||||||
|
if is_today:
|
||||||
|
sflogs = SfLog.objects.filter(start_time__year=now.year, start_time__month=now.month, start_time__day=now.day)
|
||||||
|
for i in sflogs:
|
||||||
|
cal_sflog_en_val(i.id)
|
||||||
|
else:
|
||||||
|
pre = now - datetime.timedelta(days=1)
|
||||||
|
sflogs = SfLog.objects.filter(start_time__year=pre.year, start_time__month=pre.month, start_time__day=pre.day)
|
||||||
|
for i in sflogs:
|
||||||
|
cal_sflog_en_val(i.id)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
# Generated by Django 3.2.12 on 2023-06-25 09:09
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('wpm', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='sflog',
|
||||||
|
name='cal_time',
|
||||||
|
field=models.DateTimeField(blank=True, null=True, verbose_name='计算时间'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='sflog',
|
||||||
|
name='elec_val',
|
||||||
|
field=models.FloatField(blank=True, null=True, verbose_name='电耗值'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -25,6 +25,8 @@ class SfLog(CommonADModel):
|
||||||
note = models.TextField('其他备注', null=True, blank=True)
|
note = models.TextField('其他备注', null=True, blank=True)
|
||||||
stlogs = models.ManyToManyField('wpm.stlog', verbose_name='关联停机记录', through='wpm.stsflog')
|
stlogs = models.ManyToManyField('wpm.stlog', verbose_name='关联停机记录', through='wpm.stsflog')
|
||||||
qua_data = models.JSONField('质检数据', null=True, blank=True)
|
qua_data = models.JSONField('质检数据', null=True, blank=True)
|
||||||
|
elec_val = models.FloatField('电耗值', null=True, blank=True)
|
||||||
|
cal_time = models.DateTimeField('计算时间', null=True, blank=True)
|
||||||
|
|
||||||
|
|
||||||
class StSfLog(BaseModel):
|
class StSfLog(BaseModel):
|
||||||
|
|
|
@ -20,7 +20,7 @@ class SfLogSerializer(CustomModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = SfLog
|
model = SfLog
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
read_only_fields = EXCLUDE_FIELDS + ['leader', 'qua_data']
|
read_only_fields = EXCLUDE_FIELDS + ['leader', 'qua_data', 'cal_time', 'elec_val']
|
||||||
update_fields = ['start_time', 'end_time', 'note']
|
update_fields = ['start_time', 'end_time', 'note']
|
||||||
|
|
||||||
def validate(self, attrs):
|
def validate(self, attrs):
|
||||||
|
|
Loading…
Reference in New Issue