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)
|
div_number = models.PositiveSmallIntegerField('切分数量', default=1, blank=True)
|
||||||
hour_work = models.FloatField('工时', null=True, blank=True)
|
hour_work = models.FloatField('工时', null=True, blank=True)
|
||||||
batch_bind = models.BooleanField('是否绑定批次', default=True)
|
batch_bind = models.BooleanField('是否绑定批次', default=True)
|
||||||
|
materials = models.ManyToManyField(Material, verbose_name='关联辅助物料', related_name="route_materials",
|
||||||
|
through="mtm.routemat", blank=True)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_routes(material: Material):
|
def get_routes(material: Material):
|
||||||
|
@ -252,3 +254,7 @@ class Route(CommonADModel):
|
||||||
if not rq.filter(is_count_utask=True).exists():
|
if not rq.filter(is_count_utask=True).exists():
|
||||||
raise ParseError('未指定统计步骤')
|
raise ParseError('未指定统计步骤')
|
||||||
return rq
|
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.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 apps.utils.constants import EXCLUDE_FIELDS, EXCLUDE_FIELDS_BASE, EXCLUDE_FIELDS_DEPT
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from rest_framework.exceptions import ValidationError, ParseError
|
from rest_framework.exceptions import ValidationError, ParseError
|
||||||
|
@ -279,4 +280,13 @@ class SruleSerializer(CustomModelSerializer):
|
||||||
|
|
||||||
class MgroupDaysSerializer(serializers.Serializer):
|
class MgroupDaysSerializer(serializers.Serializer):
|
||||||
mgroup = serializers.CharField(label="工段ID")
|
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,
|
from apps.mtm.views import (MgroupViewSet, ShiftViewSet, TeamViewSet, MaterialViewSet,
|
||||||
GoalViewSet, ProcessViewSet, RouteViewSet, TeamMemberViewSet,
|
GoalViewSet, ProcessViewSet, RouteViewSet, TeamMemberViewSet,
|
||||||
RoutePackViewSet, SruleViewSet)
|
RoutePackViewSet, SruleViewSet, RouteMatViewSet)
|
||||||
|
|
||||||
API_BASE_URL = 'api/mtm/'
|
API_BASE_URL = 'api/mtm/'
|
||||||
HTML_BASE_URL = 'mtm/'
|
HTML_BASE_URL = 'mtm/'
|
||||||
|
@ -19,6 +19,7 @@ router.register('routepack', RoutePackViewSet, basename='routepack')
|
||||||
router.register('route', RouteViewSet, basename='route')
|
router.register('route', RouteViewSet, basename='route')
|
||||||
router.register('teammember', TeamMemberViewSet, basename='teammember')
|
router.register('teammember', TeamMemberViewSet, basename='teammember')
|
||||||
router.register('srule', SruleViewSet, basename='srule')
|
router.register('srule', SruleViewSet, basename='srule')
|
||||||
|
router.register("routemat", RouteMatViewSet, basename="routemat")
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path(API_BASE_URL, include(router.urls)),
|
path(API_BASE_URL, include(router.urls)),
|
||||||
]
|
]
|
||||||
|
|
|
@ -6,14 +6,15 @@ from rest_framework.response import Response
|
||||||
from rest_framework.exceptions import ParseError
|
from rest_framework.exceptions import ParseError
|
||||||
|
|
||||||
from apps.mtm.filters import GoalFilter, MaterialFilter, RouteFilter
|
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,
|
from apps.mtm.serializers import (GoalSerializer, MaterialSerializer,
|
||||||
MgroupGoalYearSerializer, MgroupSerializer, MgroupDaysSerializer,
|
MgroupGoalYearSerializer, MgroupSerializer, MgroupDaysSerializer,
|
||||||
ShiftSerializer, TeamSerializer, ProcessSerializer,
|
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.mtm.services import get_mgroup_goals, daoru_material, get_mgroup_days
|
||||||
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
|
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 rest_framework.serializers import Serializer
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
|
@ -262,4 +263,10 @@ class SruleViewSet(CustomModelViewSet):
|
||||||
for item in data:
|
for item in data:
|
||||||
rule = item["rule"]
|
rule = item["rule"]
|
||||||
item["rule_display"] = "->".join([teams_dict.get(x, '未知') for x in 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