diff --git a/apps/wpm/filters.py b/apps/wpm/filters.py index 20ff785c..d239a51d 100644 --- a/apps/wpm/filters.py +++ b/apps/wpm/filters.py @@ -1,5 +1,5 @@ from django_filters import rest_framework as filters -from apps.wpm.models import SfLog +from apps.wpm.models import SfLog, SfLogExp ['mgroup', 'shift', 'team', 'leader', 'team__belong_dept'] class SfLogFilter(filters.FilterSet): class Meta: @@ -12,4 +12,14 @@ class SfLogFilter(filters.FilterSet): "team__belong_dept": ["exact"], "end_time": ["day", "month", "year", "lt"], "start_time": ["gte"] + } + +class SfLogExpFilter(filters.FilterSet): + class Meta: + model = SfLogExp + fields = { + "sflog__mgroup": ["exact"], + "sflog__mgroup__name": ["exact"], + "happen_time": ["day", "month", "year"], + "sflog__end_time": ["day", "month", "year"], } \ No newline at end of file diff --git a/apps/wpm/migrations/0009_sflogexp.py b/apps/wpm/migrations/0009_sflogexp.py new file mode 100644 index 00000000..6287a815 --- /dev/null +++ b/apps/wpm/migrations/0009_sflogexp.py @@ -0,0 +1,37 @@ +# Generated by Django 3.2.12 on 2023-08-04 06:24 + +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), + ('wpm', '0008_rename_pcoal_val_sflog_pcoal_heat'), + ] + + operations = [ + migrations.CreateModel( + name='SfLogExp', + 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='删除标记')), + ('happen_time', models.DateTimeField(verbose_name='发生时间')), + ('cate', models.CharField(max_length=10, verbose_name='异常类别')), + ('reason', models.TextField(verbose_name='原因')), + ('measure', models.TextField(verbose_name='处置措施')), + ('handler', models.CharField(max_length=100, verbose_name='处理人')), + ('create_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='sflogexp_create_by', to=settings.AUTH_USER_MODEL, verbose_name='创建人')), + ('sflog', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='wpm.sflog', verbose_name='关联值班记录')), + ('update_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='sflogexp_update_by', to=settings.AUTH_USER_MODEL, verbose_name='最后编辑人')), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/apps/wpm/models.py b/apps/wpm/models.py index e2636da2..b29510f6 100644 --- a/apps/wpm/models.py +++ b/apps/wpm/models.py @@ -52,3 +52,14 @@ class StSfLog(BaseModel): class Meta: ordering = ['sflog__start_time'] + +class SfLogExp(CommonADModel): + """ + 生产异常情况记录 + """ + sflog = models.ForeignKey(SfLog, on_delete=models.CASCADE, verbose_name='关联值班记录') + happen_time = models.DateTimeField('发生时间') + cate = models.CharField('异常类别', max_length=10) + reason = models.TextField('原因') + measure = models.TextField('处置措施') + handler = models.CharField('处理人', max_length=100) \ No newline at end of file diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index 37b38565..4e0a74ca 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -2,7 +2,7 @@ from apps.utils.constants import EXCLUDE_FIELDS from apps.utils.serializers import CustomModelSerializer from rest_framework import serializers -from apps.wpm.models import SfLog, StLog, StSfLog +from apps.wpm.models import SfLog, StLog, StSfLog, SfLogExp from apps.system.models import Dictionary from apps.wpm.tasks import cal_enstat_when_pcoal_heat_change, cal_enstat_when_team_change @@ -52,4 +52,13 @@ class StSfLogSerializer(CustomModelSerializer): class Meta: model = StSfLog fields = '__all__' - read_only_fields = EXCLUDE_FIELDS + ['stlog', 'sflog', 'is_current_down'] \ No newline at end of file + read_only_fields = EXCLUDE_FIELDS + ['stlog', 'sflog', 'is_current_down'] + + +class SflogExpSerializer(CustomModelSerializer): + mgroup = serializers.CharField(source='sflog.mgroup.id', read_only=True) + mgroup_name = serializers.CharField(source='sflog.mgroup.name', read_only=True) + class Meta: + model = SfLogExp + fields = '__all__' + read_only_fields = EXCLUDE_FIELDS \ No newline at end of file diff --git a/apps/wpm/urls.py b/apps/wpm/urls.py index 3771d941..8f10fe5f 100644 --- a/apps/wpm/urls.py +++ b/apps/wpm/urls.py @@ -1,7 +1,7 @@ from django.urls import path, include from rest_framework.routers import DefaultRouter -from apps.wpm.views import SfLogViewSet, StLogViewSet, StSfLogViewSet +from apps.wpm.views import SfLogViewSet, StLogViewSet, StSfLogViewSet, SfLogExpViewSet API_BASE_URL = 'api/wpm/' @@ -11,6 +11,7 @@ router = DefaultRouter() router.register('sflog', SfLogViewSet, basename='sflog') router.register('stlog', StLogViewSet, basename='stlog') router.register('stsflog', StSfLogViewSet, basename='stsflog') +router.register('sflogexp', SfLogExpViewSet, basename='sflogexp') urlpatterns = [ path(API_BASE_URL, include(router.urls)), diff --git a/apps/wpm/views.py b/apps/wpm/views.py index 3c312374..920d35f8 100644 --- a/apps/wpm/views.py +++ b/apps/wpm/views.py @@ -7,9 +7,9 @@ from rest_framework.exceptions import ParseError from rest_framework.mixins import DestroyModelMixin, UpdateModelMixin, ListModelMixin from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet -from apps.wpm.models import SfLog, StLog, StSfLog -from apps.wpm.serializers import SfLogSerializer, StLogSerializer, StSfLogSerializer -from apps.wpm.filters import SfLogFilter +from apps.wpm.models import SfLog, StLog, StSfLog, SfLogExp +from apps.wpm.serializers import SfLogSerializer, StLogSerializer, StSfLogSerializer, SflogExpSerializer +from apps.wpm.filters import SfLogFilter, SfLogExpFilter from apps.mtm.models import Material # Create your views here. @@ -97,4 +97,16 @@ class StSfLogViewSet(ListModelMixin, UpdateModelMixin, CustomGenericViewSet): params = self.request.query_params if 'stlog' not in params or 'sflog' not in params: raise ParseError('请指定所属停机或值班记录') - return super().filter_queryset(queryset) \ No newline at end of file + return super().filter_queryset(queryset) + + +class SfLogExpViewSet(CustomModelViewSet): + """ + list:生产异常动态 + + 生产异常动态 + """ + queryset = SfLogExp.objects.all() + serializer_class = SflogExpSerializer + select_related_fields = ['sflog', 'sflog__mgroup'] + filterset_class = SfLogExpFilter \ No newline at end of file