from datetime import datetime from decimal import Decimal from sqlalchemy import DateTime, String, Text, Numeric, JSON from sqlalchemy.orm import Mapped, mapped_column from app.common.enums import PermissionFilterStrategy from app.core.base_model import PaymentModelMixin, TenantMixin from .enums import PointsStatusEnum class PointsModel(PaymentModelMixin, TenantMixin): """积分模型""" __tablename__ = "pay_points" __table_args__ = {"comment": "积分表"} __permission_strategy__ = PermissionFilterStrategy.ENTERPRISE_BASED points: Mapped[Decimal] = mapped_column( Numeric(12, 2), default=Decimal("0.00"), comment="积分余额" ) status: Mapped[str] = mapped_column( String(32), default=PointsStatusEnum.ACTIVE.value, comment="状态: ACTIVE/FROZEN" ) rule: Mapped[str | None] = mapped_column( String(64), comment="积分规则" ) ext_info: Mapped[JSON | None] = mapped_column(JSON, comment="扩展信息") class PointsRecordModel(PaymentModelMixin, TenantMixin): """积分变动记录模型""" __tablename__ = "pay_points_record" __table_args__ = {"comment": "积分变动记录表"} __permission_strategy__ = PermissionFilterStrategy.ENTERPRISE_BASED enterprise_id: Mapped[str | None] = mapped_column( String(64), index=True, comment="企业ID" ) employee_id: Mapped[str | None] = mapped_column( String(64), index=True, comment="员工ID" ) points: Mapped[Decimal] = mapped_column( Numeric(12, 2), default=Decimal("0.00"), comment="变动积分" ) balance: Mapped[Decimal] = mapped_column( Numeric(12, 2), default=Decimal("0.00"), comment="变动后余额" ) type: Mapped[str | None] = mapped_column( String(32), default=None, comment="变动类型: ADD/DEDUCT" ) business_type: Mapped[str | None] = mapped_column( String(32), default=None, comment="业务类型: TRANSFER" ) business_id: Mapped[str | None] = mapped_column( String(64), default=None, comment="业务ID" ) remark: Mapped[str | None] = mapped_column(Text, default=None, comment="备注") ext_info: Mapped[JSON | None] = mapped_column(JSON, comment="扩展信息")