- business_roles/param_definitions/param_change_batches/param_values 四表 + 种子(3 内置岗位/16 参数定义/19 版本条目/初始批次 P20260101-00) - 双轨迁移:Alembic bfbda9c3191d + db/migration/V3 导出 + init-dev.sql 同步(schema_sync 校验通过) - 参数值以 Fraction 可解析字符串存储(4/360 禁 0.011111);企业户 2‰→3‰ 双种子支持按到账日回溯 Co-Authored-By: Claude Code <noreply@anthropic.com>
47 lines
2.1 KiB
Python
47 lines
2.1 KiB
Python
"""业务岗位角色模型。
|
|
|
|
与系统登录角色(`roles`,权限维度)严格区分:本表是**业务岗位**维度,
|
|
决定人员适用的计提公式模板与参数。需求 #28 要求岗位角色可增删、
|
|
新增岗位时在系统设置中绑定公式与参数(无需改代码),故模板编码
|
|
存于本表、公式实现留在代码内注册表(一期不引入规则引擎)。
|
|
"""
|
|
|
|
from sqlalchemy import Integer, String
|
|
from sqlalchemy.orm import Mapped, mapped_column
|
|
|
|
from app.models.base import BIGINT_UNSIGNED, TINYINT_TYPE, Base, TimestampMixin, mysql_table_args
|
|
|
|
|
|
class BusinessRole(Base, TimestampMixin):
|
|
"""业务岗位角色表。内置三个岗位(营销员/营销经理/信息员)随迁移初始化。"""
|
|
|
|
__tablename__ = "business_roles"
|
|
__table_args__ = mysql_table_args("业务岗位角色表(与登录角色roles区分,决定计提公式与参数)")
|
|
|
|
id: Mapped[int] = mapped_column(
|
|
BIGINT_UNSIGNED, primary_key=True, autoincrement=True, comment="主键ID"
|
|
)
|
|
role_code: Mapped[str] = mapped_column(
|
|
String(32),
|
|
nullable=False,
|
|
unique=True,
|
|
comment="岗位编码:salesperson营销员 sales_manager营销经理 info_officer信息员,创建后不可修改",
|
|
)
|
|
role_name: Mapped[str] = mapped_column(String(64), nullable=False, comment="岗位名称")
|
|
calc_template: Mapped[str] = mapped_column(
|
|
String(32), nullable=False, comment="计提公式模板编码(以代码内模板注册表为准)"
|
|
)
|
|
description: Mapped[str | None] = mapped_column(String(255), comment="岗位说明")
|
|
sort_order: Mapped[int] = mapped_column(
|
|
Integer, nullable=False, server_default="0", comment="显示排序"
|
|
)
|
|
status: Mapped[int] = mapped_column(
|
|
TINYINT_TYPE, nullable=False, server_default="1", comment="状态:1启用 0禁用"
|
|
)
|
|
is_builtin: Mapped[int] = mapped_column(
|
|
TINYINT_TYPE,
|
|
nullable=False,
|
|
server_default="0",
|
|
comment="是否内置岗位:1内置(禁删禁停) 0自定义",
|
|
)
|