diff --git a/apps/cm/models.py b/apps/cm/models.py index 64fa5af0..f2e22728 100644 --- a/apps/cm/models.py +++ b/apps/cm/models.py @@ -3,6 +3,7 @@ from apps.utils.models import BaseModel from apps.mtm.models import Material from apps.pum.models import Supplier from apps.wpm.models import WmStateOption +from rest_framework.exceptions import NotFound, ParseError # Create your models here. class LableMat(BaseModel): @@ -20,4 +21,22 @@ class LabelTemplate(BaseModel): """TN: 标签模板""" name = models.TextField("名称") commands = models.JSONField("指令模板", default=list, blank=True) - process_json = models.JSONField("工序", default=list, blank=True) \ No newline at end of file + process_json = models.JSONField("工序", default=list, blank=True) + + @classmethod + def gen_commands(cls, label_template, label_template_name, tdata): + if label_template: + lt = LabelTemplate.objects.get(id=label_template) + else: + lt = LabelTemplate.objects.filter(name=label_template_name).first() + if not lt: + raise NotFound("标签模板不存在") + commands:list = lt.commands + try: + n_commands = [] + for item in commands: + item = item.format(**tdata) + n_commands.append(item) + except Exception as e: + raise ParseError(f"标签解析错误-{str(e)}") + return n_commands \ No newline at end of file diff --git a/apps/cm/serializers.py b/apps/cm/serializers.py index 42f3fc30..5ccbfc51 100644 --- a/apps/cm/serializers.py +++ b/apps/cm/serializers.py @@ -7,10 +7,15 @@ from apps.utils.serializers import CustomModelSerializer class TidSerializer(serializers.Serializer): tid = serializers.CharField(label='表ID') - label_template = serializers.CharField(label='标签模板ID(可传default)', allow_null=True, required=False) + label_template = serializers.CharField(label='标签模板ID', allow_null=True, required=False) label_template_name = serializers.CharField(label='标签模板名称', allow_null=True, required=False) extra_data = serializers.JSONField(label='额外数据', allow_null=True, required=False) +class Tid2Serializer(serializers.Serializer): + label_template = serializers.CharField(label='标签模板ID', allow_null=True, required=False) + label_template_name = serializers.CharField(label='标签模板名称', allow_null=True, required=False) + data = serializers.JSONField(label='数据', allow_null=True, required=False) + class LabelMatSerializer(serializers.ModelSerializer): material_name = serializers.StringRelatedField(source='material', read_only=True) diff --git a/apps/cm/views.py b/apps/cm/views.py index 214bbc26..92c30a6a 100644 --- a/apps/cm/views.py +++ b/apps/cm/views.py @@ -1,6 +1,6 @@ from apps.cm.models import LableMat, LabelTemplate from rest_framework.decorators import action -from apps.cm.serializers import TidSerializer, LabelMatSerializer, LabelTemplateSerializer +from apps.cm.serializers import TidSerializer, LabelMatSerializer, LabelTemplateSerializer, Tid2Serializer from apps.inm.models import MaterialBatch, MIOItem from apps.wpm.models import WMaterial from rest_framework.exceptions import ParseError, NotFound @@ -17,24 +17,6 @@ class LableMatViewSet(CustomListModelMixin, RetrieveModelMixin, CustomGenericVie queryset = LableMat.objects.all() select_related_fields = ["material", "material_origin", "supplier"] - def gen_commands(self, label_template, label_template_name, tdata): - if label_template: - lt = LabelTemplate.objects.get(id=label_template) - else: - lt = LabelTemplate.objects.filter(name=label_template_name).first() - if not lt: - raise NotFound("标签模板不存在") - commands:list = lt.commands - try: - n_commands = [] - for item in commands: - item = item.format(**tdata) - n_commands.append(item) - except Exception as e: - raise ParseError(f"标签解析错误-{str(e)}") - return n_commands - - @action(methods=["post"], detail=False, serializer_class=TidSerializer) def get_from_mb(self, request, pk=None): """ @@ -55,7 +37,7 @@ class LableMatViewSet(CustomListModelMixin, RetrieveModelMixin, CustomGenericVie rdata["code_label"] = f"mat{SPLIT_FIELD}{obj.id}" if label_template or label_template_name: tdata = {**rdata, **extra_data} - commands = self.gen_commands(label_template, label_template_name, tdata) + commands = LabelTemplate.gen_commands(label_template, label_template_name, tdata) rdata["commands"] = commands return Response(rdata) @@ -81,7 +63,7 @@ class LableMatViewSet(CustomListModelMixin, RetrieveModelMixin, CustomGenericVie rdata["code_label"] = f"mat{SPLIT_FIELD}{obj.id}" if label_template or label_template_name: tdata = {**rdata, **extra_data} - commands = self.gen_commands(label_template, label_template_name, tdata) + commands = LabelTemplate.gen_commands(label_template, label_template_name, tdata) rdata["commands"] = commands return Response(rdata) @@ -105,7 +87,7 @@ class LableMatViewSet(CustomListModelMixin, RetrieveModelMixin, CustomGenericVie rdata["code_label"] = f"mat{SPLIT_FIELD}{obj.id}" if label_template or label_template_name: tdata = {**rdata, **extra_data} - commands = self.gen_commands(label_template, label_template_name, tdata) + commands = LabelTemplate.gen_commands(label_template, label_template_name, tdata) rdata["commands"] = commands return Response(rdata) @@ -118,4 +100,17 @@ class LabelTemplateViewSet(CustomModelViewSet): """ queryset = LabelTemplate.objects.all() serializer_class = LabelTemplateSerializer - filterset_class = LabelTemplateFilter \ No newline at end of file + filterset_class = LabelTemplateFilter + + @action(methods=["post"], detail=False, serializer_class=Tid2Serializer) + def commands(self, request, *args, **kwargs): + """ + 获取标签指令 + + 获取标签指令 + """ + label_template = request.data.get("label_template", None) + label_template_name = request.data.get("label_template_name", None) + data = request.data.get("data", {}) + return Response({"commands": LabelTemplate.gen_commands(label_template, label_template_name, data)}) + \ No newline at end of file