feat: 通过给定时间获取班年月日

This commit is contained in:
caoqianming 2024-12-30 10:01:10 +08:00
parent 2197480831
commit 2d42a485af
3 changed files with 45 additions and 6 deletions

View File

@ -274,4 +274,9 @@ class SruleSerializer(CustomModelSerializer):
class Meta:
model = Srule
fields = '__all__'
read_only_fields = EXCLUDE_FIELDS
read_only_fields = EXCLUDE_FIELDS
class MgroupDaysSerializer(serializers.Serializer):
mgroup = serializers.CharField(label="工段ID")
now = serializers.DateTimeField(label="当前时间", required=False)

View File

@ -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()
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}

View File

@ -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):