From 2d42a485afa9dcded471e3d239f279c3757001f1 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 30 Dec 2024 10:01:10 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=80=9A=E8=BF=87=E7=BB=99=E5=AE=9A?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E8=8E=B7=E5=8F=96=E7=8F=AD=E5=B9=B4=E6=9C=88?= =?UTF-8?q?=E6=97=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/mtm/serializers.py | 7 ++++++- apps/mtm/services.py | 24 +++++++++++++++++++++--- apps/mtm/views.py | 20 ++++++++++++++++++-- 3 files changed, 45 insertions(+), 6 deletions(-) diff --git a/apps/mtm/serializers.py b/apps/mtm/serializers.py index 63365770..2c68da9c 100644 --- a/apps/mtm/serializers.py +++ b/apps/mtm/serializers.py @@ -274,4 +274,9 @@ class SruleSerializer(CustomModelSerializer): class Meta: model = Srule fields = '__all__' - read_only_fields = EXCLUDE_FIELDS \ No newline at end of file + read_only_fields = EXCLUDE_FIELDS + + +class MgroupDaysSerializer(serializers.Serializer): + mgroup = serializers.CharField(label="工段ID") + now = serializers.DateTimeField(label="当前时间", required=False) \ No newline at end of file diff --git a/apps/mtm/services.py b/apps/mtm/services.py index dd9a6b74..fb66a955 100644 --- a/apps/mtm/services.py +++ b/apps/mtm/services.py @@ -1,10 +1,10 @@ from apps.mtm.models import Goal, Mgroup, RoutePack, Route from django.core.cache import cache from django.db.models import Q -from apps.mtm.models import Material, Process +from apps.mtm.models import Material, Process, Shift from rest_framework.exceptions import ParseError from apps.utils.tools import ranstr -from datetime import datetime +from datetime import datetime, timedelta from apps.wf.models import Ticket from django.db.models import Sum from typing import List @@ -205,4 +205,22 @@ def routepack_ticket_change(ticket: Ticket): routepack = RoutePack.objects.get(id=ticket.ticket_data['t_id']) if ticket.act_state == Ticket.TICKET_ACT_STATE_DRAFT: routepack.state = RoutePack.RP_S_CREATE - routepack.save() \ No newline at end of file + routepack.save() + +def get_mgroup_days(mgroup: Mgroup, now: datetime): + """ + 获取给定时间所属的班年月日 + """ + if now is None: + now = datetime.now() + shift_rule_name = mgroup.shift_rule + shift = Shift.objects.filter(rule=shift_rule_name).order_by('sort').first() + if shift is None: + raise ParseError('工段班次规则不存在') + current_time = now.time().replace(second=0, microsecond=0) + if current_time >= shift.start_time_o: + now_b = now - timedelta(days=1) + else: + now = now - timedelta(days=1) + now_b = now - timedelta(days=1) + return {"year_s": now.year, "month_s": now.month, "day_s": now.day, "year_s_b": now_b.year, "month_s_b": now_b.month, "day_s_b": now_b.day} diff --git a/apps/mtm/views.py b/apps/mtm/views.py index e878d779..bea70e30 100644 --- a/apps/mtm/views.py +++ b/apps/mtm/views.py @@ -8,10 +8,10 @@ from rest_framework.exceptions import ParseError from apps.mtm.filters import GoalFilter, MaterialFilter, RouteFilter from apps.mtm.models import Goal, Material, Mgroup, Shift, Team, Process, Route, TeamMember, RoutePack, Srule from apps.mtm.serializers import (GoalSerializer, MaterialSerializer, - MgroupGoalYearSerializer, MgroupSerializer, + MgroupGoalYearSerializer, MgroupSerializer, MgroupDaysSerializer, ShiftSerializer, TeamSerializer, ProcessSerializer, RouteSerializer, TeamMemberSerializer, RoutePackSerializer, SruleSerializer) -from apps.mtm.services import get_mgroup_goals, daoru_material +from apps.mtm.services import get_mgroup_goals, daoru_material, get_mgroup_days from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet from apps.utils.mixins import BulkCreateModelMixin, BulkDestroyModelMixin from rest_framework.serializers import Serializer @@ -113,6 +113,22 @@ class MgroupViewSet(CustomModelViewSet): mgroup=instance, material__need_route=False).delete() Route.objects.filter(mgroup=instance).update(mgroup=None) instance.delete() + + @action(methods=['post'], detail=False, perms_map={'post': '*'}, serializer_class=MgroupDaysSerializer) + def get_days(self, request): + """ + 获取所属班年月日 + + 给定一个时间获取所属班年月日 + """ + data = request.data + sr = MgroupDaysSerializer(data=data) + sr.is_valid(raise_exception=True) + vdata = sr.validated_data + mgroup = Mgroup.objects.get(id=vdata["mgroup"]) + return Response(get_mgroup_days(mgroup, vdata.get("now", None))) + + class TeamViewSet(CustomModelViewSet):