perf: 优化mlog list速度
This commit is contained in:
parent
571e11cc8c
commit
6653befcdb
|
@ -225,6 +225,50 @@ class MlogbDetailSerializer(CustomModelSerializer):
|
|||
model = Mlogb
|
||||
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):
|
||||
mstate_json = serializers.JSONField(source='mgroup.process.mstate_json', 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,
|
||||
MlogbDetailSerializer, MlogbInSerializer, MlogbInUpdateSerializer,
|
||||
MlogbOutUpdateSerializer, FmlogSerializer, FmlogUpdateSerializer, BatchStSerializer,
|
||||
MlogbwCreateUpdateSerializer, HandoverMgroupSerializer)
|
||||
MlogbwCreateUpdateSerializer, HandoverMgroupSerializer, MlogListSerializer, MlogbSerializer)
|
||||
from .services import mlog_submit, handover_submit, mlog_revert
|
||||
from apps.wpm.services import mlog_submit_validate, generate_new_batch
|
||||
from apps.wf.models import State
|
||||
|
@ -167,6 +167,7 @@ class MlogViewSet(CustomModelViewSet):
|
|||
"""
|
||||
queryset = Mlog.objects.all()
|
||||
serializer_class = MlogSerializer
|
||||
list_serializer_class = MlogListSerializer
|
||||
select_related_fields = ['create_by', 'update_by', 'mtask', 'mtaskb',
|
||||
'handle_user', 'handle_user_2', 'equipment', 'mgroup__belong_dept',
|
||||
'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_out__name', 'material_out__number', 'material_out__specification', 'material_out__model',]
|
||||
|
||||
# @transaction.atomic
|
||||
# def perform_create(self, serializer):
|
||||
# ins = serializer.save()
|
||||
# data = MlogSerializer(ins).data
|
||||
# create_auditlog('create', ins, data)
|
||||
def add_info_for_list(self, data):
|
||||
data_dict = {item['id']: {**item, "mlogb_full": [], "mlogb": []} for item in data}
|
||||
mlogb_qs = Mlogb.objects.filter(mlog__id__in=data_dict.keys()).select_related("material_in", "material_out").order_by("create_time")
|
||||
mlogb_data = MlogbSerializer(instance=mlogb_qs, many=True).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
|
||||
def perform_destroy(self, instance):
|
||||
|
@ -653,7 +661,7 @@ class MlogbwViewSet(CustomModelViewSet):
|
|||
queryset = Mlogbw.objects.all()
|
||||
serializer_class = MlogbwCreateUpdateSerializer
|
||||
filterset_fields = ['mlogb']
|
||||
ordering = ["number"]
|
||||
ordering = ["number", "create_time"]
|
||||
ordering_fields = ["number", "create_time"]
|
||||
|
||||
def filter_queryset(self, queryset):
|
||||
|
|
Loading…
Reference in New Issue