在前后端开发联调前 的提交20260223

This commit is contained in:
Neo
2026-02-23 23:02:20 +08:00
parent 254ccb1e77
commit fafc95e64c
1142 changed files with 10366960 additions and 36957 deletions

View File

@@ -1,107 +0,0 @@
-- =============================================================================
-- 迁移脚本:创建 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;

View File

@@ -1,102 +0,0 @@
-- =============================================================================
-- zqyy_app 数据库 Schema DDL
-- 业务应用数据库用户管理、RBAC 权限、任务管理、审批流程
-- 所有业务表包含 site_id 字段以支持多门店隔离Requirements 13.1
-- =============================================================================
-- ---------------------------------------------------------------------------
-- users 表:用户账户(微信 OpenID、手机号、昵称
-- ---------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS users (
id BIGSERIAL PRIMARY KEY,
wx_openid TEXT UNIQUE,
mobile TEXT,
nickname TEXT,
status INT DEFAULT 1, -- 1=启用, 0=禁用
site_id BIGINT NOT NULL,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_users_site_id ON users (site_id);
CREATE INDEX IF NOT EXISTS idx_users_mobile ON users (mobile);
-- ---------------------------------------------------------------------------
-- roles 表:角色定义
-- ---------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS roles (
id SERIAL PRIMARY KEY,
name TEXT UNIQUE NOT NULL,
description TEXT,
site_id BIGINT NOT NULL,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_roles_site_id ON roles (site_id);
-- ---------------------------------------------------------------------------
-- permissions 表:权限定义(全局,不需要 site_id
-- ---------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS permissions (
id SERIAL PRIMARY KEY,
resource TEXT NOT NULL, -- 资源标识,如 'order', 'member'
action TEXT NOT NULL, -- 操作标识,如 'read', 'write', 'delete'
description TEXT,
UNIQUE (resource, action)
);
-- ---------------------------------------------------------------------------
-- user_roles 关联表:用户-角色多对多
-- ---------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS user_roles (
user_id BIGINT REFERENCES users(id) ON DELETE CASCADE,
role_id INT REFERENCES roles(id) ON DELETE CASCADE,
site_id BIGINT NOT NULL,
PRIMARY KEY (user_id, role_id)
);
CREATE INDEX IF NOT EXISTS idx_user_roles_site_id ON user_roles (site_id);
-- ---------------------------------------------------------------------------
-- role_permissions 关联表:角色-权限多对多
-- ---------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS role_permissions (
role_id INT REFERENCES roles(id) ON DELETE CASCADE,
permission_id INT REFERENCES permissions(id) ON DELETE CASCADE,
PRIMARY KEY (role_id, permission_id)
);
-- ---------------------------------------------------------------------------
-- tasks 表:任务管理(含审批流)
-- ---------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS tasks (
id BIGSERIAL PRIMARY KEY,
title TEXT NOT NULL,
description TEXT,
status TEXT DEFAULT 'pending', -- pending / approved / rejected / completed
assignee_id BIGINT REFERENCES users(id),
creator_id BIGINT REFERENCES users(id),
site_id BIGINT NOT NULL,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_tasks_site_id ON tasks (site_id);
CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks (status);
CREATE INDEX IF NOT EXISTS idx_tasks_assignee_id ON tasks (assignee_id);
-- ---------------------------------------------------------------------------
-- approvals 表:审批记录
-- ---------------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS approvals (
id BIGSERIAL PRIMARY KEY,
task_id BIGINT REFERENCES tasks(id) ON DELETE CASCADE,
approver_id BIGINT REFERENCES users(id),
status TEXT DEFAULT 'pending', -- pending / approved / rejected
comment TEXT,
site_id BIGINT NOT NULL,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_approvals_site_id ON approvals (site_id);
CREATE INDEX IF NOT EXISTS idx_approvals_task_id ON approvals (task_id);