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)
|
process_name = serializers.CharField(source='process.name', read_only=True)
|
||||||
progress = serializers.IntegerField(read_only=True)
|
progress = serializers.IntegerField(read_only=True)
|
||||||
jobs_status_summary = serializers.SerializerMethodField()
|
jobs_status_summary = serializers.SerializerMethodField()
|
||||||
|
jobs_last_status_summary = serializers.SerializerMethodField()
|
||||||
created_by = serializers.IntegerField(source='created_by_id', read_only=True)
|
created_by = serializers.IntegerField(source='created_by_id', read_only=True)
|
||||||
created_by_name = serializers.SerializerMethodField()
|
created_by_name = serializers.SerializerMethodField()
|
||||||
|
|
||||||
@@ -148,7 +149,7 @@ class PrintingOrderListSerializer(serializers.ModelSerializer):
|
|||||||
'fabric', 'width', 'is_urgent', 'area', 'address', 'curve',
|
'fabric', 'width', 'is_urgent', 'area', 'address', 'curve',
|
||||||
'is_fabric_received', 'outgoing_date', 'is_invalid', 'new_curve',
|
'is_fabric_received', 'outgoing_date', 'is_invalid', 'new_curve',
|
||||||
'process', 'process_name', 'progress', 'position', 'print_count',
|
'process', 'process_name', 'progress', 'position', 'print_count',
|
||||||
'jobs_status_summary',
|
'jobs_status_summary', 'jobs_last_status_summary',
|
||||||
'created_by', 'created_by_name',
|
'created_by', 'created_by_name',
|
||||||
'created_at', 'updated_at',
|
'created_at', 'updated_at',
|
||||||
]
|
]
|
||||||
@@ -181,6 +182,31 @@ class PrintingOrderListSerializer(serializers.ModelSerializer):
|
|||||||
for (name, sid), count in status_counter.items()
|
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):
|
def get_created_by_name(self, obj):
|
||||||
"""获取创建人名称(员工姓名)"""
|
"""获取创建人名称(员工姓名)"""
|
||||||
user = getattr(obj, 'created_by', None)
|
user = getattr(obj, 'created_by', None)
|
||||||
|
|||||||
@@ -125,8 +125,10 @@ class PrintingOrderViewSet(LimitedModelViewSet):
|
|||||||
- ordering: 排序字段
|
- ordering: 排序字段
|
||||||
|
|
||||||
返回字段说明:
|
返回字段说明:
|
||||||
- jobs_status_summary: 订单下所有印染任务按当前状态分组的数量汇总
|
- jobs_status_summary: 订单下所有印染任务按下一待执行状态分组的数量汇总
|
||||||
格式: [{"state_name": "进度一", "state_id": 1, "count": 3}, ...]
|
格式: [{"state_name": "进度一", "state_id": 1, "count": 3}, ...]
|
||||||
|
- jobs_last_status_summary: 订单下所有印染任务按最后完成状态分组的数量汇总
|
||||||
|
格式: [{"state_name": "进度一", "count": 3}, ...]
|
||||||
"""
|
"""
|
||||||
queryset = models.PrintingOrder.objects.all()
|
queryset = models.PrintingOrder.objects.all()
|
||||||
permission_classes = [DjangoModelPermissions]
|
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`)
|
- [ ] 执行数据库迁移 (`uv run python manage.py migrate`)
|
||||||
|
|||||||
Reference in New Issue
Block a user