52 lines
3.0 KiB
Python
52 lines
3.0 KiB
Python
|
|
"""T+ 业务自动接入:源级开关与单据差异账本,不承载核算结果。"""
|
|||
|
|
|
|||
|
|
from datetime import date
|
|||
|
|
|
|||
|
|
from sqlalchemy import JSON, Date, Integer, String, UniqueConstraint
|
|||
|
|
from sqlalchemy.orm import Mapped, mapped_column
|
|||
|
|
|
|||
|
|
from app.models.base import BIGINT_UNSIGNED, TINYINT_TYPE, Base, TimestampMixin, mysql_table_args
|
|||
|
|
|
|||
|
|
|
|||
|
|
class TPlusBusinessSyncConfig(Base, TimestampMixin):
|
|||
|
|
"""每个源账套一条设置;启用后才按起点自动排队接入。"""
|
|||
|
|
|
|||
|
|
__tablename__ = "tplus_business_sync_configs"
|
|||
|
|
__table_args__ = mysql_table_args(
|
|||
|
|
"T+业务自动接入设置",
|
|||
|
|
UniqueConstraint("source_database", name="uk_tplus_business_sync_configs_source"),
|
|||
|
|
)
|
|||
|
|
id: Mapped[int] = mapped_column(BIGINT_UNSIGNED, primary_key=True, autoincrement=True, comment="主键ID")
|
|||
|
|
source_database: Mapped[str] = mapped_column(String(128), comment="源账套")
|
|||
|
|
enabled: Mapped[int] = mapped_column(TINYINT_TYPE, server_default="0", comment="自动接入是否启用:1启用0关闭")
|
|||
|
|
start_date: Mapped[date] = mapped_column(Date, comment="业务接入起点")
|
|||
|
|
version: Mapped[int] = mapped_column(Integer, server_default="0", comment="配置乐观版本")
|
|||
|
|
updated_by: Mapped[int] = mapped_column(BIGINT_UNSIGNED, comment="授权启用账号")
|
|||
|
|
last_error: Mapped[str | None] = mapped_column(String(64), comment="后台接入暂停原因")
|
|||
|
|
|
|||
|
|
|
|||
|
|
class TPlusBusinessDocument(Base, TimestampMixin):
|
|||
|
|
"""源单线与正式单据的对应关系与差异结论;重复同步只更新本表。"""
|
|||
|
|
|
|||
|
|
__tablename__ = "tplus_business_documents"
|
|||
|
|
__table_args__ = mysql_table_args(
|
|||
|
|
"T+业务单据接入与差异账本",
|
|||
|
|
UniqueConstraint(
|
|||
|
|
"source_database", "entity_type", "source_id",
|
|||
|
|
name="uk_tplus_business_documents_source_entity_id",
|
|||
|
|
),
|
|||
|
|
)
|
|||
|
|
id: Mapped[int] = mapped_column(BIGINT_UNSIGNED, primary_key=True, autoincrement=True, comment="主键ID")
|
|||
|
|
source_database: Mapped[str] = mapped_column(String(128), comment="源账套")
|
|||
|
|
entity_type: Mapped[str] = mapped_column(String(32), comment="源实体")
|
|||
|
|
source_id: Mapped[str] = mapped_column(String(64), comment="源单据或明细ID")
|
|||
|
|
source_no: Mapped[str | None] = mapped_column(String(128), comment="原始单号")
|
|||
|
|
record_id: Mapped[int] = mapped_column(BIGINT_UNSIGNED, comment="当前观察到的源快照ID")
|
|||
|
|
applied_record_id: Mapped[int | None] = mapped_column(BIGINT_UNSIGNED, comment="已接入的源快照ID")
|
|||
|
|
fingerprint: Mapped[str | None] = mapped_column(String(64), comment="已应用的业务字段指纹")
|
|||
|
|
business_id: Mapped[int | None] = mapped_column(BIGINT_UNSIGNED, comment="关联业务ID")
|
|||
|
|
target_id: Mapped[int | None] = mapped_column(BIGINT_UNSIGNED, comment="正式单据或明细ID")
|
|||
|
|
status: Mapped[str] = mapped_column(String(24), default="PENDING", comment="APPLIED/PENDING/CONFLICT/EXCLUDED")
|
|||
|
|
reason: Mapped[str | None] = mapped_column(String(128), comment="固定待补或差异编码")
|
|||
|
|
data_json: Mapped[dict] = mapped_column(JSON, comment="最小必要来源与差异说明")
|