Files
pickling-mes/backend/app/schemas/quality.py
wangyu 649e667ad0 feat: 实时数据持久化到计划/实绩 + 质量管理改版(钢卷信息+异常记录+继承)
- 在产计划持久化实时数据快照(run_data),物料跟踪每次轮询上报;生产完成写入实绩 process_data
- 实绩页点击行展开生产阶段数据 + 实时数据快照(测点列表)
- 质量管理默认进入异常管理,改为全宽:顶部选卷 + 钢卷信息(5列) + 异常记录表
- 异常记录新增「继承来源」列与「继承」按钮(从来源卷复制缺陷),进入即预置6行
- qc_defect 增加 inherit_source 字段

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 16:01:34 +08:00

180 lines
5.3 KiB
Python

from pydantic import BaseModel
from typing import Optional, List
from datetime import datetime
class QcTaskCreate(BaseModel):
task_code: str
coil_no: Optional[str] = None
task_type: Optional[str] = None
scheme_name: Optional[str] = None
inspect_user: Optional[str] = None
remark: Optional[str] = None
class QcTaskUpdate(BaseModel):
coil_no: Optional[str] = None
task_type: Optional[str] = None
scheme_name: Optional[str] = None
status: Optional[int] = None
inspect_user: Optional[str] = None
inspect_time: Optional[datetime] = None
audit_user: Optional[str] = None
audit_time: Optional[datetime] = None
result: Optional[str] = None
remark: Optional[str] = None
class QcTaskItemOut(BaseModel):
id: int
task_id: int
item_name: str
item_type: Optional[str]
standard_value: Optional[float]
upper_limit: Optional[float]
lower_limit: Optional[float]
unit: Optional[str]
inspect_value: Optional[str]
is_qualified: Optional[int]
judge_result: Optional[str]
inspect_user: Optional[str]
inspect_time: Optional[datetime]
created_at: datetime
class Config:
from_attributes = True
class QcTaskItemCreate(BaseModel):
task_id: int
item_name: str
item_type: Optional[str] = None
standard_value: Optional[float] = None
upper_limit: Optional[float] = None
lower_limit: Optional[float] = None
unit: Optional[str] = None
inspect_value: Optional[str] = None
is_qualified: Optional[int] = None
judge_result: Optional[str] = None
inspect_user: Optional[str] = None
inspect_time: Optional[datetime] = None
class QcTaskItemUpdate(BaseModel):
inspect_value: Optional[str] = None
is_qualified: Optional[int] = None
judge_result: Optional[str] = None
inspect_user: Optional[str] = None
inspect_time: Optional[datetime] = None
class QcTaskOut(BaseModel):
id: int
task_code: str
coil_no: Optional[str]
task_type: Optional[str]
scheme_name: Optional[str]
status: int
inspect_user: Optional[str]
inspect_time: Optional[datetime]
audit_user: Optional[str]
audit_time: Optional[datetime]
result: Optional[str]
remark: Optional[str]
created_at: datetime
class Config:
from_attributes = True
class QcDefectBase(BaseModel):
coil_no: Optional[str] = None
seq_no: Optional[int] = None
defect_desc: Optional[str] = None
start_position: Optional[float] = None
end_position: Optional[float] = None
length_val: Optional[float] = None
upper_surface: Optional[bool] = False
lower_surface: Optional[bool] = False
side_op: Optional[bool] = False
side_middle: Optional[bool] = False
side_drive: Optional[bool] = False
is_main: Optional[bool] = False
inherit_source: Optional[str] = None
image_url: Optional[str] = None
defect_code: Optional[str] = None
defect_type: Optional[str] = None
degree: Optional[str] = None
remark: Optional[str] = None
class QcDefectCreate(QcDefectBase):
production_line: Optional[str] = None
position: Optional[str] = None
plate_surface: Optional[str] = None
defect_rate: Optional[float] = None
defect_weight: Optional[float] = None
judge_level: Optional[str] = None
judge_by: Optional[str] = None
judge_time: Optional[datetime] = None
main_mark: Optional[int] = None
whole_coil_mark: Optional[int] = None
class QcDefectUpdate(BaseModel):
seq_no: Optional[int] = None
defect_desc: Optional[str] = None
start_position: Optional[float] = None
end_position: Optional[float] = None
length_val: Optional[float] = None
upper_surface: Optional[bool] = None
lower_surface: Optional[bool] = None
side_op: Optional[bool] = None
side_middle: Optional[bool] = None
side_drive: Optional[bool] = None
is_main: Optional[bool] = None
inherit_source: Optional[str] = None
image_url: Optional[str] = None
defect_code: Optional[str] = None
defect_type: Optional[str] = None
degree: Optional[str] = None
remark: Optional[str] = None
class QcDefectBulkSave(BaseModel):
coil_no: str
defects: List[QcDefectCreate]
class QcDefectOut(BaseModel):
id: int
coil_no: Optional[str]
seq_no: Optional[int] = None
defect_desc: Optional[str] = None
start_position: Optional[float] = None
end_position: Optional[float] = None
length_val: Optional[float] = None
upper_surface: Optional[bool] = None
lower_surface: Optional[bool] = None
side_op: Optional[bool] = None
side_middle: Optional[bool] = None
side_drive: Optional[bool] = None
is_main: Optional[bool] = None
inherit_source: Optional[str] = None
image_url: Optional[str] = None
production_line: Optional[str] = None
position: Optional[str] = None
plate_surface: Optional[str] = None
defect_code: Optional[str] = None
defect_type: Optional[str] = None
defect_rate: Optional[float] = None
defect_weight: Optional[float] = None
degree: Optional[str] = None
judge_level: Optional[str] = None
judge_by: Optional[str] = None
judge_time: Optional[datetime] = None
main_mark: Optional[int] = None
whole_coil_mark: Optional[int] = None
remark: Optional[str] = None
created_at: datetime
class Config:
from_attributes = True