crm_opportunity.py 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. from datetime import datetime, date
  2. from decimal import Decimal
  3. from typing import Optional
  4. from sqlalchemy import BigInteger, String, DateTime, Integer, Text, Date, Numeric, SmallInteger
  5. from sqlalchemy.orm import Mapped, mapped_column
  6. from app.database import Base
  7. class CrmOpportunity(Base):
  8. __tablename__ = "crm_opportunity"
  9. id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=False, comment="主键ID")
  10. opportunity_no: Mapped[Optional[str]] = mapped_column(String(50), comment="商机编号")
  11. opportunity_name: Mapped[Optional[str]] = mapped_column(String(200), comment="商机名称")
  12. customer_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="客户ID")
  13. customer_name: Mapped[Optional[str]] = mapped_column(String(200), comment="客户名称")
  14. contact_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="联系人ID")
  15. contact_name: Mapped[Optional[str]] = mapped_column(String(50), comment="联系人姓名")
  16. amount: Mapped[Optional[Decimal]] = mapped_column(Numeric(15, 2), default=Decimal("0"), comment="商机金额")
  17. stage: Mapped[Optional[str]] = mapped_column(String(20), comment="商机阶段")
  18. stage_percent: Mapped[Optional[int]] = mapped_column(Integer, default=0, comment="阶段百分比")
  19. status: Mapped[Optional[str]] = mapped_column(String(20), default="1", comment="状态(1进行中 2已赢单 3已输单)")
  20. win_rate: Mapped[Optional[int]] = mapped_column(Integer, default=0, comment="赢单概率")
  21. expect_deal_date: Mapped[Optional[date]] = mapped_column(Date, comment="预计成交日期")
  22. actual_deal_date: Mapped[Optional[date]] = mapped_column(Date, comment="实际成交日期")
  23. lost_reason: Mapped[Optional[str]] = mapped_column(String(500), comment="输单原因")
  24. owner_user_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="负责人ID")
  25. owner_user_name: Mapped[Optional[str]] = mapped_column(String(50), comment="负责人姓名")
  26. product_count: Mapped[Optional[int]] = mapped_column(Integer, default=0, comment="产品数量")
  27. last_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="最后跟进时间")
  28. next_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="下次联系时间")
  29. follow_count: Mapped[Optional[int]] = mapped_column(Integer, default=0, comment="跟进次数")
  30. contract_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="关联合同ID")
  31. source: Mapped[Optional[str]] = mapped_column(String(20), comment="商机来源")
  32. type: Mapped[Optional[str]] = mapped_column(String(20), comment="商机类型")
  33. description: Mapped[Optional[str]] = mapped_column(Text, comment="描述")
  34. competitors: Mapped[Optional[str]] = mapped_column(String(500), comment="竞争对手")
  35. key_factors: Mapped[Optional[str]] = mapped_column(String(500), comment="关键因素")
  36. tenant_id: Mapped[Optional[str]] = mapped_column(String(20), default="000000", comment="租户编号")
  37. create_dept: Mapped[Optional[int]] = mapped_column(BigInteger, comment="创建部门")
  38. create_by: Mapped[Optional[int]] = mapped_column(BigInteger, comment="创建者")
  39. create_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="创建时间")
  40. update_by: Mapped[Optional[int]] = mapped_column(BigInteger, comment="更新者")
  41. update_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="更新时间")
  42. del_flag: Mapped[Optional[int]] = mapped_column(SmallInteger, default=0, comment="删除标志(0存在 1删除)")
  43. version: Mapped[Optional[int]] = mapped_column(Integer, default=0, comment="版本号")
  44. remark: Mapped[Optional[str]] = mapped_column(String(500), comment="备注")
  45. class CrmOpportunityFollow(Base):
  46. __tablename__ = "crm_opportunity_follow"
  47. id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=False, comment="主键ID")
  48. opportunity_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="商机ID")
  49. follow_type: Mapped[Optional[str]] = mapped_column(String(20), comment="跟进方式")
  50. follow_content: Mapped[Optional[str]] = mapped_column(Text, comment="跟进内容")
  51. follow_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="跟进时间")
  52. stage: Mapped[Optional[str]] = mapped_column(String(20), comment="跟进时阶段")
  53. stage_percent: Mapped[Optional[int]] = mapped_column(Integer, comment="阶段百分比")
  54. next_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="下次联系时间")
  55. next_content: Mapped[Optional[str]] = mapped_column(String(500), comment="下次跟进内容")
  56. attachments: Mapped[Optional[str]] = mapped_column(String(1000), comment="附件")
  57. contact_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="联系人ID")
  58. contact_name: Mapped[Optional[str]] = mapped_column(String(50), comment="联系人姓名")
  59. location: Mapped[Optional[str]] = mapped_column(String(200), comment="跟进地点")
  60. duration: Mapped[Optional[int]] = mapped_column(Integer, comment="跟进时长(分钟)")
  61. follow_by: Mapped[Optional[str]] = mapped_column(String(50), comment="跟进人")
  62. tenant_id: Mapped[Optional[str]] = mapped_column(String(20), default="000000", comment="租户编号")
  63. create_dept: Mapped[Optional[int]] = mapped_column(BigInteger, comment="创建部门")
  64. create_by: Mapped[Optional[int]] = mapped_column(BigInteger, comment="创建者")
  65. create_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="创建时间")
  66. update_by: Mapped[Optional[int]] = mapped_column(BigInteger, comment="更新者")
  67. update_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="更新时间")
  68. del_flag: Mapped[Optional[int]] = mapped_column(SmallInteger, default=0, comment="删除标志")
  69. version: Mapped[Optional[int]] = mapped_column(Integer, default=0, comment="版本号")
  70. remark: Mapped[Optional[str]] = mapped_column(String(500), comment="备注")
  71. class CrmOpportunityProduct(Base):
  72. __tablename__ = "crm_opportunity_product"
  73. id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=False, comment="主键ID")
  74. opportunity_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="商机ID")
  75. product_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="产品ID")
  76. product_name: Mapped[Optional[str]] = mapped_column(String(200), comment="产品名称")
  77. product_no: Mapped[Optional[str]] = mapped_column(String(50), comment="产品编号")
  78. category_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="分类ID")
  79. category_name: Mapped[Optional[str]] = mapped_column(String(100), comment="分类名称")
  80. model: Mapped[Optional[str]] = mapped_column(String(100), comment="规格型号")
  81. unit: Mapped[Optional[str]] = mapped_column(String(20), comment="单位")
  82. quantity: Mapped[Optional[Decimal]] = mapped_column(Numeric(15, 2), default=Decimal("1"), comment="数量")
  83. price: Mapped[Optional[Decimal]] = mapped_column(Numeric(15, 2), default=Decimal("0"), comment="单价")
  84. discount: Mapped[Optional[Decimal]] = mapped_column(Numeric(5, 2), default=Decimal("100"), comment="折扣(%)")
  85. subtotal: Mapped[Optional[Decimal]] = mapped_column(Numeric(15, 2), default=Decimal("0"), comment="小计")
  86. sort: Mapped[Optional[int]] = mapped_column(Integer, default=0, comment="排序号")
  87. tenant_id: Mapped[Optional[str]] = mapped_column(String(20), default="000000", comment="租户编号")
  88. create_dept: Mapped[Optional[int]] = mapped_column(BigInteger, comment="创建部门")
  89. create_by: Mapped[Optional[int]] = mapped_column(BigInteger, comment="创建者")
  90. create_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="创建时间")
  91. update_by: Mapped[Optional[int]] = mapped_column(BigInteger, comment="更新者")
  92. update_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="更新时间")
  93. del_flag: Mapped[Optional[int]] = mapped_column(SmallInteger, default=0, comment="删除标志")
  94. version: Mapped[Optional[int]] = mapped_column(Integer, default=0, comment="版本号")
  95. remark: Mapped[Optional[str]] = mapped_column(String(500), comment="备注")
  96. class CrmOpportunityStageLog(Base):
  97. __tablename__ = "crm_opportunity_stage_log"
  98. id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=False, comment="主键ID")
  99. opportunity_id: Mapped[Optional[int]] = mapped_column(BigInteger, comment="商机ID")
  100. from_stage: Mapped[Optional[str]] = mapped_column(String(20), comment="原阶段")
  101. from_stage_name: Mapped[Optional[str]] = mapped_column(String(50), comment="原阶段名称")
  102. from_percent: Mapped[Optional[int]] = mapped_column(Integer, comment="原阶段百分比")
  103. to_stage: Mapped[Optional[str]] = mapped_column(String(20), comment="新阶段")
  104. to_stage_name: Mapped[Optional[str]] = mapped_column(String(50), comment="新阶段名称")
  105. to_percent: Mapped[Optional[int]] = mapped_column(Integer, comment="新阶段百分比")
  106. change_type: Mapped[Optional[str]] = mapped_column(String(20), comment="变更类型")
  107. change_reason: Mapped[Optional[str]] = mapped_column(String(500), comment="变更原因")
  108. change_amount: Mapped[Optional[Decimal]] = mapped_column(Numeric(15, 2), comment="变更金额")
  109. tenant_id: Mapped[Optional[str]] = mapped_column(String(20), default="000000", comment="租户编号")
  110. create_dept: Mapped[Optional[int]] = mapped_column(BigInteger, comment="创建部门")
  111. create_by: Mapped[Optional[int]] = mapped_column(BigInteger, comment="创建者")
  112. create_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="创建时间")
  113. update_by: Mapped[Optional[int]] = mapped_column(BigInteger, comment="更新者")
  114. update_time: Mapped[Optional[datetime]] = mapped_column(DateTime, comment="更新时间")
  115. del_flag: Mapped[Optional[int]] = mapped_column(SmallInteger, default=0, comment="删除标志")
  116. version: Mapped[Optional[int]] = mapped_column(Integer, default=0, comment="版本号")
  117. remark: Mapped[Optional[str]] = mapped_column(String(500), comment="备注")
  118. lost_detail: Mapped[Optional[str]] = mapped_column(String(500), comment="输单详情")
  119. competitor_info: Mapped[Optional[str]] = mapped_column(String(500), comment="竞争对手信息")
  120. improvement: Mapped[Optional[str]] = mapped_column(String(500), comment="改进建议")
  121. won_remark: Mapped[Optional[str]] = mapped_column(String(500), comment="赢单备注")