diff --git a/apps/cm/filters.py b/apps/cm/filters.py new file mode 100644 index 00000000..48c7a300 --- /dev/null +++ b/apps/cm/filters.py @@ -0,0 +1,10 @@ +from django_filters import rest_framework as filters +from django.utils import timezone +from .models import LabelTemplate +from apps.utils.filters import MyJsonListFilter + +class LabelTemplateFilter(filters.FilterSet): + process_json__contains = MyJsonListFilter(field_name='按工序查询') + + class Meta: + model = LabelTemplate \ No newline at end of file diff --git a/apps/cm/migrations/0005_labeltemplate_process_json.py b/apps/cm/migrations/0005_labeltemplate_process_json.py new file mode 100644 index 00000000..e296d3ec --- /dev/null +++ b/apps/cm/migrations/0005_labeltemplate_process_json.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.12 on 2025-05-06 02:25 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('cm', '0004_labeltemplate'), + ] + + operations = [ + migrations.AddField( + model_name='labeltemplate', + name='process_json', + field=models.JSONField(blank=True, default=list, verbose_name='工序'), + ), + ] diff --git a/apps/cm/models.py b/apps/cm/models.py index 3329dcfe..64fa5af0 100644 --- a/apps/cm/models.py +++ b/apps/cm/models.py @@ -17,5 +17,7 @@ class LableMat(BaseModel): class LabelTemplate(BaseModel): + """TN: 标签模板""" name = models.TextField("名称") - commands = models.JSONField("指令模板", default=list, blank=True) \ No newline at end of file + commands = models.JSONField("指令模板", default=list, blank=True) + process_json = models.JSONField("工序", default=list, blank=True) \ No newline at end of file diff --git a/apps/cm/serializers.py b/apps/cm/serializers.py index 075c7f0f..32aae18e 100644 --- a/apps/cm/serializers.py +++ b/apps/cm/serializers.py @@ -7,6 +7,8 @@ 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) + extra_data = serializers.JSONField(label='额外数据', allow_null=True, required=False) class LabelMatSerializer(serializers.ModelSerializer): diff --git a/apps/cm/views.py b/apps/cm/views.py index 2ab8c35d..001fc0a4 100644 --- a/apps/cm/views.py +++ b/apps/cm/views.py @@ -6,6 +6,7 @@ from apps.wpm.models import WMaterial from rest_framework.exceptions import ParseError, NotFound from rest_framework.response import Response from apps.utils.viewsets import CustomGenericViewSet, RetrieveModelMixin, CustomListModelMixin, CustomModelViewSet +from apps.cm.filters import LabelTemplateFilter # Create your views here. SPLIT_FIELD = "#" @@ -16,6 +17,20 @@ class LableMatViewSet(CustomListModelMixin, RetrieveModelMixin, CustomGenericVie queryset = LableMat.objects.all() select_related_fields = ["material", "material_origin", "supplier"] + def gen_commands(self, label_template, tdata): + if label_template == "default": + lt = LabelTemplate.objects.get(name="默认标签模板") + else: + lt = LabelTemplate.objects.get(id=label_template) + commands:list = lt.commands + try: + for item in commands: + item = item.format(**tdata) + except Exception as e: + raise ParseError(f"标签解析错误-{str(e)}") + return commands + + @action(methods=["post"], detail=False, serializer_class=TidSerializer) def get_from_mb(self, request, pk=None): """ @@ -24,6 +39,8 @@ class LableMatViewSet(CustomListModelMixin, RetrieveModelMixin, CustomGenericVie 从仓库明细获取物料标签 """ tid = request.data.get("tid") + label_template = request.data.get("label_template", None) + extra_data = request.data.get("extra_data", {}) try: mb = MaterialBatch.objects.get(id=tid) except MaterialBatch.DoesNotExist: @@ -31,6 +48,10 @@ class LableMatViewSet(CustomListModelMixin, RetrieveModelMixin, CustomGenericVie obj, _ = LableMat.objects.get_or_create(state=mb.state, material=mb.material, batch=mb.batch, defect=mb.defect, defaults={"supplier": mb.supplier}) rdata = LabelMatSerializer(obj).data rdata["code_label"] = f"mat{SPLIT_FIELD}{obj.id}" + if label_template: + tdata = {**rdata, **extra_data} + commands = self.gen_commands(label_template, tdata) + rdata["commands"] = commands return Response(rdata) @action(methods=["post"], detail=False, serializer_class=TidSerializer) @@ -41,6 +62,8 @@ class LableMatViewSet(CustomListModelMixin, RetrieveModelMixin, CustomGenericVie 从车间库存明细获取物料标签 """ tid = request.data.get("tid") + label_template = request.data.get("label_template", None) + extra_data = request.data.get("extra_data", {}) try: wm = WMaterial.objects.get(id=tid) except WMaterial.DoesNotExist: @@ -50,6 +73,10 @@ class LableMatViewSet(CustomListModelMixin, RetrieveModelMixin, CustomGenericVie material_origin=wm.material_origin) rdata = LabelMatSerializer(obj).data rdata["code_label"] = f"mat{SPLIT_FIELD}{obj.id}" + if label_template: + tdata = {**rdata, **extra_data} + commands = self.gen_commands(label_template, tdata) + rdata["commands"] = commands return Response(rdata) @action(methods=["post"], detail=False, serializer_class=TidSerializer) @@ -60,6 +87,8 @@ class LableMatViewSet(CustomListModelMixin, RetrieveModelMixin, CustomGenericVie 从出入库明细获取物料标签 """ tid = request.data.get("tid") + label_template = request.data.get("label_template", None) + extra_data = request.data.get("extra_data", {}) try: mioitem: MIOItem = MIOItem.objects.get(id=tid) except MIOItem.DoesNotExist: @@ -67,6 +96,10 @@ class LableMatViewSet(CustomListModelMixin, RetrieveModelMixin, CustomGenericVie obj, _ = LableMat.objects.get_or_create(state=10, material=mioitem.material, batch=mioitem.batch, defaults={"supplier": mioitem.mio.supplier}) rdata = LabelMatSerializer(obj).data rdata["code_label"] = f"mat{SPLIT_FIELD}{obj.id}" + if label_template: + tdata = {**rdata, **extra_data} + commands = self.gen_commands(label_template, tdata) + rdata["commands"] = commands return Response(rdata) @@ -77,4 +110,5 @@ class LabelTemplateViewSet(CustomModelViewSet): 标签模板 """ queryset = LabelTemplate.objects.all() - serializer_class = LabelTemplateSerializer \ No newline at end of file + serializer_class = LabelTemplateSerializer + filterset_class = LabelTemplateFilter \ No newline at end of file