from datetime import datetime from typing import Optional from pydantic import BaseModel, ConfigDict, Field, model_validator class EnterpriseApplyInviteSchema(BaseModel): """申请企业邀请码请求模型""" identity_type: str = Field(description="身份类型: ALIPAY_USER_ID/ALIPAY_LOGON_ID/ISV_USER_ID") identity: Optional[str] = Field(default=None, description="企业管理员身份标识") identity_open_id: Optional[str] = Field(default=None, description="企业管理员openId") @model_validator(mode="after") def validate_fields(self): """ 校验字段约束。 返回: - EnterpriseApplyInviteSchema: 校验后的同一实例。 异常: - ValueError: 字段不满足约束时抛出。 """ if not self.identity and not self.identity_open_id: raise ValueError("identity 和 identity_open_id 至少需要一个不为空") return self class EnterpriseBaseInfoSchema(BaseModel): """企业基本信息""" industry: Optional[str] = Field(default=None, description="企业所属行业") enterprise_code: Optional[str] = Field(default=None, description="企业代码") enterprise_name: Optional[str] = Field(default=None, description="企业名称") class EnterpriseProfilesSchema(BaseModel): """企业扩展参数""" group_app_id: Optional[str] = Field(default=None, description="分组AppId") access_channel: Optional[str] = Field(default=None, description="接入渠道: IOT_NFC") credit_applicant_mobile: Optional[str] = Field(default=None, description="授信申请人手机号") pc_invite_url_mode: Optional[str] = Field(default=None, description="PC邀请URL模式: webpage") create_iot_group: Optional[bool] = Field(default=None, description="是否创建IoT分组") class EnterpriseCreateOrUpdateSchema(BaseModel): """ 创建或更新企业 """ enterprise_id: Optional[str] = Field(default=None, max_length=264, description="企业ID(业务主键)") out_biz_no: Optional[str] = Field(default=None, max_length=264, description="外部业务号") account_id: Optional[str] = Field(default=None, max_length=264, description="支付宝账号ID") name: Optional[str] = Field(default=None, max_length=228, description="企业名称") short_name: Optional[str] = Field(default=None, max_length=564, description="企业简称") status: Optional[str] = Field(default=None, description="企业状态") identity_type: Optional[str] = Field(default=None, description="身份类型: ALIPAY_USER_ID/ALIPAY_LOGON_ID/ISV_USER_ID") identity: Optional[str] = Field(default=None, description="企业管理员身份标识") identity_open_id: Optional[str] = Field(default=None, description="企业管理员openId") register_mode: Optional[str] = Field(default=None, description="注册模式: NORMAL/ISV_AGENT/ISV_VIRTUAL") sign_fund_way: Optional[str] = Field(default=None, description="签约出资方式: BALANCE/CREDIT/CORPORATE_CARD") base_info: Optional[EnterpriseBaseInfoSchema] = Field(default=None, description="企业基本信息") profiles: Optional[EnterpriseProfilesSchema] = Field(default=None, description="扩展参数") remark: Optional[str] = Field(default=None, description="备注") def validate_enterprise_id(self): if not self.enterprise_id: raise ValueError("enterprise_id 需要不为空") return self class EnterpriseOutSchema(BaseModel): """企业响应模型""" model_config = ConfigDict(from_attributes=True) id: int = Field(description="主键ID") enterprise_id: Optional[str] = Field(default=None, description="企业ID(业务主键)") out_biz_no: Optional[str] = Field(default=None, description="外部业务号") account_id: Optional[str] = Field(default=None, description="支付宝账号ID") name: Optional[str] = Field(default=None, description="企业名称") short_name: Optional[str] = Field(default=None, description="企业简称") status: str = Field(description="状态: ENTERPRISE_CREATE/ENTERPRISE_ACTIVATED/ENTERPRISE_UNSIGN/ENTERPRISE_WITHDRAW") sign_url: Optional[str] = Field(default=None, description="签约链接") pc_invite_url: Optional[str] = Field(default=None, description="邀请URL") invite_time: Optional[datetime] = Field(default=None, description="邀请码创建时间") expire_time: Optional[datetime] = Field(default=None, description="链接过期时间") identity_type: Optional[str] = Field(default=None, description="企业管理员身份类型") identity: Optional[str] = Field(default=None, description="企业管理员身份标识") identity_open_id: Optional[str] = Field(default=None, description="企业管理员openId") register_mode: Optional[str] = Field(default=None, description="注册模式") sign_fund_way: Optional[str] = Field(default=None, description="签约出资方式") base_info: Optional[dict] = Field(default=None, description="企业基本信息") profiles: Optional[dict] = Field(default=None, description="扩展参数") created_time: datetime = Field(description="创建时间") updated_time: datetime = Field(description="更新时间") class EnterpriseInviteOutSchema(BaseModel): """企业邀请响应""" model_config = ConfigDict(from_attributes=True) pc_invite_url: str = Field(description="邀请URL") invite_time: Optional[datetime] = Field(default=None, description="邀请码创建时间") expire_time: Optional[datetime] = Field(default=None, description="链接过期时间") class EnterpriseListOutSchema(BaseModel): """企业列表响应""" model_config = ConfigDict(from_attributes=True) account_id: Optional[str] = Field(default=None, description="支付宝账号ID") enterprise_id: Optional[str] = Field(default=None, description="企业ID") name: Optional[str] = Field(default=None, description="企业名称") short_name: Optional[str] = Field(default=None, description="企业简称") status: str = Field(description="状态") created_time: datetime = Field(description="创建时间") class EnterpriseOperationOutSchema(BaseModel): """企业操作响应""" model_config = ConfigDict(from_attributes=True) enterprise_id: Optional[str] = Field(default=None, description="企业ID(业务主键)") out_biz_no: Optional[str] = Field(default=None, description="外部业务号")