From 095a6f9d5192f4e5755821189379d139342c0b48 Mon Sep 17 00:00:00 2001 From: zty Date: Mon, 17 Feb 2025 15:35:21 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20enm/task=20view=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=A0=A1=E6=AD=A3=E6=B5=8B=E8=AF=95=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E8=83=BD=E4=BF=AE=E6=94=B9=20=E5=A4=A9=E5=92=8C=E6=9C=88?= =?UTF-8?q?=E7=9A=84=E6=97=B6=E9=97=B4=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/enm/tasks.py | 110 +++++++++++++++++++++++++++------------------- apps/enm/views.py | 30 +++++++++---- 2 files changed, 88 insertions(+), 52 deletions(-) diff --git a/apps/enm/tasks.py b/apps/enm/tasks.py index e50b7ab4..9ca958b5 100644 --- a/apps/enm/tasks.py +++ b/apps/enm/tasks.py @@ -424,53 +424,75 @@ def cal_mpointstat_manual(mpointId: str, sflogId: str, mgroupId: str, year: int, 手动录入的测点数据进行往上统计,一级一级往上 """ mpoint = Mpoint.objects.get(id=mpointId) - mgroup = Mgroup.objects.get(id=mgroupId) - if sflogId: - 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.safe_get_or_create(**params_day_s, defaults=params_day_s) - if ms_day_s.val_correct is not None: - ms_day_s.val = ms_day_s.val_correct - else: - 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'] if sum_dict_day_s['sum'] is not None else 0 - ms_day_s.val_origin = ms_day_s.val - ms_day_s.save() + mgroup = Mgroup.objects.filter(id=mgroupId).first() + if not mgroup: + if day: + params_month = {"type": "month", "mpoint": mpoint, "year": year, "month": month} + ms_month, _ = MpointStat.safe_get_or_create(**params_month, defaults=params_month) + if ms_month.val_correct is not None: + ms_month.val = ms_month.val_correct + else: + sum_dict_month = MpointStat.objects.filter(type="day", mpoint=mpoint, year=year, month=month).aggregate(sum=Sum("val")) + ms_month.val = sum_dict_month['sum'] if sum_dict_month['sum'] is not None else 0 + ms_month.val_origin = ms_month.val + ms_month.save() + elif month: + params_year = {"type": "year", "mpoint": mpoint, "year": year} + ms_year, _ = MpointStat.safe_get_or_create(**params_year, defaults=params_year) + if ms_year.val_correct is not None: + ms_year.val = ms_year.val_correct + else: + sum_dict_year = MpointStat.objects.filter(type="month", mpoint=mpoint, year=year).aggregate(sum=Sum("val")) + ms_year.val = sum_dict_year['sum'] if sum_dict_year['sum'] is not None else 0 + ms_year.val_origin = ms_year.val + ms_year.save() + else: + if sflogId: + 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.safe_get_or_create(**params_day_s, defaults=params_day_s) + if ms_day_s.val_correct is not None: + ms_day_s.val = ms_day_s.val_correct + else: + 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'] if sum_dict_day_s['sum'] is not None else 0 + ms_day_s.val_origin = ms_day_s.val + ms_day_s.save() - if day_s: - params_month_s = {"type": "month_s", "mpoint": mpoint, "year_s": year_s, "month_s": month_s, "mgroup": mgroup} - ms_month_s, _ = MpointStat.safe_get_or_create(**params_month_s, defaults=params_month_s) - if ms_month_s.val_correct is not None: - ms_month_s.val = ms_month_s.val_correct - else: - 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")) - ms_month_s.val = sum_dict_month_s['sum'] if sum_dict_month_s['sum'] is not None else 0 - ms_month_s.val_origin = ms_month_s.val - ms_month_s.save() - - if month_s: - params_year_s = {"type": "year_s", "mpoint": mpoint, "year_s": year_s, "mgroup": mgroup} - ms_year_s, _ = MpointStat.safe_get_or_create(**params_year_s, defaults=params_year_s) - if ms_year_s.val_correct is not None: - ms_year_s.val = ms_year_s.val_correct - else: - sum_dict_year_s = MpointStat.objects.filter(type="month_s", mpoint=mpoint, year_s=year_s, mgroup=mgroup).aggregate(sum=Sum("val")) - ms_year_s.val = sum_dict_year_s['sum'] if sum_dict_year_s['sum'] is not None else 0 - ms_year_s.val_origin = ms_year_s.val - ms_year_s.save() + if day_s: + params_month_s = {"type": "month_s", "mpoint": mpoint, "year_s": year_s, "month_s": month_s, "mgroup": mgroup} + ms_month_s, _ = MpointStat.safe_get_or_create(**params_month_s, defaults=params_month_s) + if ms_month_s.val_correct is not None: + ms_month_s.val = ms_month_s.val_correct + else: + 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")) + ms_month_s.val = sum_dict_month_s['sum'] if sum_dict_month_s['sum'] is not None else 0 + ms_month_s.val_origin = ms_month_s.val + ms_month_s.save() + + if month_s: + params_year_s = {"type": "year_s", "mpoint": mpoint, "year_s": year_s, "mgroup": mgroup} + ms_year_s, _ = MpointStat.safe_get_or_create(**params_year_s, defaults=params_year_s) + if ms_year_s.val_correct is not None: + ms_year_s.val = ms_year_s.val_correct + else: + sum_dict_year_s = MpointStat.objects.filter(type="month_s", mpoint=mpoint, year_s=year_s, mgroup=mgroup).aggregate(sum=Sum("val")) + ms_year_s.val = sum_dict_year_s['sum'] if sum_dict_year_s['sum'] is not None else 0 + ms_year_s.val_origin = ms_year_s.val + ms_year_s.save() - if next_cal: # 计算工段级数据,手动录入时调用 - start_cal_type = 'hour_s' - if hour: + if next_cal: # 计算工段级数据,手动录入时调用 start_cal_type = 'hour_s' - elif sflogId: - start_cal_type = 'sflog' - elif day_s: - start_cal_type = 'day_s' - elif month_s: - start_cal_type = 'month_s' - elif year_s: - start_cal_type = 'year_s' - cal_enstat(start_cal_type, sflogId, mgroupId, year, month, day, hour, year_s, month_s, day_s) + if hour: + start_cal_type = 'hour_s' + elif sflogId: + start_cal_type = 'sflog' + elif day_s: + start_cal_type = 'day_s' + elif month_s: + start_cal_type = 'month_s' + elif year_s: + start_cal_type = 'year_s' + cal_enstat(start_cal_type, sflogId, mgroupId, year, month, day, hour, year_s, month_s, day_s) diff --git a/apps/enm/views.py b/apps/enm/views.py index 71917da0..8097c25c 100644 --- a/apps/enm/views.py +++ b/apps/enm/views.py @@ -193,12 +193,22 @@ class MpointStatViewSet(BulkCreateModelMixin, BulkDestroyModelMixin, CustomListM instance: MpointStat = self.get_object() sr = MpointStatCorrectSerializer(data=request.data) sr.is_valid(raise_exception=True) - last_record = MpointStat.objects.filter(mpoint=instance.mpoint, - type=instance.type, - mgroup=instance.mgroup, - year_s=instance.year_s, - month_s=instance.month_s, - ).order_by(instance.type).values("id").last() + last_record = None + if instance.type in ['month_s', 'month']: + last_record = MpointStat.objects.filter(mpoint=instance.mpoint, + type=instance.type, + mgroup=instance.mgroup, + year_s=instance.year_s, + year = instance.year + ).order_by(instance.type).values("id").last() + elif instance.type in ['day_s', 'day']: + last_record = MpointStat.objects.filter(mpoint=instance.mpoint, + type=instance.type, + year = instance.year, + year_s=instance.year_s, + month_s=instance.month_s, + month = instance.month + ).order_by(instance.type).values("id").last() last_id = last_record["id"] if last_record else None if str(last_id) == str(instance_id): raise ParseError("不能修正当日或当月数据") @@ -208,13 +218,17 @@ class MpointStatViewSet(BulkCreateModelMixin, BulkDestroyModelMixin, CustomListM instance.val = val_correct instance.update_by = request.user instance.save() - mpoint, sflog, mgroup, year_s, month_s, day_s = instance.mpoint, instance.sflog, instance.mgroup, instance.year_s, instance.month_s, instance.day_s + mpoint, sflog, mgroup, year_s, month_s, day_s, year, month, day = instance.mpoint, instance.sflog, instance.mgroup, instance.year_s, instance.month_s, instance.day_s, instance.year, instance.month, instance.day # sflog 可能为None if sflog is None: sflogId = None else: sflogId = sflog.id - cal_mpointstat_manual.delay(mpoint.id, sflogId, mgroup.id, None, None, None, None, year_s, month_s, day_s, next_cal=1) + if mgroup is None: + mgroupId = None + else: + mgroupId = mgroup.id + cal_mpointstat_manual.delay(mpoint.id, sflogId, mgroupId, year, month, day, None, year_s, month_s, day_s, next_cal=1) return Response() @action(methods=["post"], detail=False, perms_map={"post": "mpointstat.correct"}, serializer_class=ReCalSerializer)