"""农事操作 —— Pydantic 校验/序列化模型。""" from datetime import date, datetime from pydantic import BaseModel, ConfigDict, Field from app.core.base_schema import CommonSchema class FieldOperationBaseSchema(BaseModel): model_config = ConfigDict(from_attributes=True) tree_id: int | None = Field(default=None, description="单株(可空)") plot_id: int | None = Field(default=None, description="小区(可空)") op_type: str = Field(..., description="操作类型(field_operation 字典: fertilize/spray/prune/irrigate/thinning/bagging/harvest)") op_date: date | None = Field(default=None, description="操作日期") op_detail: str | None = Field(default=None, description="操作详情/用量") yield_kg: float | None = Field(default=None, description="单株产量(kg,op_type=harvest)") fruit_count: int | None = Field(default=None, description="果实个数(op_type=harvest)") avg_fruit_weight: float | None = Field(default=None, description="平均单果重(g,op_type=harvest)") marketable_rate: float | None = Field(default=None, description="好果率(%,op_type=harvest)") operator_id: int | None = Field(default=None, description="操作人(育种人员)") remark: str | None = Field(default=None, description="备注") class FieldOperationCreateSchema(FieldOperationBaseSchema): pass class FieldOperationUpdateSchema(FieldOperationBaseSchema): op_type: str | None = Field(default=None, description="操作类型(field_operation 字典: fertilize/spray/prune/irrigate/thinning/bagging/harvest)") class FieldOperationOutSchema(FieldOperationBaseSchema): id: int uuid: str op_type: str | None = None tree_id: int | None = None tree_no: str | None = None # 由 Service 层联表填充 plot_id: int | None = None plot_label: str | None = None # 由 Service 层联表填充 op_date: date | None = None op_detail: str | None = None yield_kg: float | None = None fruit_count: int | None = None avg_fruit_weight: float | None = None marketable_rate: float | None = None operator_id: int | None = None operator_name: str | None = None # 由 Service 层联表填充 remark: str | None = None status: int | None = None created_time: datetime | None = None updated_time: datetime | None = None created_by: CommonSchema | None = None updated_by: CommonSchema | None = None class FieldOperationQueryParam(BaseModel): op_type: str | None = Field(default=None, description="操作类型", json_schema_extra={"q": "eq"}) operator_id: int | None = Field(default=None, description="操作人", json_schema_extra={"q": "eq"})