Files
zkxw/backend/app/schemas/process_route.py
T
zlwuandCursor 5e563a6669 fix: 子表保存改为就地同步,避免整批换 id 打断外键。
协议样本、生产产出和盘点明细按行更新并保留原 id;补齐存储证明质检预填、离职人员显示名,以及样本采集通知模板字段。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-28 10:51:53 +08:00

132 lines
4.9 KiB
Python

"""工艺路线管理 Pydantic Schemas"""
from pydantic import BaseModel, ConfigDict, Field
from typing import Optional, List
# Route main table
class ProcessRouteCreateBody(BaseModel):
model_config = ConfigDict(populate_by_name=True)
route_code: str = Field(..., alias="routeCode")
route_name: str = Field(..., alias="routeName")
product_type_id: Optional[str] = Field(None, alias="productTypeId")
version: Optional[str] = Field(None, alias="version")
remark: Optional[str] = None
class ProcessRouteUpdateBody(BaseModel):
model_config = ConfigDict(populate_by_name=True)
route_code: Optional[str] = Field(None, alias="routeCode")
route_name: Optional[str] = Field(None, alias="routeName")
product_type_id: Optional[str] = Field(None, alias="productTypeId")
version: Optional[str] = Field(None, alias="version")
remark: Optional[str] = None
equipment_ids: Optional[List[str]] = Field(None, alias="equipmentIds")
class SetCurrentBody(BaseModel):
model_config = ConfigDict(populate_by_name=True)
route_id: str = Field(..., alias="routeId")
# Step operations
class StepAddBody(BaseModel):
model_config = ConfigDict(populate_by_name=True)
route_id: str = Field(..., alias="routeId")
process_id: str = Field(..., alias="processId")
step_order: Optional[int] = Field(None, alias="stepOrder")
class StepCopyBody(BaseModel):
model_config = ConfigDict(populate_by_name=True)
step_id: str = Field(..., alias="stepId")
class StepUpdateBody(BaseModel):
model_config = ConfigDict(populate_by_name=True)
step_id: str = Field(..., alias="stepId")
process_code: Optional[str] = Field(None, alias="processCode")
category_id: Optional[str] = Field(None, alias="categoryId")
process_name: Optional[str] = Field(None, alias="processName")
description: Optional[str] = None
equipment_ids: Optional[List[str]] = Field(None, alias="equipmentIds")
estimated_duration: Optional[str] = Field(None, alias="estimatedDuration")
sop_ids: Optional[str] = Field(None, alias="sopIds")
sop_content: Optional[str] = Field(None, alias="sopContent")
class StepReorderBody(BaseModel):
model_config = ConfigDict(populate_by_name=True)
route_id: str = Field(..., alias="routeId")
step_ids: List[str] = Field(..., alias="stepIds")
# Step sub-table items
class StepReagentItem(BaseModel):
model_config = ConfigDict(populate_by_name=True)
id: Optional[str] = None
reagent_code: Optional[str] = Field(None, alias="reagentCode")
reagent_name: Optional[str] = Field(None, alias="reagentName")
spec: Optional[str] = None
standard_usage: Optional[str] = Field(None, alias="standardUsage")
unit: Optional[str] = None
is_key_material: Optional[str] = Field("0", alias="isKeyMaterial")
order_num: Optional[int] = Field(0, alias="orderNum")
remark: Optional[str] = None
class StepConsumableItem(BaseModel):
model_config = ConfigDict(populate_by_name=True)
id: Optional[str] = None
consumable_code: Optional[str] = Field(None, alias="consumableCode")
consumable_name: Optional[str] = Field(None, alias="consumableName")
spec_model: Optional[str] = Field(None, alias="specModel")
standard_usage: Optional[str] = Field(None, alias="standardUsage")
unit: Optional[str] = None
is_required: Optional[str] = Field("1", alias="isRequired")
order_num: Optional[int] = Field(0, alias="orderNum")
remark: Optional[str] = None
class StepOutputItem(BaseModel):
model_config = ConfigDict(populate_by_name=True)
id: Optional[str] = None
output_type_id: Optional[str] = Field(None, alias="outputTypeId")
output_name: Optional[str] = Field(None, alias="outputName")
output_barcode: Optional[str] = Field(None, alias="outputBarcode")
order_num: Optional[int] = Field(0, alias="orderNum")
remark: Optional[str] = None
class StepDataCollectionItem(BaseModel):
model_config = ConfigDict(populate_by_name=True)
id: Optional[str] = None
collection_name: Optional[str] = Field(None, alias="collectionName")
unit: Optional[str] = None
order_num: Optional[int] = Field(0, alias="orderNum")
remark: Optional[str] = None
# Sub-table update bodies (step_id + items[])
class StepReagentUpdateBody(BaseModel):
model_config = ConfigDict(populate_by_name=True)
step_id: str = Field(..., alias="stepId")
items: List[StepReagentItem] = Field(...)
class StepConsumableUpdateBody(BaseModel):
model_config = ConfigDict(populate_by_name=True)
step_id: str = Field(..., alias="stepId")
items: List[StepConsumableItem] = Field(...)
class StepOutputUpdateBody(BaseModel):
model_config = ConfigDict(populate_by_name=True)
step_id: str = Field(..., alias="stepId")
items: List[StepOutputItem] = Field(...)
class StepDataCollectionUpdateBody(BaseModel):
model_config = ConfigDict(populate_by_name=True)
step_id: str = Field(..., alias="stepId")
items: List[StepDataCollectionItem] = Field(...)