feat: 同步本地未提交的前后端更新(plan/quality/material/inspection/production 等模块)

This commit is contained in:
2026-06-20 18:19:06 +08:00
parent 970afe10b4
commit db3945c263
19 changed files with 1681 additions and 961 deletions

View File

@@ -1,30 +1,48 @@
from pydantic import BaseModel
from typing import Optional
from datetime import datetime
from app.models.plan import PlanStatus
class PlanCreate(BaseModel):
plan_no: str
plan_date: datetime
shift: Optional[str] = None
plan_quantity: int = 0
plan_weight: float = 0
cold_coil_no: Optional[str] = None
hot_coil_no: Optional[str] = None
steel_grade: Optional[str] = None
spec_range: Optional[str] = None
priority: int = 5
incoming_thickness: Optional[float] = None
product_thickness: Optional[float] = None
deviation_upper: Optional[float] = None
deviation_lower: Optional[float] = None
incoming_width: Optional[float] = None
product_width: Optional[float] = None
packaging_req: Optional[str] = None
trim_req: Optional[str] = None
rolling_mode: Optional[str] = None
coil_diameter: Optional[float] = None
split_count: Optional[int] = 1
next_process: Optional[str] = None
status: Optional[str] = "ready"
remark: Optional[str] = None
class PlanUpdate(BaseModel):
plan_date: Optional[datetime] = None
shift: Optional[str] = None
plan_quantity: Optional[int] = None
plan_weight: Optional[float] = None
actual_quantity: Optional[int] = None
actual_weight: Optional[float] = None
status: Optional[PlanStatus] = None
priority: Optional[int] = None
cold_coil_no: Optional[str] = None
hot_coil_no: Optional[str] = None
steel_grade: Optional[str] = None
incoming_thickness: Optional[float] = None
product_thickness: Optional[float] = None
deviation_upper: Optional[float] = None
deviation_lower: Optional[float] = None
incoming_width: Optional[float] = None
product_width: Optional[float] = None
packaging_req: Optional[str] = None
trim_req: Optional[str] = None
rolling_mode: Optional[str] = None
coil_diameter: Optional[float] = None
split_count: Optional[int] = None
next_process: Optional[str] = None
status: Optional[str] = None
remark: Optional[str] = None
@@ -32,16 +50,24 @@ class PlanOut(BaseModel):
id: int
plan_no: str
plan_date: datetime
shift: Optional[str]
plan_quantity: int
plan_weight: float
actual_quantity: int
actual_weight: float
status: PlanStatus
steel_grade: Optional[str]
spec_range: Optional[str]
priority: int
created_by: Optional[str]
status: Optional[str] = None
cold_coil_no: Optional[str] = None
hot_coil_no: Optional[str] = None
steel_grade: Optional[str] = None
incoming_thickness: Optional[float] = None
product_thickness: Optional[float] = None
deviation_upper: Optional[float] = None
deviation_lower: Optional[float] = None
incoming_width: Optional[float] = None
product_width: Optional[float] = None
packaging_req: Optional[str] = None
trim_req: Optional[str] = None
rolling_mode: Optional[str] = None
coil_diameter: Optional[float] = None
split_count: Optional[int] = 1
next_process: Optional[str] = None
remark: Optional[str] = None
created_by: Optional[str] = None
created_at: datetime
class Config:

View File

