feat(schemas): add production module Pydantic schemas

Create 3 schema files for the production module:
- production_work_order.py: work order base, list query, complete
- production_task.py: task CRUD, steps, materials, outputs, inputs
- cell_product.py: cell product create, update, list query
This commit is contained in:
zlwu committed 2026-05-20 00:09:21 +08:00
1 parent 61f217eea5
commit 026b040db5
3 files changed
+155

No files matched your search

+42
View File
@@ -0,0 +1,42 @@
from pydantic import BaseModel
from typing import Optional
from datetime import datetime
class CellProductCreate(BaseModel):
product_code: str
product_name: str
product_type_id: Optional[str] = None
spec_id: Optional[str] = None
batch_no: Optional[str] = None
storage_slot_id: Optional[str] = None
product_status: Optional[str] = 'zk'
source_type: Optional[str] = 'manual'
quantity: Optional[float] = None
unit: Optional[str] = None
expiry_date: Optional[datetime] = None
product_images: Optional[str] = None
remark: Optional[str] = None
class CellProductUpdate(BaseModel):
product_name: Optional[str] = None
product_type_id: Optional[str] = None
spec_id: Optional[str] = None
batch_no: Optional[str] = None
storage_slot_id: Optional[str] = None
product_status: Optional[str] = None
quantity: Optional[float] = None
unit: Optional[str] = None
expiry_date: Optional[datetime] = None
product_images: Optional[str] = None
remark: Optional[str] = None
class CellProductListQuery(BaseModel):
page: int = 1
page_size: int = 20
product_code: Optional[str] = None
product_name: Optional[str] = None
product_type_id: Optional[str] = None
product_status: Optional[str] = None
+93
View File
@@ -0,0 +1,93 @@
from pydantic import BaseModel
from typing import Optional, List
from datetime import datetime
class ProductionTaskCreate(BaseModel):
work_order_id: str
task_name: Optional[str] = None
route_id: str
description: Optional[str] = None
remark: Optional[str] = None
class ProductionTaskListQuery(BaseModel):
page: int = 1
page_size: int = 20
work_order_id: Optional[str] = None
task_no: Optional[str] = None
task_status: Optional[str] = None
class ProductionTaskUpdate(BaseModel):
task_name: Optional[str] = None
description: Optional[str] = None
remark: Optional[str] = None
attachments: Optional[str] = None
class ProductionTaskStatusUpdate(BaseModel):
task_status: str
class TaskStepAdd(BaseModel):
process_code: Optional[str] = None
category_id: Optional[str] = None
process_name: Optional[str] = None
description: Optional[str] = None
equipment_name: Optional[str] = None
estimated_duration: Optional[str] = None
sop_ids: Optional[str] = None
class TaskStepUpdate(BaseModel):
process_name: Optional[str] = None
description: Optional[str] = None
equipment_name: Optional[str] = None
estimated_duration: Optional[str] = None
actual_duration: Optional[str] = None
sop_ids: Optional[str] = None
step_status: Optional[str] = None
class TaskStepMaterialItem(BaseModel):
material_code: Optional[str] = None
material_name: Optional[str] = None
spec: Optional[str] = None
spec_model: Optional[str] = None
standard_usage: Optional[str] = None
actual_usage: Optional[str] = None
unit: Optional[str] = None
is_key_material: Optional[str] = '0'
is_required: Optional[str] = '1'
remark: Optional[str] = None
class TaskStepOutputItem(BaseModel):
output_type_id: Optional[str] = None
output_name: Optional[str] = None
output_barcode: Optional[str] = None
class TaskStepDataCollectionItem(BaseModel):
collection_name: Optional[str] = None
unit: Optional[str] = None
collection_value: Optional[str] = None
class TaskInputItem(BaseModel):
input_type: str
input_id: Optional[str] = None
input_code: Optional[str] = None
input_name: Optional[str] = None
class TaskOutputItem(BaseModel):
cell_product_id: Optional[str] = None
storage_slot_id: Optional[str] = None
output_name: Optional[str] = None
output_barcode: Optional[str] = None
quantity: Optional[float] = None
unit: Optional[str] = None
remark: Optional[str] = None
attachments: Optional[str] = None
@@ -0,0 +1,20 @@
from pydantic import BaseModel
from typing import Optional
from datetime import datetime
class ProductionWorkOrderBase(BaseModel):
remark: Optional[str] = None
class ProductionWorkOrderListQuery(BaseModel):
page: int = 1
page_size: int = 20
work_order_no: Optional[str] = None
work_order_status: Optional[str] = None
protocol_no: Optional[str] = None
sample_code: Optional[str] = None
class ProductionWorkOrderComplete(BaseModel):
remark: Optional[str] = None