From b8b1167f1774c41a6c23f1044cbf5e7b880594aa Mon Sep 17 00:00:00 2001 From: zty Date: Thu, 16 Jan 2025 13:56:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E6=B0=A8=E6=B0=B4?= =?UTF-8?q?=E6=B6=B2=E4=BD=8D=E8=AE=A1=20=E7=BB=91=E5=AE=9A=E5=AD=97?= =?UTF-8?q?=E6=AE=B5up=5Fdown=20=E8=AE=A1=E7=AE=97=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/enm/migrations/0054_mpoint_up_down.py | 18 ++++++++++++++++++ apps/enm/models.py | 1 + apps/enm/tasks.py | 11 +++++++++++ 3 files changed, 30 insertions(+) create mode 100644 apps/enm/migrations/0054_mpoint_up_down.py diff --git a/apps/enm/migrations/0054_mpoint_up_down.py b/apps/enm/migrations/0054_mpoint_up_down.py new file mode 100644 index 00000000..f6b4c7d5 --- /dev/null +++ b/apps/enm/migrations/0054_mpoint_up_down.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.12 on 2025-01-16 03:22 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('enm', '0053_auto_20241225_1508'), + ] + + operations = [ + migrations.AddField( + model_name='mpoint', + name='up_down', + field=models.BooleanField(default=False, verbose_name='上下行计算'), + ), + ] diff --git a/apps/enm/models.py b/apps/enm/models.py index 7f741338..d091df5f 100644 --- a/apps/enm/models.py +++ b/apps/enm/models.py @@ -23,6 +23,7 @@ class Mpoint(CommonBModel): MG_OFFLINE = -2 type = models.PositiveSmallIntegerField("类型", default=MT_AUTO, help_text="10:自动采集, 20:计算测点, 30:手动录入") + up_down = models.BooleanField("上下行计算", default=False) is_unit = models.BooleanField("是否单位量", default=False) name = models.CharField("测点名称", max_length=50) nickname = models.CharField("测点别名", max_length=50, null=True, blank=True) diff --git a/apps/enm/tasks.py b/apps/enm/tasks.py index a05459c8..d1ab7eae 100644 --- a/apps/enm/tasks.py +++ b/apps/enm/tasks.py @@ -185,6 +185,17 @@ def cal_mpointstat_hour(mpointId: str, year: int, month: int, day: int, hour: in val = MpLogx.objects.filter(mpoint=mpoint, timex__gte=dt, timex__lt=dt_hour_n).aggregate(sum=Sum(f'val_{mpoint.val_type}'))["sum"] if val is None: val = 0 + elif mpoint.up_down: + mrs0 = MpLogx.objects.filter(mpoint=mpoint, timex__gte=dt_hour_p, timex__lte=dt).order_by("timex") + mrs = MpLogx.objects.filter(mpoint=mpoint, timex__gte=dt, timex__lte=dt_hour_n).order_by("timex") + if mrs0.exists() and mrs.exists(): + last_val = getattr(mrs.last(), f'val_{val_type}') + first_val = getattr(mrs0.last(), f'val_{val_type}') + if last_val <= first_val: + val = first_val - last_val + else: + # 加入氨水 需要手动校正 ,目前先取绝对值。 + val = abs(first_val - last_val) else: mrs0 = MpLogx.objects.filter(mpoint=mpoint, timex__gte=dt_hour_p, timex__lte=dt).order_by("timex") mrs = MpLogx.objects.filter(mpoint=mpoint, timex__gte=dt, timex__lte=dt_hour_n).order_by("timex")