diff --git a/apps/wpm/filters.py b/apps/wpm/filters.py index fb4d629b..c8f60455 100644 --- a/apps/wpm/filters.py +++ b/apps/wpm/filters.py @@ -1,6 +1,7 @@ from django_filters import rest_framework as filters -from apps.wpm.models import SfLog, StLog, WMaterial, Mlog, Handover, Mgroup, Mlogb, Mtask - +from apps.wpm.models import (SfLog, StLog, WMaterial, Mlog, + Handover, Mgroup, Mlogb, Mtask, BatchSt) +from django.db.models import Q class SfLogFilter(filters.FilterSet): class Meta: @@ -135,4 +136,23 @@ class MlogbFilter(filters.FilterSet): elif value == 'out': return queryset.filter(material_out__isnull=False) return queryset - return queryset.none() \ No newline at end of file + return queryset.none() + + +class BatchStFilter(filters.FilterSet): + batch__startswith__in = filters.CharFilter(method='filter_batch') + + class Meta: + model = BatchSt + fields = { + "batch": ["exact", "contains", "startswith"], + "last_time": ["exact", "gte", "lte"], + "update_time": ["exact", "gte", "lte"] + } + + def filter_batch(self, queryset, name, value): + v_list = value.split(',') + query = Q() + for value in v_list: + query |= Q(batch__startswith=value) + return queryset.filter(query) \ No newline at end of file diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index 3e424df2..d4e6c15b 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -469,6 +469,9 @@ class MlogSerializer(CustomModelSerializer): material_out = attrs['material_out'] if not (mgroup and material_out): raise ValidationError('缺少工段或产物!') + handle_user = attrs.get('handle_user', None) + if handle_user is None and hasattr(self, "request"): + handle_user = self.request.user return attrs diff --git a/apps/wpm/services_2.py b/apps/wpm/services_2.py index e3ad071c..203339b1 100644 --- a/apps/wpm/services_2.py +++ b/apps/wpm/services_2.py @@ -68,9 +68,12 @@ def get_alldata_with_batch(batch: str): mlogs_glcx_qs = Mlog.objects.filter(submit_time__isnull=False, mgroup=mgroup_glcx, batch=batch) if mlogs_glcx_qs.exists(): data["产品规格"] = [] + data["管料成型_备注"] = "" for item in mlogs_glcx_qs: last_time = item.update_time if item.update_time > last_time else last_time data["产品规格"].append(item.material_out) # 对象 + if item.note: + data["管料成型_备注"] = ";".join([data["管料成型_备注"], item.note]) for field in mlog_count_fields: if getattr(item, field) > 0 or field in ["count_real", "count_ok"]: if f'管料成型_{field}' not in data: @@ -88,9 +91,12 @@ def get_alldata_with_batch(batch: str): data["七车间入库_日期"] = [] data["七车间入库_车间执行人"] = [] data["七车间入库_仓库执行人"] = [] + data["七车间入库_检验备注"] = "" for item in mioitem_qs: last_time = item.update_time if item.update_time > last_time else last_time data["七车间入库_日期"].append(item.mio.inout_date) + if item.test_note: + data["七车间入库_检验备注"] = ";".join([data["七车间入库_检验备注"], item.test_note]) if item.mio.mio_user: data["七车间入库_车间执行人"].append(item.mio.mio_user) if item.mio.do_user: @@ -116,7 +122,11 @@ def get_alldata_with_batch(batch: str): data["十车间入库_抽检人"] = [] data["十车间入库_仓库执行人"] = [] data["十车间入库_日期"] = [] + data["十车间入库_检验备注"] = "" for item in mioitem10_qs: + last_time = item.update_time if item.update_time > last_time else last_time + if item.test_note: + data["十车间入库_检验备注"] = ";".join([data["十车间入库_检验备注"], item.test_note]) if item.mio.do_user: data["十车间入库_仓库执行人"].append(item.mio.do_user) if item.test_user: @@ -145,11 +155,17 @@ def get_alldata_with_batch(batch: str): if mlogs_glth_qs.exists(): data["管料退火_日期"] = [] data["管料退火_操作人"] = [] + data["管料退火_备注"] = "" + data["产品规格"] = [] for item in mlogs_glth_qs: + data["产品规格"].append(item.material_out) + last_time = item.update_time if item.update_time > last_time else last_time + if item.note: + data["管料退火_备注"] = ";".join([data["管料退火_备注"], item.note]) if item.handle_date: data["管料退火_日期"].append(item.handle_date) if item.handle_user: - data["管料退火_操作人"].append(item.mlog_user) + data["管料退火_操作人"].append(item.handle_user) for field in mlog_count_fields: if getattr(item, field) > 0 or field in ["count", "count_notok"]: if f'管料退火_{field}' not in data: @@ -160,6 +176,8 @@ def get_alldata_with_batch(batch: str): data["管料退火_日期"] = ";".join([item.strftime("%Y-%m-%d") for item in data["管料退火_日期"]]) data["管料退火_操作人"] = list(set(data["管料退火_操作人"])) data["管料退火_操作人"] = ";".join([item.name for item in data["管料退火_操作人"]]) + data["产品规格"] = list(set(data["产品规格"])) + data["产品规格"] = ";".join([item.specification for item in data["产品规格"]]) # 六车间领料数据 @@ -170,7 +188,9 @@ def get_alldata_with_batch(batch: str): data["六车间领料_日期"] = [] data["六车间领料_车间执行人"] = [] data["六车间领料_仓库执行人"] = [] + data["产品规格"] = [] for item in mioitem6_qs: + data["产品规格"].append(item.material) last_time = item.update_time if item.update_time > last_time else last_time data["六车间领料_日期"].append(item.mio.inout_date) if item.mio.do_user: @@ -189,6 +209,10 @@ def get_alldata_with_batch(batch: str): data["六车间领料_仓库执行人"] = ";".join([item.name for item in data["六车间领料_仓库执行人"]]) data["六车间领料_车间执行人"] = list(set(data["六车间领料_车间执行人"])) data["六车间领料_车间执行人"] = ";".join([item.name for item in data["六车间领料_车间执行人"]]) + data["产品规格"] = list(set(data["产品规格"])) + data["产品规格"] = ";".join([item.specification for item in data["产品规格"]]) + + # 六车间工段生产数据 # 六车间工段生产数据 mgroup_list = ["平头", "粘铁头", "粗中细磨", "抛光", "开槽"] @@ -199,7 +223,10 @@ def get_alldata_with_batch(batch: str): last_time = item.update_time if item.update_time > last_time else last_time data[f'六车间_{mgroup_name}_日期'] = [] data[f'六车间_{mgroup_name}_操作人'] = [] + data[f'六车间_{mgroup_name}_备注'] = "" for item in mlogs_qs: + if item.note: + data[f'六车间_{mgroup_name}_备注'] = ";".join([data[f'六车间_{mgroup_name}_备注'], item.note]) if item.handle_date: data[f'六车间_{mgroup_name}_日期'].append(item.handle_date) if item.handle_user: diff --git a/apps/wpm/views.py b/apps/wpm/views.py index 614bf941..ea3006d6 100644 --- a/apps/wpm/views.py +++ b/apps/wpm/views.py @@ -14,7 +14,7 @@ from apps.mtm.models import Material, Process from apps.pm.models import Mtask from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet -from .filters import StLogFilter, SfLogFilter, WMaterialFilter, MlogFilter, HandoverFilter, MlogbFilter +from .filters import StLogFilter, SfLogFilter, WMaterialFilter, MlogFilter, HandoverFilter, MlogbFilter, BatchStFilter from .models import SfLog, SfLogExp, StLog, WMaterial, Mlog, Handover, Mlogb, AttLog, OtherLog, Fmlog, BatchSt from .serializers import (SflogExpSerializer, SfLogSerializer, StLogSerializer, WMaterialSerializer, MlogRevertSerializer, MlogSerializer, MlogRelatedSerializer, DeptBatchSerializer, HandoverSerializer, HandoverUpdateSerializer, @@ -523,8 +523,5 @@ class BatchStViewSet(ListModelMixin, CustomGenericViewSet): serializer_class = BatchStSerializer ordering_fields = ["batch", "last_time", "update_time"] ordering = ["batch"] - filterset_fields = { - "batch": ["exact", "contains", "startswith"], - "last_time": ["exact", "gte", "lte"], - "update_time": ["exact", "gte", "lte"] - } + filterset_class = BatchStFilter +