feat: 一些统计分析接口可用bi替代
This commit is contained in:
parent
a591abab8a
commit
2ae8913b25
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue