按 2026-11-02 需求补齐计划交付后端能力: - 角色授权:权限目录化,接口统一准入校验,未登记默认拒绝; 管理员判断改为按数据库角色重新判定,防止权限码持有者绕过 - 系统监控:单进程采集资源、请求与异常指标,分钟级聚合, 阈值配置化;敏感配置增加 repr 保护,Redis 密码 URL 转义 - 试用期计提:按回款日判定并写入快照,年度结清与调整单联动; 人员模型补试用期、离职日期与工资版本历史字段 - 计提模板:公式骨架受控,页面维护名称与参数绑定 - T+ 采集:自动化配置表与进度查询 内置角色禁停用保护对齐模块注释;核算规则版本提为常量并 补充批量核算失败堆栈日志。 影响范围:后端全部模块、数据库迁移 V22-V28 验证:uv run ruff check 通过;922 个单元测试全部通过; 集成测试因本机 MySQL 数据卷被其他容器锁定暂未运行
59 lines
3.5 KiB
SQL
59 lines
3.5 KiB
SQL
-- 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);
|