from app.core.base_schema import CommonSchema """育种单株 —— Pydantic 校验/序列化模型。""" from datetime import datetime from pydantic import BaseModel, ConfigDict, Field class TreeBaseSchema(BaseModel): model_config = ConfigDict(from_attributes=True) combination_id: int = Field(..., description="杂交组合") dam_id: int | None = Field(default=None, description="母本(种质);留空自动取组合母本") sire_id: int | None = Field(default=None, description="父本(种质);留空自动取组合父本") trial_study_id: int | None = Field(default=None, description="试验执行(MET,规格 §3.13)") block_no: int | None = Field(default=None, description="区组号") rootstock_id: int | None = Field(default=None, description="砧木(规格 §3.17)") clone_id: int | None = Field(default=None, description="无性系(规格 §3.0)") plot_id: int | None = Field(default=None, description="试验地块/位置") planting_id: int | None = Field(default=None, description="来源定植批次") tree_no: str | None = Field(default=None, description="单株编号(留空自动生成 组合编号-序号)") row_orientation: str | None = Field(default=None, description="行向") row_no: int | None = Field(default=None, description="行数") col_no: int | None = Field(default=None, description="列数") planted_date: str | None = Field(default=None, description="定植时间") bre_personnel_id: int | None = Field(default=None, description="责任人") status: str | None = Field(default=None, description="状态") remark: str | None = Field(default=None, description="备注") stage: str | None = Field(default=None, description="当前育种阶段(breeding_stage)") generation: str | None = Field(default=None, description="世代(breeding_generation)") entry_id: int | None = Field(default=None, description="参试条目(派生自定植,表单不暴露)") class TreeCreateSchema(TreeBaseSchema): pass class TreeUpdateSchema(TreeBaseSchema): combination_id: int | None = Field(default=None, description="杂交组合") plot_id: int | None = Field(default=None, description="试验地块/位置") planting_id: int | None = Field(default=None, description="来源定植批次") tree_no: str | None = Field(default=None, description="单株编号") row_orientation: str | None = Field(default=None, description="行向") row_no: int | None = Field(default=None, description="行数") col_no: int | None = Field(default=None, description="列数") planted_date: str | None = Field(default=None, description="定植时间") bre_personnel_id: int | None = Field(default=None, description="责任人") status: str | None = Field(default=None, description="状态") remark: str | None = Field(default=None, description="备注") stage: str | None = Field(default=None, description="当前育种阶段(breeding_stage)") generation: str | None = Field(default=None, description="世代(breeding_generation)") class TreeOutSchema(TreeBaseSchema): id: int uuid: str combination_name: str | None = None # 由 Service 层联表填充 dam_name: str | None = None # 由 Service 层联表填充(母本品种名) sire_name: str | None = None # 由 Service 层联表填充(父本品种名) study_name: str | None = None # 由 Service 层联表填充(试验执行名称) rootstock_name: str | None = None # 由 Service 层联表填充(砧木名称) clone_name: str | None = None # 由 Service 层联表填充(无性系编号) plot_name: str | None = None # 由 Service 层联表填充 planting_id: int | None = None planting_name: str | None = None # 由 Service 层联表填充(定植批次展示) tree_no: str | None = None row_orientation: str | None = None row_no: int | None = None col_no: int | None = None planted_date: str | None = None bre_personnel_name: str | None = None # 由 Service 层联表填充 status: str | None = None remark: str | None = None stage: str | None = None generation: str | None = None warning: str | None = None # 创建/更新时显式亲本与组合父母本不一致的警示(仅返回体,不落库) germplasm_id: int | None = None # 晋升回填,非表单字段 entry_id: int | None = None # 派生自定植,非表单字段 germplasm_name: str | None = None # 由 Service 层联表填充(关联种质名) entry_number: int | None = None # 由 Service 层联表填充(参试编号) created_time: datetime | None = None updated_time: datetime | None = None created_by: CommonSchema | None = None updated_by: CommonSchema | None = None class TreeQueryParam(BaseModel): combination_id: 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"}) rootstock_id: int | None = Field(default=None, description="砧木", json_schema_extra={"q": "eq"}) clone_id: int | None = Field(default=None, description="无性系", json_schema_extra={"q": "eq"}) plot_id: int | None = Field(default=None, description="试验地块/位置", json_schema_extra={"q": "eq"}) planting_id: int | None = Field(default=None, description="来源定植批次", json_schema_extra={"q": "eq"}) tree_no: str | None = Field(default=None, description="单株编号", json_schema_extra={"q": "like"}) planted_date: str | None = Field(default=None, description="定植时间", json_schema_extra={"q": "like"}) row_orientation: str | None = Field(default=None, description="行向", json_schema_extra={"q": "eq"}) bre_personnel_id: int | None = Field(default=None, description="责任人", json_schema_extra={"q": "eq"}) status: str | None = Field(default=None, description="状态", json_schema_extra={"q": "eq"}) stage: str | None = Field(default=None, description="育种阶段", json_schema_extra={"q": "eq"}) generation: str | None = Field(default=None, description="世代", json_schema_extra={"q": "eq"}) germplasm_id: int | None = Field(default=None, description="关联种质", json_schema_extra={"q": "eq"}) entry_id: int | None = Field(default=None, description="参试条目", json_schema_extra={"q": "eq"})