contract_store.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. from pydantic import BaseModel, Field
  2. from typing import Optional, List, Any
  3. from datetime import datetime
  4. class ContractItemResponse(BaseModel):
  5. """合同项响应模型(contract_url 中的单个合同项)"""
  6. contract_url: str = Field(description="合同模版链接")
  7. file_name: str = Field(description="签署的合同的文件名称")
  8. file_id: str = Field(description="生成的文件ID")
  9. status: int = Field(description="签署状态 0 未签署 1 已签署")
  10. sign_flow_id: str = Field(description="签署流程ID")
  11. sign_url: str = Field(default="", description="e签宝生成的签署页面")
  12. signing_time: str = Field(default="", description="签署合同的时间")
  13. effective_time: str = Field(default="", description="合同生效的时间")
  14. expiry_time: str = Field(default="", description="合同失效的时间")
  15. contract_download_url: str = Field(default="", description="合同签署完成后下载文件的链接")
  16. is_master: int = Field(description="是否是入驻店铺的协议合同 是 1 否 0")
  17. class ContractStoreResponse(BaseModel):
  18. """合同记录响应模型"""
  19. id: int = Field(description="主键")
  20. store_id: int = Field(description="店铺id")
  21. business_segment: str = Field(description="经营板块")
  22. merchant_name: str = Field(description="商家姓名")
  23. contact_phone: str = Field(description="联系电话")
  24. signing_status: str = Field(description="签署状态(已签署,未签署,已到期)")
  25. contract_url: str = Field(description="合同URL(JSON字符串)")
  26. seal_url: str = Field(description="印章URL")
  27. signing_time: Optional[datetime] = Field(default=None, description="签署时间")
  28. effective_time: Optional[datetime] = Field(default=None, description="生效时间")
  29. expiry_time: Optional[datetime] = Field(default=None, description="到期时间")
  30. created_time: Optional[datetime] = Field(default=None, description="创建时间")
  31. updated_time: Optional[datetime] = Field(default=None, description="更新时间")
  32. class Config:
  33. from_attributes = True
  34. class ContractStoreDetailResponse(BaseModel):
  35. """合同记录详情响应模型(包含解析后的 contract_url)"""
  36. id: int = Field(description="主键")
  37. store_id: int = Field(description="店铺id")
  38. business_segment: str = Field(description="经营板块")
  39. merchant_name: str = Field(description="商家姓名")
  40. contact_phone: str = Field(description="联系电话")
  41. signing_status: str = Field(description="签署状态(已签署,未签署,已到期)")
  42. contract_items: List[ContractItemResponse] = Field(description="合同项列表(解析后的 contract_url)")
  43. seal_url: str = Field(description="印章URL")
  44. signing_time: Optional[datetime] = Field(default=None, description="签署时间")
  45. effective_time: Optional[datetime] = Field(default=None, description="生效时间")
  46. expiry_time: Optional[datetime] = Field(default=None, description="到期时间")
  47. created_time: Optional[datetime] = Field(default=None, description="创建时间")
  48. updated_time: Optional[datetime] = Field(default=None, description="更新时间")
  49. class TemplatesCreateResponse(BaseModel):
  50. """创建模板响应模型"""
  51. success: bool = Field(description="是否成功")
  52. message: str = Field(description="响应消息")
  53. sign_flow_id: Optional[str] = Field(default=None, description="签署流程ID")
  54. file_id: Optional[str] = Field(default=None, description="文件ID")
  55. contract_url: Optional[str] = Field(default=None, description="合同URL")
  56. class SignUrlResponse(BaseModel):
  57. """获取签署URL响应模型"""
  58. success: bool = Field(description="是否成功")
  59. data: dict = Field(description="响应数据", default_factory=dict)
  60. class Config:
  61. json_schema_extra = {
  62. "example": {
  63. "success": True,
  64. "data": {
  65. "url": "https://example.com/sign"
  66. }
  67. }
  68. }
  69. class ErrorResponse(BaseModel):
  70. """错误响应模型"""
  71. success: bool = Field(default=False, description="是否成功")
  72. message: str = Field(description="错误消息")
  73. raw: Optional[Any] = Field(default=None, description="原始错误数据")
  74. class SuccessResponse(BaseModel):
  75. """通用成功响应模型"""
  76. code: str = Field(description="响应代码")
  77. msg: str = Field(description="响应消息")
  78. class PaginatedResponse(BaseModel):
  79. """分页响应模型"""
  80. items: List[ContractStoreResponse] = Field(description="数据列表")
  81. total: int = Field(description="总记录数")
  82. page: int = Field(description="当前页码")
  83. page_size: int = Field(description="每页条数")
  84. total_pages: int = Field(description="总页数")
  85. class ModuleStatusResponse(BaseModel):
  86. """模块状态响应模型"""
  87. module: str = Field(description="模块名称")
  88. status: str = Field(description="状态")