diff --git a/apps/inm/serializers.py b/apps/inm/serializers.py index 1b3330a0..285c1f8f 100644 --- a/apps/inm/serializers.py +++ b/apps/inm/serializers.py @@ -234,3 +234,9 @@ class MIOItemTestSerializer(CustomModelSerializer): model = MIOItem fields = ['id', 'test_date', 'test_user', 'count_notok', 'count_n_zw', 'count_n_tw', 'count_n_qp', 'count_n_wq', 'count_n_dl', 'count_n_pb', 'count_n_dxt', 'count_n_jsqx', 'count_n_qt'] + + +class MioItemAnaSerializer(serializers.Serializer): + start_date = serializers.DateField(label='开始日期', required=True) + end_date = serializers.DateField(label='结束日期', required=True) + material_cate = serializers.CharField(label='物料系列', required=True) diff --git a/apps/inm/views.py b/apps/inm/views.py index 206dcd3c..b170f70b 100644 --- a/apps/inm/views.py +++ b/apps/inm/views.py @@ -6,10 +6,11 @@ from django.db import transaction from rest_framework import serializers from django.utils import timezone from rest_framework.response import Response +from django.db.models import Sum from apps.inm.models import WareHouse, MaterialBatch, MIO, MIOItem from apps.inm.serializers import ( - MaterialBatchSerializer, WareHourseSerializer, MIOListSerializer, MIOItemSerializer, + MaterialBatchSerializer, WareHourseSerializer, MIOListSerializer, MIOItemSerializer, MioItemAnaSerializer, MIODoSerializer, MIOSaleSerializer, MIOPurSerializer, MIOOtherSerializer, MIOItemCreateSerializer, MaterialBatchDetailSerializer, MIODetailSerializer, MIOItemTestSerializer) from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet from apps.inm.services import InmService @@ -223,3 +224,28 @@ class MIOItemViewSet(ListModelMixin, BulkCreateModelMixin, BulkDestroyModelMixin mb.count = count_new mb.save() return Response() + + @action(methods=['post'], detail=False, perms_map={'post': '*'}, serializer_class=MioItemAnaSerializer) + def sale_out_ana(self, request, *args, **kwargs): + """交付统计数据 + + 交付统计数据 + """ + sr = MIOItemTestSerializer(data=request.data) + sr.is_valid(raise_exception=True) + vdata = sr.validated_data + mioitems = MIOItem.objects.filter( + mio__type='sale_out', mio__state=MIO.MIO_SUBMITED) + if vdata.get('material_cate'): + mioitems = mioitems.filter( + material__cate=vdata['material_cate']) + if vdata.get('start_date', ''): + mioitems = mioitems.filter( + mio__inout_date__gte=vdata['start_date']) + if vdata.get('end_date', ''): + mioitems = mioitems.filter(mio__inout_date__lte=vdata['end_date']) + res = mioitems.aggregate(count=Sum('count')) + for i in res: + if res[i] is None: + res[i] = 0 + return Response(res) diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index d725e500..73240789 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -244,3 +244,10 @@ class GenHandoverWmSerializer(serializers.Serializer): if attrs['count'] <= 1: raise ValidationError('交送数量必须大于1') return attrs + + +class MlogAnaSerializer(serializers.Serializer): + belong_dept_name = serializers.CharField(label='车间名', required=False) + start_date = serializers.DateField(label='开始日期', required=True) + end_date = serializers.DateField(label='结束日期', required=True) + material_cate = serializers.CharField(label='物料系列', required=False) diff --git a/apps/wpm/views.py b/apps/wpm/views.py index b1cf9951..4e706685 100644 --- a/apps/wpm/views.py +++ b/apps/wpm/views.py @@ -6,6 +6,7 @@ from rest_framework.exceptions import ParseError from rest_framework.mixins import DestroyModelMixin, ListModelMixin, UpdateModelMixin from rest_framework.response import Response from rest_framework.serializers import Serializer +from django.db.models import Sum from apps.mtm.models import Material from apps.pm.models import Mtask @@ -15,7 +16,8 @@ from apps.utils.mixins import BulkCreateModelMixin from .filters import SfLogExpFilter, SfLogFilter, WMaterialFilter, MlogFilter, HandoverFilter from .models import SfLog, SfLogExp, StLog, WMaterial, Mlog, Handover, Mlogb from .serializers import (SflogExpSerializer, SfLogSerializer, StLogSerializer, WMaterialSerializer, - MlogSerializer, MlogRelatedSerializer, DeptBatchSerializer, HandoverSerializer, GenHandoverSerializer, GenHandoverWmSerializer) + MlogSerializer, MlogRelatedSerializer, DeptBatchSerializer, HandoverSerializer, + GenHandoverSerializer, GenHandoverWmSerializer, MlogAnaSerializer) from .services import mlog_submit, update_mtask, handover_submit # Create your views here. @@ -173,6 +175,44 @@ class MlogViewSet(CustomModelViewSet): res_data.append(val) return Response(res_data) + @action(methods=['post'], detail=False, perms_map={'post': '*'}, serializer_class=MlogAnaSerializer) + def ana(self, request): + """核心统计数据 + + 核心统计数据 + """ + sr = MlogAnaSerializer(data=request.data) + sr.is_valid(raise_exception=True) + vdata = sr.validated_data + mlogs = Mlog.objects.exclude(submit_time=None) + if vdata.get('belong_dept_name', ''): + mlogs = mlogs.filter( + mgroup__belong_dept__name=vdata['belong_dept_name']) + if vdata.get('material_cate', ''): + mlogs = mlogs.filter( + material_out__cate=vdata['material_cate']) + if vdata.get('start_date', ''): + mlogs = mlogs.filter(handle_date__gte=vdata['start_date']) + if vdata.get('end_date', ''): + mlogs = mlogs.filter(handle_date__lte=vdata['end_date']) + res = mlogs.aggregate( + count_real=Sum('count_real'), + count_ok=Sum('count_ok'), + count_notok=Sum('count_notok'), + count_n_zw=Sum('count_n_zw'), + count_n_tw=Sum('count_n_tw'), + count_n_qp=Sum('count_n_qp'), + count_n_wq=Sum('count_n_wq'), + count_n_dl=Sum('count_n_dl'), + count_n_pb=Sum('count_n_pb'), + count_n_dxt=Sum('count_n_dxt'), + count_n_jsqx=Sum('count_n_jsqx'), + count_n_qt=Sum('count_n_qt')) + for i in res: + if res[i] is None: + res[i] = 0 + return Response(res) + class HandoverViewSet(CustomModelViewSet): """