Files
dpb/backend/app/api/v1/module_bre/selection_result/schema.py
T
34047007@qq.com b95053c52c init: 初始化 dpb 桃育种系统代码库
前后端 + 后端 FastAPI 全量源码、部署脚本与文档。
2026-08-06 00:17:49 +08:00

103 lines
5.7 KiB
Python

from app.core.base_schema import CommonSchema
"""选育结果 —— Pydantic 校验/序列化模型。"""
from datetime import datetime
from pydantic import BaseModel, ConfigDict, Field
class SelectionResultBaseSchema(BaseModel):
model_config = ConfigDict(from_attributes=True)
combination_id: int = Field(..., description="杂交组合")
tree_id: int = Field(..., description="单株")
selection_year: int | None = Field(default=None, description="入选年份")
is_selected: str | None = Field(default=None, description="选育结论")
clone_id: int | None = Field(default=None, description="晋级无性系")
rule_id: int | None = Field(default=None, description="选育规则")
from_stage: str | None = Field(default=None, description="起始阶段(breeding_stage)")
to_stage: str | None = Field(default=None, description="晋级阶段(breeding_stage)")
approved_by: int | None = Field(default=None, description="审核人")
trial_study_id: int | None = Field(default=None, description="所属试验研究点")
reason: str | None = Field(default=None, description="入选理由")
remark: str | None = Field(default=None, description="备注")
class SelectionResultCreateSchema(SelectionResultBaseSchema):
pass
class SelectionResultBatchCreateSchema(BaseModel):
"""批量评选:一批单株共享同一评审结论(同一轮评选同一结论)。"""
model_config = ConfigDict(from_attributes=True)
combination_id: int = Field(..., description="杂交组合")
tree_id: list[int] = Field(..., description="单株ID列表")
selection_year: int | None = Field(default=None, description="入选年份")
is_selected: str | None = Field(default=None, description="选育结论")
rule_id: int | None = Field(default=None, description="选育规则")
from_stage: str | None = Field(default=None, description="起始阶段(breeding_stage)")
to_stage: str | None = Field(default=None, description="晋级阶段(breeding_stage)")
approved_by: int | None = Field(default=None, description="审核人")
trial_study_id: int | None = Field(default=None, description="所属试验研究点")
reason: str | None = Field(default=None, description="入选理由")
remark: str | None = Field(default=None, description="备注")
class SelectionResultBatchCreateResultSchema(BaseModel):
"""批量评选逐棵结果:一棵失败不影响其他。"""
success_count: int = Field(..., description="成功条数")
fail_count: int = Field(..., description="失败条数")
success_ids: list[int] = Field(default_factory=list, description="成功创建的选育结果ID")
fail_details: list[dict] = Field(default_factory=list, description="失败明细 [{tree_id, tree_no, msg}]")
class SelectionResultUpdateSchema(SelectionResultBaseSchema):
combination_id: int | None = Field(default=None, description="杂交组合")
tree_id: int | None = Field(default=None, description="单株")
selection_year: int | None = Field(default=None, description="入选年份")
is_selected: str | None = Field(default=None, description="选育结论")
clone_id: int | None = Field(default=None, description="晋级无性系")
rule_id: int | None = Field(default=None, description="选育规则")
from_stage: str | None = Field(default=None, description="起始阶段(breeding_stage)")
to_stage: str | None = Field(default=None, description="晋级阶段(breeding_stage)")
approved_by: int | None = Field(default=None, description="审核人")
trial_study_id: int | None = Field(default=None, description="所属试验研究点")
reason: str | None = Field(default=None, description="入选理由")
remark: str | None = Field(default=None, description="备注")
class SelectionResultOutSchema(SelectionResultBaseSchema):
id: int
uuid: str
combination_name: str | None = None # 由 Service 层联表填充
tree_name: str | None = None # 由 Service 层联表填充
tree_no: str | None = None # 冗余自单株表的单株编号
selection_year: int | None = None
is_selected: str | None = None
clone_name: str | None = None # 由 Service 层联表填充
rule_name: str | None = None # 由 Service 层联表填充
from_stage: str | None = None
to_stage: str | None = None
approved_by_name: str | None = None # 由 Service 层联表填充
trial_study_name: str | None = None # 由 Service 层联表填充
reason: str | None = None
remark: str | None = None
created_time: datetime | None = None
updated_time: datetime | None = None
created_by: CommonSchema | None = None
updated_by: CommonSchema | None = None
class SelectionResultQueryParam(BaseModel):
combination_id: int | None = Field(default=None, description="杂交组合", json_schema_extra={"q": "eq"})
tree_id: int | None = Field(default=None, description="单株", json_schema_extra={"q": "eq"})
selection_year: int | None = Field(default=None, description="入选年份", json_schema_extra={"q": "eq"})
is_selected: str | None = Field(default=None, description="选育结论", json_schema_extra={"q": "eq"})
clone_id: int | None = Field(default=None, description="晋级无性系", json_schema_extra={"q": "eq"})
rule_id: int | None = Field(default=None, description="选育规则", json_schema_extra={"q": "eq"})
from_stage: str | None = Field(default=None, description="起始阶段", json_schema_extra={"q": "eq"})
to_stage: str | None = Field(default=None, description="晋级阶段", json_schema_extra={"q": "eq"})
approved_by: int | None = Field(default=None, description="审核人", json_schema_extra={"q": "eq"})
trial_study_id: int | None = Field(default=None, description="所属试验研究点", json_schema_extra={"q": "eq"})