feat(后端): 添加授权体系、系统监控与试用期计提

按 2026-11-02 需求补齐计划交付后端能力:
- 角色授权:权限目录化,接口统一准入校验,未登记默认拒绝;
  管理员判断改为按数据库角色重新判定,防止权限码持有者绕过
- 系统监控:单进程采集资源、请求与异常指标,分钟级聚合,
  阈值配置化;敏感配置增加 repr 保护,Redis 密码 URL 转义
- 试用期计提:按回款日判定并写入快照,年度结清与调整单联动;
  人员模型补试用期、离职日期与工资版本历史字段
- 计提模板:公式骨架受控,页面维护名称与参数绑定
- T+ 采集:自动化配置表与进度查询

内置角色禁停用保护对齐模块注释;核算规则版本提为常量并
补充批量核算失败堆栈日志。

影响范围:后端全部模块、数据库迁移 V22-V28
验证:uv run ruff check 通过;922 个单元测试全部通过;
集成测试因本机 MySQL 数据卷被其他容器锁定暂未运行
This commit is contained in:
liuwenxin committed 2026-11-03 11:20:55 +08:00
1 parent 02fb06e0af
commit 1461a8d113
149 files changed
+8736 -368

No files matched your search

+572 -1
View File
@@ -22,6 +22,8 @@ DROP TABLE IF EXISTS `tplus_sync_errors`;
DROP TABLE IF EXISTS `tplus_sync_batches`;
DROP TABLE IF EXISTS `performance_ledgers`;
DROP TABLE IF EXISTS `settlement_items`;
DROP TABLE IF EXISTS `user_permission_overrides`;
DROP TABLE IF EXISTS `authorization_settings`;
DROP TABLE IF EXISTS `adjustment_orders`;
DROP TABLE IF EXISTS `monthly_settlements`;
DROP TABLE IF EXISTS `approval_steps`;
@@ -270,6 +272,10 @@ CREATE INDEX idx_param_values_param_id_dimension_value_effective_date ON param_v
-- 营销人员表(V4 迁移;T+ 同步不覆盖岗位与工资标准)
-- ---------------------------------------------------------------------------
CREATE TABLE personnel (
salary_history_json JSON COMMENT '工资标准、岗位及任职资料生效版本',
resignation_date DATE COMMENT '离职生效日(当日起不计基本工资)',
regularization_date DATE COMMENT '转正生效日(当日不再属于试用期)',
probation_start_date DATE COMMENT '试用期开始日(含当日)',
id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT,
personnel_name VARCHAR(64) NOT NULL COMMENT '姓名',
business_role_id BIGINT UNSIGNED NOT NULL COMMENT '岗位角色ID(决定计提公式模板;T+同步不覆盖)',
@@ -336,6 +342,8 @@ CREATE INDEX idx_personnel_plans_personnel_id ON personnel_plans (personnel_id);
-- 产品表(V4 迁移;类别锚定折算阈值参数,T+ 同步不覆盖产品类别)
-- ---------------------------------------------------------------------------
CREATE TABLE products (
quantity_price_manual SMALLINT NOT NULL COMMENT '数量单价人工保护:1人工维护 0随源更新' DEFAULT '0',
source_trade_json JSON COMMENT '最近有效发货数量、含税成交价及源单据快照',
id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT,
product_name VARCHAR(128) NOT NULL COMMENT '产品名称',
spec_model VARCHAR(128) NOT NULL COMMENT '规格型号(空串而非 NULL:参与组合唯一键,MySQL 组合索引对 NULL 不去重)' DEFAULT '',
@@ -804,6 +812,9 @@ CREATE TABLE monthly_settlements (
)CHARSET=utf8mb4 ENGINE=InnoDB COMMENT='月度结算表(按月一行;通过即锁定,锁定后走调整单)' COLLATE utf8mb4_general_ci;
CREATE TABLE settlement_items (
probation_payment_sum NUMERIC(14, 2) NOT NULL COMMENT '本月年度补发或扣回' DEFAULT '0',
deferred_sum NUMERIC(14, 2) NOT NULL COMMENT '当月试用期缓发变化' DEFAULT '0',
normal_payable_sum NUMERIC(14, 2) NOT NULL COMMENT '当月正常实付绩效' DEFAULT '0',
id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT,
settlement_id BIGINT UNSIGNED NOT NULL COMMENT '月结ID(monthly_settlements.id;头删明细随删)',
personnel_id BIGINT UNSIGNED NOT NULL COMMENT '结算人员ID(personnel.id)',
@@ -1074,7 +1085,7 @@ CREATE TABLE alembic_version (
CONSTRAINT alembic_version_pkc PRIMARY KEY (version_num)
)CHARSET=utf8mb4 ENGINE=InnoDB COLLATE utf8mb4_general_ci;
INSERT INTO alembic_version (version_num) VALUES ('21f2a3b4c5d6');
-- 正式工资输入、FIFO过程及生成锁定;新增表,不改写历史结果。
@@ -1142,3 +1153,563 @@ CREATE TABLE tplus_automation_states (
CONSTRAINT pk_tplus_automation_states PRIMARY KEY (id),
CONSTRAINT uk_tplus_automation_states_source_key UNIQUE (source_key)
)ENGINE=InnoDB CHARSET=utf8mb4 COMMENT='T+自动采集周期与进程状态(不自动导入正式业务)' COLLATE utf8mb4_general_ci;
-- V22 完整权限管理;原有账号与工资数据保留。
CREATE TABLE authorization_settings (
id BIGINT UNSIGNED NOT NULL COMMENT '单例主键ID' AUTO_INCREMENT,
maker_user_id BIGINT UNSIGNED COMMENT '现任工资制作人账号ID',
revision INTEGER NOT NULL COMMENT '全局授权版本' DEFAULT '1',
updated_by BIGINT UNSIGNED COMMENT '最近修改人ID',
create_time DATETIME NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME NOT NULL COMMENT '更新时间' DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT pk_authorization_settings PRIMARY KEY (id),
CONSTRAINT fk_authorization_settings_maker_user_id FOREIGN KEY(maker_user_id) REFERENCES users (id) ON DELETE RESTRICT,
CONSTRAINT fk_authorization_settings_updated_by FOREIGN KEY(updated_by) REFERENCES users (id) ON DELETE SET NULL
)ENGINE=InnoDB CHARSET=utf8mb4 COMMENT='授权设置表(单例与并发修改锁)' COLLATE utf8mb4_general_ci;
CREATE TABLE user_permission_overrides (
id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT,
user_id BIGINT UNSIGNED NOT NULL COMMENT '系统用户ID',
permission_id BIGINT UNSIGNED NOT NULL COMMENT '权限ID',
effect VARCHAR(8) NOT NULL COMMENT '个人覆盖:ALLOW允许 DENY禁止',
create_time DATETIME NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME NOT NULL COMMENT '更新时间' DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT pk_user_permission_overrides PRIMARY KEY (id),
CONSTRAINT uk_user_permission_overrides_user_permission UNIQUE (user_id, permission_id),
CONSTRAINT fk_user_permission_overrides_user_id FOREIGN KEY(user_id) REFERENCES users (id) ON DELETE CASCADE,
CONSTRAINT fk_user_permission_overrides_permission_id FOREIGN KEY(permission_id) REFERENCES permissions (id) ON DELETE RESTRICT
)ENGINE=InnoDB CHARSET=utf8mb4 COMMENT='用户权限覆盖表(个人禁止优先)' COLLATE utf8mb4_general_ci;
CREATE INDEX idx_user_permission_overrides_permission_id ON user_permission_overrides (permission_id);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('dashboard:view','首页:查看',1,1,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:users:view','用户管理:查看',1,2,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:users:create','用户管理:新增',2,3,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:users:update','用户管理:编辑',2,4,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:users:delete','用户管理:删除',2,5,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:users:status','用户管理:变更状态',2,6,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:users:password','用户管理:重置密码',2,7,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:roles:view','角色管理:查看',1,8,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:roles:create','角色管理:新增',2,9,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:roles:update','角色管理:编辑',2,10,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:roles:delete','角色管理:删除',2,11,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:roles:status','角色管理:变更状态',2,12,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:authorization:view','权限与工资制作人:查看',1,13,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:authorization:update','权限与工资制作人:编辑',2,14,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:business_roles:view','岗位角色:查看',1,15,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:business_roles:create','岗位角色:新增',2,16,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:business_roles:update','岗位角色:编辑',2,17,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:business_roles:delete','岗位角色:删除',2,18,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:business_roles:status','岗位角色:变更状态',2,19,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:params:view','计提参数:查看',1,20,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:params:update','计提参数:编辑',2,21,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:params:withdraw','计提参数:撤回参数',2,22,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:params:export','计提参数:导出',2,23,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:params:preview','计提参数:预览',2,24,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:settings:view','公司信息:查看',1,25,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:settings:update','公司信息:编辑',2,26,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:logs:view','日志查询:查看',1,27,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:personnel:view','人员管理:查看',1,28,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:personnel:create','人员管理:新增',2,29,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:personnel:update','人员管理:编辑',2,30,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:personnel:delete','人员管理:删除',2,31,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:personnel:status','人员管理:变更状态',2,32,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:personnel:regions','人员管理:维护区域',2,33,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:personnel:plans','人员管理:维护计划',2,34,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:products:view','产品管理:查看',1,35,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:products:create','产品管理:新增',2,36,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:products:update','产品管理:编辑',2,37,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:products:delete','产品管理:删除',2,38,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:products:status','产品管理:变更状态',2,39,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:customers:view','客户管理:查看',1,40,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:customers:create','客户管理:新增',2,41,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:customers:update','客户管理:编辑',2,42,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:customers:delete','客户管理:删除',2,43,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:customers:rating','客户管理:客户评级',2,44,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:customers:ownership','客户管理:变更归属',2,45,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:businesses:view','业务管理:查看',1,46,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:businesses:create','业务管理:新增',2,47,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:businesses:update','业务管理:编辑',2,48,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:businesses:delete','业务管理:删除',2,49,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:businesses:status','业务管理:变更状态',2,50,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:businesses:ownership','业务管理:变更归属',2,51,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:shipments:view','发货管理:查看',1,52,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:shipments:create','发货管理:新增',2,53,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:shipments:update','发货管理:编辑',2,54,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:shipments:delete','发货管理:删除',2,55,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:receipts:view','回款管理:查看',1,56,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:receipts:create','回款管理:新增',2,57,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:receipts:update','回款管理:编辑',2,58,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:receipts:delete','回款管理:删除',2,59,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:ratings:view','评级标准:查看',1,60,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:ratings:create','评级标准:新增',2,61,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:ratings:update','评级标准:编辑',2,62,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:ratings:delete','评级标准:删除',2,63,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('tplus:view','采集与导入:查看',1,64,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('tplus:collect','采集与导入:创建采集',2,65,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('tplus:retry','采集与导入:重试采集',2,66,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('tplus:preview','采集与导入:预览',2,67,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('tplus:import','采集与导入:执行导入',2,68,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('tplus:facts','采集与导入:维护补充资料',2,69,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('tplus:export','采集与导入:导出',2,70,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('payroll:view','正式核算与分配:查看',1,71,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('payroll:prepare','正式核算与分配:准备核算资料',2,72,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('payroll:calculate','正式核算与分配:核算与重算',2,73,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('payroll:allocation','正式核算与分配:修改工资分配',2,74,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('settlements:view','月度工资:查看',1,75,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('settlements:generate','月度工资:生成工资',2,76,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('settlements:submit','月度工资:提交审核',2,77,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('adjustments:view','工资调整:查看',1,78,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('adjustments:create','工资调整:新增',2,79,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('approvals:view','审核记录:查看',1,80,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('approvals:finance','审核记录:财务复核',2,81,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('approvals:leader','审核记录:领导审核',2,82,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('reports:business:view','业务统计:查看',1,83,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('reports:business:export','业务统计:导出',2,84,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('reports:personal:view','个人明细:查看',1,85,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('reports:personal:export','个人明细:导出',2,86,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('reports:department:view','部门汇总:查看',1,87,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('reports:department:export','部门汇总:导出',2,88,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('reports:payments:view','回款统计:查看',1,89,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('reports:payments:export','回款统计:导出',2,90,1);
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:users:view' SET p.parent_id=parent.id WHERE p.perm_code='system:users:create';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:users:view' SET p.parent_id=parent.id WHERE p.perm_code='system:users:update';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:users:view' SET p.parent_id=parent.id WHERE p.perm_code='system:users:delete';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:users:view' SET p.parent_id=parent.id WHERE p.perm_code='system:users:status';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:users:view' SET p.parent_id=parent.id WHERE p.perm_code='system:users:password';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:roles:view' SET p.parent_id=parent.id WHERE p.perm_code='system:roles:create';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:roles:view' SET p.parent_id=parent.id WHERE p.perm_code='system:roles:update';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:roles:view' SET p.parent_id=parent.id WHERE p.perm_code='system:roles:delete';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:roles:view' SET p.parent_id=parent.id WHERE p.perm_code='system:roles:status';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:authorization:view' SET p.parent_id=parent.id WHERE p.perm_code='system:authorization:update';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:business_roles:view' SET p.parent_id=parent.id WHERE p.perm_code='system:business_roles:create';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:business_roles:view' SET p.parent_id=parent.id WHERE p.perm_code='system:business_roles:update';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:business_roles:view' SET p.parent_id=parent.id WHERE p.perm_code='system:business_roles:delete';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:business_roles:view' SET p.parent_id=parent.id WHERE p.perm_code='system:business_roles:status';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:params:view' SET p.parent_id=parent.id WHERE p.perm_code='system:params:update';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:params:view' SET p.parent_id=parent.id WHERE p.perm_code='system:params:withdraw';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:params:view' SET p.parent_id=parent.id WHERE p.perm_code='system:params:export';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:params:view' SET p.parent_id=parent.id WHERE p.perm_code='system:params:preview';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:settings:view' SET p.parent_id=parent.id WHERE p.perm_code='system:settings:update';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='base:personnel:view' SET p.parent_id=parent.id WHERE p.perm_code='base:personnel:create';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='base:personnel:view' SET p.parent_id=parent.id WHERE p.perm_code='base:personnel:update';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='base:personnel:view' SET p.parent_id=parent.id WHERE p.perm_code='base:personnel:delete';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='base:personnel:view' SET p.parent_id=parent.id WHERE p.perm_code='base:personnel:status';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='base:personnel:view' SET p.parent_id=parent.id WHERE p.perm_code='base:personnel:regions';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='base:personnel:view' SET p.parent_id=parent.id WHERE p.perm_code='base:personnel:plans';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='base:products:view' SET p.parent_id=parent.id WHERE p.perm_code='base:products:create';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='base:products:view' SET p.parent_id=parent.id WHERE p.perm_code='base:products:update';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='base:products:view' SET p.parent_id=parent.id WHERE p.perm_code='base:products:delete';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='base:products:view' SET p.parent_id=parent.id WHERE p.perm_code='base:products:status';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='base:customers:view' SET p.parent_id=parent.id WHERE p.perm_code='base:customers:create';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='base:customers:view' SET p.parent_id=parent.id WHERE p.perm_code='base:customers:update';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='base:customers:view' SET p.parent_id=parent.id WHERE p.perm_code='base:customers:delete';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='base:customers:view' SET p.parent_id=parent.id WHERE p.perm_code='base:customers:rating';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='base:customers:view' SET p.parent_id=parent.id WHERE p.perm_code='base:customers:ownership';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='business:businesses:view' SET p.parent_id=parent.id WHERE p.perm_code='business:businesses:create';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='business:businesses:view' SET p.parent_id=parent.id WHERE p.perm_code='business:businesses:update';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='business:businesses:view' SET p.parent_id=parent.id WHERE p.perm_code='business:businesses:delete';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='business:businesses:view' SET p.parent_id=parent.id WHERE p.perm_code='business:businesses:status';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='business:businesses:view' SET p.parent_id=parent.id WHERE p.perm_code='business:businesses:ownership';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='business:shipments:view' SET p.parent_id=parent.id WHERE p.perm_code='business:shipments:create';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='business:shipments:view' SET p.parent_id=parent.id WHERE p.perm_code='business:shipments:update';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='business:shipments:view' SET p.parent_id=parent.id WHERE p.perm_code='business:shipments:delete';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='business:receipts:view' SET p.parent_id=parent.id WHERE p.perm_code='business:receipts:create';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='business:receipts:view' SET p.parent_id=parent.id WHERE p.perm_code='business:receipts:update';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='business:receipts:view' SET p.parent_id=parent.id WHERE p.perm_code='business:receipts:delete';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='business:ratings:view' SET p.parent_id=parent.id WHERE p.perm_code='business:ratings:create';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='business:ratings:view' SET p.parent_id=parent.id WHERE p.perm_code='business:ratings:update';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='business:ratings:view' SET p.parent_id=parent.id WHERE p.perm_code='business:ratings:delete';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='tplus:view' SET p.parent_id=parent.id WHERE p.perm_code='tplus:collect';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='tplus:view' SET p.parent_id=parent.id WHERE p.perm_code='tplus:retry';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='tplus:view' SET p.parent_id=parent.id WHERE p.perm_code='tplus:preview';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='tplus:view' SET p.parent_id=parent.id WHERE p.perm_code='tplus:import';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='tplus:view' SET p.parent_id=parent.id WHERE p.perm_code='tplus:facts';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='tplus:view' SET p.parent_id=parent.id WHERE p.perm_code='tplus:export';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='payroll:view' SET p.parent_id=parent.id WHERE p.perm_code='payroll:prepare';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='payroll:view' SET p.parent_id=parent.id WHERE p.perm_code='payroll:calculate';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='payroll:view' SET p.parent_id=parent.id WHERE p.perm_code='payroll:allocation';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='settlements:view' SET p.parent_id=parent.id WHERE p.perm_code='settlements:generate';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='settlements:view' SET p.parent_id=parent.id WHERE p.perm_code='settlements:submit';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='adjustments:view' SET p.parent_id=parent.id WHERE p.perm_code='adjustments:create';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='approvals:view' SET p.parent_id=parent.id WHERE p.perm_code='approvals:finance';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='approvals:view' SET p.parent_id=parent.id WHERE p.perm_code='approvals:leader';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='reports:business:view' SET p.parent_id=parent.id WHERE p.perm_code='reports:business:export';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='reports:personal:view' SET p.parent_id=parent.id WHERE p.perm_code='reports:personal:export';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='reports:department:view' SET p.parent_id=parent.id WHERE p.perm_code='reports:department:export';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='reports:payments:view' SET p.parent_id=parent.id WHERE p.perm_code='reports:payments:export';
INSERT INTO roles (role_code,role_name,description,sort_order,status) VALUES ('payroll_maker','工资制作人','指定制作人还需在权限设置中绑定,角色本身不能绕过月份锁',5,1);
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='adjustments:create' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='adjustments:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='approvals:finance' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='approvals:leader' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='approvals:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:customers:create' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:customers:delete' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:customers:ownership' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:customers:rating' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:customers:update' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:customers:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:create' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:delete' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:plans' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:regions' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:status' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:update' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:products:create' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:products:delete' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:products:status' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:products:update' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:products:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:businesses:create' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:businesses:delete' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:businesses:ownership' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:businesses:status' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:businesses:update' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:businesses:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:ratings:create' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:ratings:delete' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:ratings:update' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:ratings:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:receipts:create' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:receipts:delete' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:receipts:update' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:receipts:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:shipments:create' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:shipments:delete' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:shipments:update' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:shipments:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='dashboard:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='payroll:allocation' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='payroll:calculate' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='payroll:prepare' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='payroll:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:business:export' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:business:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:department:export' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:department:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:payments:export' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:payments:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:personal:export' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:personal:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='settlements:generate' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='settlements:submit' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='settlements:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:authorization:update' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:authorization:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:business_roles:create' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:business_roles:delete' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:business_roles:status' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:business_roles:update' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:business_roles:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:logs:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:params:export' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:params:preview' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:params:update' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:params:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:params:withdraw' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:roles:create' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:roles:delete' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:roles:status' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:roles:update' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:roles:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:settings:update' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:settings:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:users:create' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:users:delete' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:users:password' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:users:status' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:users:update' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:users:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='tplus:collect' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='tplus:export' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='tplus:facts' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='tplus:import' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='tplus:preview' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='tplus:retry' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='tplus:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:customers:view' WHERE r.role_code='user';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:view' WHERE r.role_code='user';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:products:view' WHERE r.role_code='user';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:businesses:view' WHERE r.role_code='user';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:ratings:view' WHERE r.role_code='user';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:receipts:view' WHERE r.role_code='user';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:shipments:view' WHERE r.role_code='user';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:customers:view' WHERE r.role_code='marketing_ops';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:view' WHERE r.role_code='marketing_ops';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:products:view' WHERE r.role_code='marketing_ops';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:businesses:view' WHERE r.role_code='marketing_ops';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:ratings:view' WHERE r.role_code='marketing_ops';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:receipts:view' WHERE r.role_code='marketing_ops';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:shipments:view' WHERE r.role_code='marketing_ops';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='adjustments:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='approvals:finance' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='approvals:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:customers:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:products:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:businesses:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:ratings:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:receipts:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:shipments:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='dashboard:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='payroll:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:business:export' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:business:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:department:export' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:department:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:payments:export' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:payments:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:personal:export' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:personal:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='settlements:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:params:preview' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:params:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='adjustments:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='approvals:leader' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='approvals:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:customers:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:products:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:businesses:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:ratings:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:receipts:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:shipments:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='dashboard:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='payroll:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:business:export' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:business:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:department:export' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:department:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:payments:export' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:payments:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:personal:export' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:personal:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='settlements:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:params:preview' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:params:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='adjustments:create' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='adjustments:view' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='approvals:view' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:customers:create' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:customers:delete' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:customers:ownership' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:customers:rating' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:customers:update' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:customers:view' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:create' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:delete' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:plans' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:regions' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:status' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:update' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:view' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:products:create' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:products:delete' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:products:status' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:products:update' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:products:view' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:businesses:create' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:businesses:delete' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:businesses:ownership' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:businesses:status' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:businesses:update' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:businesses:view' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:ratings:create' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:ratings:delete' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:ratings:update' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:ratings:view' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:receipts:create' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:receipts:delete' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:receipts:update' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:receipts:view' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:shipments:create' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:shipments:delete' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:shipments:update' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:shipments:view' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='payroll:allocation' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='payroll:calculate' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='payroll:prepare' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='payroll:view' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:business:view' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:department:view' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:payments:view' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:personal:view' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='settlements:generate' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='settlements:submit' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='settlements:view' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='tplus:collect' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='tplus:export' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='tplus:facts' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='tplus:import' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='tplus:preview' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='tplus:retry' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='tplus:view' WHERE r.role_code='payroll_maker';
INSERT INTO authorization_settings (id,maker_user_id,revision) VALUES (1,NULL,1);
-- V23:系统监控,独立新表,不修改业务及审计数据。
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:monitor:view','系统监控:查看',1,100,1);
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:monitor:view' WHERE r.role_code='admin';
CREATE TABLE monitor_snapshots (
id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT,
instance_id VARCHAR(32) NOT NULL COMMENT '应用实例标识',
minute DATETIME NOT NULL COMMENT '采集分钟,北京时间',
sample_count INTEGER NOT NULL COMMENT '实际采样次数',
resources JSON NOT NULL COMMENT '资源均值与采集范围,不含配置',
requests JSON NOT NULL COMMENT '请求汇总与固定耗时直方图',
CONSTRAINT pk_monitor_snapshots PRIMARY KEY (id),
CONSTRAINT uk_monitor_snapshots_instance_minute UNIQUE (instance_id, minute)
)ENGINE=InnoDB CHARSET=utf8mb4 COMMENT='分钟级运行监控快照' COLLATE utf8mb4_general_ci;
CREATE INDEX idx_monitor_snapshots_minute ON monitor_snapshots (minute);
CREATE TABLE monitor_request_minutes (
id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT,
instance_id VARCHAR(32) NOT NULL COMMENT '应用实例标识',
minute DATETIME NOT NULL COMMENT '请求分钟,北京时间',
method VARCHAR(8) NOT NULL COMMENT 'HTTP方法,固定集合',
route VARCHAR(256) NOT NULL COMMENT '路由模板,不含原始地址及参数',
metrics JSON NOT NULL COMMENT '请求数、状态分类与固定直方图',
CONSTRAINT pk_monitor_request_minutes PRIMARY KEY (id),
CONSTRAINT uk_monitor_request_minutes_endpoint UNIQUE (instance_id, minute, method, route)
)ENGINE=InnoDB CHARSET=utf8mb4 COMMENT='接口分钟级运行统计' COLLATE utf8mb4_general_ci;
CREATE INDEX idx_monitor_request_minutes_minute ON monitor_request_minutes (minute);
CREATE TABLE monitor_events (
id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT,
instance_id VARCHAR(32) NOT NULL COMMENT '应用实例标识',
kind VARCHAR(24) NOT NULL COMMENT '事件类型,固定集合',
code VARCHAR(64) NOT NULL COMMENT '稳定错误码',
component VARCHAR(128) NOT NULL COMMENT '所属组件或日志模块',
level VARCHAR(16) NOT NULL COMMENT '异常级别',
message VARCHAR(256) NOT NULL COMMENT '通用说明,不保存内部异常文本',
fingerprint VARCHAR(64) COMMENT '同类健康异常合并键',
request_id VARCHAR(32) COMMENT '请求关联编号',
method VARCHAR(8) COMMENT 'HTTP方法',
route VARCHAR(256) COMMENT '路由模板',
status_code INTEGER COMMENT 'HTTP状态码',
duration_ms FLOAT COMMENT '请求耗时,毫秒',
batch_no VARCHAR(32) COMMENT '相关同步批次编号',
first_seen DATETIME NOT NULL COMMENT '首次发生时间',
last_seen DATETIME NOT NULL COMMENT '最近发生时间',
occurrences INTEGER NOT NULL COMMENT '发生或持续采样次数',
resolved_at DATETIME COMMENT '恢复时间,仅用于健康异常',
CONSTRAINT pk_monitor_events PRIMARY KEY (id)
)ENGINE=InnoDB CHARSET=utf8mb4 COMMENT='脱敏诊断事件与异常恢复记录' COLLATE utf8mb4_general_ci;
CREATE INDEX idx_monitor_events_fingerprint ON monitor_events (fingerprint, resolved_at);
CREATE INDEX idx_monitor_events_last_seen ON monitor_events (last_seen);
CREATE INDEX idx_monitor_events_request_id ON monitor_events (request_id);
-- V24 需求补齐
-- Running upgrade 23b4c5d6e7f8 -> 24c5d6e7f8a9
CREATE TABLE probation_deferrals (
id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT,
ledger_id BIGINT UNSIGNED NOT NULL COMMENT '原核算台账版本ID',
personnel_id BIGINT UNSIGNED NOT NULL COMMENT '归属人员ID',
year VARCHAR(4) NOT NULL COMMENT '原计提年度',
month VARCHAR(7) NOT NULL COMMENT '本次计提或应付变化月份',
accrued NUMERIC(14, 2) NOT NULL COMMENT '本次试用期计提额,可负',
eligible NUMERIC(14, 2) NOT NULL COMMENT '满足起付及权重的本次应付差额,可负',
create_time DATETIME NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT pk_probation_deferrals PRIMARY KEY (id),
CONSTRAINT uk_probation_deferrals_ledger_id UNIQUE (ledger_id),
CONSTRAINT fk_probation_deferrals_ledger_id FOREIGN KEY(ledger_id) REFERENCES performance_ledgers (id) ON DELETE RESTRICT
)ENGINE=InnoDB CHARSET=utf8mb4 COMMENT='试用期缓发台账(每个正式台账版本一条)' COLLATE utf8mb4_general_ci;
CREATE INDEX idx_probation_deferrals_personnel_id_year ON probation_deferrals (personnel_id, year);
CREATE TABLE probation_payments (
id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT,
settlement_id BIGINT UNSIGNED COMMENT '月结ID(当月调整单结清时为空)',
adjustment_order_id BIGINT UNSIGNED COMMENT '已生成工资后的结清调整单ID',
personnel_id BIGINT UNSIGNED NOT NULL COMMENT '归属人员ID',
year VARCHAR(4) NOT NULL COMMENT '原累计年度',
month VARCHAR(7) NOT NULL COMMENT '本次实际支付月份',
amount NUMERIC(14, 2) NOT NULL COMMENT '本次补发或扣回金额',
snapshot_json JSON NOT NULL COMMENT '计提、起付权重、门槛及历史补发依据',
create_time DATETIME NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT pk_probation_payments PRIMARY KEY (id),
CONSTRAINT uk_probation_payments_settlement_person_year UNIQUE (settlement_id, personnel_id, year),
CONSTRAINT uk_probation_payments_adjustment_order_id UNIQUE (adjustment_order_id),
CONSTRAINT fk_probation_payments_settlement_id FOREIGN KEY(settlement_id) REFERENCES monthly_settlements (id) ON DELETE CASCADE,
CONSTRAINT fk_probation_payments_adjustment_order_id FOREIGN KEY(adjustment_order_id) REFERENCES adjustment_orders (id) ON DELETE RESTRICT
)ENGINE=InnoDB CHARSET=utf8mb4 COMMENT='试用期年终及后续结清记录(工资生成事务内固化)' COLLATE utf8mb4_general_ci;
CREATE INDEX idx_probation_payments_personnel_id_year ON probation_payments (personnel_id, year);
INSERT INTO param_definitions (param_code, param_name, param_group, value_type, unit, dimension_type, value_min, value_max, description, sort_order, status) VALUES ('coefficient.personal.first', '个人户首日比例', '产品系数表', 'DECIMAL', '‰', 'PRODUCT_CATEGORY', '0', NULL, '按产品类别维护;未配置时沿用同日期的通用业务员参数。', 52, 1);
INSERT INTO param_definitions (param_code, param_name, param_group, value_type, unit, dimension_type, value_min, value_max, description, sort_order, status) VALUES ('coefficient.personal.start', '个人户线性阶段起始比例', '产品系数表', 'DECIMAL', '‰', 'PRODUCT_CATEGORY', '0', NULL, '按产品类别维护;未配置时沿用同日期的通用业务员参数。', 53, 1);
INSERT INTO param_definitions (param_code, param_name, param_group, value_type, unit, dimension_type, value_min, value_max, description, sort_order, status) VALUES ('coefficient.personal.slope', '个人户线性阶段日斜率', '产品系数表', 'DECIMAL', '‰/天', 'PRODUCT_CATEGORY', '0', NULL, '按产品类别维护;未配置时沿用同日期的通用业务员参数。', 54, 1);
INSERT INTO param_definitions (param_code, param_name, param_group, value_type, unit, dimension_type, value_min, value_max, description, sort_order, status) VALUES ('coefficient.personal.floor', '个人户超期比例', '产品系数表', 'DECIMAL', '‰', 'PRODUCT_CATEGORY', '0', NULL, '按产品类别维护;未配置时沿用同日期的通用业务员参数。', 55, 1);
INSERT INTO param_definitions (param_code, param_name, param_group, value_type, unit, dimension_type, value_min, value_max, description, sort_order, status) VALUES ('coefficient.personal.boundary', '个人户线性阶段截止天数', '产品系数表', 'INT', '天', 'PRODUCT_CATEGORY', '1', '3660', '按产品类别维护;未配置时沿用同日期的通用业务员参数。', 56, 1);
-- 新增模块只授予管理员,普通角色不会随版本扩张权限。
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) SELECT 'system:monitor:view','系统监控:查看',1,100,1 WHERE NOT EXISTS (SELECT 1 FROM permissions WHERE perm_code='system:monitor:view');
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) SELECT 'system:monitor:export','系统监控:导出',2,100,1 WHERE NOT EXISTS (SELECT 1 FROM permissions WHERE perm_code='system:monitor:export');
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:monitor:view' SET p.parent_id=parent.id WHERE p.perm_code='system:monitor:export';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code IN ('system:monitor:view','system:monitor:export') WHERE r.role_code='admin' AND NOT EXISTS (SELECT 1 FROM role_permissions old WHERE old.role_id=r.id AND old.permission_id=p.id);
-- V26:仅允许没有个人权限覆盖的环境应用。
-- 执行前核对 SELECT COUNT(*) FROM user_permission_overrides 的结果为 0;
-- 存在覆盖时先整理为等效角色。Alembic 版本会强制核验,禁止静默忽略。
-- 旧表和历史工资制作人、月份锁定数据均保留。
UPDATE authorization_settings SET maker_user_id=NULL, revision=revision+1 WHERE id=1;
UPDATE permissions SET status=0 WHERE perm_code IN ('system:authorization:view','system:authorization:update');
UPDATE roles SET role_name='工资经办', description='按角色授权维护核算资料、计算工资及生成工资;月份锁定和实际经办人留痕继续生效' WHERE role_code='payroll_maker' AND role_name='工资制作人';
UPDATE roles SET description='管理业务基础资料,具体功能由角色权限配置决定' WHERE role_code='marketing_ops' AND description LIKE '%审批链%';
-- V27:T+ 自动采集设置
CREATE TABLE tplus_automation_configs (
id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT,
source_key VARCHAR(64) NOT NULL COMMENT '源连接身份摘要',
source_database VARCHAR(128) NOT NULL COMMENT '源账套',
enabled TINYINT NOT NULL COMMENT '自动采集是否开启:1开启0关闭',
version INTEGER NOT NULL COMMENT '设置版本号,防止并发覆盖',
updated_by BIGINT UNSIGNED NOT NULL COMMENT '最近修改账号ID',
create_time DATETIME NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME NOT NULL COMMENT '更新时间' DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT pk_tplus_automation_configs PRIMARY KEY (id),
CONSTRAINT uk_tplus_automation_configs_source_key UNIQUE (source_key)
)ENGINE=InnoDB CHARSET=utf8mb4 COMMENT='T+自动采集设置(不含连接凭据)' COLLATE utf8mb4_general_ci;
-- V28:计提公式模板定义;公式骨架受控,页面只维护名称、说明和参数绑定。
CREATE TABLE calc_template_definitions (
id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT,
template_code VARCHAR(32) NOT NULL COMMENT '模板编码,创建后不可修改;岗位表calc_template引用',
template_name VARCHAR(64) NOT NULL COMMENT '模板名称',
formula_type VARCHAR(32) NOT NULL COMMENT '公式骨架类型:linear_decay/fixed_profit/fixed_sales/manager_share/prepay_fixed,创建后不可修改',
params_json JSON NOT NULL COMMENT '骨架参数角色到参数编码的JSON映射',
description VARCHAR(255) NULL COMMENT '模板说明',
sort_order INTEGER NOT NULL DEFAULT 0 COMMENT '显示排序',
status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:1启用0停用',
is_system TINYINT NOT NULL DEFAULT 0 COMMENT '是否系统模板:1内置(禁删、骨架与编码锁定)0自定义',
create_time DATETIME NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME NOT NULL COMMENT '更新时间' DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT pk_calc_template_definitions PRIMARY KEY (id),
CONSTRAINT uk_calc_template_definitions_template_code UNIQUE (template_code)
)ENGINE=InnoDB CHARSET=utf8mb4 COMMENT='计提公式模板定义表(页面可维护,骨架受控)' COLLATE utf8mb4_general_ci;
INSERT INTO calc_template_definitions
(template_code, template_name, formula_type, params_json, description, sort_order, status, is_system)
VALUES
('TPL_SALESPERSON_DECAY', '业务员个人户·天数线性递减', 'linear_decay', JSON_OBJECT('start','salesperson.rate.start','slope','salesperson.rate.slope','floor','salesperson.rate.floor','boundary','salesperson.days.boundary'), '分段:≤分界天数 = 起始 − 天数×斜率;>分界天数 = 下限', 10, 1, 1),
('TPL_MANAGER_SHARE', '营销经理·团队与全公司分成', 'manager_share', JSON_OBJECT('team','manager.share.team','company','manager.share.company'), '聚合:本团队业务员绩效×团队比例 + 全公司业务员绩效×公司比例', 20, 1, 1),
('TPL_ENTERPRISE_FIXED', '企业户·固定计提', 'fixed_profit', JSON_OBJECT('rate','enterprise.rate'), '乘法:折算毛利润额 × 固定计提比例', 30, 1, 1),
('TPL_INFO_SALES_FIXED', '信息员·销售额固定比例', 'fixed_sales', JSON_OBJECT('rate','info.rate'), '乘法:本人销售额 × 固定计提比例', 40, 1, 1),
('TPL_PREPAY_FIXED', '预付款·固定计提', 'prepay_fixed', JSON_OBJECT('rate','prepay.rate'), '乘法:预付回款额 × 预付比例', 50, 1, 1);
-- 迁移版本记录:须等于当前 head,使 alembic upgrade head 成为空操作
INSERT INTO alembic_version (version_num) VALUES ('28a9b0c1d2e3');
+392
View File
@@ -0,0 +1,392 @@
-- V22 完整权限管理;原有账号与工资数据保留。
CREATE TABLE authorization_settings (
id BIGINT UNSIGNED NOT NULL COMMENT '单例主键ID' AUTO_INCREMENT,
maker_user_id BIGINT UNSIGNED COMMENT '现任工资制作人账号ID',
revision INTEGER NOT NULL COMMENT '全局授权版本' DEFAULT '1',
updated_by BIGINT UNSIGNED COMMENT '最近修改人ID',
create_time DATETIME NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME NOT NULL COMMENT '更新时间' DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT pk_authorization_settings PRIMARY KEY (id),
CONSTRAINT fk_authorization_settings_maker_user_id FOREIGN KEY(maker_user_id) REFERENCES users (id) ON DELETE RESTRICT,
CONSTRAINT fk_authorization_settings_updated_by FOREIGN KEY(updated_by) REFERENCES users (id) ON DELETE SET NULL
)ENGINE=InnoDB CHARSET=utf8mb4 COMMENT='授权设置表(单例与并发修改锁)' COLLATE utf8mb4_general_ci;
CREATE TABLE user_permission_overrides (
id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT,
user_id BIGINT UNSIGNED NOT NULL COMMENT '系统用户ID',
permission_id BIGINT UNSIGNED NOT NULL COMMENT '权限ID',
effect VARCHAR(8) NOT NULL COMMENT '个人覆盖:ALLOW允许 DENY禁止',
create_time DATETIME NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME NOT NULL COMMENT '更新时间' DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT pk_user_permission_overrides PRIMARY KEY (id),
CONSTRAINT uk_user_permission_overrides_user_permission UNIQUE (user_id, permission_id),
CONSTRAINT fk_user_permission_overrides_user_id FOREIGN KEY(user_id) REFERENCES users (id) ON DELETE CASCADE,
CONSTRAINT fk_user_permission_overrides_permission_id FOREIGN KEY(permission_id) REFERENCES permissions (id) ON DELETE RESTRICT
)ENGINE=InnoDB CHARSET=utf8mb4 COMMENT='用户权限覆盖表(个人禁止优先)' COLLATE utf8mb4_general_ci;
CREATE INDEX idx_user_permission_overrides_permission_id ON user_permission_overrides (permission_id);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('dashboard:view','首页:查看',1,1,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:users:view','用户管理:查看',1,2,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:users:create','用户管理:新增',2,3,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:users:update','用户管理:编辑',2,4,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:users:delete','用户管理:删除',2,5,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:users:status','用户管理:变更状态',2,6,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:users:password','用户管理:重置密码',2,7,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:roles:view','角色管理:查看',1,8,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:roles:create','角色管理:新增',2,9,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:roles:update','角色管理:编辑',2,10,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:roles:delete','角色管理:删除',2,11,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:roles:status','角色管理:变更状态',2,12,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:authorization:view','权限与工资制作人:查看',1,13,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:authorization:update','权限与工资制作人:编辑',2,14,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:business_roles:view','岗位角色:查看',1,15,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:business_roles:create','岗位角色:新增',2,16,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:business_roles:update','岗位角色:编辑',2,17,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:business_roles:delete','岗位角色:删除',2,18,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:business_roles:status','岗位角色:变更状态',2,19,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:params:view','计提参数:查看',1,20,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:params:update','计提参数:编辑',2,21,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:params:withdraw','计提参数:撤回参数',2,22,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:params:export','计提参数:导出',2,23,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:params:preview','计提参数:预览',2,24,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:settings:view','公司信息:查看',1,25,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:settings:update','公司信息:编辑',2,26,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:logs:view','日志查询:查看',1,27,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:personnel:view','人员管理:查看',1,28,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:personnel:create','人员管理:新增',2,29,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:personnel:update','人员管理:编辑',2,30,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:personnel:delete','人员管理:删除',2,31,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:personnel:status','人员管理:变更状态',2,32,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:personnel:regions','人员管理:维护区域',2,33,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:personnel:plans','人员管理:维护计划',2,34,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:products:view','产品管理:查看',1,35,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:products:create','产品管理:新增',2,36,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:products:update','产品管理:编辑',2,37,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:products:delete','产品管理:删除',2,38,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:products:status','产品管理:变更状态',2,39,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:customers:view','客户管理:查看',1,40,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:customers:create','客户管理:新增',2,41,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:customers:update','客户管理:编辑',2,42,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:customers:delete','客户管理:删除',2,43,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:customers:rating','客户管理:客户评级',2,44,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('base:customers:ownership','客户管理:变更归属',2,45,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:businesses:view','业务管理:查看',1,46,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:businesses:create','业务管理:新增',2,47,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:businesses:update','业务管理:编辑',2,48,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:businesses:delete','业务管理:删除',2,49,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:businesses:status','业务管理:变更状态',2,50,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:businesses:ownership','业务管理:变更归属',2,51,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:shipments:view','发货管理:查看',1,52,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:shipments:create','发货管理:新增',2,53,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:shipments:update','发货管理:编辑',2,54,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:shipments:delete','发货管理:删除',2,55,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:receipts:view','回款管理:查看',1,56,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:receipts:create','回款管理:新增',2,57,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:receipts:update','回款管理:编辑',2,58,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:receipts:delete','回款管理:删除',2,59,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:ratings:view','评级标准:查看',1,60,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:ratings:create','评级标准:新增',2,61,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:ratings:update','评级标准:编辑',2,62,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('business:ratings:delete','评级标准:删除',2,63,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('tplus:view','采集与导入:查看',1,64,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('tplus:collect','采集与导入:创建采集',2,65,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('tplus:retry','采集与导入:重试采集',2,66,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('tplus:preview','采集与导入:预览',2,67,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('tplus:import','采集与导入:执行导入',2,68,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('tplus:facts','采集与导入:维护补充资料',2,69,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('tplus:export','采集与导入:导出',2,70,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('payroll:view','正式核算与分配:查看',1,71,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('payroll:prepare','正式核算与分配:准备核算资料',2,72,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('payroll:calculate','正式核算与分配:核算与重算',2,73,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('payroll:allocation','正式核算与分配:修改工资分配',2,74,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('settlements:view','月度工资:查看',1,75,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('settlements:generate','月度工资:生成工资',2,76,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('settlements:submit','月度工资:提交审核',2,77,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('adjustments:view','工资调整:查看',1,78,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('adjustments:create','工资调整:新增',2,79,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('approvals:view','审核记录:查看',1,80,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('approvals:finance','审核记录:财务复核',2,81,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('approvals:leader','审核记录:领导审核',2,82,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('reports:business:view','业务统计:查看',1,83,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('reports:business:export','业务统计:导出',2,84,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('reports:personal:view','个人明细:查看',1,85,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('reports:personal:export','个人明细:导出',2,86,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('reports:department:view','部门汇总:查看',1,87,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('reports:department:export','部门汇总:导出',2,88,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('reports:payments:view','回款统计:查看',1,89,1);
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('reports:payments:export','回款统计:导出',2,90,1);
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:users:view' SET p.parent_id=parent.id WHERE p.perm_code='system:users:create';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:users:view' SET p.parent_id=parent.id WHERE p.perm_code='system:users:update';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:users:view' SET p.parent_id=parent.id WHERE p.perm_code='system:users:delete';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:users:view' SET p.parent_id=parent.id WHERE p.perm_code='system:users:status';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:users:view' SET p.parent_id=parent.id WHERE p.perm_code='system:users:password';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:roles:view' SET p.parent_id=parent.id WHERE p.perm_code='system:roles:create';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:roles:view' SET p.parent_id=parent.id WHERE p.perm_code='system:roles:update';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:roles:view' SET p.parent_id=parent.id WHERE p.perm_code='system:roles:delete';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:roles:view' SET p.parent_id=parent.id WHERE p.perm_code='system:roles:status';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:authorization:view' SET p.parent_id=parent.id WHERE p.perm_code='system:authorization:update';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:business_roles:view' SET p.parent_id=parent.id WHERE p.perm_code='system:business_roles:create';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:business_roles:view' SET p.parent_id=parent.id WHERE p.perm_code='system:business_roles:update';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:business_roles:view' SET p.parent_id=parent.id WHERE p.perm_code='system:business_roles:delete';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:business_roles:view' SET p.parent_id=parent.id WHERE p.perm_code='system:business_roles:status';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:params:view' SET p.parent_id=parent.id WHERE p.perm_code='system:params:update';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:params:view' SET p.parent_id=parent.id WHERE p.perm_code='system:params:withdraw';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:params:view' SET p.parent_id=parent.id WHERE p.perm_code='system:params:export';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:params:view' SET p.parent_id=parent.id WHERE p.perm_code='system:params:preview';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:settings:view' SET p.parent_id=parent.id WHERE p.perm_code='system:settings:update';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='base:personnel:view' SET p.parent_id=parent.id WHERE p.perm_code='base:personnel:create';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='base:personnel:view' SET p.parent_id=parent.id WHERE p.perm_code='base:personnel:update';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='base:personnel:view' SET p.parent_id=parent.id WHERE p.perm_code='base:personnel:delete';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='base:personnel:view' SET p.parent_id=parent.id WHERE p.perm_code='base:personnel:status';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='base:personnel:view' SET p.parent_id=parent.id WHERE p.perm_code='base:personnel:regions';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='base:personnel:view' SET p.parent_id=parent.id WHERE p.perm_code='base:personnel:plans';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='base:products:view' SET p.parent_id=parent.id WHERE p.perm_code='base:products:create';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='base:products:view' SET p.parent_id=parent.id WHERE p.perm_code='base:products:update';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='base:products:view' SET p.parent_id=parent.id WHERE p.perm_code='base:products:delete';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='base:products:view' SET p.parent_id=parent.id WHERE p.perm_code='base:products:status';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='base:customers:view' SET p.parent_id=parent.id WHERE p.perm_code='base:customers:create';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='base:customers:view' SET p.parent_id=parent.id WHERE p.perm_code='base:customers:update';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='base:customers:view' SET p.parent_id=parent.id WHERE p.perm_code='base:customers:delete';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='base:customers:view' SET p.parent_id=parent.id WHERE p.perm_code='base:customers:rating';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='base:customers:view' SET p.parent_id=parent.id WHERE p.perm_code='base:customers:ownership';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='business:businesses:view' SET p.parent_id=parent.id WHERE p.perm_code='business:businesses:create';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='business:businesses:view' SET p.parent_id=parent.id WHERE p.perm_code='business:businesses:update';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='business:businesses:view' SET p.parent_id=parent.id WHERE p.perm_code='business:businesses:delete';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='business:businesses:view' SET p.parent_id=parent.id WHERE p.perm_code='business:businesses:status';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='business:businesses:view' SET p.parent_id=parent.id WHERE p.perm_code='business:businesses:ownership';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='business:shipments:view' SET p.parent_id=parent.id WHERE p.perm_code='business:shipments:create';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='business:shipments:view' SET p.parent_id=parent.id WHERE p.perm_code='business:shipments:update';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='business:shipments:view' SET p.parent_id=parent.id WHERE p.perm_code='business:shipments:delete';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='business:receipts:view' SET p.parent_id=parent.id WHERE p.perm_code='business:receipts:create';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='business:receipts:view' SET p.parent_id=parent.id WHERE p.perm_code='business:receipts:update';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='business:receipts:view' SET p.parent_id=parent.id WHERE p.perm_code='business:receipts:delete';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='business:ratings:view' SET p.parent_id=parent.id WHERE p.perm_code='business:ratings:create';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='business:ratings:view' SET p.parent_id=parent.id WHERE p.perm_code='business:ratings:update';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='business:ratings:view' SET p.parent_id=parent.id WHERE p.perm_code='business:ratings:delete';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='tplus:view' SET p.parent_id=parent.id WHERE p.perm_code='tplus:collect';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='tplus:view' SET p.parent_id=parent.id WHERE p.perm_code='tplus:retry';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='tplus:view' SET p.parent_id=parent.id WHERE p.perm_code='tplus:preview';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='tplus:view' SET p.parent_id=parent.id WHERE p.perm_code='tplus:import';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='tplus:view' SET p.parent_id=parent.id WHERE p.perm_code='tplus:facts';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='tplus:view' SET p.parent_id=parent.id WHERE p.perm_code='tplus:export';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='payroll:view' SET p.parent_id=parent.id WHERE p.perm_code='payroll:prepare';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='payroll:view' SET p.parent_id=parent.id WHERE p.perm_code='payroll:calculate';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='payroll:view' SET p.parent_id=parent.id WHERE p.perm_code='payroll:allocation';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='settlements:view' SET p.parent_id=parent.id WHERE p.perm_code='settlements:generate';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='settlements:view' SET p.parent_id=parent.id WHERE p.perm_code='settlements:submit';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='adjustments:view' SET p.parent_id=parent.id WHERE p.perm_code='adjustments:create';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='approvals:view' SET p.parent_id=parent.id WHERE p.perm_code='approvals:finance';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='approvals:view' SET p.parent_id=parent.id WHERE p.perm_code='approvals:leader';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='reports:business:view' SET p.parent_id=parent.id WHERE p.perm_code='reports:business:export';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='reports:personal:view' SET p.parent_id=parent.id WHERE p.perm_code='reports:personal:export';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='reports:department:view' SET p.parent_id=parent.id WHERE p.perm_code='reports:department:export';
UPDATE permissions p JOIN permissions parent ON parent.perm_code='reports:payments:view' SET p.parent_id=parent.id WHERE p.perm_code='reports:payments:export';
INSERT INTO roles (role_code,role_name,description,sort_order,status) VALUES ('payroll_maker','工资制作人','指定制作人还需在权限设置中绑定,角色本身不能绕过月份锁',5,1);
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='adjustments:create' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='adjustments:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='approvals:finance' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='approvals:leader' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='approvals:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:customers:create' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:customers:delete' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:customers:ownership' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:customers:rating' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:customers:update' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:customers:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:create' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:delete' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:plans' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:regions' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:status' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:update' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:products:create' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:products:delete' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:products:status' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:products:update' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:products:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:businesses:create' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:businesses:delete' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:businesses:ownership' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:businesses:status' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:businesses:update' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:businesses:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:ratings:create' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:ratings:delete' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:ratings:update' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:ratings:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:receipts:create' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:receipts:delete' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:receipts:update' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:receipts:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:shipments:create' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:shipments:delete' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:shipments:update' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:shipments:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='dashboard:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='payroll:allocation' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='payroll:calculate' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='payroll:prepare' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='payroll:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:business:export' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:business:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:department:export' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:department:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:payments:export' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:payments:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:personal:export' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:personal:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='settlements:generate' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='settlements:submit' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='settlements:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:authorization:update' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:authorization:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:business_roles:create' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:business_roles:delete' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:business_roles:status' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:business_roles:update' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:business_roles:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:logs:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:params:export' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:params:preview' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:params:update' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:params:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:params:withdraw' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:roles:create' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:roles:delete' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:roles:status' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:roles:update' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:roles:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:settings:update' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:settings:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:users:create' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:users:delete' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:users:password' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:users:status' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:users:update' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:users:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='tplus:collect' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='tplus:export' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='tplus:facts' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='tplus:import' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='tplus:preview' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='tplus:retry' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='tplus:view' WHERE r.role_code='admin';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:customers:view' WHERE r.role_code='user';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:view' WHERE r.role_code='user';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:products:view' WHERE r.role_code='user';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:businesses:view' WHERE r.role_code='user';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:ratings:view' WHERE r.role_code='user';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:receipts:view' WHERE r.role_code='user';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:shipments:view' WHERE r.role_code='user';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:customers:view' WHERE r.role_code='marketing_ops';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:view' WHERE r.role_code='marketing_ops';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:products:view' WHERE r.role_code='marketing_ops';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:businesses:view' WHERE r.role_code='marketing_ops';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:ratings:view' WHERE r.role_code='marketing_ops';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:receipts:view' WHERE r.role_code='marketing_ops';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:shipments:view' WHERE r.role_code='marketing_ops';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='adjustments:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='approvals:finance' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='approvals:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:customers:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:products:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:businesses:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:ratings:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:receipts:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:shipments:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='dashboard:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='payroll:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:business:export' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:business:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:department:export' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:department:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:payments:export' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:payments:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:personal:export' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:personal:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='settlements:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:params:preview' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:params:view' WHERE r.role_code='finance';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='adjustments:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='approvals:leader' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='approvals:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:customers:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:products:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:businesses:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:ratings:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:receipts:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:shipments:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='dashboard:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='payroll:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:business:export' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:business:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:department:export' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:department:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:payments:export' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:payments:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:personal:export' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:personal:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='settlements:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:params:preview' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:params:view' WHERE r.role_code='leader';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='adjustments:create' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='adjustments:view' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='approvals:view' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:customers:create' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:customers:delete' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:customers:ownership' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:customers:rating' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:customers:update' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:customers:view' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:create' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:delete' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:plans' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:regions' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:status' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:update' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:personnel:view' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:products:create' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:products:delete' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:products:status' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:products:update' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='base:products:view' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:businesses:create' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:businesses:delete' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:businesses:ownership' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:businesses:status' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:businesses:update' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:businesses:view' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:ratings:create' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:ratings:delete' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:ratings:update' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:ratings:view' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:receipts:create' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:receipts:delete' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:receipts:update' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:receipts:view' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:shipments:create' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:shipments:delete' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:shipments:update' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='business:shipments:view' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='payroll:allocation' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='payroll:calculate' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='payroll:prepare' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='payroll:view' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:business:view' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:department:view' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:payments:view' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='reports:personal:view' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='settlements:generate' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='settlements:submit' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='settlements:view' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='tplus:collect' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='tplus:export' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='tplus:facts' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='tplus:import' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='tplus:preview' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='tplus:retry' WHERE r.role_code='payroll_maker';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='tplus:view' WHERE r.role_code='payroll_maker';
INSERT INTO authorization_settings (id,maker_user_id,revision) VALUES (1,NULL,1);
+58
View File
@@ -0,0 +1,58 @@
-- V23:系统监控,独立新表,不修改业务及审计数据。
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) VALUES ('system:monitor:view','系统监控:查看',1,100,1);
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code='system:monitor:view' WHERE r.role_code='admin';
CREATE TABLE monitor_snapshots (
id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT,
instance_id VARCHAR(32) NOT NULL COMMENT '应用实例标识',
minute DATETIME NOT NULL COMMENT '采集分钟,北京时间',
sample_count INTEGER NOT NULL COMMENT '实际采样次数',
resources JSON NOT NULL COMMENT '资源均值与采集范围,不含配置',
requests JSON NOT NULL COMMENT '请求汇总与固定耗时直方图',
CONSTRAINT pk_monitor_snapshots PRIMARY KEY (id),
CONSTRAINT uk_monitor_snapshots_instance_minute UNIQUE (instance_id, minute)
)ENGINE=InnoDB CHARSET=utf8mb4 COMMENT='分钟级运行监控快照' COLLATE utf8mb4_general_ci;
CREATE INDEX idx_monitor_snapshots_minute ON monitor_snapshots (minute);
CREATE TABLE monitor_request_minutes (
id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT,
instance_id VARCHAR(32) NOT NULL COMMENT '应用实例标识',
minute DATETIME NOT NULL COMMENT '请求分钟,北京时间',
method VARCHAR(8) NOT NULL COMMENT 'HTTP方法,固定集合',
route VARCHAR(256) NOT NULL COMMENT '路由模板,不含原始地址及参数',
metrics JSON NOT NULL COMMENT '请求数、状态分类与固定直方图',
CONSTRAINT pk_monitor_request_minutes PRIMARY KEY (id),
CONSTRAINT uk_monitor_request_minutes_endpoint UNIQUE (instance_id, minute, method, route)
)ENGINE=InnoDB CHARSET=utf8mb4 COMMENT='接口分钟级运行统计' COLLATE utf8mb4_general_ci;
CREATE INDEX idx_monitor_request_minutes_minute ON monitor_request_minutes (minute);
CREATE TABLE monitor_events (
id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT,
instance_id VARCHAR(32) NOT NULL COMMENT '应用实例标识',
kind VARCHAR(24) NOT NULL COMMENT '事件类型,固定集合',
code VARCHAR(64) NOT NULL COMMENT '稳定错误码',
component VARCHAR(128) NOT NULL COMMENT '所属组件或日志模块',
level VARCHAR(16) NOT NULL COMMENT '异常级别',
message VARCHAR(256) NOT NULL COMMENT '通用说明,不保存内部异常文本',
fingerprint VARCHAR(64) COMMENT '同类健康异常合并键',
request_id VARCHAR(32) COMMENT '请求关联编号',
method VARCHAR(8) COMMENT 'HTTP方法',
route VARCHAR(256) COMMENT '路由模板',
status_code INTEGER COMMENT 'HTTP状态码',
duration_ms FLOAT COMMENT '请求耗时,毫秒',
batch_no VARCHAR(32) COMMENT '相关同步批次编号',
first_seen DATETIME NOT NULL COMMENT '首次发生时间',
last_seen DATETIME NOT NULL COMMENT '最近发生时间',
occurrences INTEGER NOT NULL COMMENT '发生或持续采样次数',
resolved_at DATETIME COMMENT '恢复时间,仅用于健康异常',
CONSTRAINT pk_monitor_events PRIMARY KEY (id)
)ENGINE=InnoDB CHARSET=utf8mb4 COMMENT='脱敏诊断事件与异常恢复记录' COLLATE utf8mb4_general_ci;
CREATE INDEX idx_monitor_events_fingerprint ON monitor_events (fingerprint, resolved_at);
CREATE INDEX idx_monitor_events_last_seen ON monitor_events (last_seen);
CREATE INDEX idx_monitor_events_request_id ON monitor_events (request_id);
@@ -0,0 +1,66 @@
-- Running upgrade 23b4c5d6e7f8 -> 24c5d6e7f8a9
ALTER TABLE personnel ADD COLUMN probation_start_date DATE COMMENT '试用期开始日(含当日)';
ALTER TABLE personnel ADD COLUMN regularization_date DATE COMMENT '转正生效日(当日不再属于试用期)';
ALTER TABLE personnel ADD COLUMN resignation_date DATE COMMENT '离职生效日(当日起不计基本工资)';
ALTER TABLE personnel ADD COLUMN salary_history_json JSON COMMENT '工资标准、岗位及任职资料生效版本';
ALTER TABLE products ADD COLUMN source_trade_json JSON COMMENT '最近有效发货数量、含税成交价及源单据快照';
ALTER TABLE products ADD COLUMN quantity_price_manual SMALLINT NOT NULL COMMENT '数量单价人工保护:1人工维护 0随源更新' DEFAULT '0';
ALTER TABLE settlement_items ADD COLUMN normal_payable_sum NUMERIC(14, 2) NOT NULL COMMENT '当月正常实付绩效' DEFAULT '0';
ALTER TABLE settlement_items ADD COLUMN deferred_sum NUMERIC(14, 2) NOT NULL COMMENT '当月试用期缓发变化' DEFAULT '0';
ALTER TABLE settlement_items ADD COLUMN probation_payment_sum NUMERIC(14, 2) NOT NULL COMMENT '本月年度补发或扣回' DEFAULT '0';
CREATE TABLE probation_deferrals (
id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT,
ledger_id BIGINT UNSIGNED NOT NULL COMMENT '原核算台账版本ID',
personnel_id BIGINT UNSIGNED NOT NULL COMMENT '归属人员ID',
year VARCHAR(4) NOT NULL COMMENT '原计提年度',
month VARCHAR(7) NOT NULL COMMENT '本次计提或应付变化月份',
accrued NUMERIC(14, 2) NOT NULL COMMENT '本次试用期计提额,可负',
eligible NUMERIC(14, 2) NOT NULL COMMENT '满足起付及权重的本次应付差额,可负',
create_time DATETIME NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT pk_probation_deferrals PRIMARY KEY (id),
CONSTRAINT uk_probation_deferrals_ledger_id UNIQUE (ledger_id),
CONSTRAINT fk_probation_deferrals_ledger_id FOREIGN KEY(ledger_id) REFERENCES performance_ledgers (id) ON DELETE RESTRICT
)ENGINE=InnoDB CHARSET=utf8mb4 COMMENT='试用期缓发台账(每个正式台账版本一条)' COLLATE utf8mb4_general_ci;
CREATE INDEX idx_probation_deferrals_personnel_id_year ON probation_deferrals (personnel_id, year);
CREATE TABLE probation_payments (
id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT,
settlement_id BIGINT UNSIGNED COMMENT '月结ID(当月调整单结清时为空)',
adjustment_order_id BIGINT UNSIGNED COMMENT '已生成工资后的结清调整单ID',
personnel_id BIGINT UNSIGNED NOT NULL COMMENT '归属人员ID',
year VARCHAR(4) NOT NULL COMMENT '原累计年度',
month VARCHAR(7) NOT NULL COMMENT '本次实际支付月份',
amount NUMERIC(14, 2) NOT NULL COMMENT '本次补发或扣回金额',
snapshot_json JSON NOT NULL COMMENT '计提、起付权重、门槛及历史补发依据',
create_time DATETIME NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT pk_probation_payments PRIMARY KEY (id),
CONSTRAINT uk_probation_payments_settlement_person_year UNIQUE (settlement_id, personnel_id, year),
CONSTRAINT uk_probation_payments_adjustment_order_id UNIQUE (adjustment_order_id),
CONSTRAINT fk_probation_payments_settlement_id FOREIGN KEY(settlement_id) REFERENCES monthly_settlements (id) ON DELETE CASCADE,
CONSTRAINT fk_probation_payments_adjustment_order_id FOREIGN KEY(adjustment_order_id) REFERENCES adjustment_orders (id) ON DELETE RESTRICT
)ENGINE=InnoDB CHARSET=utf8mb4 COMMENT='试用期年终及后续结清记录(工资生成事务内固化)' COLLATE utf8mb4_general_ci;
CREATE INDEX idx_probation_payments_personnel_id_year ON probation_payments (personnel_id, year);
INSERT INTO param_definitions (param_code, param_name, param_group, value_type, unit, dimension_type, value_min, value_max, description, sort_order, status) VALUES ('coefficient.personal.first', '个人户首日比例', '产品系数表', 'DECIMAL', '‰', 'PRODUCT_CATEGORY', '0', NULL, '按产品类别维护;未配置时沿用同日期的通用业务员参数。', 52, 1);
INSERT INTO param_definitions (param_code, param_name, param_group, value_type, unit, dimension_type, value_min, value_max, description, sort_order, status) VALUES ('coefficient.personal.start', '个人户线性阶段起始比例', '产品系数表', 'DECIMAL', '‰', 'PRODUCT_CATEGORY', '0', NULL, '按产品类别维护;未配置时沿用同日期的通用业务员参数。', 53, 1);
INSERT INTO param_definitions (param_code, param_name, param_group, value_type, unit, dimension_type, value_min, value_max, description, sort_order, status) VALUES ('coefficient.personal.slope', '个人户线性阶段日斜率', '产品系数表', 'DECIMAL', '‰/天', 'PRODUCT_CATEGORY', '0', NULL, '按产品类别维护;未配置时沿用同日期的通用业务员参数。', 54, 1);
INSERT INTO param_definitions (param_code, param_name, param_group, value_type, unit, dimension_type, value_min, value_max, description, sort_order, status) VALUES ('coefficient.personal.floor', '个人户超期比例', '产品系数表', 'DECIMAL', '‰', 'PRODUCT_CATEGORY', '0', NULL, '按产品类别维护;未配置时沿用同日期的通用业务员参数。', 55, 1);
INSERT INTO param_definitions (param_code, param_name, param_group, value_type, unit, dimension_type, value_min, value_max, description, sort_order, status) VALUES ('coefficient.personal.boundary', '个人户线性阶段截止天数', '产品系数表', 'INT', '天', 'PRODUCT_CATEGORY', '1', '3660', '按产品类别维护;未配置时沿用同日期的通用业务员参数。', 56, 1);
@@ -0,0 +1,5 @@
-- 新增模块只授予管理员,普通角色不会随版本扩张权限。
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) SELECT 'system:monitor:view','系统监控:查看',1,100,1 WHERE NOT EXISTS (SELECT 1 FROM permissions WHERE perm_code='system:monitor:view');
INSERT INTO permissions (perm_code,perm_name,perm_type,sort_order,status) SELECT 'system:monitor:export','系统监控:导出',2,100,1 WHERE NOT EXISTS (SELECT 1 FROM permissions WHERE perm_code='system:monitor:export');
UPDATE permissions p JOIN permissions parent ON parent.perm_code='system:monitor:view' SET p.parent_id=parent.id WHERE p.perm_code='system:monitor:export';
INSERT INTO role_permissions (role_id,permission_id) SELECT r.id,p.id FROM roles r JOIN permissions p ON p.perm_code IN ('system:monitor:view','system:monitor:export') WHERE r.role_code='admin' AND NOT EXISTS (SELECT 1 FROM role_permissions old WHERE old.role_id=r.id AND old.permission_id=p.id);
+8
View File
@@ -0,0 +1,8 @@
-- V26:仅允许没有个人权限覆盖的环境应用。
-- 执行前核对 SELECT COUNT(*) FROM user_permission_overrides 的结果为 0;
-- 存在覆盖时先整理为等效角色。Alembic 版本会强制核验,禁止静默忽略。
-- 旧表和历史工资制作人、月份锁定数据均保留。
UPDATE authorization_settings SET maker_user_id=NULL, revision=revision+1 WHERE id=1;
UPDATE permissions SET status=0 WHERE perm_code IN ('system:authorization:view','system:authorization:update');
UPDATE roles SET role_name='工资经办', description='按角色授权维护核算资料、计算工资及生成工资;月份锁定和实际经办人留痕继续生效' WHERE role_code='payroll_maker' AND role_name='工资制作人';
UPDATE roles SET description='管理业务基础资料,具体功能由角色权限配置决定' WHERE role_code='marketing_ops' AND description LIKE '%审批链%';
@@ -0,0 +1,13 @@
-- T+ 页面自动采集开关;新增独立表,不修改活动采集数据。
CREATE TABLE tplus_automation_configs (
id BIGINT UNSIGNED NOT NULL COMMENT '主键ID' AUTO_INCREMENT,
source_key VARCHAR(64) NOT NULL COMMENT '源连接身份摘要',
source_database VARCHAR(128) NOT NULL COMMENT '源账套',
enabled TINYINT NOT NULL COMMENT '自动采集是否开启:1开启0关闭',
version INTEGER NOT NULL COMMENT '设置版本号,防止并发覆盖',
updated_by BIGINT UNSIGNED NOT NULL COMMENT '最近修改账号ID',
create_time DATETIME NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME NOT NULL COMMENT '更新时间' DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT pk_tplus_automation_configs PRIMARY KEY (id),
CONSTRAINT uk_tplus_automation_configs_source_key UNIQUE (source_key)
)ENGINE=InnoDB CHARSET=utf8mb4 COMMENT='T+自动采集设置(不含连接凭据)' COLLATE utf8mb4_general_ci;
Binary file not shown.
+14
View File
@@ -0,0 +1,14 @@
-- 与九类白名单读取范围对应的原始行总量,仅用于进度统计,不写入源库。
SELECT entity_type, total_records
FROM (
SELECT 'personnel' AS entity_type, COUNT_BIG(*) AS total_records FROM dbo.AA_Person
UNION ALL SELECT 'products', COUNT_BIG(*) FROM dbo.AA_Inventory
UNION ALL SELECT 'customers', COUNT_BIG(*) FROM dbo.AA_Partner
UNION ALL SELECT 'businesses', COUNT_BIG(*) FROM dbo.SA_SaleOrder
UNION ALL SELECT 'business_items', COUNT_BIG(*) FROM dbo.SA_SaleOrder_b
UNION ALL SELECT 'shipments', COUNT_BIG(*) FROM dbo.SA_SaleDelivery
UNION ALL SELECT 'shipment_items', COUNT_BIG(*) FROM dbo.SA_SaleDelivery_b
UNION ALL SELECT 'receipts', COUNT_BIG(*) FROM dbo.ARAP_ReceivePayment
UNION ALL SELECT 'receipt_items', COUNT_BIG(*) FROM dbo.ARAP_ReceivePayment_b
) AS counts
WHERE entity_type IN :entities;