diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index ea39fd1d..1320f40a 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -14,6 +14,7 @@ from apps.mtm.models import Mgroup, TeamMember, Shift, Material from apps.mtm.serializers import MaterialSimpleSerializer from django.db import transaction from django.utils import timezone +from django.core.cache import cache class OtherLogSerializer(CustomModelSerializer): @@ -114,8 +115,16 @@ class SfLogSerializer(CustomModelSerializer): new_pcoal_heat = instance.pcoal_heat new_team = instance.team mgroup: Mgroup = instance.mgroup + + # 更新煤粉热值触发计算 + if new_pcoal_heat: # 更新一下缓存 + year_s, month_s, day_s = instance.get_ymd + cache.set(f'pgoal_val_{year_s}_{month_s}_{day_s}', new_pcoal_heat) if new_pcoal_heat != old_pcoal_heat and mgroup.need_enm: - cal_enstat_when_pcoal_heat_change.delay(instance.id) + year_s, month_s, day_s = instance.get_ymd + cal_enstat_when_pcoal_heat_change.delay(year_s, month_s, day_s) + + # 更新班组触发计算 if new_team != old_team: default_state = 'pending' if timezone.now() > instance.end_time: diff --git a/apps/wpm/services.py b/apps/wpm/services.py index 1b2bf696..d795ee03 100644 --- a/apps/wpm/services.py +++ b/apps/wpm/services.py @@ -63,20 +63,20 @@ def get_pcoal_heat(year_s: int, month_s: int, day_s: int): 只有回转窑需要录入煤粉热值 """ key = f'pgoal_val_{year_s}_{month_s}_{day_s}' - pcoal_heat = cache.get(key, None) - if pcoal_heat is not None: + pcoal_heat = cache.get(key) + if pcoal_heat: return pcoal_heat else: try: qs = SfLog.objects.get(work_date__year=year_s, work_date__month=month_s, work_date__day=day_s, mgroup__name='回转窑', shift__name__in=['白班', '早班']) # hardcode if qs.pcoal_heat is None: - qs.pcoal_heat = 0 - qs.save() + qs.pcoal_heat = 6000 + qs.save(update_fields=['pcoal_heat']) cache.set(f'pgoal_val_{year_s}_{month_s}_{day_s}', qs.pcoal_heat) return qs.pcoal_heat except Exception: - return 0 + return 6000 def do_out(mio: MIO): diff --git a/apps/wpm/tasks.py b/apps/wpm/tasks.py index ad341e54..cbb6fc14 100644 --- a/apps/wpm/tasks.py +++ b/apps/wpm/tasks.py @@ -2,10 +2,6 @@ from __future__ import absolute_import, unicode_literals from apps.utils.tasks import CustomTask from celery import shared_task -from apps.utils.sql import DbConnection -from server.settings import get_sysconfig -from django.core.cache import cache -from apps.wpm.models import SfLog from apps.mtm.models import Mgroup import datetime from django.db.models import Sum @@ -13,6 +9,7 @@ from apps.wpm.services import make_sflogs from apps.wpm.models import SfLog, StLog, SfLogExp from django.utils import timezone from django.db.models import F +from apps.wpm.services import get_pcoal_heat @shared_task(base=CustomTask) @@ -110,13 +107,11 @@ def cal_exp_duration_sec(stlogId: str='', all=False): @shared_task(base=CustomTask) -def cal_enstat_when_pcoal_heat_change(sflogId): +def cal_enstat_when_pcoal_heat_change(year_s, month_s, day_s): from apps.enm.models import EnStat from apps.enm.tasks import cal_enstat_pcoal_change, cal_enstat2 - sflog = SfLog.objects.get(id=sflogId) - pcoal_heat = sflog.pcoal_heat - year_s, month_s, day_s = sflog.get_ymd + pcoal_heat = get_pcoal_heat(year_s, month_s, day_s) # 只会影响到回转窑及水泥磨数据 enstats = EnStat.objects.filter(mgroup__name='回转窑', year_s=year_s, month_s=month_s, day_s=day_s, type__in=['hour_s', 'sflog', 'day_s'])