feat: labeltemplate获取标签指令接口

This commit is contained in:
caoqianming 2025-05-08 13:22:02 +08:00
parent 8a75fcbc42
commit 5e2fd57b89
3 changed files with 44 additions and 25 deletions

View File

@ -3,6 +3,7 @@ from apps.utils.models import BaseModel
from apps.mtm.models import Material from apps.mtm.models import Material
from apps.pum.models import Supplier from apps.pum.models import Supplier
from apps.wpm.models import WmStateOption from apps.wpm.models import WmStateOption
from rest_framework.exceptions import NotFound, ParseError
# Create your models here. # Create your models here.
class LableMat(BaseModel): class LableMat(BaseModel):
@ -21,3 +22,21 @@ class LabelTemplate(BaseModel):
name = models.TextField("名称") name = models.TextField("名称")
commands = models.JSONField("指令模板", default=list, blank=True) commands = models.JSONField("指令模板", default=list, blank=True)
process_json = models.JSONField("工序", default=list, blank=True) 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

View File

@ -7,10 +7,15 @@ from apps.utils.serializers import CustomModelSerializer
class TidSerializer(serializers.Serializer): class TidSerializer(serializers.Serializer):
tid = serializers.CharField(label='表ID') 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) label_template_name = serializers.CharField(label='标签模板名称', allow_null=True, required=False)
extra_data = serializers.JSONField(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): class LabelMatSerializer(serializers.ModelSerializer):
material_name = serializers.StringRelatedField(source='material', read_only=True) material_name = serializers.StringRelatedField(source='material', read_only=True)

View File

@ -1,6 +1,6 @@
from apps.cm.models import LableMat, LabelTemplate from apps.cm.models import LableMat, LabelTemplate
from rest_framework.decorators import action 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.inm.models import MaterialBatch, MIOItem
from apps.wpm.models import WMaterial from apps.wpm.models import WMaterial
from rest_framework.exceptions import ParseError, NotFound from rest_framework.exceptions import ParseError, NotFound
@ -17,24 +17,6 @@ class LableMatViewSet(CustomListModelMixin, RetrieveModelMixin, CustomGenericVie
queryset = LableMat.objects.all() queryset = LableMat.objects.all()
select_related_fields = ["material", "material_origin", "supplier"] 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) @action(methods=["post"], detail=False, serializer_class=TidSerializer)
def get_from_mb(self, request, pk=None): 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}" rdata["code_label"] = f"mat{SPLIT_FIELD}{obj.id}"
if label_template or label_template_name: if label_template or label_template_name:
tdata = {**rdata, **extra_data} 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 rdata["commands"] = commands
return Response(rdata) return Response(rdata)
@ -81,7 +63,7 @@ class LableMatViewSet(CustomListModelMixin, RetrieveModelMixin, CustomGenericVie
rdata["code_label"] = f"mat{SPLIT_FIELD}{obj.id}" rdata["code_label"] = f"mat{SPLIT_FIELD}{obj.id}"
if label_template or label_template_name: if label_template or label_template_name:
tdata = {**rdata, **extra_data} 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 rdata["commands"] = commands
return Response(rdata) return Response(rdata)
@ -105,7 +87,7 @@ class LableMatViewSet(CustomListModelMixin, RetrieveModelMixin, CustomGenericVie
rdata["code_label"] = f"mat{SPLIT_FIELD}{obj.id}" rdata["code_label"] = f"mat{SPLIT_FIELD}{obj.id}"
if label_template or label_template_name: if label_template or label_template_name:
tdata = {**rdata, **extra_data} 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 rdata["commands"] = commands
return Response(rdata) return Response(rdata)
@ -119,3 +101,16 @@ class LabelTemplateViewSet(CustomModelViewSet):
queryset = LabelTemplate.objects.all() queryset = LabelTemplate.objects.all()
serializer_class = LabelTemplateSerializer serializer_class = LabelTemplateSerializer
filterset_class = LabelTemplateFilter 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)})