diff --git a/apps/enm/filters.py b/apps/enm/filters.py index a1151fa3..d2d174ae 100644 --- a/apps/enm/filters.py +++ b/apps/enm/filters.py @@ -3,10 +3,12 @@ from apps.enm.models import MpointStat, EnStat, EnStat2 from datetime import datetime from django.db.models import F, Q + class MpointStatFilter(filters.FilterSet): - has_create_by = filters.BooleanFilter(method='filter_has_create_by') - start_time = filters.CharFilter(method='filter_start_time') - end_time = filters.CharFilter(method='filter_end_time') + has_create_by = filters.BooleanFilter(method="filter_has_create_by") + start_time = filters.CharFilter(method="filter_start_time") + end_time = filters.CharFilter(method="filter_end_time") + class Meta: model = MpointStat fields = { @@ -29,8 +31,7 @@ class MpointStatFilter(filters.FilterSet): "year_s": ["exact"], "create_by": ["exact"], "type": ["exact"], - "mpoint__is_all": ["exact"], - "mpoint__is_auto": ["exact"] + "mpoint__is_auto": ["exact"], } def filter_has_create_by(self, queryset, name, value): @@ -42,55 +43,47 @@ class MpointStatFilter(filters.FilterSet): def filter_start_time(self, queryset, name, value): query = self.data - start_time = datetime.strptime(value, '%Y-%m-%d %H:%M:%S') + start_time = datetime.strptime(value, "%Y-%m-%d %H:%M:%S") start_year, start_month, start_day, start_hour = start_time.year, start_time.month, start_time.day, start_time.hour - if query['type'] in ['hour_s']: + if query["type"] in ["hour_s"]: queryset = queryset.filter( - Q(year_s__gt=start_year) | - Q(year_s=start_year, month_s__gt=start_month) | - Q(year_s=start_year, month_s=start_month, day_s__gt=start_day) | - Q(year_s=start_year, month_s=start_month, day_s=start_day, hour__gte=start_hour)) - elif query['type'] in ['sflog', 'day_s']: - queryset = queryset.filter( - Q(year_s__gt=start_year) | - Q(year_s=start_year, month_s__gt=start_month) | - Q(year_s=start_year, month_s=start_month, day_s__gte=start_day)) - elif query['type'] in ['month_s', 'month_st']: - queryset = queryset.filter( - Q(year_s__gt=start_year) | - Q(year_s=start_year, month_s__gte=start_month)) - elif query['type'] in ['year_s']: - queryset = queryset.filter( - Q(year_s__gte=start_year)) + Q(year_s__gt=start_year) + | Q(year_s=start_year, month_s__gt=start_month) + | Q(year_s=start_year, month_s=start_month, day_s__gt=start_day) + | Q(year_s=start_year, month_s=start_month, day_s=start_day, hour__gte=start_hour) + ) + elif query["type"] in ["sflog", "day_s"]: + queryset = queryset.filter(Q(year_s__gt=start_year) | Q(year_s=start_year, month_s__gt=start_month) | Q(year_s=start_year, month_s=start_month, day_s__gte=start_day)) + elif query["type"] in ["month_s", "month_st"]: + queryset = queryset.filter(Q(year_s__gt=start_year) | Q(year_s=start_year, month_s__gte=start_month)) + elif query["type"] in ["year_s"]: + queryset = queryset.filter(Q(year_s__gte=start_year)) return queryset def filter_end_time(self, queryset, name, value): query = self.data - end_time = datetime.strptime(value, '%Y-%m-%d %H:%M:%S') + end_time = datetime.strptime(value, "%Y-%m-%d %H:%M:%S") end_year, end_month, end_day, end_hour = end_time.year, end_time.month, end_time.day, end_time.hour - if query['type'] in ['hour_s']: + if query["type"] in ["hour_s"]: queryset = queryset.filter( - Q(year_s__lt=end_year) | - Q(year_s=end_year, month_s__lt=end_month) | - Q(year_s=end_year, month_s=end_month, day_s__lt=end_day) | - Q(year_s=end_year, month_s=end_month, day_s=end_day, hour__lte=end_hour)) - elif query['type'] in ['sflog', 'day_s']: - queryset = queryset.filter( - Q(year_s__lt=end_year) | - Q(year_s=end_year, month_s__lt=end_month) | - Q(year_s=end_year, month_s=end_month, day_s__lte=end_day)) - elif query['type'] in ['month_s', 'month_st']: - queryset = queryset.filter( - Q(year_s__lt=end_year) | - Q(year_s=end_year, month_s__lte=end_month)) - elif query['type'] in ['year_s']: - queryset = queryset.filter( - Q(year_s__lte=end_year)) + Q(year_s__lt=end_year) + | Q(year_s=end_year, month_s__lt=end_month) + | Q(year_s=end_year, month_s=end_month, day_s__lt=end_day) + | Q(year_s=end_year, month_s=end_month, day_s=end_day, hour__lte=end_hour) + ) + elif query["type"] in ["sflog", "day_s"]: + queryset = queryset.filter(Q(year_s__lt=end_year) | Q(year_s=end_year, month_s__lt=end_month) | Q(year_s=end_year, month_s=end_month, day_s__lte=end_day)) + elif query["type"] in ["month_s", "month_st"]: + queryset = queryset.filter(Q(year_s__lt=end_year) | Q(year_s=end_year, month_s__lte=end_month)) + elif query["type"] in ["year_s"]: + queryset = queryset.filter(Q(year_s__lte=end_year)) return queryset + class EnStatFilter(filters.FilterSet): - start_time = filters.CharFilter(method='filter_start_time') - end_time = filters.CharFilter(method='filter_end_time') + start_time = filters.CharFilter(method="filter_start_time") + end_time = filters.CharFilter(method="filter_end_time") + class Meta: model = EnStat fields = { @@ -104,63 +97,55 @@ class EnStatFilter(filters.FilterSet): "month_s": ["exact"], "year_s": ["exact"], "year": ["exact"], - "month": ['exact'], + "month": ["exact"], "day_s": ["exact"], "day": ["exact"], - "hour": ['exact'] + "hour": ["exact"], } def filter_start_time(self, queryset, name, value): query = self.data - start_time = datetime.strptime(value, '%Y-%m-%d %H:%M:%S') + start_time = datetime.strptime(value, "%Y-%m-%d %H:%M:%S") start_year, start_month, start_day, start_hour = start_time.year, start_time.month, start_time.day, start_time.hour - if query['type'] in ['hour_s']: + if query["type"] in ["hour_s"]: queryset = queryset.filter( - Q(year_s__gt=start_year) | - Q(year_s=start_year, month_s__gt=start_month) | - Q(year_s=start_year, month_s=start_month, day_s__gt=start_day) | - Q(year_s=start_year, month_s=start_month, day_s=start_day, hour__gte=start_hour)) - elif query['type'] in ['sflog', 'day_s']: - queryset = queryset.filter( - Q(year_s__gt=start_year) | - Q(year_s=start_year, month_s__gt=start_month) | - Q(year_s=start_year, month_s=start_month, day_s__gte=start_day)) - elif query['type'] in ['month_s', 'month_st']: - queryset = queryset.filter( - Q(year_s__gt=start_year) | - Q(year_s=start_year, month_s__gte=start_month)) - elif query['type'] in ['year_s']: - queryset = queryset.filter( - Q(year_s__gte=start_year)) + Q(year_s__gt=start_year) + | Q(year_s=start_year, month_s__gt=start_month) + | Q(year_s=start_year, month_s=start_month, day_s__gt=start_day) + | Q(year_s=start_year, month_s=start_month, day_s=start_day, hour__gte=start_hour) + ) + elif query["type"] in ["sflog", "day_s"]: + queryset = queryset.filter(Q(year_s__gt=start_year) | Q(year_s=start_year, month_s__gt=start_month) | Q(year_s=start_year, month_s=start_month, day_s__gte=start_day)) + elif query["type"] in ["month_s", "month_st"]: + queryset = queryset.filter(Q(year_s__gt=start_year) | Q(year_s=start_year, month_s__gte=start_month)) + elif query["type"] in ["year_s"]: + queryset = queryset.filter(Q(year_s__gte=start_year)) return queryset def filter_end_time(self, queryset, name, value): query = self.data - end_time = datetime.strptime(value, '%Y-%m-%d %H:%M:%S') + end_time = datetime.strptime(value, "%Y-%m-%d %H:%M:%S") end_year, end_month, end_day, end_hour = end_time.year, end_time.month, end_time.day, end_time.hour - if query['type'] in ['hour_s']: + if query["type"] in ["hour_s"]: queryset = queryset.filter( - Q(year_s__lt=end_year) | - Q(year_s=end_year, month_s__lt=end_month) | - Q(year_s=end_year, month_s=end_month, day_s__lt=end_day) | - Q(year_s=end_year, month_s=end_month, day_s=end_day, hour__lte=end_hour)) - elif query['type'] in ['sflog', 'day_s']: - queryset = queryset.filter( - Q(year_s__lt=end_year) | - Q(year_s=end_year, month_s__lt=end_month) | - Q(year_s=end_year, month_s=end_month, day_s__lte=end_day)) - elif query['type'] in ['month_s', 'month_st']: - queryset = queryset.filter( - Q(year_s__lt=end_year) | - Q(year_s=end_year, month_s__lte=end_month)) - elif query['type'] in ['year_s']: - queryset = queryset.filter( - Q(year_s__lte=end_year)) + Q(year_s__lt=end_year) + | Q(year_s=end_year, month_s__lt=end_month) + | Q(year_s=end_year, month_s=end_month, day_s__lt=end_day) + | Q(year_s=end_year, month_s=end_month, day_s=end_day, hour__lte=end_hour) + ) + elif query["type"] in ["sflog", "day_s"]: + queryset = queryset.filter(Q(year_s__lt=end_year) | Q(year_s=end_year, month_s__lt=end_month) | Q(year_s=end_year, month_s=end_month, day_s__lte=end_day)) + elif query["type"] in ["month_s", "month_st"]: + queryset = queryset.filter(Q(year_s__lt=end_year) | Q(year_s=end_year, month_s__lte=end_month)) + elif query["type"] in ["year_s"]: + queryset = queryset.filter(Q(year_s__lte=end_year)) return queryset - + + class EnStat2Filter(filters.FilterSet): - start_time = filters.CharFilter(method='filter_start_time') - end_time = filters.CharFilter(method='filter_end_time') + start_time = filters.CharFilter(method="filter_start_time") + end_time = filters.CharFilter(method="filter_end_time") + class Meta: model = EnStat2 fields = { @@ -172,30 +157,20 @@ class EnStat2Filter(filters.FilterSet): def filter_start_time(self, queryset, name, value): query = self.data - start_time = datetime.strptime(value, '%Y-%m-%d %H:%M:%S') + start_time = datetime.strptime(value, "%Y-%m-%d %H:%M:%S") start_year, start_month, start_day, start_hour = start_time.year, start_time.month, start_time.day, start_time.hour - if query['type'] in ['day_s']: - queryset = queryset.filter( - Q(year_s__gt=start_year) | - Q(year_s=start_year, month_s__gt=start_month) | - Q(year_s=start_year, month_s=start_month, day_s__gte=start_day)) - elif query['type'] in ['month_s']: - queryset = queryset.filter( - Q(year_s__gt=start_year) | - Q(year_s=start_year, month_s__gte=start_month)) + if query["type"] in ["day_s"]: + queryset = queryset.filter(Q(year_s__gt=start_year) | Q(year_s=start_year, month_s__gt=start_month) | Q(year_s=start_year, month_s=start_month, day_s__gte=start_day)) + elif query["type"] in ["month_s"]: + queryset = queryset.filter(Q(year_s__gt=start_year) | Q(year_s=start_year, month_s__gte=start_month)) return queryset def filter_end_time(self, queryset, name, value): query = self.data - end_time = datetime.strptime(value, '%Y-%m-%d %H:%M:%S') + end_time = datetime.strptime(value, "%Y-%m-%d %H:%M:%S") end_year, end_month, end_day, end_hour = end_time.year, end_time.month, end_time.day, end_time.hour - if query['type'] in ['day_s']: - queryset = queryset.filter( - Q(year_s__lt=end_year) | - Q(year_s=end_year, month_s__lt=end_month) | - Q(year_s=end_year, month_s=end_month, day_s__lte=end_day)) - elif query['type'] in ['month_s']: - queryset = queryset.filter( - Q(year_s__lt=end_year) | - Q(year_s=end_year, month_s__lte=end_month)) - return queryset \ No newline at end of file + if query["type"] in ["day_s"]: + queryset = queryset.filter(Q(year_s__lt=end_year) | Q(year_s=end_year, month_s__lt=end_month) | Q(year_s=end_year, month_s=end_month, day_s__lte=end_day)) + elif query["type"] in ["month_s"]: + queryset = queryset.filter(Q(year_s__lt=end_year) | Q(year_s=end_year, month_s__lte=end_month)) + return queryset diff --git a/apps/enm/migrations/0029_remove_mpoint_is_all.py b/apps/enm/migrations/0029_remove_mpoint_is_all.py new file mode 100644 index 00000000..d2525635 --- /dev/null +++ b/apps/enm/migrations/0029_remove_mpoint_is_all.py @@ -0,0 +1,17 @@ +# Generated by Django 3.2.12 on 2024-04-18 07:00 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('enm', '0028_auto_20240416_1454'), + ] + + operations = [ + migrations.RemoveField( + model_name='mpoint', + name='is_all', + ), + ] diff --git a/apps/enm/models.py b/apps/enm/models.py index f667554b..6ff427da 100644 --- a/apps/enm/models.py +++ b/apps/enm/models.py @@ -17,9 +17,8 @@ class Mpoint(CommonBModel): mgroup = models.ForeignKey("mtm.mgroup", verbose_name="所在集合", on_delete=models.SET_NULL, null=True, blank=True) mgroups_allocate = models.JSONField("各工段分配", default=list, blank=True, help_text='[{"mgroup":"x", "ratio": 1}]') is_auto = models.BooleanField("是否自动采集", default=True) - is_all = models.BooleanField("是否记录是整个工段", default=False) formula = models.TextField("计算公式", default="") - func_on_change = models.CharField("数据变动时执行方法", max_length=100, default="", blank=True) + func_on_change = models.CharField("数据变动时执行方法", max_length=100, default="", blank=True) # 废弃字段暂时不用 interval = models.PositiveSmallIntegerField("采集间隔(秒)", default=10) val_type = models.CharField("值类型", default="float", max_length=50, help_text="float, int, str, bool") enabled = models.BooleanField("是否启用", default=False) diff --git a/apps/enm/tasks.py b/apps/enm/tasks.py index e31f402e..7d7af47b 100644 --- a/apps/enm/tasks.py +++ b/apps/enm/tasks.py @@ -205,14 +205,14 @@ def cal_mpointstats(is_now=1, year=None, month=None, day=None, hour=None): year, month, day, hour = pre.year, pre.month, pre.day, pre.hour # 先统计不带公式的测点 - mpoints_without_formula = Mpoint.objects.filter(is_auto=True, formula="", func_on_change="") + mpoints_without_formula = Mpoint.objects.filter(is_auto=True, enabled=True, formula="") # mpoints_without_formula_group = [] for item in mpoints_without_formula: # mpoints_without_formula_group.append(cal_mpointstat_hour.s(item.id, year, month, day, hour)) cal_mpointstat_hour(item.id, year, month, day, hour) # 再统计其他测点 - mpoints_other = Mpoint.objects.filter(is_auto=True, func_on_change="").exclude(formula="") + mpoints_other = Mpoint.objects.filter(is_auto=True, enabled=True).exclude(formula="") # mpoints_other_group = [] for item in mpoints_other: # mpoints_other_group.append(cal_mpointstat_hour.s(item.id, year, month, day, hour)) @@ -352,8 +352,6 @@ def cal_enstat(type, sflogId, mgroupId, year, month, day, hour, year_s, month_s, mps = MpointStat.objects.filter(type="month_s", mgroup=mgroup, year_s=year_s, month_s=month_s, mpoint__material=material) elif type == "year_s": mps = MpointStat.objects.filter(type="year_s", mgroup=mgroup, year_s=year_s, mpoint__material=material) - if mps.filter(mpoint__is_all=True).exists(): - mps = mps.filter(mpoint__is_all=True) amount_consume = mps.aggregate(sum=Sum("val"))["sum"] if amount_consume is None: amount_consume = 0 diff --git a/apps/enm/views.py b/apps/enm/views.py index a1ad9dac..315bc3a7 100644 --- a/apps/enm/views.py +++ b/apps/enm/views.py @@ -25,7 +25,7 @@ class MpointViewSet(CustomModelViewSet): queryset = Mpoint.objects.all() serializer_class = MpointSerializer select_related_fields = ["create_by", "belong_dept", "ep_monitored", "ep_belong", "mgroup"] - filterset_fields = ["belong_dept", "ep_monitored", "ep_belong", "mgroup", "is_auto", "is_all", "mgroup__name", "val_type", "enabled"] + filterset_fields = ["belong_dept", "ep_monitored", "ep_belong", "mgroup", "is_auto", "mgroup__name", "val_type", "enabled"] search_fields = ["name", "code"] ordering = ["-create_time", "name", "code"]