feat: 一些统计分析接口可用bi替代

This commit is contained in:
caoqianming 2023-11-14 13:48:07 +08:00
parent a591abab8a
commit 2ae8913b25
4 changed files with 81 additions and 2 deletions

View File

@ -234,3 +234,9 @@ class MIOItemTestSerializer(CustomModelSerializer):
model = MIOItem model = MIOItem
fields = ['id', 'test_date', 'test_user', 'count_notok', 'count_n_zw', 'count_n_tw', 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'] '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)

View File

@ -6,10 +6,11 @@ from django.db import transaction
from rest_framework import serializers from rest_framework import serializers
from django.utils import timezone from django.utils import timezone
from rest_framework.response import Response from rest_framework.response import Response
from django.db.models import Sum
from apps.inm.models import WareHouse, MaterialBatch, MIO, MIOItem from apps.inm.models import WareHouse, MaterialBatch, MIO, MIOItem
from apps.inm.serializers import ( from apps.inm.serializers import (
MaterialBatchSerializer, WareHourseSerializer, MIOListSerializer, MIOItemSerializer, MaterialBatchSerializer, WareHourseSerializer, MIOListSerializer, MIOItemSerializer, MioItemAnaSerializer,
MIODoSerializer, MIOSaleSerializer, MIOPurSerializer, MIOOtherSerializer, MIOItemCreateSerializer, MaterialBatchDetailSerializer, MIODetailSerializer, MIOItemTestSerializer) MIODoSerializer, MIOSaleSerializer, MIOPurSerializer, MIOOtherSerializer, MIOItemCreateSerializer, MaterialBatchDetailSerializer, MIODetailSerializer, MIOItemTestSerializer)
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
from apps.inm.services import InmService from apps.inm.services import InmService
@ -223,3 +224,28 @@ class MIOItemViewSet(ListModelMixin, BulkCreateModelMixin, BulkDestroyModelMixin
mb.count = count_new mb.count = count_new
mb.save() mb.save()
return Response() 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)

View File

@ -244,3 +244,10 @@ class GenHandoverWmSerializer(serializers.Serializer):
if attrs['count'] <= 1: if attrs['count'] <= 1:
raise ValidationError('交送数量必须大于1') raise ValidationError('交送数量必须大于1')
return attrs 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)

View File

@ -6,6 +6,7 @@ from rest_framework.exceptions import ParseError
from rest_framework.mixins import DestroyModelMixin, ListModelMixin, UpdateModelMixin from rest_framework.mixins import DestroyModelMixin, ListModelMixin, UpdateModelMixin
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.serializers import Serializer from rest_framework.serializers import Serializer
from django.db.models import Sum
from apps.mtm.models import Material from apps.mtm.models import Material
from apps.pm.models import Mtask 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 .filters import SfLogExpFilter, SfLogFilter, WMaterialFilter, MlogFilter, HandoverFilter
from .models import SfLog, SfLogExp, StLog, WMaterial, Mlog, Handover, Mlogb from .models import SfLog, SfLogExp, StLog, WMaterial, Mlog, Handover, Mlogb
from .serializers import (SflogExpSerializer, SfLogSerializer, StLogSerializer, WMaterialSerializer, 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 from .services import mlog_submit, update_mtask, handover_submit
# Create your views here. # Create your views here.
@ -173,6 +175,44 @@ class MlogViewSet(CustomModelViewSet):
res_data.append(val) res_data.append(val)
return Response(res_data) 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): class HandoverViewSet(CustomModelViewSet):
""" """