From 5bae28fba672e631a8b2e3bb68568697319f390e Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 13 Oct 2021 10:39:31 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=A9=E6=96=99=E6=B6=88=E8=80=97=E8=AE=A1?= =?UTF-8?q?=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hb_server/apps/pm/serializers.py | 7 +++++++ hb_server/apps/pm/urls.py | 4 ++-- hb_server/apps/pm/views.py | 30 +++++++++++++++++++++++++++--- hb_server/utils/response.py | 2 +- 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/hb_server/apps/pm/serializers.py b/hb_server/apps/pm/serializers.py index e3975c1..c9b3d02 100644 --- a/hb_server/apps/pm/serializers.py +++ b/hb_server/apps/pm/serializers.py @@ -15,3 +15,10 @@ class ProductionPlanSerializer(serializers.ModelSerializer): class Meta: model = ProductionPlan fields ='__all__' + +class ResourceCalSerializer(serializers.Serializer): + id = serializers.IntegerField(label='产品ID') + count = serializers.IntegerField(label='生产数量') + +class ResourceCalListSerializer(serializers.ListSerializer): + child = ResourceCalSerializer() \ No newline at end of file diff --git a/hb_server/apps/pm/urls.py b/hb_server/apps/pm/urls.py index 69e52f0..3f6db52 100644 --- a/hb_server/apps/pm/urls.py +++ b/hb_server/apps/pm/urls.py @@ -1,4 +1,4 @@ -from apps.pm.views import ProductionPlanViewSet +from apps.pm.views import ProductionPlanViewSet, ResourceViewSet from django.db.models import base from rest_framework import urlpatterns from django.urls import path, include @@ -6,7 +6,7 @@ from rest_framework.routers import DefaultRouter router = DefaultRouter() router.register('productionplan', ProductionPlanViewSet, basename='productionplan') - +router.register('resource', ResourceViewSet, basename='resource') urlpatterns = [ path('', include(router.urls)), ] diff --git a/hb_server/apps/pm/views.py b/hb_server/apps/pm/views.py index a0d28fa..b829aff 100644 --- a/hb_server/apps/pm/views.py +++ b/hb_server/apps/pm/views.py @@ -1,6 +1,7 @@ from rest_framework.views import APIView +from apps.mtm.models import InputMaterial from apps.system.mixins import CreateUpdateModelAMixin -from apps.pm.serializers import ProductionPlanCreateFromOrderSerializer, ProductionPlanSerializer +from apps.pm.serializers import ProductionPlanCreateFromOrderSerializer, ProductionPlanSerializer, ResourceCalListSerializer, ResourceCalSerializer from rest_framework.mixins import CreateModelMixin, ListModelMixin from apps.pm.models import ProductionPlan from rest_framework.viewsets import GenericViewSet, ModelViewSet @@ -8,6 +9,7 @@ from django.shortcuts import render from apps.sam.models import Order from rest_framework.exceptions import APIException from rest_framework.response import Response +from rest_framework.decorators import action # Create your views here. def updateOrderPlanedCount(order): @@ -52,5 +54,27 @@ class ProductionPlanViewSet(CreateUpdateModelAMixin, ListModelMixin, CreateModel updateOrderPlanedCount(instance.order) return Response() -class ResourceCalculate(APIView): - pass \ No newline at end of file +class ResourceViewSet(GenericViewSet): + + perms_map = {'*': '*'} + + @action(methods=['post'], detail=False, perms_map={'get':'*'}, serializer_class=ResourceCalSerializer) + def cal(self, request, pk=None): + """ + 物料消耗计算 + """ + rdata = request.data + serializer = self.get_serializer(data=rdata, many=True) + serializer.is_valid(raise_exception=True) + res = [] + for i in rdata: + materials = InputMaterial.objects.filter(subproduction__product__id=i['id'], + subproduction__is_deleted=False, is_deleted=False, material__type__in=[3,4]).order_by('material__number') + for m in materials: + for x in res: + if x['id'] == m.material.id: + x['count'] = x['count'] + m.count*i['count'] + break + else: + res.append({'id':m.material.id, 'name':m.material.name, 'type':m.material.type, 'number':m.material.number, 'count':m.count*i['count']}) + return Response(res) diff --git a/hb_server/utils/response.py b/hb_server/utils/response.py index 4657b5e..f4379f4 100644 --- a/hb_server/utils/response.py +++ b/hb_server/utils/response.py @@ -56,7 +56,7 @@ class FitJSONRenderer(JSONRenderer): data = data[prefix] if isinstance(data, list): data = data[0] - response_body.msg = prefix + ":" + data # 取一部分放入msg,方便前端alert + response_body.msg = prefix + ":" + str(data) # 取一部分放入msg,方便前端alert else: response_body.data = data renderer_context.get("response").status_code = 200 # 统一成200响应,用code区分