diff --git a/apps/mtm/serializers.py b/apps/mtm/serializers.py index 447cbfc8..63365770 100644 --- a/apps/mtm/serializers.py +++ b/apps/mtm/serializers.py @@ -117,7 +117,7 @@ class GoalSerializer(CustomModelSerializer): class MgroupGoalYearSerializer(serializers.Serializer): - mgroup = serializers.CharField(label='ID或名称') + mgroup = serializers.CharField(label='工段ID') year = serializers.IntegerField(label='年') diff --git a/apps/mtm/services.py b/apps/mtm/services.py index 218fb39b..f2aaa53e 100644 --- a/apps/mtm/services.py +++ b/apps/mtm/services.py @@ -8,6 +8,7 @@ from datetime import datetime from apps.wf.models import Ticket from django.db.models import Sum from typing import List +from apps.utils.snowflake import idWorker def cal_material_count(materialId_list: List[str]=None): """ @@ -37,20 +38,30 @@ def get_mgroup_goals(mgroupId, year, reload=False): """ 获取工段某年的全部目标值, 以字典形式返回, 带缓存 """ - goals = Goal.objects.filter( - Q(mgroup__id=mgroupId) | Q(mgroup__name=mgroupId), year=year) - key = f'mgroup_{mgroupId}_goals' + goals = Goal.objects.get(mgroup__id=mgroupId, year=year) + key = f'mgroup_{mgroupId}_goals_{year}' if reload is False: mgroup_goals = cache.get(key, None) if mgroup_goals is not None: return mgroup_goals mgroup_goals = {} + if not goals.exists(): + # 尝试寻找去年的 + goals_last_year = Goal.objects.filter( + Q(mgroup__id=mgroupId) | Q(mgroup__name=mgroupId), year=year-1) + if goals_last_year.exists(): + for goal in goals_last_year: + # 复用去年的数据创建 + goal.id = idWorker.get_id() + goal.year = year + 1 + goal.save() + goals = Goal.objects.get(mgroup__id=mgroupId, year=year) for goal in goals: mgroup_goals[f'{goal.goal_cate.code}_year'] = goal.goal_val for i in range(12): mgroup_goals[f'{goal.goal_cate.code}_{i+1}'] = getattr( goal, f'goal_val_{i+1}') - cache.set(key, mgroup_goals, 10) + cache.set(key, mgroup_goals) return mgroup_goals