fix: objects.get_or_create 变更为safe_get_or_create用于解决并发冲突

This commit is contained in:
caoqianming 2024-12-27 09:17:30 +08:00
parent 7a6dc733f7
commit 7f4acd2370
1 changed files with 18 additions and 18 deletions

View File

@ -232,7 +232,7 @@ def cal_mpointstat_hour(mpointId: str, year: int, month: int, day: int, hour: in
# 更新更高级别的值
if cascade or hour == 23:
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, _ = MpointStat.safe_get_or_create(**params_day, defaults=params_day)
if ms_day.val_correct is not None:
ms_day.val = ms_day.val_correct
else:
@ -243,7 +243,7 @@ def cal_mpointstat_hour(mpointId: str, year: int, month: int, day: int, hour: in
if cascade or day in [28, 29, 30, 31]:
params_month = {"type": "month", "mpoint": mpoint, "year": year, "month": month}
ms_month, _ = MpointStat.objects.get_or_create(**params_month, defaults=params_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:
@ -254,7 +254,7 @@ def cal_mpointstat_hour(mpointId: str, year: int, month: int, day: int, hour: in
if cascade or month == 12:
params_year = {"type": "year", "mpoint": mpoint, "year": year}
ms_year, _ = MpointStat.objects.get_or_create(**params_year, defaults=params_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:
@ -283,13 +283,13 @@ def cal_mpointstat_hour(mpointId: str, year: int, month: int, day: int, hour: in
"day_s": day_s,
"hour": hour,
}
ms_hour_s, _ = MpointStat.objects.get_or_create(**params_hour_s, defaults=params_hour_s)
ms_hour_s, _ = MpointStat.safe_get_or_create(**params_hour_s, defaults=params_hour_s)
ms_hour_s.val = ms_hour_s.val_correct if ms_hour_s.val_correct is not None else ms.val
ms_hour_s.save()
# 开始往上计算
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, _ = MpointStat.safe_get_or_create(**params_sflog_s, defaults=params_sflog_s)
if ms_sflog_s.val_correct is not None:
ms_sflog_s.val = ms_sflog_s.val_correct
else:
@ -389,7 +389,7 @@ def cal_mpointstat_manual(mpointId: str, sflogId: str, mgroupId: str, year: int,
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.objects.get_or_create(**params_day_s, defaults=params_day_s)
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:
@ -400,7 +400,7 @@ def cal_mpointstat_manual(mpointId: str, sflogId: str, mgroupId: str, year: int,
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.objects.get_or_create(**params_month_s, defaults=params_month_s)
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:
@ -411,7 +411,7 @@ def cal_mpointstat_manual(mpointId: str, sflogId: str, mgroupId: str, year: int,
if month_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.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:
@ -472,7 +472,7 @@ def cal_enstat(type, sflogId, mgroupId, year, month, day, hour, year_s, month_s,
if team is None and type == "month_st":
return year_s, month_s, day_s
if type == "hour_s":
enstat, _ = EnStat.objects.get_or_create(
enstat, _ = EnStat.safe_get_or_create(
type="hour_s",
mgroup=mgroup,
year=year,
@ -482,19 +482,19 @@ def cal_enstat(type, sflogId, mgroupId, year, month, day, hour, year_s, month_s,
defaults={"type": "hour_s", "mgroup": mgroup, "year_s": year_s, "month_s": month_s, "day_s": day_s, "year": year, "month": month, "day": day, "hour": hour, "sflog": sflog},
)
elif type == "sflog":
enstat, _ = EnStat.objects.get_or_create(type="sflog", sflog=sflog, defaults={"type": "sflog", "sflog": sflog, "mgroup": mgroup, "year_s": year_s, "month_s": month_s, "day_s": day_s})
enstat, _ = EnStat.safe_get_or_create(type="sflog", sflog=sflog, defaults={"type": "sflog", "sflog": sflog, "mgroup": mgroup, "year_s": year_s, "month_s": month_s, "day_s": day_s})
elif type == "day_s":
enstat, _ = EnStat.objects.get_or_create(
enstat, _ = EnStat.safe_get_or_create(
type="day_s", mgroup=mgroup, year_s=year_s, month_s=month_s, day_s=day_s, defaults={"type": "day_s", "mgroup": mgroup, "year_s": year_s, "month_s": month_s, "day_s": day_s}
)
elif type == "month_st":
enstat, _ = EnStat.objects.get_or_create(
enstat, _ = EnStat.safe_get_or_create(
type="month_st", mgroup=mgroup, team=team, year_s=year_s, month_s=month_s, defaults={"type": "month_st", "mgroup": mgroup, "year_s": year_s, "month_s": month_s, "team": team}
)
elif type == "month_s":
enstat, _ = EnStat.objects.get_or_create(type="month_s", mgroup=mgroup, year_s=year_s, month_s=month_s, defaults={"type": "month_s", "mgroup": mgroup, "year_s": year_s, "month_s": month_s})
enstat, _ = EnStat.safe_get_or_create(type="month_s", mgroup=mgroup, year_s=year_s, month_s=month_s, defaults={"type": "month_s", "mgroup": mgroup, "year_s": year_s, "month_s": month_s})
elif type == "year_s":
enstat, _ = EnStat.objects.get_or_create(type="year_s", mgroup=mgroup, year_s=year_s, defaults={"type": "year_s", "mgroup": mgroup, "year_s": year_s})
enstat, _ = EnStat.safe_get_or_create(type="year_s", mgroup=mgroup, year_s=year_s, defaults={"type": "year_s", "mgroup": mgroup, "year_s": year_s})
if "material" in this_cal_attrs:
# 消耗物料统计(包括电耗)
@ -806,9 +806,9 @@ def cal_enstat2(type: str, year_s: int, month_s: int, day_s: int, cascade=True):
else:
return
if type == "month_s":
enstat2, _ = EnStat2.objects.get_or_create(type="month_s", year_s=year_s, month_s=month_s, defaults={"year_s": year_s, "month_s": month_s, "type": "month_s"})
enstat2, _ = EnStat2.safe_get_or_create(type="month_s", year_s=year_s, month_s=month_s, defaults={"year_s": year_s, "month_s": month_s, "type": "month_s"})
elif type == "day_s":
enstat2, _ = EnStat2.objects.get_or_create(type="day_s", year_s=year_s, month_s=month_s, day_s=day_s, defaults={"year_s": year_s, "month_s": month_s, "day_s": day_s, "type": "day_s"})
enstat2, _ = EnStat2.safe_get_or_create(type="day_s", year_s=year_s, month_s=month_s, day_s=day_s, defaults={"year_s": year_s, "month_s": month_s, "day_s": day_s, "type": "day_s"})
# enstat2 = EnStat2.objects.select_for_update().get(id=enstat2.id) # 加锁
try:
material_bulk_clinker = Material.objects.get(code="bulk_clinker") # 散装熟料
@ -996,7 +996,7 @@ def enm_alarm(year_s: int, month_s: int, day_s: int):
from apps.ecm.service import notify_event
now = timezone.now()
event_cate, _ = EventCate.objects.get_or_create(code="consume_exceed", defaults={"name": "能耗超过目标值", "code": "consume_exceed", "trigger": 30})
event_cate, _ = EventCate.safe_get_or_create(code="consume_exceed", defaults={"name": "能耗超过目标值", "code": "consume_exceed", "trigger": 30})
for item in enm_alarms_list:
mgroups = Mgroup.objects.filter(name=item[0])
for mgroup in mgroups:
@ -1027,7 +1027,7 @@ def enm_alarm(year_s: int, month_s: int, day_s: int):
"enstat": enstat.id
}
event.save()
Eventdo.objects.get_or_create(cate=event_cate, event=event, defaults={"cate": event_cate, "event": event})
Eventdo.safe_get_or_create(cate=event_cate, event=event, defaults={"cate": event_cate, "event": event})
notify_event(event)