model.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. from datetime import datetime
  2. from sqlalchemy import DateTime, String, Text, JSON, Numeric, ForeignKey
  3. from sqlalchemy.orm import Mapped, mapped_column, relationship
  4. from app.core.base_model import PaymentModelMixin, TenantMixin, EnterpriseMixin
  5. from app.common.enums import PermissionFilterStrategy
  6. from .enums import (
  7. AccountSignStatusEnum,
  8. AccountStatusEnum,
  9. TransferStatusEnum,
  10. DepositStatusEnum,
  11. WithdrawStatusEnum,
  12. )
  13. class AccountModel(PaymentModelMixin, TenantMixin, EnterpriseMixin):
  14. """资金专户模型"""
  15. __tablename__ = "pay_account"
  16. __table_args__ = {"comment": "资金专户表"}
  17. __permission_strategy__ = PermissionFilterStrategy.ENTERPRISE_BASED
  18. account_book_id: Mapped[str | None] = mapped_column(
  19. String(64), unique=True, index=True, comment="资金专户号"
  20. )
  21. account_name: Mapped[str | None] = mapped_column(
  22. String(128), comment="账户名称"
  23. )
  24. account_type: Mapped[str | None] = mapped_column(
  25. String(32),
  26. default="ALL",
  27. comment="账户类型: INCOME/DISBURSE/ALL"
  28. )
  29. scene: Mapped[str] = mapped_column(
  30. String(32),
  31. default="B2B_TRANS",
  32. comment="应用场景码: ENT_CREDIT/B2B_TRANS"
  33. )
  34. sign_status: Mapped[str] = mapped_column(
  35. String(32),
  36. default=AccountSignStatusEnum.PENDING.value,
  37. comment="签约状态: PENDING/AUTHORIZED/AUTHORIZE_FAILED/UNAUTHORIZED"
  38. )
  39. sign_time: Mapped[datetime | None] = mapped_column(
  40. DateTime, comment="签约时间"
  41. )
  42. status: Mapped[str] = mapped_column(
  43. String(32),
  44. default=AccountStatusEnum.ACTIVE.value,
  45. comment="专户状态: ACTIVE/FROZEN/CLOSED"
  46. )
  47. remark: Mapped[str | None] = mapped_column(Text, comment="备注")
  48. class TransferModel(PaymentModelMixin, TenantMixin, EnterpriseMixin):
  49. """转账记录模型"""
  50. __tablename__ = "pay_transfer"
  51. __table_args__ = {"comment": "转账记录表"}
  52. __permission_strategy__ = PermissionFilterStrategy.ENTERPRISE_BASED
  53. out_biz_no: Mapped[str | None] = mapped_column(
  54. String(64), unique=True, index=True, comment="商家侧订单号"
  55. )
  56. account_book_id: Mapped[str | None] = mapped_column(
  57. String(64), comment="付款方资金专户号"
  58. )
  59. amount: Mapped[float | None] = mapped_column(
  60. Numeric(12, 2), comment="转账金额"
  61. )
  62. order_title: Mapped[str | None] = mapped_column(
  63. String(64), comment="转账标题"
  64. )
  65. payee_info: Mapped[dict | None] = mapped_column(
  66. JSON, comment="收款方信息"
  67. )
  68. status: Mapped[str] = mapped_column(
  69. String(32),
  70. default=TransferStatusEnum.DEALING.value,
  71. comment="转账状态: DEALING/SUCCESS/FAIL/REFUND"
  72. )
  73. order_no: Mapped[str | None] = mapped_column(
  74. String(64), comment="支付宝转账单号"
  75. )
  76. fund_order_id: Mapped[str | None] = mapped_column(
  77. String(64), comment="宝支付资金流水号"
  78. )
  79. error_code: Mapped[str | None] = mapped_column(
  80. String(64), comment="错误码"
  81. )
  82. error_msg: Mapped[str | None] = mapped_column(
  83. Text, comment="错误信息"
  84. )
  85. ext_info: Mapped[dict | None] = mapped_column(
  86. JSON, comment="扩展信息"
  87. )
  88. remark: Mapped[str | None] = mapped_column(Text, comment="备注")
  89. class DepositModel(PaymentModelMixin, TenantMixin, EnterpriseMixin):
  90. """充值记录模型"""
  91. __tablename__ = "pay_deposit"
  92. __table_args__ = {"comment": "充值记录表"}
  93. __permission_strategy__ = PermissionFilterStrategy.ENTERPRISE_BASED
  94. out_biz_no: Mapped[str | None] = mapped_column(
  95. String(64), unique=True, index=True, comment="商家侧订单号"
  96. )
  97. account_book_id: Mapped[str | None] = mapped_column(
  98. String(64), comment="资金专户号"
  99. )
  100. amount: Mapped[float | None] = mapped_column(
  101. Numeric(12, 2), comment="充值金额"
  102. )
  103. url: Mapped[str | None] = mapped_column(
  104. Text, comment="充值确认页面URL"
  105. )
  106. status: Mapped[str] = mapped_column(
  107. String(32),
  108. default=DepositStatusEnum.DEALING.value,
  109. comment="充值状态: DEALING/SUCCESS/FAIL"
  110. )
  111. notify_content: Mapped[dict | None] = mapped_column(
  112. JSON, comment="通知内容原始数据"
  113. )
  114. remark: Mapped[str | None] = mapped_column(Text, comment="备注")
  115. class WithdrawModel(PaymentModelMixin, TenantMixin, EnterpriseMixin):
  116. """提现记录模型"""
  117. __tablename__ = "pay_withdraw"
  118. __table_args__ = {"comment": "提现记录表"}
  119. __permission_strategy__ = PermissionFilterStrategy.ENTERPRISE_BASED
  120. out_biz_no: Mapped[str | None] = mapped_column(
  121. String(64), unique=True, index=True, comment="商家侧订单号"
  122. )
  123. account_book_id: Mapped[str | None] = mapped_column(
  124. String(64), comment="资金专户号"
  125. )
  126. amount: Mapped[float | None] = mapped_column(
  127. Numeric(12, 2), comment="提现金额"
  128. )
  129. status: Mapped[str] = mapped_column(
  130. String(32),
  131. default=WithdrawStatusEnum.DEALING.value,
  132. comment="提现状态: DEALING/SUCCESS/FAIL"
  133. )
  134. order_no: Mapped[str | None] = mapped_column(
  135. String(64), comment="支付宝提现单号"
  136. )
  137. notify_content: Mapped[dict | None] = mapped_column(
  138. JSON, comment="通知内容原始数据"
  139. )
  140. error_code: Mapped[str | None] = mapped_column(
  141. String(64), comment="错误码"
  142. )
  143. error_msg: Mapped[str | None] = mapped_column(
  144. Text, comment="错误信息"
  145. )
  146. remark: Mapped[str | None] = mapped_column(Text, comment="备注")