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 datetime import datetime
from django.db.models import F, Q from django.db.models import F, Q
class MpointStatFilter(filters.FilterSet): class MpointStatFilter(filters.FilterSet):
has_create_by = filters.BooleanFilter(method='filter_has_create_by') has_create_by = filters.BooleanFilter(method="filter_has_create_by")
start_time = filters.CharFilter(method='filter_start_time') start_time = filters.CharFilter(method="filter_start_time")
end_time = filters.CharFilter(method='filter_end_time') end_time = filters.CharFilter(method="filter_end_time")
class Meta: class Meta:
model = MpointStat model = MpointStat
fields = { fields = {
@ -29,8 +31,7 @@ class MpointStatFilter(filters.FilterSet):
"year_s": ["exact"], "year_s": ["exact"],
"create_by": ["exact"], "create_by": ["exact"],
"type": ["exact"], "type": ["exact"],
"mpoint__is_all": ["exact"], "mpoint__is_auto": ["exact"],
"mpoint__is_auto": ["exact"]
} }
def filter_has_create_by(self, queryset, name, value): 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): def filter_start_time(self, queryset, name, value):
query = self.data 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 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( queryset = queryset.filter(
Q(year_s__gt=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__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__gt=start_day)
Q(year_s=start_year, month_s=start_month, day_s=start_day, hour__gte=start_hour)) | 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( elif query["type"] in ["sflog", "day_s"]:
Q(year_s__gt=start_year) | 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))
Q(year_s=start_year, month_s__gt=start_month) | elif query["type"] in ["month_s", "month_st"]:
Q(year_s=start_year, month_s=start_month, day_s__gte=start_day)) queryset = queryset.filter(Q(year_s__gt=start_year) | Q(year_s=start_year, month_s__gte=start_month))
elif query['type'] in ['month_s', 'month_st']: elif query["type"] in ["year_s"]:
queryset = queryset.filter( queryset = queryset.filter(Q(year_s__gte=start_year))
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 return queryset
def filter_end_time(self, queryset, name, value): def filter_end_time(self, queryset, name, value):
query = self.data 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 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( queryset = queryset.filter(
Q(year_s__lt=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__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__lt=end_day)
Q(year_s=end_year, month_s=end_month, day_s=end_day, hour__lte=end_hour)) | 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( elif query["type"] in ["sflog", "day_s"]:
Q(year_s__lt=end_year) | 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))
Q(year_s=end_year, month_s__lt=end_month) | elif query["type"] in ["month_s", "month_st"]:
Q(year_s=end_year, month_s=end_month, day_s__lte=end_day)) queryset = queryset.filter(Q(year_s__lt=end_year) | Q(year_s=end_year, month_s__lte=end_month))
elif query['type'] in ['month_s', 'month_st']: elif query["type"] in ["year_s"]:
queryset = queryset.filter( queryset = queryset.filter(Q(year_s__lte=end_year))
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 return queryset
class EnStatFilter(filters.FilterSet): class EnStatFilter(filters.FilterSet):
start_time = filters.CharFilter(method='filter_start_time') start_time = filters.CharFilter(method="filter_start_time")
end_time = filters.CharFilter(method='filter_end_time') end_time = filters.CharFilter(method="filter_end_time")
class Meta: class Meta:
model = EnStat model = EnStat
fields = { fields = {
@ -104,63 +97,55 @@ class EnStatFilter(filters.FilterSet):
"month_s": ["exact"], "month_s": ["exact"],
"year_s": ["exact"], "year_s": ["exact"],
"year": ["exact"], "year": ["exact"],
"month": ['exact'], "month": ["exact"],
"day_s": ["exact"], "day_s": ["exact"],
"day": ["exact"], "day": ["exact"],
"hour": ['exact'] "hour": ["exact"],
} }
def filter_start_time(self, queryset, name, value): def filter_start_time(self, queryset, name, value):
query = self.data 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 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( queryset = queryset.filter(
Q(year_s__gt=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__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__gt=start_day)
Q(year_s=start_year, month_s=start_month, day_s=start_day, hour__gte=start_hour)) | 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( elif query["type"] in ["sflog", "day_s"]:
Q(year_s__gt=start_year) | 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))
Q(year_s=start_year, month_s__gt=start_month) | elif query["type"] in ["month_s", "month_st"]:
Q(year_s=start_year, month_s=start_month, day_s__gte=start_day)) queryset = queryset.filter(Q(year_s__gt=start_year) | Q(year_s=start_year, month_s__gte=start_month))
elif query['type'] in ['month_s', 'month_st']: elif query["type"] in ["year_s"]:
queryset = queryset.filter( queryset = queryset.filter(Q(year_s__gte=start_year))
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 return queryset
def filter_end_time(self, queryset, name, value): def filter_end_time(self, queryset, name, value):
query = self.data 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 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( queryset = queryset.filter(
Q(year_s__lt=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__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__lt=end_day)
Q(year_s=end_year, month_s=end_month, day_s=end_day, hour__lte=end_hour)) | 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( elif query["type"] in ["sflog", "day_s"]:
Q(year_s__lt=end_year) | 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))
Q(year_s=end_year, month_s__lt=end_month) | elif query["type"] in ["month_s", "month_st"]:
Q(year_s=end_year, month_s=end_month, day_s__lte=end_day)) queryset = queryset.filter(Q(year_s__lt=end_year) | Q(year_s=end_year, month_s__lte=end_month))
elif query['type'] in ['month_s', 'month_st']: elif query["type"] in ["year_s"]:
queryset = queryset.filter( queryset = queryset.filter(Q(year_s__lte=end_year))
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 return queryset
class EnStat2Filter(filters.FilterSet): class EnStat2Filter(filters.FilterSet):
start_time = filters.CharFilter(method='filter_start_time') start_time = filters.CharFilter(method="filter_start_time")
end_time = filters.CharFilter(method='filter_end_time') end_time = filters.CharFilter(method="filter_end_time")
class Meta: class Meta:
model = EnStat2 model = EnStat2
fields = { fields = {
@ -172,30 +157,20 @@ class EnStat2Filter(filters.FilterSet):
def filter_start_time(self, queryset, name, value): def filter_start_time(self, queryset, name, value):
query = self.data 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 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']: if query["type"] in ["day_s"]:
queryset = queryset.filter( 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))
Q(year_s__gt=start_year) | elif query["type"] in ["month_s"]:
Q(year_s=start_year, month_s__gt=start_month) | queryset = queryset.filter(Q(year_s__gt=start_year) | Q(year_s=start_year, month_s__gte=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 return queryset
def filter_end_time(self, queryset, name, value): def filter_end_time(self, queryset, name, value):
query = self.data 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 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']: if query["type"] in ["day_s"]:
queryset = queryset.filter( 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))
Q(year_s__lt=end_year) | elif query["type"] in ["month_s"]:
Q(year_s=end_year, month_s__lt=end_month) | queryset = queryset.filter(Q(year_s__lt=end_year) | Q(year_s=end_year, month_s__lte=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 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) 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}]') mgroups_allocate = models.JSONField("各工段分配", default=list, blank=True, help_text='[{"mgroup":"x", "ratio": 1}]')
is_auto = models.BooleanField("是否自动采集", default=True) is_auto = models.BooleanField("是否自动采集", default=True)
is_all = models.BooleanField("是否记录是整个工段", default=False)
formula = models.TextField("计算公式", default="") 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) interval = models.PositiveSmallIntegerField("采集间隔(秒)", default=10)
val_type = models.CharField("值类型", default="float", max_length=50, help_text="float, int, str, bool") val_type = models.CharField("值类型", default="float", max_length=50, help_text="float, int, str, bool")
enabled = models.BooleanField("是否启用", default=False) 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 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 = [] # mpoints_without_formula_group = []
for item in mpoints_without_formula: for item in mpoints_without_formula:
# mpoints_without_formula_group.append(cal_mpointstat_hour.s(item.id, year, month, day, hour)) # mpoints_without_formula_group.append(cal_mpointstat_hour.s(item.id, year, month, day, hour))
cal_mpointstat_hour(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 = [] # mpoints_other_group = []
for item in mpoints_other: for item in mpoints_other:
# mpoints_other_group.append(cal_mpointstat_hour.s(item.id, year, month, day, hour)) # 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) mps = MpointStat.objects.filter(type="month_s", mgroup=mgroup, year_s=year_s, month_s=month_s, mpoint__material=material)
elif type == "year_s": elif type == "year_s":
mps = MpointStat.objects.filter(type="year_s", mgroup=mgroup, year_s=year_s, mpoint__material=material) 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"] amount_consume = mps.aggregate(sum=Sum("val"))["sum"]
if amount_consume is None: if amount_consume is None:
amount_consume = 0 amount_consume = 0

View File

@ -25,7 +25,7 @@ class MpointViewSet(CustomModelViewSet):
queryset = Mpoint.objects.all() queryset = Mpoint.objects.all()
serializer_class = MpointSerializer serializer_class = MpointSerializer
select_related_fields = ["create_by", "belong_dept", "ep_monitored", "ep_belong", "mgroup"] 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"] search_fields = ["name", "code"]
ordering = ["-create_time", "name", "code"] ordering = ["-create_time", "name", "code"]