contract_store.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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. store_name: str = Field(description="商家店铺名称")
  22. business_segment: str = Field(description="经营板块")
  23. merchant_name: str = Field(description="商家姓名")
  24. contact_phone: str = Field(description="联系电话")
  25. signing_status: str = Field(description="签署状态(已签署,未签署,已到期)")
  26. contract_url: str = Field(description="合同URL(JSON字符串)")
  27. ord_id: str = Field(description="入驻商家的社会同一信用代码")
  28. signing_time: Optional[datetime] = Field(default=None, description="签署时间")
  29. effective_time: Optional[datetime] = Field(default=None, description="生效时间")
  30. expiry_time: Optional[datetime] = Field(default=None, description="到期时间")
  31. created_time: Optional[datetime] = Field(default=None, description="创建时间")
  32. updated_time: Optional[datetime] = Field(default=None, description="更新时间")
  33. class Config:
  34. from_attributes = True
  35. class ContractStoreDetailResponse(BaseModel):
  36. """合同记录详情响应模型(包含解析后的 contract_url)"""
  37. id: int = Field(description="主键")
  38. store_id: int = Field(description="店铺id")
  39. store_name: str = Field(description="商家店铺名称")
  40. business_segment: str = Field(description="经营板块")
  41. merchant_name: str = Field(description="商家姓名")
  42. contact_phone: str = Field(description="联系电话")
  43. signing_status: str = Field(description="签署状态(已签署,未签署,已到期)")
  44. contract_items: List[ContractItemResponse] = Field(description="合同项列表(解析后的 contract_url)")
  45. ord_id: str = Field(description="入驻商家的社会同一信用代码")
  46. signing_time: Optional[datetime] = Field(default=None, description="签署时间")
  47. effective_time: Optional[datetime] = Field(default=None, description="生效时间")
  48. expiry_time: Optional[datetime] = Field(default=None, description="到期时间")
  49. created_time: Optional[datetime] = Field(default=None, description="创建时间")
  50. updated_time: Optional[datetime] = Field(default=None, description="更新时间")
  51. class TemplatesCreateResponse(BaseModel):
  52. """创建模板响应模型"""
  53. success: bool = Field(description="是否成功")
  54. message: str = Field(description="响应消息")
  55. sign_flow_id: Optional[str] = Field(default=None, description="签署流程ID")
  56. file_id: Optional[str] = Field(default=None, description="文件ID")
  57. contract_url: Optional[str] = Field(default=None, description="合同URL")
  58. class SignUrlResponse(BaseModel):
  59. """获取签署URL响应模型"""
  60. success: bool = Field(description="是否成功")
  61. data: dict = Field(description="响应数据", default_factory=dict)
  62. class Config:
  63. json_schema_extra = {
  64. "example": {
  65. "success": True,
  66. "data": {
  67. "url": "https://example.com/sign"
  68. }
  69. }
  70. }
  71. class ErrorResponse(BaseModel):
  72. """错误响应模型"""
  73. success: bool = Field(default=False, description="是否成功")
  74. message: str = Field(description="错误消息")
  75. raw: Optional[Any] = Field(default=None, description="原始错误数据")
  76. class SuccessResponse(BaseModel):
  77. """通用成功响应模型"""
  78. code: str = Field(description="响应代码")
  79. msg: str = Field(description="响应消息")
  80. class PaginatedResponse(BaseModel):
  81. """分页响应模型"""
  82. items: List[ContractStoreResponse] = Field(description="数据列表")
  83. total: int = Field(description="总记录数")
  84. page: int = Field(description="当前页码")
  85. page_size: int = Field(description="每页条数")
  86. total_pages: int = Field(description="总页数")
  87. class ModuleStatusResponse(BaseModel):
  88. """模块状态响应模型"""
  89. module: str = Field(description="模块名称")
  90. status: str = Field(description="状态")