在准备环境前提交次全部更改。
This commit is contained in:
107
db/zqyy_app/migrations/20250715_create_admin_web_tables.sql
Normal file
107
db/zqyy_app/migrations/20250715_create_admin_web_tables.sql
Normal file
@@ -0,0 +1,107 @@
|
||||
-- =============================================================================
|
||||
-- 迁移脚本:创建 Web 管理后台所需的 4 张表
|
||||
-- 数据库:zqyy_app
|
||||
-- 关联需求:Requirements 1.1(用户认证)、4.1(任务队列)、5.1(调度任务)
|
||||
-- =============================================================================
|
||||
|
||||
BEGIN;
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- admin_users 表:管理后台操作员账户
|
||||
-- 每个 Operator 绑定一个门店(site_id),登录后 JWT 携带 site_id
|
||||
-- ---------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS admin_users (
|
||||
id SERIAL PRIMARY KEY,
|
||||
username VARCHAR(64) UNIQUE NOT NULL,
|
||||
password_hash VARCHAR(256) NOT NULL,
|
||||
display_name VARCHAR(128),
|
||||
site_id BIGINT NOT NULL, -- 绑定的门店 ID
|
||||
is_active BOOLEAN DEFAULT TRUE,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_admin_users_site
|
||||
ON admin_users(site_id);
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- task_queue 表:ETL 任务执行队列
|
||||
-- 状态流转:pending → running → success / failed / cancelled
|
||||
-- ---------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS task_queue (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
site_id BIGINT NOT NULL, -- 门店隔离
|
||||
config JSONB NOT NULL, -- 序列化的 TaskConfig
|
||||
status VARCHAR(20) NOT NULL DEFAULT 'pending',
|
||||
position INTEGER NOT NULL DEFAULT 0,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
started_at TIMESTAMPTZ,
|
||||
finished_at TIMESTAMPTZ,
|
||||
exit_code INTEGER,
|
||||
error_message TEXT
|
||||
);
|
||||
|
||||
-- 按状态查询(如获取所有 running 任务)
|
||||
CREATE INDEX IF NOT EXISTS idx_task_queue_status
|
||||
ON task_queue(status);
|
||||
|
||||
-- 按门店 + 位置查询待执行任务(部分索引,仅 pending 状态)
|
||||
CREATE INDEX IF NOT EXISTS idx_task_queue_site_position
|
||||
ON task_queue(site_id, position)
|
||||
WHERE status = 'pending';
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- task_execution_log 表:任务执行历史记录
|
||||
-- 每次执行(无论来自队列还是直接触发)都记录一条日志
|
||||
-- ---------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS task_execution_log (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
queue_id UUID REFERENCES task_queue(id),
|
||||
site_id BIGINT NOT NULL, -- 门店隔离
|
||||
task_codes TEXT[] NOT NULL,
|
||||
status VARCHAR(20) NOT NULL,
|
||||
started_at TIMESTAMPTZ NOT NULL,
|
||||
finished_at TIMESTAMPTZ,
|
||||
exit_code INTEGER,
|
||||
duration_ms INTEGER,
|
||||
command TEXT, -- 实际执行的 CLI 命令
|
||||
output_log TEXT, -- stdout 完整日志
|
||||
error_log TEXT, -- stderr 日志
|
||||
summary JSONB, -- 执行摘要
|
||||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- 按门店 + 开始时间倒序查询(执行历史列表)
|
||||
CREATE INDEX IF NOT EXISTS idx_execution_log_site_started
|
||||
ON task_execution_log(site_id, started_at DESC);
|
||||
|
||||
-- ---------------------------------------------------------------------------
|
||||
-- scheduled_tasks 表:定时调度任务
|
||||
-- 支持一次性 / 固定间隔 / 每日 / 每周 / Cron 五种调度类型
|
||||
-- ---------------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS scheduled_tasks (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
site_id BIGINT NOT NULL, -- 门店隔离
|
||||
name VARCHAR(256) NOT NULL,
|
||||
task_codes TEXT[] NOT NULL,
|
||||
task_config JSONB NOT NULL, -- 序列化的 TaskConfig
|
||||
schedule_config JSONB NOT NULL, -- 序列化的 ScheduleConfig
|
||||
enabled BOOLEAN DEFAULT TRUE,
|
||||
last_run_at TIMESTAMPTZ,
|
||||
next_run_at TIMESTAMPTZ,
|
||||
run_count INTEGER DEFAULT 0,
|
||||
last_status VARCHAR(20),
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
-- 按门店查询调度任务
|
||||
CREATE INDEX IF NOT EXISTS idx_scheduled_tasks_site
|
||||
ON scheduled_tasks(site_id);
|
||||
|
||||
-- 查询到期的已启用调度任务(部分索引)
|
||||
CREATE INDEX IF NOT EXISTS idx_scheduled_tasks_next_run
|
||||
ON scheduled_tasks(next_run_at)
|
||||
WHERE enabled = TRUE;
|
||||
|
||||
COMMIT;
|
||||
@@ -1,4 +1,4 @@
|
||||
-- =============================================================================
|
||||
-- =============================================================================
|
||||
-- zqyy_app 数据库 Schema DDL
|
||||
-- 业务应用数据库:用户管理、RBAC 权限、任务管理、审批流程
|
||||
-- 所有业务表包含 site_id 字段以支持多门店隔离(Requirements 13.1)
|
||||
|
||||
18
db/zqyy_app/seeds/admin_web_seed.sql
Normal file
18
db/zqyy_app/seeds/admin_web_seed.sql
Normal file
@@ -0,0 +1,18 @@
|
||||
-- =============================================================================
|
||||
-- 种子数据:Web 管理后台默认管理员账号
|
||||
-- 数据库:zqyy_app
|
||||
-- 关联需求:Requirements 1.1(用户认证)
|
||||
-- =============================================================================
|
||||
-- 默认密码:admin123(bcrypt hash,cost=12)
|
||||
-- 生产环境部署后务必立即修改密码
|
||||
-- =============================================================================
|
||||
|
||||
INSERT INTO admin_users (username, password_hash, display_name, site_id, is_active)
|
||||
VALUES (
|
||||
'admin',
|
||||
'$2b$12$2MTWlJKL0HTgHIkv5Rmpie2pQ9PkeJu0iciLbzPEpPcA94ZakIQzq',
|
||||
'默认管理员',
|
||||
1,
|
||||
TRUE
|
||||
)
|
||||
ON CONFLICT (username) DO NOTHING;
|
||||
Reference in New Issue
Block a user