1
0
forked from erp-dev/erp
This commit is contained in:
2026-01-12 13:15:41 +08:00
parent 5741a8cdef
commit bbe4039517
3 changed files with 54 additions and 2 deletions

View File

@@ -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)

View File

@@ -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]

View File

@@ -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`)