#!/usr/bin/env python # -*- coding: utf-8 -*- """报表管理数据模型""" from sqlalchemy import Column, String, Text, Integer, Boolean, JSON, SmallInteger from app.base_model import BaseModel class ReportTemplate(BaseModel): """报表模板主表""" __tablename__ = "report_template" application_id = Column(String(21), nullable=True, index=True, comment="所属应用ID") name = Column(String(100), nullable=False, comment="报表名称") code = Column(String(100), unique=True, nullable=False, index=True, comment="报表编码") category = Column(String(50), default="", comment="分类") description = Column(Text, default="", comment="描述") status = Column(String(20), default="draft", index=True, comment="状态: draft/published") allow_export = Column(Boolean, default=True, comment="允许导出") allow_print = Column(Boolean, default=True, comment="允许打印") allow_watermark = Column(Boolean, default=False, comment="允许水印") watermark_config = Column(JSON, default=dict, comment="水印配置") class ReportVersion(BaseModel): """报表版本表""" __tablename__ = "report_version" template_id = Column(String(21), nullable=False, index=True, comment="模板ID") version = Column(Integer, default=1, comment="版本号") state = Column(SmallInteger, default=0, index=True, comment="0设计中 1启用 2归档") snapshot = Column(JSON, default=dict, comment="Univer工作簿JSON") cells = Column(JSON, default=dict, comment="单元格绑定元数据") query_list = Column(JSON, default=list, comment="查询条件") sort_list = Column(JSON, default=list, comment="排序配置") column_list = Column(JSON, default=list, comment="分栏配置") fence_list = Column(JSON, default=list, comment="围栏配置") convert_config = Column(JSON, default=dict, comment="数据转换规则") class ReportDataset(BaseModel): """报表版本与数据源关联""" __tablename__ = "report_dataset" version_id = Column(String(21), nullable=False, index=True, comment="版本ID") data_source_id = Column(String(21), nullable=False, index=True, comment="数据源ID") alias = Column(String(100), nullable=False, comment="设计器数据集别名") field_mapping = Column(JSON, default=dict, comment="字段映射") convert_config = Column(JSON, default=dict, comment="转换配置")