forked from erp-dev/erp
fix
This commit is contained in:
@@ -138,6 +138,7 @@ class PrintingOrderListSerializer(serializers.ModelSerializer):
|
||||
process_name = serializers.CharField(source='process.name', read_only=True)
|
||||
progress = serializers.IntegerField(read_only=True)
|
||||
jobs_status_summary = serializers.SerializerMethodField()
|
||||
jobs_last_status_summary = serializers.SerializerMethodField()
|
||||
created_by = serializers.IntegerField(source='created_by_id', read_only=True)
|
||||
created_by_name = serializers.SerializerMethodField()
|
||||
|
||||
@@ -148,7 +149,7 @@ class PrintingOrderListSerializer(serializers.ModelSerializer):
|
||||
'fabric', 'width', 'is_urgent', 'area', 'address', 'curve',
|
||||
'is_fabric_received', 'outgoing_date', 'is_invalid', 'new_curve',
|
||||
'process', 'process_name', 'progress', 'position', 'print_count',
|
||||
'jobs_status_summary',
|
||||
'jobs_status_summary', 'jobs_last_status_summary',
|
||||
'created_by', 'created_by_name',
|
||||
'created_at', 'updated_at',
|
||||
]
|
||||
@@ -181,6 +182,31 @@ class PrintingOrderListSerializer(serializers.ModelSerializer):
|
||||
for (name, sid), count in status_counter.items()
|
||||
]
|
||||
|
||||
def get_jobs_last_status_summary(self, obj):
|
||||
"""
|
||||
返回订单下所有 PrintingJob 按最后完成状态分组的数量汇总
|
||||
|
||||
返回格式: [{"state_name": "进度一", "count": 3}, ...]
|
||||
- state_name: 最后完成的状态名称(未开始时为空字符串)
|
||||
- count: 该状态下的 job 数量
|
||||
"""
|
||||
# 使用预取的 printing_jobs(避免 N+1)
|
||||
jobs = getattr(obj, '_prefetched_objects_cache', {}).get('printing_jobs') or obj.printing_jobs.all()
|
||||
|
||||
from collections import Counter
|
||||
status_counter = Counter()
|
||||
|
||||
for job in jobs:
|
||||
# 获取 job 的最后完成状态名称
|
||||
last_completed = job.last_completed_state # 调用 @property,未开始时返回空字符串
|
||||
status_counter[last_completed] += 1
|
||||
|
||||
# 转换为列表格式
|
||||
return [
|
||||
{'state_name': name, 'count': count}
|
||||
for name, count in status_counter.items()
|
||||
]
|
||||
|
||||
def get_created_by_name(self, obj):
|
||||
"""获取创建人名称(员工姓名)"""
|
||||
user = getattr(obj, 'created_by', None)
|
||||
|
||||
@@ -125,8 +125,10 @@ class PrintingOrderViewSet(LimitedModelViewSet):
|
||||
- ordering: 排序字段
|
||||
|
||||
返回字段说明:
|
||||
- jobs_status_summary: 订单下所有印染任务按当前状态分组的数量汇总
|
||||
- jobs_status_summary: 订单下所有印染任务按下一待执行状态分组的数量汇总
|
||||
格式: [{"state_name": "进度一", "state_id": 1, "count": 3}, ...]
|
||||
- jobs_last_status_summary: 订单下所有印染任务按最后完成状态分组的数量汇总
|
||||
格式: [{"state_name": "进度一", "count": 3}, ...]
|
||||
"""
|
||||
queryset = models.PrintingOrder.objects.all()
|
||||
permission_classes = [DjangoModelPermissions]
|
||||
|
||||
@@ -64,6 +64,30 @@ MIDDLEWARE = [
|
||||
- 支持按方法、响应状态码、时间过滤
|
||||
- 所有字段只读,禁止添加和修改(只允许查看和删除)
|
||||
|
||||
### 7. 新增 `jobs_last_status_summary` 字段
|
||||
|
||||
在 `PrintingOrderListSerializer` 中新增字段,用于按最后完成状态分组统计。
|
||||
|
||||
- **修改文件**: `api_v1/views/printing/serializers.py`
|
||||
- **修改文件**: `api_v1/views/printing/views.py`(更新文档注释)
|
||||
|
||||
返回格式:
|
||||
```json
|
||||
{
|
||||
"jobs_status_summary": [
|
||||
{"state_name": "进度二", "state_id": 2, "count": 3}
|
||||
],
|
||||
"jobs_last_status_summary": [
|
||||
{"state_name": "进度一", "count": 2},
|
||||
{"state_name": "", "count": 1}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
字段说明:
|
||||
- `jobs_status_summary`: 按下一待执行状态分组
|
||||
- `jobs_last_status_summary`: 按最后完成状态分组(未开始时 `state_name` 为空字符串)
|
||||
|
||||
## 待办事项
|
||||
|
||||
- [ ] 执行数据库迁移 (`uv run python manage.py migrate`)
|
||||
|
||||
Reference in New Issue
Block a user