model.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. from datetime import datetime
  2. from decimal import Decimal
  3. from sqlalchemy import DateTime, String, Text, Numeric, JSON
  4. from sqlalchemy.orm import Mapped, mapped_column
  5. from app.common.enums import PermissionFilterStrategy
  6. from app.core.base_model import PaymentModelMixin, TenantMixin
  7. from .enums import PointsStatusEnum
  8. class PointsModel(PaymentModelMixin, TenantMixin):
  9. """积分模型"""
  10. __tablename__ = "pay_points"
  11. __table_args__ = {"comment": "积分表"}
  12. __permission_strategy__ = PermissionFilterStrategy.ENTERPRISE_BASED
  13. points: Mapped[Decimal] = mapped_column(
  14. Numeric(12, 2), default=Decimal("0.00"), comment="积分余额"
  15. )
  16. status: Mapped[str] = mapped_column(
  17. String(32),
  18. default=PointsStatusEnum.ACTIVE.value,
  19. comment="状态: ACTIVE/FROZEN"
  20. )
  21. rule: Mapped[str | None] = mapped_column(
  22. String(64), comment="积分规则"
  23. )
  24. ext_info: Mapped[JSON | None] = mapped_column(JSON, comment="扩展信息")
  25. class PointsRecordModel(PaymentModelMixin, TenantMixin):
  26. """积分变动记录模型"""
  27. __tablename__ = "pay_points_record"
  28. __table_args__ = {"comment": "积分变动记录表"}
  29. __permission_strategy__ = PermissionFilterStrategy.ENTERPRISE_BASED
  30. enterprise_id: Mapped[str | None] = mapped_column(
  31. String(64), index=True, comment="企业ID"
  32. )
  33. employee_id: Mapped[str | None] = mapped_column(
  34. String(64), index=True, comment="员工ID"
  35. )
  36. points: Mapped[Decimal] = mapped_column(
  37. Numeric(12, 2), default=Decimal("0.00"), comment="变动积分"
  38. )
  39. balance: Mapped[Decimal] = mapped_column(
  40. Numeric(12, 2), default=Decimal("0.00"), comment="变动后余额"
  41. )
  42. type: Mapped[str | None] = mapped_column(
  43. String(32), default=None, comment="变动类型: ADD/DEDUCT"
  44. )
  45. business_type: Mapped[str | None] = mapped_column(
  46. String(32), default=None, comment="业务类型: TRANSFER"
  47. )
  48. business_id: Mapped[str | None] = mapped_column(
  49. String(64), default=None, comment="业务ID"
  50. )
  51. remark: Mapped[str | None] = mapped_column(Text, default=None, comment="备注")
  52. ext_info: Mapped[JSON | None] = mapped_column(JSON, comment="扩展信息")