From a310185c9d64c5b4d2bba4bb678a020ffde5983e Mon Sep 17 00:00:00 2001 From: caoqianming Date: Sat, 28 Dec 2024 23:22:50 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20get=5Fmgroup=5Fgoals=20=E5=8F=AF?= =?UTF-8?q?=E5=A4=8D=E7=94=A8=E5=8E=BB=E5=B9=B4=E7=9A=84=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/mtm/serializers.py | 2 +- apps/mtm/services.py | 19 +++++++++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) 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