@@ -5,52 +5,82 @@ from datetime import datetime
class ProductionRecordCreate(BaseModel):
coil_no: str
sub_coil_no: Optional[str] = None
hot_coil_no: Optional[str] = None
plan_id: Optional[int] = None
shift: Optional[str] = None
shift_date: Optional[datetime] = None
start_time: Optional[datetime] = None
end_time: Optional[datetime] = None
process_length: Optional[float] = None
process_weight: Optional[float] = None
avg_speed: Optional[float] = None
max_speed: Optional[float] = None
acid_consumption: Optional[float] = None
inlet_thickness: Optional[float] = None
team: Optional[str] = None
steel_grade: Optional[str] = None
incoming_thickness: Optional[float] = None
outlet_thickness: Optional[float] = None
inlet_width: Optional[float] = None
quality_grade: Optional[str] = None
operator: Optional[str] = None
deviation_upper: Optional[float] = None
deviation_lower: Optional[float] = None
incoming_width: Optional[float] = None
outlet_width: Optional[float] = None
incoming_weight: Optional[float] = None
weighed_weight: Optional[float] = None
packaging_req: Optional[str] = None
trim_req: Optional[str] = None
surface_quality: Optional[str] = None
product_quality: Optional[float] = None
product_length: Optional[float] = None
length_per_ton: Optional[float] = None
offline_time: Optional[datetime] = None
status: Optional[str] = "UNWEIGH"
remark: Optional[str] = None
class ProductionRecordUpdate(BaseModel):
sub_coil_no: Optional[str] = None
hot_coil_no: Optional[str] = None
shift: Optional[str] = None
end_time: Optional[datetime] = None
process_length: Optional[float] = None
process_weight: Optional[float] = None
avg_speed: Optional[float] = None
acid_consumption: Optional[float] = None
quality_grade: Optional[str] = None
team: Optional[str] = None
steel_grade: Optional[str] = None
incoming_thickness: Optional[float] = None
outlet_thickness: Optional[float] = None
deviation_upper: Optional[float] = None
deviation_lower: Optional[float] = None
incoming_width: Optional[float] = None
outlet_width: Optional[float] = None
incoming_weight: Optional[float] = None
weighed_weight: Optional[float] = None
packaging_req: Optional[str] = None
trim_req: Optional[str] = None
surface_quality: Optional[str] = None
product_quality: Optional[float] = None
product_length: Optional[float] = None
length_per_ton: Optional[float] = None
offline_time: Optional[datetime] = None
status: Optional[str] = None
remark: Optional[str] = None
class ProductionRecordOut(BaseModel):
id: int
coil_no: str
plan_id: Optional[int]
shift: Optional[str]
shift_date: Optional[datetime]
start_time: Optional[datetime]
end_time: Optional[datetime]
process_length: Optional[float]
process_weight: Optional[float]
avg_speed: Optional[float]
max_speed: Optional[float]
acid_consumption: Optional[float]
inlet_thickness: Optional[float]
outlet_thickness: Optional[float]
quality_grade: Optional[str]
operator: Optional[str]
sub_coil_no: Optional[str] = None
hot_coil_no: Optional[str] = None
plan_id: Optional[int] = None
shift: Optional[str] = None
team: Optional[str] = None
steel_grade: Optional[str] = None
incoming_thickness: Optional[float] = None
outlet_thickness: Optional[float] = None
deviation_upper: Optional[float] = None
deviation_lower: Optional[float] = None
incoming_width: Optional[float] = None
outlet_width: Optional[float] = None
incoming_weight: Optional[float] = None
weighed_weight: Optional[float] = None
packaging_req: Optional[str] = None
trim_req: Optional[str] = None
surface_quality: Optional[str] = None
product_quality: Optional[float] = None
product_length: Optional[float] = None
length_per_ton: Optional[float] = None
offline_time: Optional[datetime] = None
status: Optional[str] = None
remark: Optional[str] = None
created_at: datetime
class Config:

View File

@@ -85,8 +85,78 @@ class QcTaskOut(BaseModel):
from_attributes = True
class QcDefectCreate(BaseModel):
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
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
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
image_url: Optional[str] = None
production_line: Optional[str] = None
position: Optional[str] = None
plate_surface: Optional[str] = None
@@ -101,36 +171,6 @@ class QcDefectCreate(BaseModel):
main_mark: Optional[int] = None
whole_coil_mark: Optional[int] = None
remark: Optional[str] = None
class QcDefectUpdate(BaseModel):
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
remark: Optional[str] = None
class QcDefectOut(BaseModel):
id: int
coil_no: Optional[str]
production_line: Optional[str]
position: Optional[str]
plate_surface: Optional[str]
defect_code: Optional[str]
defect_type: Optional[str]
defect_rate: Optional[float]
defect_weight: Optional[float]
degree: Optional[str]
judge_level: Optional[str]
judge_by: Optional[str]
judge_time: Optional[datetime]
main_mark: Optional[int]
whole_coil_mark: Optional[int]
remark: Optional[str]
created_at: datetime
class Config:
from_attributes = True