forked from erp-dev/erp
feat: added new api for query batch_advance_records
This commit is contained in:
@@ -1345,3 +1345,116 @@ class PlateOrderBatchUpdateView(APIView):
|
||||
"plate_order_ids": found_ids,
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
class BatchAdvanceRecordSerializer(serializers.ModelSerializer):
|
||||
"""批量推进记录序列化器"""
|
||||
|
||||
state_id = serializers.IntegerField(source='state.id', read_only=True)
|
||||
state_name = serializers.CharField(source='state.name', read_only=True)
|
||||
created_by_username = serializers.CharField(source='created_by.username', read_only=True, allow_null=True)
|
||||
created_by_name = serializers.SerializerMethodField()
|
||||
printing_job_ids = serializers.SerializerMethodField()
|
||||
printing_job_count = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = printing_models.PrintingJobBatchAdvanceRecord
|
||||
fields = [
|
||||
'id',
|
||||
'printing_order',
|
||||
'state',
|
||||
'state_id',
|
||||
'state_name',
|
||||
'created_by',
|
||||
'created_by_username',
|
||||
'created_by_name',
|
||||
'parameters',
|
||||
'printing_job_ids',
|
||||
'printing_job_count',
|
||||
'created_at',
|
||||
]
|
||||
read_only_fields = fields
|
||||
|
||||
def get_created_by_name(self, obj):
|
||||
"""获取操作人员工姓名"""
|
||||
user = getattr(obj, 'created_by', None)
|
||||
if not user:
|
||||
return None
|
||||
emp = getattr(user, 'employee', None)
|
||||
return getattr(emp, 'name', None)
|
||||
|
||||
def get_printing_job_ids(self, obj):
|
||||
"""获取涉及的印染明细 ID 列表"""
|
||||
# 使用预取的数据避免 N+1
|
||||
if hasattr(obj, '_prefetched_objects_cache') and 'printing_jobs' in obj._prefetched_objects_cache:
|
||||
return [job.id for job in obj.printing_jobs.all()]
|
||||
return list(obj.printing_jobs.values_list('id', flat=True))
|
||||
|
||||
def get_printing_job_count(self, obj):
|
||||
"""获取涉及的印染明细数量"""
|
||||
if hasattr(obj, '_prefetched_objects_cache') and 'printing_jobs' in obj._prefetched_objects_cache:
|
||||
return len(obj.printing_jobs.all())
|
||||
return obj.printing_jobs.count()
|
||||
|
||||
|
||||
class PrintingOrderBatchAdvanceRecordsView(APIView):
|
||||
"""
|
||||
获取印染订单的批量推进记录
|
||||
|
||||
根据 printing_order_id 查询该订单下所有的批量推进审计记录。
|
||||
|
||||
GET /api/v2/printing-orders/{printing_order_id}/batch-advance-records/
|
||||
|
||||
响应示例:
|
||||
{
|
||||
"printing_order_id": 55,
|
||||
"records": [
|
||||
{
|
||||
"id": 9,
|
||||
"printing_order": 55,
|
||||
"state": 7,
|
||||
"state_id": 7,
|
||||
"state_name": "染色",
|
||||
"created_by": 1001,
|
||||
"created_by_username": "factory_user",
|
||||
"created_by_name": "张三",
|
||||
"parameters": {"temperature": "25.5"},
|
||||
"printing_job_ids": [101, 102, 103],
|
||||
"printing_job_count": 3,
|
||||
"created_at": "2025-12-14T10:00:00+08:00"
|
||||
}
|
||||
],
|
||||
"total_count": 1
|
||||
}
|
||||
"""
|
||||
|
||||
permission_classes = [permissions.IsAuthenticated]
|
||||
|
||||
def get(self, request, printing_order_id):
|
||||
# 验证订单是否存在
|
||||
try:
|
||||
printing_order = printing_models.PrintingOrder.objects.get(id=printing_order_id)
|
||||
except printing_models.PrintingOrder.DoesNotExist:
|
||||
return Response(
|
||||
{'error': f'未找到 ID 为 {printing_order_id} 的印染订单'},
|
||||
status=status.HTTP_404_NOT_FOUND
|
||||
)
|
||||
|
||||
# 查询批量推进记录,按创建时间倒序
|
||||
records = printing_models.PrintingJobBatchAdvanceRecord.objects.filter(
|
||||
printing_order_id=printing_order_id
|
||||
).select_related(
|
||||
'state',
|
||||
'created_by',
|
||||
'created_by__employee',
|
||||
).prefetch_related(
|
||||
'printing_jobs',
|
||||
).order_by('-created_at')
|
||||
|
||||
serializer = BatchAdvanceRecordSerializer(records, many=True)
|
||||
|
||||
return Response({
|
||||
'printing_order_id': printing_order_id,
|
||||
'records': serializer.data,
|
||||
'total_count': records.count(),
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user