schema.py 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. from datetime import datetime
  2. from typing import Optional
  3. from pydantic import BaseModel, ConfigDict, Field, model_validator
  4. class EnterpriseApplyInviteSchema(BaseModel):
  5. """申请企业邀请码请求模型"""
  6. identity_type: str = Field(description="身份类型: ALIPAY_USER_ID/ALIPAY_LOGON_ID/ISV_USER_ID")
  7. identity: Optional[str] = Field(default=None, description="企业管理员身份标识")
  8. identity_open_id: Optional[str] = Field(default=None, description="企业管理员openId")
  9. @model_validator(mode="after")
  10. def validate_fields(self):
  11. """
  12. 校验字段约束。
  13. 返回:
  14. - EnterpriseApplyInviteSchema: 校验后的同一实例。
  15. 异常:
  16. - ValueError: 字段不满足约束时抛出。
  17. """
  18. if not self.identity and not self.identity_open_id:
  19. raise ValueError("identity 和 identity_open_id 至少需要一个不为空")
  20. return self
  21. class EnterpriseBaseInfoSchema(BaseModel):
  22. """企业基本信息"""
  23. industry: Optional[str] = Field(default=None, description="企业所属行业")
  24. enterprise_code: Optional[str] = Field(default=None, description="企业代码")
  25. enterprise_name: Optional[str] = Field(default=None, description="企业名称")
  26. class EnterpriseProfilesSchema(BaseModel):
  27. """企业扩展参数"""
  28. group_app_id: Optional[str] = Field(default=None, description="分组AppId")
  29. access_channel: Optional[str] = Field(default=None, description="接入渠道: IOT_NFC")
  30. credit_applicant_mobile: Optional[str] = Field(default=None, description="授信申请人手机号")
  31. pc_invite_url_mode: Optional[str] = Field(default=None, description="PC邀请URL模式: webpage")
  32. create_iot_group: Optional[bool] = Field(default=None, description="是否创建IoT分组")
  33. class EnterpriseCreateOrUpdateSchema(BaseModel):
  34. """
  35. 创建或更新企业
  36. """
  37. enterprise_id: Optional[str] = Field(default=None, max_length=264, description="企业ID(业务主键)")
  38. out_biz_no: Optional[str] = Field(default=None, max_length=264, description="外部业务号")
  39. account_id: Optional[str] = Field(default=None, max_length=264, description="支付宝账号ID")
  40. name: Optional[str] = Field(default=None, max_length=228, description="企业名称")
  41. short_name: Optional[str] = Field(default=None, max_length=564, description="企业简称")
  42. status: Optional[str] = Field(default=None, description="企业状态")
  43. identity_type: Optional[str] = Field(default=None, description="身份类型: ALIPAY_USER_ID/ALIPAY_LOGON_ID/ISV_USER_ID")
  44. identity: Optional[str] = Field(default=None, description="企业管理员身份标识")
  45. identity_open_id: Optional[str] = Field(default=None, description="企业管理员openId")
  46. register_mode: Optional[str] = Field(default=None, description="注册模式: NORMAL/ISV_AGENT/ISV_VIRTUAL")
  47. sign_fund_way: Optional[str] = Field(default=None, description="签约出资方式: BALANCE/CREDIT/CORPORATE_CARD")
  48. base_info: Optional[EnterpriseBaseInfoSchema] = Field(default=None, description="企业基本信息")
  49. profiles: Optional[EnterpriseProfilesSchema] = Field(default=None, description="扩展参数")
  50. remark: Optional[str] = Field(default=None, description="备注")
  51. def validate_enterprise_id(self):
  52. if not self.enterprise_id:
  53. raise ValueError("enterprise_id 需要不为空")
  54. return self
  55. class EnterpriseOutSchema(BaseModel):
  56. """企业响应模型"""
  57. model_config = ConfigDict(from_attributes=True)
  58. id: int = Field(description="主键ID")
  59. enterprise_id: Optional[str] = Field(default=None, description="企业ID(业务主键)")
  60. out_biz_no: Optional[str] = Field(default=None, description="外部业务号")
  61. account_id: Optional[str] = Field(default=None, description="支付宝账号ID")
  62. name: Optional[str] = Field(default=None, description="企业名称")
  63. short_name: Optional[str] = Field(default=None, description="企业简称")
  64. status: str = Field(description="状态: ENTERPRISE_CREATE/ENTERPRISE_ACTIVATED/ENTERPRISE_UNSIGN/ENTERPRISE_WITHDRAW")
  65. sign_url: Optional[str] = Field(default=None, description="签约链接")
  66. pc_invite_url: Optional[str] = Field(default=None, description="邀请URL")
  67. invite_time: Optional[datetime] = Field(default=None, description="邀请码创建时间")
  68. expire_time: Optional[datetime] = Field(default=None, description="链接过期时间")
  69. identity_type: Optional[str] = Field(default=None, description="企业管理员身份类型")
  70. identity: Optional[str] = Field(default=None, description="企业管理员身份标识")
  71. identity_open_id: Optional[str] = Field(default=None, description="企业管理员openId")
  72. register_mode: Optional[str] = Field(default=None, description="注册模式")
  73. sign_fund_way: Optional[str] = Field(default=None, description="签约出资方式")
  74. base_info: Optional[dict] = Field(default=None, description="企业基本信息")
  75. profiles: Optional[dict] = Field(default=None, description="扩展参数")
  76. created_time: datetime = Field(description="创建时间")
  77. updated_time: datetime = Field(description="更新时间")
  78. class EnterpriseInviteOutSchema(BaseModel):
  79. """企业邀请响应"""
  80. model_config = ConfigDict(from_attributes=True)
  81. pc_invite_url: str = Field(description="邀请URL")
  82. invite_time: Optional[datetime] = Field(default=None, description="邀请码创建时间")
  83. expire_time: Optional[datetime] = Field(default=None, description="链接过期时间")
  84. class EnterpriseListOutSchema(BaseModel):
  85. """企业列表响应"""
  86. model_config = ConfigDict(from_attributes=True)
  87. account_id: Optional[str] = Field(default=None, description="支付宝账号ID")
  88. enterprise_id: Optional[str] = Field(default=None, description="企业ID")
  89. name: Optional[str] = Field(default=None, description="企业名称")
  90. short_name: Optional[str] = Field(default=None, description="企业简称")
  91. status: str = Field(description="状态")
  92. created_time: datetime = Field(description="创建时间")
  93. class EnterpriseOperationOutSchema(BaseModel):
  94. """企业操作响应"""
  95. model_config = ConfigDict(from_attributes=True)
  96. enterprise_id: Optional[str] = Field(default=None, description="企业ID(业务主键)")
  97. out_biz_no: Optional[str] = Field(default=None, description="外部业务号")