contract_store.py 5.4 KB

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