feat: 获取工段全年目标值

This commit is contained in:
caoqianming 2023-08-04 09:24:00 +08:00
parent c7b7d9cec4
commit 959fc60e24
3 changed files with 50 additions and 2 deletions

View File

@ -41,3 +41,8 @@ class GoalSerializer(CustomModelSerializer):
model = Goal
fields = '__all__'
read_only_fields = EXCLUDE_FIELDS
class MgroupGoalYearSerializer(serializers.Serializer):
mgroup = serializers.CharField(label='ID或名称')
year = serializers.IntegerField(label='')

20
apps/mtm/services.py Normal file
View File

@ -0,0 +1,20 @@
from apps.mtm.models import Goal, Mgroup
from django.core.cache import cache
def get_mgroup_goals(mgroup, year, reload=False):
"""
获取工段某年的全部目标值, 以字典形式返回, 带缓存
"""
goals = Goal.objects.filter(mgroup=mgroup, year=year)
key = f'mgroup_{mgroup.id}_goals'
if reload is False:
mgroup_goals = cache.get(key, None)
if mgroup_goals is not None:
return mgroup_goals
mgroup_goals = {}
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)
return mgroup_goals

View File

@ -5,6 +5,13 @@ from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
from apps.mtm.models import Material, Mgroup, Shift, Team, Goal
from apps.mtm.serializers import MaterialSerializer, MgroupSerializer, ShiftSerializer, TeamSerializer, GoalSerializer
from apps.mtm.filters import GoalFilter
from rest_framework.decorators import action
from rest_framework.response import Response
from drf_yasg import openapi
from drf_yasg.utils import swagger_auto_schema
from django.db.models import Q
from apps.mtm.services import get_mgroup_goals
from apps.mtm.serializers import MgroupGoalYearSerializer
# Create your views here.
class MaterialViewSet(CustomModelViewSet):
@ -70,3 +77,19 @@ class GoalViewSet(CustomModelViewSet):
select_related_fields = ['mgroup', 'goal_cate']
filterset_class = GoalFilter
search_fields = ['name']
@action(methods=['post'], detail=False, perms_map={'post': '*'}, serializer_class=MgroupGoalYearSerializer)
def mgroup_goals_year(self, request, pk=None):
"""
获取工段全年目标
获取工段全年目标
"""
sr = MgroupGoalYearSerializer(data=request.data)
sr.is_valid(raise_exception=True)
vdata = sr.validated_data
mgroup = Mgroup.objects.get(Q(id=vdata['mgroup'])|Q(name=vdata['mgroup']))
year = vdata['year']
res = get_mgroup_goals(mgroup, year, True)
return Response(res)