perf: 优化mlog list速度
This commit is contained in:
parent
571e11cc8c
commit
6653befcdb
|
|
@ -225,6 +225,50 @@ class MlogbDetailSerializer(CustomModelSerializer):
|
||||||
model = Mlogb
|
model = Mlogb
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
|
||||||
|
class MlogListSerializer(CustomModelSerializer):
|
||||||
|
mstate_json = serializers.JSONField(source='mgroup.process.mstate_json', read_only=True)
|
||||||
|
supplier_name = serializers.CharField(source='supplier.name', read_only=True)
|
||||||
|
routepack_name = serializers.CharField(source='route.routepack.name', read_only=True)
|
||||||
|
belong_dept = serializers.CharField(
|
||||||
|
source='mgroup.belong_dept.id', read_only=True)
|
||||||
|
belong_dept_name = serializers.CharField(
|
||||||
|
source='mgroup.belong_dept.name', read_only=True)
|
||||||
|
mgroup_name = serializers.CharField(
|
||||||
|
source='mgroup.name', read_only=True)
|
||||||
|
mtask_count = serializers.IntegerField(
|
||||||
|
source='mtask.count', read_only=True)
|
||||||
|
create_by_name = serializers.CharField(
|
||||||
|
source='create_by.name', read_only=True)
|
||||||
|
update_by_name = serializers.CharField(
|
||||||
|
source='update_by.name', read_only=True)
|
||||||
|
material_in_ = MaterialSimpleSerializer(
|
||||||
|
source='material_in', read_only=True)
|
||||||
|
material_out_ = MaterialSimpleSerializer(
|
||||||
|
source='material_out', read_only=True)
|
||||||
|
material_out_name = serializers.StringRelatedField(
|
||||||
|
source='material_out', read_only=True)
|
||||||
|
material_in_name = serializers.StringRelatedField(
|
||||||
|
source='material_in', read_only=True)
|
||||||
|
handle_user_name = serializers.CharField(
|
||||||
|
source='handle_user.name', read_only=True)
|
||||||
|
handle_user_2_name = serializers.CharField(
|
||||||
|
source='handle_user_2.name', read_only=True)
|
||||||
|
handle_leader_name = serializers.CharField(
|
||||||
|
source='handle_leader.name', read_only=True)
|
||||||
|
equipment_name = serializers.StringRelatedField(
|
||||||
|
source='equipment', read_only=True)
|
||||||
|
equipment_2_name = serializers.StringRelatedField(
|
||||||
|
source='equipment_2', read_only=True)
|
||||||
|
shift_name = serializers.CharField(source='shift.name', read_only=True)
|
||||||
|
ticket_ = TicketSimpleSerializer(source='ticket', read_only=True)
|
||||||
|
test_user_name = serializers.CharField(source='test_user.name', read_only=True)
|
||||||
|
handle_users_ = UserSimpleSerializer(
|
||||||
|
source='handle_users', many=True, read_only=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Mlog
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
class MlogSerializer(CustomModelSerializer):
|
class MlogSerializer(CustomModelSerializer):
|
||||||
mstate_json = serializers.JSONField(source='mgroup.process.mstate_json', read_only=True)
|
mstate_json = serializers.JSONField(source='mgroup.process.mstate_json', read_only=True)
|
||||||
supplier_name = serializers.CharField(source='supplier.name', read_only=True)
|
supplier_name = serializers.CharField(source='supplier.name', read_only=True)
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ from .serializers import (SflogExpSerializer, SfLogSerializer, StLogSerializer,
|
||||||
AttLogSerializer, OtherLogSerializer, MlogInitSerializer, MlogChangeSerializer,
|
AttLogSerializer, OtherLogSerializer, MlogInitSerializer, MlogChangeSerializer,
|
||||||
MlogbDetailSerializer, MlogbInSerializer, MlogbInUpdateSerializer,
|
MlogbDetailSerializer, MlogbInSerializer, MlogbInUpdateSerializer,
|
||||||
MlogbOutUpdateSerializer, FmlogSerializer, FmlogUpdateSerializer, BatchStSerializer,
|
MlogbOutUpdateSerializer, FmlogSerializer, FmlogUpdateSerializer, BatchStSerializer,
|
||||||
MlogbwCreateUpdateSerializer, HandoverMgroupSerializer)
|
MlogbwCreateUpdateSerializer, HandoverMgroupSerializer, MlogListSerializer, MlogbSerializer)
|
||||||
from .services import mlog_submit, handover_submit, mlog_revert
|
from .services import mlog_submit, handover_submit, mlog_revert
|
||||||
from apps.wpm.services import mlog_submit_validate, generate_new_batch
|
from apps.wpm.services import mlog_submit_validate, generate_new_batch
|
||||||
from apps.wf.models import State
|
from apps.wf.models import State
|
||||||
|
|
@ -167,6 +167,7 @@ class MlogViewSet(CustomModelViewSet):
|
||||||
"""
|
"""
|
||||||
queryset = Mlog.objects.all()
|
queryset = Mlog.objects.all()
|
||||||
serializer_class = MlogSerializer
|
serializer_class = MlogSerializer
|
||||||
|
list_serializer_class = MlogListSerializer
|
||||||
select_related_fields = ['create_by', 'update_by', 'mtask', 'mtaskb',
|
select_related_fields = ['create_by', 'update_by', 'mtask', 'mtaskb',
|
||||||
'handle_user', 'handle_user_2', 'equipment', 'mgroup__belong_dept',
|
'handle_user', 'handle_user_2', 'equipment', 'mgroup__belong_dept',
|
||||||
'equipment_2', 'material_in', 'material_out', 'route__routepack',
|
'equipment_2', 'material_in', 'material_out', 'route__routepack',
|
||||||
|
|
@ -178,11 +179,18 @@ class MlogViewSet(CustomModelViewSet):
|
||||||
'material_in__number', 'material_in__specification', 'batch', 'material_in__model',
|
'material_in__number', 'material_in__specification', 'batch', 'material_in__model',
|
||||||
'material_out__name', 'material_out__number', 'material_out__specification', 'material_out__model',]
|
'material_out__name', 'material_out__number', 'material_out__specification', 'material_out__model',]
|
||||||
|
|
||||||
# @transaction.atomic
|
def add_info_for_list(self, data):
|
||||||
# def perform_create(self, serializer):
|
data_dict = {item['id']: {**item, "mlogb_full": [], "mlogb": []} for item in data}
|
||||||
# ins = serializer.save()
|
mlogb_qs = Mlogb.objects.filter(mlog__id__in=data_dict.keys()).select_related("material_in", "material_out").order_by("create_time")
|
||||||
# data = MlogSerializer(ins).data
|
mlogb_data = MlogbSerializer(instance=mlogb_qs, many=True).data
|
||||||
# create_auditlog('create', ins, data)
|
for item in mlogb_data:
|
||||||
|
item_dict = dict(item)
|
||||||
|
mlog_id = item_dict.get("mlog")
|
||||||
|
if mlog_id in data_dict:
|
||||||
|
data_dict[mlog_id]["mlogb_full"].append(item_dict)
|
||||||
|
if item.get("material_out"):
|
||||||
|
data_dict[mlog_id]["mlogb"].append(item_dict)
|
||||||
|
return list(data_dict.values())
|
||||||
|
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
def perform_destroy(self, instance):
|
def perform_destroy(self, instance):
|
||||||
|
|
@ -653,7 +661,7 @@ class MlogbwViewSet(CustomModelViewSet):
|
||||||
queryset = Mlogbw.objects.all()
|
queryset = Mlogbw.objects.all()
|
||||||
serializer_class = MlogbwCreateUpdateSerializer
|
serializer_class = MlogbwCreateUpdateSerializer
|
||||||
filterset_fields = ['mlogb']
|
filterset_fields = ['mlogb']
|
||||||
ordering = ["number"]
|
ordering = ["number", "create_time"]
|
||||||
ordering_fields = ["number", "create_time"]
|
ordering_fields = ["number", "create_time"]
|
||||||
|
|
||||||
def filter_queryset(self, queryset):
|
def filter_queryset(self, queryset):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue