diff --git a/apps/pm/migrations/0020_mtaskb.py b/apps/pm/migrations/0020_mtaskb.py new file mode 100644 index 00000000..bd319ecb --- /dev/null +++ b/apps/pm/migrations/0020_mtaskb.py @@ -0,0 +1,32 @@ +# Generated by Django 3.2.12 on 2024-09-03 08:38 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('pm', '0019_auto_20240703_1618'), + ] + + operations = [ + migrations.CreateModel( + name='Mtaskb', + 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='删除标记')), + ('count', models.PositiveIntegerField(default=0, verbose_name='任务数')), + ('handle_user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='mtaskb_handle_user', to=settings.AUTH_USER_MODEL, verbose_name='操作人')), + ('mtask', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='b_mtask', to='pm.mtask', verbose_name='关联任务')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/apps/pm/models.py b/apps/pm/models.py index 391191e2..02e6c934 100644 --- a/apps/pm/models.py +++ b/apps/pm/models.py @@ -1,5 +1,5 @@ from django.db import models -from apps.utils.models import CommonADModel, CommonBDModel +from apps.utils.models import CommonADModel, CommonBDModel, BaseModel from apps.mtm.models import Material, Mgroup, RoutePack, Route # Create your models here. @@ -111,3 +111,10 @@ class Mtask(CommonADModel): def mlogs(self): from apps.wpm.models import Mlog return Mlog.objects.filter(mtask=self) + + +class Mtaskb(BaseModel): + mtask = models.ForeignKey(Mtask, verbose_name='关联任务', on_delete=models.CASCADE, related_name='b_mtask') + handle_user = models.ForeignKey( + 'system.user', verbose_name='操作人', on_delete=models.CASCADE, related_name='mtaskb_handle_user') + count = models.PositiveIntegerField('任务数', default=0) \ No newline at end of file diff --git a/apps/pm/serializers.py b/apps/pm/serializers.py index c0245fe7..8a6a5d8d 100644 --- a/apps/pm/serializers.py +++ b/apps/pm/serializers.py @@ -3,11 +3,12 @@ from rest_framework.exceptions import ValidationError, ParseError import math from apps.mtm.serializers import MaterialSimpleSerializer -from apps.pm.models import Mtask, Utask, SCHEDULE_TYPE +from apps.pm.models import Mtask, Utask, SCHEDULE_TYPE, Mtaskb from apps.sam.models import OrderItem from apps.utils.serializers import CustomModelSerializer from apps.system.models import Dept from apps.wpm.models import Mlog +from apps.utils.constants import EXCLUDE_FIELDS_BASE class UtaskSerializer(CustomModelSerializer): @@ -110,3 +111,16 @@ class MtaskAddInfoSerializer(CustomModelSerializer): class Meta: model = Mtask fields = ['peifen_kg'] + +class MtaskbSerializer(CustomModelSerializer): + handle_user_name = serializers.StringRelatedField( + source='handle_user.name', read_only=True) + class Meta: + model = Mtaskb + fields = '__all__' + read_only_fields = EXCLUDE_FIELDS_BASE + +class MtaskbUpdateSerializer(CustomModelSerializer): + class Meta: + model = Mtaskb + fields = ['id', 'count'] \ No newline at end of file diff --git a/apps/pm/urls.py b/apps/pm/urls.py index b75e9f9e..082f7d3d 100644 --- a/apps/pm/urls.py +++ b/apps/pm/urls.py @@ -1,12 +1,13 @@ from django.urls import path, include from rest_framework.routers import DefaultRouter -from apps.pm.views import (MtaskViewSet, UtaskViewSet) +from apps.pm.views import (MtaskViewSet, UtaskViewSet, MtaskbViewSet) API_BASE_URL = 'api/pm/' HTML_BASE_URL = 'pm/' router = DefaultRouter() router.register('mtask', MtaskViewSet, basename='mtask') +router.register('mtaskb', MtaskbViewSet, basename='mtaskb') router.register('utask', UtaskViewSet, basename='utask') urlpatterns = [ path(API_BASE_URL, include(router.urls)), diff --git a/apps/pm/views.py b/apps/pm/views.py index eadc1cc8..4b06348a 100644 --- a/apps/pm/views.py +++ b/apps/pm/views.py @@ -8,9 +8,10 @@ from apps.utils.serializers import PkSerializer from apps.utils.viewsets import CustomModelViewSet from .filters import MtaskFilter, UtaskFilter -from .models import Mtask, Utask +from .models import Mtask, Utask, Mtaskb from .serializers import (MtaskSerializer, SchedueSerializer, UtaskSerializer, - MtaskDaySerializer, MtaskAddInfoSerializer, SchedueMtasksSerializer) + MtaskDaySerializer, MtaskAddInfoSerializer, + SchedueMtasksSerializer, MtaskbSerializer, MtaskbUpdateSerializer) from .services import PmService from django.utils import timezone @@ -204,3 +205,11 @@ class MtaskViewSet(CustomModelViewSet): sr.is_valid(raise_exception=True) sr.save() return Response() + + +class MtaskbViewSet(CustomModelViewSet): + queryset = Mtaskb.objects.all() + serializer_class = MtaskbSerializer + update_serializer_class = MtaskbUpdateSerializer + filterset_fields = {"mtask": ["exact"], "handle_user": ["exact"]} + ordering = ['id'] \ No newline at end of file