feat: mpointstat增加mgroup字段和相应逻辑
This commit is contained in:
parent
c122335f8c
commit
bf1ac0549e
|
@ -153,6 +153,18 @@ class CorrectViewSet(CustomGenericViewSet):
|
||||||
mpoint.save()
|
mpoint.save()
|
||||||
return Response()
|
return Response()
|
||||||
|
|
||||||
|
@action(methods=['post'], detail=False, serializer_class=Serializer)
|
||||||
|
def mpointstat(self, request, pk=None):
|
||||||
|
"""矫正测点统计数据
|
||||||
|
|
||||||
|
矫正测点统计数据
|
||||||
|
"""
|
||||||
|
from apps.enm.models import MpointStat
|
||||||
|
for item in MpointStat.objects.filter(type__in=['sflog', 'day_s', 'month_s', 'year_s']):
|
||||||
|
item.mgroup = item.mpoint.mgroup
|
||||||
|
item.save()
|
||||||
|
return Response()
|
||||||
|
|
||||||
class TestViewSet(CustomGenericViewSet):
|
class TestViewSet(CustomGenericViewSet):
|
||||||
authentication_classes = ()
|
authentication_classes = ()
|
||||||
permission_classes = ()
|
permission_classes = ()
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
# Generated by Django 3.2.12 on 2023-07-11 05:17
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('mtm', '0005_auto_20230706_1032'),
|
||||||
|
('enm', '0006_mpoint_mgroups_allocate'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='mpointstat',
|
||||||
|
name='mgroup',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='mtm.mgroup', verbose_name='关联测点集'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -43,6 +43,7 @@ class MpointStat(CommonADModel):
|
||||||
|
|
||||||
hour = models.PositiveSmallIntegerField('时', null=True, blank=True)
|
hour = models.PositiveSmallIntegerField('时', null=True, blank=True)
|
||||||
sflog = models.ForeignKey(SfLog, verbose_name='关联值班记录', on_delete=models.CASCADE, null=True, blank=True)
|
sflog = models.ForeignKey(SfLog, verbose_name='关联值班记录', on_delete=models.CASCADE, null=True, blank=True)
|
||||||
|
mgroup = models.ForeignKey(Mgroup, verbose_name='关联测点集', on_delete=models.CASCADE, null=True, blank=True)
|
||||||
mpoint = models.ForeignKey(Mpoint, verbose_name='关联测点', on_delete=models.CASCADE)
|
mpoint = models.ForeignKey(Mpoint, verbose_name='关联测点', on_delete=models.CASCADE)
|
||||||
val = models.FloatField('统计值', default=0)
|
val = models.FloatField('统计值', default=0)
|
||||||
|
|
||||||
|
|
|
@ -67,7 +67,7 @@ class MpointStatSerializer(CustomModelSerializer):
|
||||||
attrs['type'] = 'sflog'
|
attrs['type'] = 'sflog'
|
||||||
sflog = attrs['sflog']
|
sflog = attrs['sflog']
|
||||||
end_time_local = localtime(sflog.end_time)
|
end_time_local = localtime(sflog.end_time)
|
||||||
attrs['year_s'], attrs['month_s'], attrs['day_s'] = end_time_local.year, end_time_local.month, end_time_local.day
|
attrs['year_s'], attrs['month_s'], attrs['day_s'], attrs['mgroup'] = end_time_local.year, end_time_local.month, end_time_local.day, sflog.mgroup
|
||||||
else:
|
else:
|
||||||
raise ParseError('该数据不支持手工录入')
|
raise ParseError('该数据不支持手工录入')
|
||||||
# if 'sflog' in attrs and attrs['sflog']:
|
# if 'sflog' in attrs and attrs['sflog']:
|
||||||
|
|
|
@ -99,29 +99,29 @@ def cal_mpointstat_hour(mpointId: str, year: int, month: int, day: int, hour: in
|
||||||
ms.month_s = month_s
|
ms.month_s = month_s
|
||||||
ms.day_s = day_s
|
ms.day_s = day_s
|
||||||
ms.save()
|
ms.save()
|
||||||
|
mgroup = sflog.mgroup
|
||||||
|
|
||||||
# 开始往上计算
|
# 开始往上计算
|
||||||
sum_dict_sflog_s = MpointStat.objects.filter(type='hour', mpoint=mpoint, year_s=year_s, month_s=month_s, day_s=day_s).aggregate(sum=Sum('val'))
|
sum_dict_sflog_s = MpointStat.objects.filter(type='hour', mpoint=mpoint, year_s=year_s, month_s=month_s, day_s=day_s).aggregate(sum=Sum('val'))
|
||||||
params_sflog_s = {'type':'sflog', 'mpoint': mpoint, 'year_s': year_s, 'month_s': month_s, 'day_s': day_s}
|
params_sflog_s = {'type':'sflog', 'mpoint': mpoint, 'year_s': year_s, 'month_s': month_s, 'day_s': day_s, 'mgroup': mgroup}
|
||||||
ms_sflog_s, _ = MpointStat.objects.get_or_create(**params_sflog_s, defaults=params_sflog_s)
|
ms_sflog_s, _ = MpointStat.objects.get_or_create(**params_sflog_s, defaults=params_sflog_s)
|
||||||
ms_sflog_s.val = sum_dict_sflog_s['sum']*ratio
|
ms_sflog_s.val = sum_dict_sflog_s['sum']*ratio
|
||||||
ms_sflog_s.save()
|
ms_sflog_s.save()
|
||||||
|
|
||||||
sum_dict_day_s = MpointStat.objects.filter(type='sflog', mpoint=mpoint, year_s=year_s, month_s=month_s, day_s=day_s).aggregate(sum=Sum('val'))
|
sum_dict_day_s = MpointStat.objects.filter(type='sflog', mpoint=mpoint, year_s=year_s, month_s=month_s, day_s=day_s, mgroup=mgroup).aggregate(sum=Sum('val'))
|
||||||
params_day_s = {'type':'day_s', 'mpoint': mpoint, 'year_s': year_s, 'month_s': month_s, 'day_s': day_s}
|
params_day_s = {'type':'day_s', 'mpoint': mpoint, 'year_s': year_s, 'month_s': month_s, 'day_s': day_s, 'mgroup': mgroup}
|
||||||
ms_day_s, _ = MpointStat.objects.get_or_create(**params_day_s, defaults=params_day_s)
|
ms_day_s, _ = MpointStat.objects.get_or_create(**params_day_s, defaults=params_day_s)
|
||||||
ms_day_s.val = sum_dict_day_s['sum']
|
ms_day_s.val = sum_dict_day_s['sum']
|
||||||
ms_day_s.save()
|
ms_day_s.save()
|
||||||
|
|
||||||
sum_dict_month_s = MpointStat.objects.filter(type='day_s', mpoint=mpoint, year_s=year_s, month_s=month_s).aggregate(sum=Sum('val'))
|
sum_dict_month_s = MpointStat.objects.filter(type='day_s', mpoint=mpoint, year_s=year_s, month_s=month_s, mgroup=mgroup).aggregate(sum=Sum('val'))
|
||||||
params_month_s = {'type':'month_s', 'mpoint': mpoint, 'year_s': year_s, 'month_s': month_s}
|
params_month_s = {'type':'month_s', 'mpoint': mpoint, 'year_s': year_s, 'month_s': month_s, 'mgroup': mgroup}
|
||||||
ms_month_s, _ = MpointStat.objects.get_or_create(**params_month_s, defaults=params_month_s)
|
ms_month_s, _ = MpointStat.objects.get_or_create(**params_month_s, defaults=params_month_s)
|
||||||
ms_month_s.val = sum_dict_month_s['sum']
|
ms_month_s.val = sum_dict_month_s['sum']
|
||||||
ms_month_s.save()
|
ms_month_s.save()
|
||||||
|
|
||||||
sum_dict_year_s = MpointStat.objects.filter(type='month_s', mpoint=mpoint, year_s=year_s).aggregate(sum=Sum('val'))
|
sum_dict_year_s = MpointStat.objects.filter(type='month_s', mpoint=mpoint, year_s=year_s, mgroup=mgroup).aggregate(sum=Sum('val'))
|
||||||
params_year_s = {'type':'year_s', 'mpoint': mpoint, 'year_s': year_s}
|
params_year_s = {'type':'year_s', 'mpoint': mpoint, 'year_s': year_s, 'mgroup': mgroup}
|
||||||
ms_year_s, _ = MpointStat.objects.get_or_create(**params_year_s, defaults=params_year_s)
|
ms_year_s, _ = MpointStat.objects.get_or_create(**params_year_s, defaults=params_year_s)
|
||||||
ms_year_s.val = sum_dict_year_s['sum']
|
ms_year_s.val = sum_dict_year_s['sum']
|
||||||
ms_year_s.save()
|
ms_year_s.save()
|
||||||
|
@ -143,29 +143,31 @@ def cal_mpointstats(is_now=1):
|
||||||
cal_mpointstat_hour.delay(mpoint.id, pre.year, pre.month, pre.day, pre.hour)
|
cal_mpointstat_hour.delay(mpoint.id, pre.year, pre.month, pre.day, pre.hour)
|
||||||
|
|
||||||
|
|
||||||
def cal_mpointstat_manual(mpointId: str, year_s: int, month_s: int, day_s=None):
|
def cal_mpointstat_manual(mpointId: str, mgroupId: str, year_s: int, month_s: int, day_s=None):
|
||||||
"""
|
"""
|
||||||
手动录入的测点数据进行往上统计,一级一级往上
|
手动录入的测点数据进行往上统计,一级一级往上
|
||||||
"""
|
"""
|
||||||
mpoint = Mpoint.objects.get(id=mpointId)
|
mpoint = Mpoint.objects.get(id=mpointId)
|
||||||
if day_s is not None:
|
mgroup = Mgroup.objects.get(id=mgroupId)
|
||||||
sum_dict_day_s = MpointStat.objects.filter(type='sflog', mpoint=mpoint, year_s=year_s, month_s=month_s, day_s=day_s).aggregate(sum=Sum('val'))
|
if mpoint.material:
|
||||||
params_day_s = {'type':'day_s', 'mpoint': mpoint, 'year_s': year_s, 'month_s': month_s, 'day_s': day_s}
|
if day_s is not None:
|
||||||
ms_day_s, _ = MpointStat.objects.get_or_create(**params_day_s, defaults=params_day_s)
|
sum_dict_day_s = MpointStat.objects.filter(type='sflog', mpoint=mpoint, year_s=year_s, month_s=month_s, day_s=day_s, mgroup=mgroup).aggregate(sum=Sum('val'))
|
||||||
ms_day_s.val = sum_dict_day_s['sum']
|
params_day_s = {'type':'day_s', 'mpoint': mpoint, 'year_s': year_s, 'month_s': month_s, 'day_s': day_s, 'mgroup': mgroup}
|
||||||
ms_day_s.save()
|
ms_day_s, _ = MpointStat.objects.get_or_create(**params_day_s, defaults=params_day_s)
|
||||||
|
ms_day_s.val = sum_dict_day_s['sum']
|
||||||
|
ms_day_s.save()
|
||||||
|
|
||||||
sum_dict_month_s = MpointStat.objects.filter(type='day_s', mpoint=mpoint, year_s=year_s, month_s=month_s).aggregate(sum=Sum('val'))
|
sum_dict_month_s = MpointStat.objects.filter(type='day_s', mpoint=mpoint, year_s=year_s, month_s=month_s, mgroup=mgroup).aggregate(sum=Sum('val'))
|
||||||
params_month_s = {'type':'month_s', 'mpoint': mpoint, 'year_s': year_s, 'month_s': month_s}
|
params_month_s = {'type':'month_s', 'mpoint': mpoint, 'year_s': year_s, 'month_s': month_s, 'mgroup': mgroup}
|
||||||
ms_month_s, _ = MpointStat.objects.get_or_create(**params_month_s, defaults=params_month_s)
|
ms_month_s, _ = MpointStat.objects.get_or_create(**params_month_s, defaults=params_month_s)
|
||||||
ms_month_s.val = sum_dict_month_s['sum']
|
ms_month_s.val = sum_dict_month_s['sum']
|
||||||
ms_month_s.save()
|
ms_month_s.save()
|
||||||
|
|
||||||
sum_dict_year_s = MpointStat.objects.filter(type='month_s', mpoint=mpoint, year_s=year_s).aggregate(sum=Sum('val'))
|
sum_dict_year_s = MpointStat.objects.filter(type='month_s', mpoint=mpoint, year_s=year_s, mgroup=mgroup).aggregate(sum=Sum('val'))
|
||||||
params_year_s = {'type':'year_s', 'mpoint': mpoint, 'year_s': year_s}
|
params_year_s = {'type':'year_s', 'mpoint': mpoint, 'year_s': year_s, 'mgroup': mgroup}
|
||||||
ms_year_s, _ = MpointStat.objects.get_or_create(**params_year_s, defaults=params_year_s)
|
ms_year_s, _ = MpointStat.objects.get_or_create(**params_year_s, defaults=params_year_s)
|
||||||
ms_year_s.val = sum_dict_year_s['sum']
|
ms_year_s.val = sum_dict_year_s['sum']
|
||||||
ms_year_s.save()
|
ms_year_s.save()
|
||||||
|
|
||||||
|
|
||||||
def compute_enstat(mpointId: str, year_s, month_s, day_s, sflogId, hour):
|
def compute_enstat(mpointId: str, year_s, month_s, day_s, sflogId, hour):
|
||||||
|
|
|
@ -48,12 +48,12 @@ class MpointStatViewSet(BulkCreateModelMixin, BulkDestroyModelMixin, ListModelMi
|
||||||
|
|
||||||
def perform_create(self, serializer):
|
def perform_create(self, serializer):
|
||||||
ins = serializer.save()
|
ins = serializer.save()
|
||||||
cal_mpointstat_manual(ins.mpoint.id, ins.year_s, ins.month_s, ins.day_s)
|
cal_mpointstat_manual(ins.mpoint.id, ins.mgroup.id, ins.year_s, ins.month_s, ins.day_s)
|
||||||
|
|
||||||
def perform_destroy(self, instance):
|
def perform_destroy(self, instance):
|
||||||
mpoint, year_s, month_s, day_s = instance.mpoint, instance.year_s, instance.month_s, instance.day_s
|
mpoint, mgroup, year_s, month_s, day_s = instance.mpoint, instance.mgroup, instance.year_s, instance.month_s, instance.day_s
|
||||||
instance.delete()
|
instance.delete()
|
||||||
cal_mpointstat_manual(mpoint.id, year_s, month_s, day_s)
|
cal_mpointstat_manual(mpoint.id, mgroup.id, year_s, month_s, day_s)
|
||||||
|
|
||||||
|
|
||||||
class EnStatViewSet(ListModelMixin, CustomGenericViewSet):
|
class EnStatViewSet(ListModelMixin, CustomGenericViewSet):
|
||||||
|
|
Loading…
Reference in New Issue