feat: 值班记录增加电耗统计

This commit is contained in:
caoqianming 2023-06-25 17:10:39 +08:00
parent ddd3f6a5f0
commit 07a8e5977f
4 changed files with 63 additions and 19 deletions

View File

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

View File

@ -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='电耗值'),
),
]

View File

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

View File

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