fix: 去除mpoint无用字段及相应逻辑变动

This commit is contained in:
caoqianming 2024-04-18 15:01:18 +08:00
parent aee63ef771
commit a8fb69d747
5 changed files with 101 additions and 112 deletions

View File

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

View File

@ -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',
),
]

View File

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

View File

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

View File

@ -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"]