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.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)
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):
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)

View File

@ -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
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)})