feat: 增加routemat表
This commit is contained in:
parent
3efeb746dc
commit
f8c72a1487
|
@ -0,0 +1,34 @@
|
|||
# Generated by Django 3.2.12 on 2025-01-07 01:49
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('mtm', '0048_auto_20241218_1431'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='RouteMat',
|
||||
fields=[
|
||||
('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')),
|
||||
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
|
||||
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
|
||||
('material', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='mtm.material', verbose_name='辅助物料')),
|
||||
('route', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='mtm.route', verbose_name='关联路线')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='route',
|
||||
name='materials',
|
||||
field=models.ManyToManyField(blank=True, related_name='route_materials', through='mtm.RouteMat', to='mtm.Material', verbose_name='关联辅助物料'),
|
||||
),
|
||||
]
|
|
@ -235,6 +235,8 @@ class Route(CommonADModel):
|
|||
div_number = models.PositiveSmallIntegerField('切分数量', default=1, blank=True)
|
||||
hour_work = models.FloatField('工时', null=True, blank=True)
|
||||
batch_bind = models.BooleanField('是否绑定批次', default=True)
|
||||
materials = models.ManyToManyField(Material, verbose_name='关联辅助物料', related_name="route_materials",
|
||||
through="mtm.routemat", blank=True)
|
||||
|
||||
@staticmethod
|
||||
def get_routes(material: Material):
|
||||
|
@ -252,3 +254,7 @@ class Route(CommonADModel):
|
|||
if not rq.filter(is_count_utask=True).exists():
|
||||
raise ParseError('未指定统计步骤')
|
||||
return rq
|
||||
|
||||
class RouteMat(BaseModel):
|
||||
route = models.ForeignKey(Route, verbose_name='关联路线', on_delete=models.CASCADE)
|
||||
material = models.ForeignKey(Material, verbose_name='辅助物料', on_delete=models.CASCADE)
|
|
@ -1,5 +1,6 @@
|
|||
from apps.utils.serializers import CustomModelSerializer
|
||||
from apps.mtm.models import Shift, Material, Mgroup, Team, Goal, Process, Route, TeamMember, RoutePack, Srule
|
||||
from apps.mtm.models import (Shift, Material, Mgroup, Team, Goal,
|
||||
Process, Route, TeamMember, RoutePack, Srule, RouteMat)
|
||||
from apps.utils.constants import EXCLUDE_FIELDS, EXCLUDE_FIELDS_BASE, EXCLUDE_FIELDS_DEPT
|
||||
from rest_framework import serializers
|
||||
from rest_framework.exceptions import ValidationError, ParseError
|
||||
|
@ -279,4 +280,13 @@ class SruleSerializer(CustomModelSerializer):
|
|||
|
||||
class MgroupDaysSerializer(serializers.Serializer):
|
||||
mgroup = serializers.CharField(label="工段ID")
|
||||
now = serializers.DateTimeField(label="当前时间", required=False)
|
||||
now = serializers.DateTimeField(label="当前时间", required=False)
|
||||
|
||||
|
||||
class RouteMatSerializer(CustomModelSerializer):
|
||||
material_name = serializers.StringRelatedField(
|
||||
source='material', read_only=True)
|
||||
class Meta:
|
||||
model = RouteMat
|
||||
fields = "__all__"
|
||||
read_only_fields = EXCLUDE_FIELDS_BASE
|
|
@ -3,7 +3,7 @@ from rest_framework.routers import DefaultRouter
|
|||
|
||||
from apps.mtm.views import (MgroupViewSet, ShiftViewSet, TeamViewSet, MaterialViewSet,
|
||||
GoalViewSet, ProcessViewSet, RouteViewSet, TeamMemberViewSet,
|
||||
RoutePackViewSet, SruleViewSet)
|
||||
RoutePackViewSet, SruleViewSet, RouteMatViewSet)
|
||||
|
||||
API_BASE_URL = 'api/mtm/'
|
||||
HTML_BASE_URL = 'mtm/'
|
||||
|
@ -19,6 +19,7 @@ router.register('routepack', RoutePackViewSet, basename='routepack')
|
|||
router.register('route', RouteViewSet, basename='route')
|
||||
router.register('teammember', TeamMemberViewSet, basename='teammember')
|
||||
router.register('srule', SruleViewSet, basename='srule')
|
||||
router.register("routemat", RouteMatViewSet, basename="routemat")
|
||||
urlpatterns = [
|
||||
path(API_BASE_URL, include(router.urls)),
|
||||
]
|
||||
|
|
|
@ -6,14 +6,15 @@ from rest_framework.response import Response
|
|||
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.models import Goal, Material, Mgroup, Shift, Team, Process, Route, TeamMember, RoutePack, Srule, RouteMat
|
||||
from apps.mtm.serializers import (GoalSerializer, MaterialSerializer,
|
||||
MgroupGoalYearSerializer, MgroupSerializer, MgroupDaysSerializer,
|
||||
ShiftSerializer, TeamSerializer, ProcessSerializer,
|
||||
RouteSerializer, TeamMemberSerializer, RoutePackSerializer, SruleSerializer)
|
||||
RouteSerializer, TeamMemberSerializer, RoutePackSerializer,
|
||||
SruleSerializer, RouteMatSerializer)
|
||||
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 apps.utils.mixins import BulkCreateModelMixin, BulkDestroyModelMixin, CustomListModelMixin
|
||||
from rest_framework.serializers import Serializer
|
||||
from django.db import transaction
|
||||
from django.db.models import Q
|
||||
|
@ -262,4 +263,10 @@ class SruleViewSet(CustomModelViewSet):
|
|||
for item in data:
|
||||
rule = item["rule"]
|
||||
item["rule_display"] = "->".join([teams_dict.get(x, '未知') for x in rule])
|
||||
return data
|
||||
return data
|
||||
|
||||
class RouteMatViewSet(CustomListModelMixin, BulkCreateModelMixin, BulkDestroyModelMixin, CustomGenericViewSet):
|
||||
perms_map = {"get": "*", "post": "route.update", "delete": "route.update"}
|
||||
queryset = RouteMat.objects.all()
|
||||
serializer_class = RouteMatSerializer
|
||||
filterset_fields = ['route', 'material']
|
Loading…
Reference in New Issue