feat: labeltemplate获取标签指令接口
This commit is contained in:
parent
8a75fcbc42
commit
5e2fd57b89
|
@ -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
|
|
@ -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)
|
||||
|
|
|
@ -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)})
|
||||
|
Loading…
Reference in New Issue