fix: 更新所监测设备测点的total_production

This commit is contained in:
caoqianming 2024-05-13 16:08:41 +08:00
parent 52d9407346
commit c68feb4c8b
1 changed files with 25 additions and 22 deletions

View File

@ -99,7 +99,7 @@ def cal_mpointstats_duration(start_time: str, end_time: str, m_code_list=[], cal
@shared_task(base=CustomTask)
def cal_mpointstat_hour(mpointId: str, year: int, month: int, day: int, hour: int):
def cal_mpointstat_hour(mpointId: str, year: int, month: int, day: int, hour: int, cascade=True, sflog_hours=[]):
"""
计算某一测点, 某一时间点某一小时的统计值
"""
@ -135,23 +135,26 @@ def cal_mpointstat_hour(mpointId: str, year: int, month: int, day: int, hour: in
ms.save()
# 更新更高级别的值
sum_dict_day = MpointStat.objects.filter(type="hour", mpoint=mpoint, year=year, month=month, day=day).aggregate(sum=Sum("val"))
params_day = {"type": "day", "mpoint": mpoint, "year": year, "month": month, "day": day}
ms_day, _ = MpointStat.objects.get_or_create(**params_day, defaults=params_day)
ms_day.val = sum_dict_day["sum"]
ms_day.save()
if cascade or hour == 23:
sum_dict_day = MpointStat.objects.filter(type="hour", mpoint=mpoint, year=year, month=month, day=day).aggregate(sum=Sum("val"))
params_day = {"type": "day", "mpoint": mpoint, "year": year, "month": month, "day": day}
ms_day, _ = MpointStat.objects.get_or_create(**params_day, defaults=params_day)
ms_day.val = sum_dict_day.get('sum', 0)
ms_day.save()
sum_dict_month = MpointStat.objects.filter(type="day", mpoint=mpoint, year=year, month=month).aggregate(sum=Sum("val"))
params_month = {"type": "month", "mpoint": mpoint, "year": year, "month": month}
ms_month, _ = MpointStat.objects.get_or_create(**params_month, defaults=params_month)
ms_month.val = sum_dict_month["sum"]
ms_month.save()
if cascade or day in [28, 29, 30, 31]:
sum_dict_month = MpointStat.objects.filter(type="day", mpoint=mpoint, year=year, month=month).aggregate(sum=Sum("val"))
params_month = {"type": "month", "mpoint": mpoint, "year": year, "month": month}
ms_month, _ = MpointStat.objects.get_or_create(**params_month, defaults=params_month)
ms_month.val = sum_dict_month.get('sum', 0)
ms_month.save()
sum_dict_year = MpointStat.objects.filter(type="month", mpoint=mpoint, year=year).aggregate(sum=Sum("val"))
params_year = {"type": "year", "mpoint": mpoint, "year": year}
ms_year, _ = MpointStat.objects.get_or_create(**params_year, defaults=params_year)
ms_year.val = sum_dict_year["sum"]
ms_year.save()
if cascade or month == 12:
sum_dict_year = MpointStat.objects.filter(type="month", mpoint=mpoint, year=year).aggregate(sum=Sum("val"))
params_year = {"type": "year", "mpoint": mpoint, "year": year}
ms_year, _ = MpointStat.objects.get_or_create(**params_year, defaults=params_year)
ms_year.val = sum_dict_year.get('sum', 0)
ms_year.save()
mgroup = mpoint.mgroup
if mgroup:
@ -181,7 +184,7 @@ def cal_mpointstat_hour(mpointId: str, year: int, month: int, day: int, hour: in
sum_dict_sflog_s = MpointStat.objects.filter(type="hour_s", mpoint=mpoint, year_s=year_s, month_s=month_s, day_s=day_s, sflog=sflog).aggregate(sum=Sum("val"))
params_sflog_s = {"type": "sflog", "mpoint": mpoint, "sflog": sflog, "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"]
ms_sflog_s.val = sum_dict_sflog_s.get('sum', 0)
ms_sflog_s.save()
# next_cal_dict = [mpoint.material.id, sflog.id, year, month, day, hour, year_s, month_s, day_s]
@ -438,11 +441,11 @@ def cal_enstat(type, sflogId, mgroupId, year, month, day, hour, year_s, month_s,
enstat.other_cost_data = other_cost_data
enstat.production_cost_unit = imaterial_cost_unit + other_cost_unit
enstat.save()
if enstat.total_production:
# 更新所监测设备测点的total_production
MpointStat.objects.filter(mgroup=enstat.mgroup, mpoint__material__code="elec").exclude(mpoint__ep_monitored=None).update(
total_production=enstat.total_production, elec_consume_unit=F("val") / enstat.total_production
)
if mgroup.cate == 'section':
# 更新所监测设备测点的total_production
MpointStat.objects.filter(mgroup=enstat.mgroup, mpoint__material__code="elec").exclude(mpoint__ep_monitored=None).update(
total_production=enstat.total_production, elec_consume_unit=F("val") / enstat.total_production
)
if enstat.mgroup.cate == "section":
if "material" in this_cal_attrs:
# 算能耗