diff --git a/apps/develop/views.py b/apps/develop/views.py index c4fc76a1..21f71713 100755 --- a/apps/develop/views.py +++ b/apps/develop/views.py @@ -152,6 +152,18 @@ class CorrectViewSet(CustomGenericViewSet): mpoint.mgroups_allocate = [{'mgroup': mgroup.id, 'mgroup_name': mgroup.name, 'ratio': 1}] mpoint.save() 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): authentication_classes = () diff --git a/apps/enm/migrations/0007_mpointstat_mgroup.py b/apps/enm/migrations/0007_mpointstat_mgroup.py new file mode 100644 index 00000000..87560401 --- /dev/null +++ b/apps/enm/migrations/0007_mpointstat_mgroup.py @@ -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='关联测点集'), + ), + ] diff --git a/apps/enm/models.py b/apps/enm/models.py index a2fd124a..e3c275a8 100644 --- a/apps/enm/models.py +++ b/apps/enm/models.py @@ -43,6 +43,7 @@ class MpointStat(CommonADModel): hour = models.PositiveSmallIntegerField('时', 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) val = models.FloatField('统计值', default=0) diff --git a/apps/enm/serializers.py b/apps/enm/serializers.py index 8c32e895..4102a563 100644 --- a/apps/enm/serializers.py +++ b/apps/enm/serializers.py @@ -67,7 +67,7 @@ class MpointStatSerializer(CustomModelSerializer): attrs['type'] = 'sflog' sflog = attrs['sflog'] 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: raise ParseError('该数据不支持手工录入') # if 'sflog' in attrs and attrs['sflog']: diff --git a/apps/enm/tasks.py b/apps/enm/tasks.py index 5ad56239..bfbeff3f 100644 --- a/apps/enm/tasks.py +++ b/apps/enm/tasks.py @@ -99,29 +99,29 @@ def cal_mpointstat_hour(mpointId: str, year: int, month: int, day: int, hour: in ms.month_s = month_s ms.day_s = day_s 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')) - 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.val = sum_dict_sflog_s['sum']*ratio 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')) - params_day_s = {'type':'day_s', 'mpoint': mpoint, 'year_s': year_s, 'month_s': month_s, 'day_s': 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')) + 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.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')) - params_month_s = {'type':'month_s', 'mpoint': mpoint, 'year_s': year_s, 'month_s': month_s} + 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, 'mgroup': mgroup} 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.save() - sum_dict_year_s = MpointStat.objects.filter(type='month_s', mpoint=mpoint, year_s=year_s).aggregate(sum=Sum('val')) - params_year_s = {'type':'year_s', 'mpoint': mpoint, 'year_s': year_s} + 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, 'mgroup': mgroup} 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.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) -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) - if day_s is not None: - 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')) - params_day_s = {'type':'day_s', 'mpoint': mpoint, 'year_s': year_s, 'month_s': month_s, 'day_s': 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.save() + mgroup = Mgroup.objects.get(id=mgroupId) + if mpoint.material: + if day_s is not None: + 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, 'mgroup': mgroup} + 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')) - params_month_s = {'type':'month_s', 'mpoint': mpoint, 'year_s': year_s, 'month_s': 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.save() + 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, 'mgroup': mgroup} + 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.save() - sum_dict_year_s = MpointStat.objects.filter(type='month_s', mpoint=mpoint, year_s=year_s).aggregate(sum=Sum('val')) - params_year_s = {'type':'year_s', 'mpoint': mpoint, 'year_s': 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.save() + 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, 'mgroup': mgroup} + 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.save() def compute_enstat(mpointId: str, year_s, month_s, day_s, sflogId, hour): diff --git a/apps/enm/views.py b/apps/enm/views.py index aeee2c81..7da01bc8 100644 --- a/apps/enm/views.py +++ b/apps/enm/views.py @@ -48,12 +48,12 @@ class MpointStatViewSet(BulkCreateModelMixin, BulkDestroyModelMixin, ListModelMi def perform_create(self, serializer): 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): - 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() - 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):