diff --git a/apps/enm/tasks.py b/apps/enm/tasks.py index 2cfa5382..35c78397 100644 --- a/apps/enm/tasks.py +++ b/apps/enm/tasks.py @@ -6,6 +6,7 @@ from apps.utils.sql import DbConnection from server.settings import get_sysconfig from django.core.cache import cache from apps.enm.models import MpLog, Mpoint, MpointStat +from apps.wpm.models import SfLog import datetime from django.db.models import Sum @@ -14,23 +15,6 @@ def get_current_and_previous_time(): pre = now - datetime.timedelta(hours=1) 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) 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') val = 0 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.val = val 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) +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) + + + diff --git a/apps/wpm/migrations/0002_auto_20230625_1709.py b/apps/wpm/migrations/0002_auto_20230625_1709.py new file mode 100644 index 00000000..ec28e2db --- /dev/null +++ b/apps/wpm/migrations/0002_auto_20230625_1709.py @@ -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='电耗值'), + ), + ] diff --git a/apps/wpm/models.py b/apps/wpm/models.py index 0d950f51..45c28919 100644 --- a/apps/wpm/models.py +++ b/apps/wpm/models.py @@ -25,6 +25,8 @@ class SfLog(CommonADModel): note = models.TextField('其他备注', null=True, blank=True) stlogs = models.ManyToManyField('wpm.stlog', verbose_name='关联停机记录', through='wpm.stsflog') 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): diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index 6bfc5aa3..87400333 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -20,7 +20,7 @@ class SfLogSerializer(CustomModelSerializer): class Meta: model = SfLog 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'] def validate(self, attrs):