sql更新+dev通用容器
This commit is contained in:
9
.devcontainer/external/.env.example
vendored
9
.devcontainer/external/.env.example
vendored
@@ -1,8 +1,13 @@
|
|||||||
K12STUDY_DB_HOST=host.docker.internal
|
# 另一台主机(公共服务机)地址
|
||||||
|
K12STUDY_DB_HOST=192.168.0.23
|
||||||
K12STUDY_DB_PORT=5432
|
K12STUDY_DB_PORT=5432
|
||||||
K12STUDY_DB_NAME=k12study
|
K12STUDY_DB_NAME=k12study
|
||||||
K12STUDY_DB_USER=k12study
|
K12STUDY_DB_USER=k12study
|
||||||
K12STUDY_DB_PASSWORD=k12study
|
K12STUDY_DB_PASSWORD=k12study
|
||||||
K12STUDY_REDIS_HOST=host.docker.internal
|
K12STUDY_REDIS_HOST=192.168.0.23
|
||||||
K12STUDY_REDIS_PORT=6379
|
K12STUDY_REDIS_PORT=6379
|
||||||
K12STUDY_REDIS_PASSWORD=
|
K12STUDY_REDIS_PASSWORD=
|
||||||
|
K12STUDY_REGISTRY_HOST=192.168.0.23
|
||||||
|
K12STUDY_REGISTRY_PORT=8848
|
||||||
|
K12STUDY_REGISTRY_GRPC_PORT=9848
|
||||||
|
K12STUDY_REGISTRY_RAFT_PORT=9849
|
||||||
|
|||||||
4
.devcontainer/external/docker-compose.yml
vendored
4
.devcontainer/external/docker-compose.yml
vendored
@@ -14,6 +14,10 @@ services:
|
|||||||
K12STUDY_REDIS_HOST: ${K12STUDY_REDIS_HOST:-host.docker.internal}
|
K12STUDY_REDIS_HOST: ${K12STUDY_REDIS_HOST:-host.docker.internal}
|
||||||
K12STUDY_REDIS_PORT: ${K12STUDY_REDIS_PORT:-6379}
|
K12STUDY_REDIS_PORT: ${K12STUDY_REDIS_PORT:-6379}
|
||||||
K12STUDY_REDIS_PASSWORD: ${K12STUDY_REDIS_PASSWORD:-}
|
K12STUDY_REDIS_PASSWORD: ${K12STUDY_REDIS_PASSWORD:-}
|
||||||
|
K12STUDY_REGISTRY_HOST: ${K12STUDY_REGISTRY_HOST:-host.docker.internal}
|
||||||
|
K12STUDY_REGISTRY_PORT: ${K12STUDY_REGISTRY_PORT:-8848}
|
||||||
|
K12STUDY_REGISTRY_GRPC_PORT: ${K12STUDY_REGISTRY_GRPC_PORT:-9848}
|
||||||
|
K12STUDY_REGISTRY_RAFT_PORT: ${K12STUDY_REGISTRY_RAFT_PORT:-9849}
|
||||||
PYTHONUNBUFFERED: "1"
|
PYTHONUNBUFFERED: "1"
|
||||||
extra_hosts:
|
extra_hosts:
|
||||||
- "host.docker.internal:host-gateway"
|
- "host.docker.internal:host-gateway"
|
||||||
|
|||||||
68
docker/dev-common/docker-compose.public-services.yml
Normal file
68
docker/dev-common/docker-compose.public-services.yml
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
services:
|
||||||
|
postgres:
|
||||||
|
image: postgres:18.3
|
||||||
|
container_name: k12study-dev-postgres
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
POSTGRES_DB: ${K12STUDY_DB_NAME:-k12study}
|
||||||
|
POSTGRES_USER: ${K12STUDY_DB_USER:-k12study}
|
||||||
|
POSTGRES_PASSWORD: ${K12STUDY_DB_PASSWORD:-k12study}
|
||||||
|
PGDATA: /var/lib/postgresql/18/docker
|
||||||
|
TZ: ${TZ:-Asia/Shanghai}
|
||||||
|
ports:
|
||||||
|
- "${K12STUDY_DB_PORT:-5432}:5432"
|
||||||
|
volumes:
|
||||||
|
- ${K12STUDY_RUN_DIR:-./runtime}/postgres/pg18:/var/lib/postgresql
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "pg_isready -U ${K12STUDY_DB_USER:-k12study} -d ${K12STUDY_DB_NAME:-k12study}"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 10
|
||||||
|
networks:
|
||||||
|
- k12study-dev-net
|
||||||
|
|
||||||
|
redis:
|
||||||
|
image: redis:7
|
||||||
|
container_name: k12study-dev-redis
|
||||||
|
restart: unless-stopped
|
||||||
|
command: redis-server --appendonly yes
|
||||||
|
ports:
|
||||||
|
- "${K12STUDY_REDIS_PORT:-6379}:6379"
|
||||||
|
volumes:
|
||||||
|
- ${K12STUDY_RUN_DIR:-./runtime}/redis/data:/data
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "redis-cli", "ping"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 10
|
||||||
|
networks:
|
||||||
|
- k12study-dev-net
|
||||||
|
|
||||||
|
nacos:
|
||||||
|
image: nacos/nacos-server:v3.2.1-2026.04.03
|
||||||
|
container_name: k12study-dev-nacos
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
MODE: standalone
|
||||||
|
NACOS_AUTH_ENABLE: "false"
|
||||||
|
NACOS_AUTH_TOKEN: ${NACOS_AUTH_TOKEN:-azEyc3R1ZHktbmFjb3MtZGV2LXRva2VuLTIwMjY=}
|
||||||
|
NACOS_AUTH_IDENTITY_KEY: ${NACOS_AUTH_IDENTITY_KEY:-serverIdentity}
|
||||||
|
NACOS_AUTH_IDENTITY_VALUE: ${NACOS_AUTH_IDENTITY_VALUE:-security}
|
||||||
|
TZ: ${TZ:-Asia/Shanghai}
|
||||||
|
JVM_XMS: 256m
|
||||||
|
JVM_XMX: 512m
|
||||||
|
JVM_XMN: 128m
|
||||||
|
ports:
|
||||||
|
- "${K12STUDY_REGISTRY_PORT:-8848}:8848"
|
||||||
|
- "${K12STUDY_REGISTRY_GRPC_PORT:-9848}:9848"
|
||||||
|
- "${K12STUDY_REGISTRY_RAFT_PORT:-9849}:9849"
|
||||||
|
volumes:
|
||||||
|
- ${K12STUDY_RUN_DIR:-./runtime}/nacos/logs:/home/nacos/logs
|
||||||
|
- ${K12STUDY_RUN_DIR:-./runtime}/nacos/data:/home/nacos/data
|
||||||
|
networks:
|
||||||
|
- k12study-dev-net
|
||||||
|
|
||||||
|
networks:
|
||||||
|
k12study-dev-net:
|
||||||
|
name: ${K12STUDY_DOCKER_NET:-k12study-dev-net}
|
||||||
|
driver: bridge
|
||||||
@@ -1,17 +1,18 @@
|
|||||||
services:
|
services:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:16
|
image: postgres:18.3
|
||||||
container_name: k12study-postgres
|
container_name: k12study-postgres
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
POSTGRES_DB: k12study
|
POSTGRES_DB: k12study
|
||||||
POSTGRES_USER: k12study
|
POSTGRES_USER: k12study
|
||||||
POSTGRES_PASSWORD: k12study
|
POSTGRES_PASSWORD: k12study
|
||||||
|
PGDATA: /var/lib/postgresql/18/docker
|
||||||
ports:
|
ports:
|
||||||
- "5432:5432"
|
- "5432:5432"
|
||||||
volumes:
|
volumes:
|
||||||
- postgres-data:/var/lib/postgresql/data
|
- postgres-data:/var/lib/postgresql
|
||||||
- ./init/pg:/docker-entrypoint-initdb.d
|
- ../../init/pg:/docker-entrypoint-initdb.d
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: redis:7
|
image: redis:7
|
||||||
@@ -90,8 +90,7 @@
|
|||||||
- `SysRole`
|
- `SysRole`
|
||||||
- `SysPermission`
|
- `SysPermission`
|
||||||
- 所有租户级业务主表统一预留字段:
|
- 所有租户级业务主表统一预留字段:
|
||||||
- `province_code`
|
- `adcode`
|
||||||
- `area_code`
|
|
||||||
- `tenant_id` 或 `school_id`
|
- `tenant_id` 或 `school_id`
|
||||||
- `tenant_path`
|
- `tenant_path`
|
||||||
- `dept_id`
|
- `dept_id`
|
||||||
@@ -196,7 +195,7 @@
|
|||||||
- 区域树可查询
|
- 区域树可查询
|
||||||
- 学校租户树可查询
|
- 学校租户树可查询
|
||||||
- 部门树可挂接到学校租户下
|
- 部门树可挂接到学校租户下
|
||||||
- 带不同 `province_code / area_code` 的数据写入与查询能走统一路由键封装
|
- 带不同 `adcode` 的数据写入与查询能走统一路由键封装
|
||||||
|
|
||||||
## Assumptions
|
## Assumptions
|
||||||
|
|
||||||
|
|||||||
@@ -3,21 +3,30 @@ CREATE TABLE IF NOT EXISTS ai.tb_ai_model_config (
|
|||||||
model_name VARCHAR(128) NOT NULL,
|
model_name VARCHAR(128) NOT NULL,
|
||||||
provider VARCHAR(64) NOT NULL,
|
provider VARCHAR(64) NOT NULL,
|
||||||
endpoint VARCHAR(255),
|
endpoint VARCHAR(255),
|
||||||
province_code VARCHAR(12),
|
adcode VARCHAR(12),
|
||||||
area_code VARCHAR(12),
|
|
||||||
tenant_id VARCHAR(64),
|
tenant_id VARCHAR(64),
|
||||||
tenant_path VARCHAR(255),
|
tenant_path VARCHAR(255),
|
||||||
dept_id VARCHAR(64),
|
dept_id VARCHAR(64),
|
||||||
dept_path VARCHAR(255),
|
dept_path VARCHAR(255),
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||||
);
|
);
|
||||||
|
COMMENT ON TABLE ai.tb_ai_model_config IS 'AI模型配置表';
|
||||||
|
COMMENT ON COLUMN ai.tb_ai_model_config.model_id IS '模型ID';
|
||||||
|
COMMENT ON COLUMN ai.tb_ai_model_config.model_name IS '模型名称';
|
||||||
|
COMMENT ON COLUMN ai.tb_ai_model_config.provider IS '模型提供商';
|
||||||
|
COMMENT ON COLUMN ai.tb_ai_model_config.endpoint IS '模型服务地址';
|
||||||
|
COMMENT ON COLUMN ai.tb_ai_model_config.adcode IS '行政区划编码';
|
||||||
|
COMMENT ON COLUMN ai.tb_ai_model_config.tenant_id IS '租户ID';
|
||||||
|
COMMENT ON COLUMN ai.tb_ai_model_config.tenant_path IS '租户路径';
|
||||||
|
COMMENT ON COLUMN ai.tb_ai_model_config.dept_id IS '部门ID';
|
||||||
|
COMMENT ON COLUMN ai.tb_ai_model_config.dept_path IS '部门路径';
|
||||||
|
COMMENT ON COLUMN ai.tb_ai_model_config.created_at IS '创建时间';
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS ai.tb_ai_task_log (
|
CREATE TABLE IF NOT EXISTS ai.tb_ai_task_log (
|
||||||
task_id VARCHAR(64) PRIMARY KEY,
|
task_id VARCHAR(64) PRIMARY KEY,
|
||||||
task_type VARCHAR(64) NOT NULL,
|
task_type VARCHAR(64) NOT NULL,
|
||||||
task_status VARCHAR(32) NOT NULL,
|
task_status VARCHAR(32) NOT NULL,
|
||||||
province_code VARCHAR(12),
|
adcode VARCHAR(12),
|
||||||
area_code VARCHAR(12),
|
|
||||||
tenant_id VARCHAR(64),
|
tenant_id VARCHAR(64),
|
||||||
tenant_path VARCHAR(255),
|
tenant_path VARCHAR(255),
|
||||||
dept_id VARCHAR(64),
|
dept_id VARCHAR(64),
|
||||||
@@ -25,3 +34,14 @@ CREATE TABLE IF NOT EXISTS ai.tb_ai_task_log (
|
|||||||
payload_json TEXT,
|
payload_json TEXT,
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||||
);
|
);
|
||||||
|
COMMENT ON TABLE ai.tb_ai_task_log IS 'AI任务日志表';
|
||||||
|
COMMENT ON COLUMN ai.tb_ai_task_log.task_id IS '任务ID';
|
||||||
|
COMMENT ON COLUMN ai.tb_ai_task_log.task_type IS '任务类型';
|
||||||
|
COMMENT ON COLUMN ai.tb_ai_task_log.task_status IS '任务状态';
|
||||||
|
COMMENT ON COLUMN ai.tb_ai_task_log.adcode IS '行政区划编码';
|
||||||
|
COMMENT ON COLUMN ai.tb_ai_task_log.tenant_id IS '租户ID';
|
||||||
|
COMMENT ON COLUMN ai.tb_ai_task_log.tenant_path IS '租户路径';
|
||||||
|
COMMENT ON COLUMN ai.tb_ai_task_log.dept_id IS '部门ID';
|
||||||
|
COMMENT ON COLUMN ai.tb_ai_task_log.dept_path IS '部门路径';
|
||||||
|
COMMENT ON COLUMN ai.tb_ai_task_log.payload_json IS '任务载荷JSON';
|
||||||
|
COMMENT ON COLUMN ai.tb_ai_task_log.created_at IS '创建时间';
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
INSERT INTO ai.tb_ai_model_config (
|
INSERT INTO ai.tb_ai_model_config (
|
||||||
model_id, model_name, provider, endpoint, province_code, area_code, tenant_id, tenant_path, dept_id, dept_path
|
model_id, model_name, provider, endpoint, adcode, tenant_id, tenant_path, dept_id, dept_path
|
||||||
) VALUES (
|
) VALUES (
|
||||||
'MODEL-MOCK-001', 'mock-python-ai', 'local', 'http://localhost:9000', '330000', '330100', 'SCH-HQ', '/SCH-HQ/', 'DEPT-HQ-ADMIN', '/DEPT-HQ/DEPT-HQ-ADMIN/'
|
'MODEL-MOCK-001', 'mock-python-ai', 'local', 'http://localhost:9000', '330100', 'SCH-HQ', '/SCH-HQ/', 'DEPT-HQ-ADMIN', '/DEPT-HQ/DEPT-HQ-ADMIN/'
|
||||||
)
|
)
|
||||||
ON CONFLICT (model_id) DO NOTHING;
|
ON CONFLICT (model_id) DO NOTHING;
|
||||||
|
|||||||
@@ -2,8 +2,7 @@ CREATE TABLE IF NOT EXISTS auth.tb_auth_refresh_token (
|
|||||||
token_id VARCHAR(64) PRIMARY KEY,
|
token_id VARCHAR(64) PRIMARY KEY,
|
||||||
user_id VARCHAR(64) NOT NULL,
|
user_id VARCHAR(64) NOT NULL,
|
||||||
username VARCHAR(64) NOT NULL,
|
username VARCHAR(64) NOT NULL,
|
||||||
province_code VARCHAR(12),
|
adcode VARCHAR(12),
|
||||||
area_code VARCHAR(12),
|
|
||||||
tenant_id VARCHAR(64),
|
tenant_id VARCHAR(64),
|
||||||
tenant_path VARCHAR(255),
|
tenant_path VARCHAR(255),
|
||||||
dept_id VARCHAR(64),
|
dept_id VARCHAR(64),
|
||||||
@@ -13,13 +12,25 @@ CREATE TABLE IF NOT EXISTS auth.tb_auth_refresh_token (
|
|||||||
revoked BOOLEAN NOT NULL DEFAULT FALSE,
|
revoked BOOLEAN NOT NULL DEFAULT FALSE,
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||||
);
|
);
|
||||||
|
COMMENT ON TABLE auth.tb_auth_refresh_token IS '认证刷新令牌表';
|
||||||
|
COMMENT ON COLUMN auth.tb_auth_refresh_token.token_id IS '令牌ID';
|
||||||
|
COMMENT ON COLUMN auth.tb_auth_refresh_token.user_id IS '用户ID';
|
||||||
|
COMMENT ON COLUMN auth.tb_auth_refresh_token.username IS '用户名';
|
||||||
|
COMMENT ON COLUMN auth.tb_auth_refresh_token.adcode IS '行政区划编码';
|
||||||
|
COMMENT ON COLUMN auth.tb_auth_refresh_token.tenant_id IS '租户ID';
|
||||||
|
COMMENT ON COLUMN auth.tb_auth_refresh_token.tenant_path IS '租户路径';
|
||||||
|
COMMENT ON COLUMN auth.tb_auth_refresh_token.dept_id IS '部门ID';
|
||||||
|
COMMENT ON COLUMN auth.tb_auth_refresh_token.dept_path IS '部门路径';
|
||||||
|
COMMENT ON COLUMN auth.tb_auth_refresh_token.refresh_token IS '刷新令牌';
|
||||||
|
COMMENT ON COLUMN auth.tb_auth_refresh_token.expire_at IS '过期时间';
|
||||||
|
COMMENT ON COLUMN auth.tb_auth_refresh_token.revoked IS '是否撤销';
|
||||||
|
COMMENT ON COLUMN auth.tb_auth_refresh_token.created_at IS '创建时间';
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS auth.tb_auth_login_audit (
|
CREATE TABLE IF NOT EXISTS auth.tb_auth_login_audit (
|
||||||
audit_id VARCHAR(64) PRIMARY KEY,
|
audit_id VARCHAR(64) PRIMARY KEY,
|
||||||
user_id VARCHAR(64),
|
user_id VARCHAR(64),
|
||||||
username VARCHAR(64) NOT NULL,
|
username VARCHAR(64) NOT NULL,
|
||||||
province_code VARCHAR(12),
|
adcode VARCHAR(12),
|
||||||
area_code VARCHAR(12),
|
|
||||||
tenant_id VARCHAR(64),
|
tenant_id VARCHAR(64),
|
||||||
tenant_path VARCHAR(255),
|
tenant_path VARCHAR(255),
|
||||||
dept_id VARCHAR(64),
|
dept_id VARCHAR(64),
|
||||||
@@ -28,6 +39,18 @@ CREATE TABLE IF NOT EXISTS auth.tb_auth_login_audit (
|
|||||||
login_status VARCHAR(32) NOT NULL,
|
login_status VARCHAR(32) NOT NULL,
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||||
);
|
);
|
||||||
|
COMMENT ON TABLE auth.tb_auth_login_audit IS '登录审计日志表';
|
||||||
|
COMMENT ON COLUMN auth.tb_auth_login_audit.audit_id IS '审计ID';
|
||||||
|
COMMENT ON COLUMN auth.tb_auth_login_audit.user_id IS '用户ID';
|
||||||
|
COMMENT ON COLUMN auth.tb_auth_login_audit.username IS '用户名';
|
||||||
|
COMMENT ON COLUMN auth.tb_auth_login_audit.adcode IS '行政区划编码';
|
||||||
|
COMMENT ON COLUMN auth.tb_auth_login_audit.tenant_id IS '租户ID';
|
||||||
|
COMMENT ON COLUMN auth.tb_auth_login_audit.tenant_path IS '租户路径';
|
||||||
|
COMMENT ON COLUMN auth.tb_auth_login_audit.dept_id IS '部门ID';
|
||||||
|
COMMENT ON COLUMN auth.tb_auth_login_audit.dept_path IS '部门路径';
|
||||||
|
COMMENT ON COLUMN auth.tb_auth_login_audit.login_ip IS '登录IP';
|
||||||
|
COMMENT ON COLUMN auth.tb_auth_login_audit.login_status IS '登录状态';
|
||||||
|
COMMENT ON COLUMN auth.tb_auth_login_audit.created_at IS '创建时间';
|
||||||
|
|
||||||
CREATE INDEX IF NOT EXISTS idx_auth_refresh_token_user ON auth.tb_auth_refresh_token(user_id);
|
CREATE INDEX IF NOT EXISTS idx_auth_refresh_token_user ON auth.tb_auth_refresh_token(user_id);
|
||||||
CREATE INDEX IF NOT EXISTS idx_auth_login_audit_tenant ON auth.tb_auth_login_audit(tenant_id, created_at DESC);
|
CREATE INDEX IF NOT EXISTS idx_auth_login_audit_tenant ON auth.tb_auth_login_audit(tenant_id, created_at DESC);
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
INSERT INTO auth.tb_auth_login_audit (
|
INSERT INTO auth.tb_auth_login_audit (
|
||||||
audit_id, user_id, username, province_code, area_code, tenant_id, tenant_path, dept_id, dept_path, login_ip, login_status
|
audit_id, user_id, username, adcode, tenant_id, tenant_path, dept_id, dept_path, login_ip, login_status
|
||||||
) VALUES (
|
) VALUES (
|
||||||
'audit-bootstrap-001', 'U10001', 'admin', '330000', '330100', 'SCH-HQ', '/SCH-HQ/', 'DEPT-HQ-ADMIN', '/DEPT-HQ/DEPT-HQ-ADMIN/', '127.0.0.1', 'BOOTSTRAP'
|
'audit-bootstrap-001', 'U10001', 'admin', '330100', 'SCH-HQ', '/SCH-HQ/', 'DEPT-HQ-ADMIN', '/DEPT-HQ/DEPT-HQ-ADMIN/', '127.0.0.1', 'BOOTSTRAP'
|
||||||
)
|
)
|
||||||
ON CONFLICT (audit_id) DO NOTHING;
|
ON CONFLICT (audit_id) DO NOTHING;
|
||||||
|
|||||||
@@ -4,12 +4,20 @@ CREATE TABLE IF NOT EXISTS upms.tb_sys_tenant (
|
|||||||
parent_tenant_id VARCHAR(64),
|
parent_tenant_id VARCHAR(64),
|
||||||
tenant_name VARCHAR(128) NOT NULL,
|
tenant_name VARCHAR(128) NOT NULL,
|
||||||
tenant_type VARCHAR(32) NOT NULL,
|
tenant_type VARCHAR(32) NOT NULL,
|
||||||
province_code VARCHAR(12) NOT NULL,
|
adcode VARCHAR(12) NOT NULL,
|
||||||
area_code VARCHAR(12) NOT NULL,
|
|
||||||
tenant_path VARCHAR(255) NOT NULL,
|
tenant_path VARCHAR(255) NOT NULL,
|
||||||
status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE',
|
status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE',
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||||
);
|
);
|
||||||
|
COMMENT ON TABLE upms.tb_sys_tenant IS '学校租户表';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_tenant.tenant_id IS '租户ID';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_tenant.parent_tenant_id IS '父租户ID';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_tenant.tenant_name IS '租户名称';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_tenant.tenant_type IS '租户类型';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_tenant.adcode IS '行政区划编码';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_tenant.tenant_path IS '租户路径';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_tenant.status IS '租户状态';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_tenant.created_at IS '创建时间';
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS upms.tb_sys_dept (
|
CREATE TABLE IF NOT EXISTS upms.tb_sys_dept (
|
||||||
dept_id VARCHAR(64) PRIMARY KEY,
|
dept_id VARCHAR(64) PRIMARY KEY,
|
||||||
@@ -17,20 +25,28 @@ CREATE TABLE IF NOT EXISTS upms.tb_sys_dept (
|
|||||||
tenant_id VARCHAR(64) NOT NULL,
|
tenant_id VARCHAR(64) NOT NULL,
|
||||||
dept_name VARCHAR(128) NOT NULL,
|
dept_name VARCHAR(128) NOT NULL,
|
||||||
dept_type VARCHAR(32) NOT NULL,
|
dept_type VARCHAR(32) NOT NULL,
|
||||||
province_code VARCHAR(12) NOT NULL,
|
adcode VARCHAR(12) NOT NULL,
|
||||||
area_code VARCHAR(12) NOT NULL,
|
|
||||||
tenant_path VARCHAR(255) NOT NULL,
|
tenant_path VARCHAR(255) NOT NULL,
|
||||||
dept_path VARCHAR(255) NOT NULL,
|
dept_path VARCHAR(255) NOT NULL,
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||||
);
|
);
|
||||||
|
COMMENT ON TABLE upms.tb_sys_dept IS '组织部门表';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_dept.dept_id IS '部门ID';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_dept.parent_dept_id IS '父部门ID';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_dept.tenant_id IS '租户ID';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_dept.dept_name IS '部门名称';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_dept.dept_type IS '部门类型';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_dept.adcode IS '行政区划编码';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_dept.tenant_path IS '租户路径';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_dept.dept_path IS '部门路径';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_dept.created_at IS '创建时间';
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS upms.tb_sys_user (
|
CREATE TABLE IF NOT EXISTS upms.tb_sys_user (
|
||||||
user_id VARCHAR(64) PRIMARY KEY,
|
user_id VARCHAR(64) PRIMARY KEY,
|
||||||
username VARCHAR(64) UNIQUE NOT NULL,
|
username VARCHAR(64) UNIQUE NOT NULL,
|
||||||
display_name VARCHAR(128) NOT NULL,
|
display_name VARCHAR(128) NOT NULL,
|
||||||
password_hash VARCHAR(255) NOT NULL,
|
password_hash VARCHAR(255) NOT NULL,
|
||||||
province_code VARCHAR(12) NOT NULL,
|
adcode VARCHAR(12) NOT NULL,
|
||||||
area_code VARCHAR(12) NOT NULL,
|
|
||||||
tenant_id VARCHAR(64) NOT NULL,
|
tenant_id VARCHAR(64) NOT NULL,
|
||||||
tenant_path VARCHAR(255) NOT NULL,
|
tenant_path VARCHAR(255) NOT NULL,
|
||||||
dept_id VARCHAR(64) NOT NULL,
|
dept_id VARCHAR(64) NOT NULL,
|
||||||
@@ -38,34 +54,64 @@ CREATE TABLE IF NOT EXISTS upms.tb_sys_user (
|
|||||||
status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE',
|
status VARCHAR(32) NOT NULL DEFAULT 'ACTIVE',
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||||
);
|
);
|
||||||
|
COMMENT ON TABLE upms.tb_sys_user IS '系统用户表';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_user.user_id IS '用户ID';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_user.username IS '用户名';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_user.display_name IS '显示名称';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_user.password_hash IS '密码哈希';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_user.adcode IS '行政区划编码';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_user.tenant_id IS '租户ID';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_user.tenant_path IS '租户路径';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_user.dept_id IS '部门ID';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_user.dept_path IS '部门路径';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_user.status IS '用户状态';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_user.created_at IS '创建时间';
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS upms.tb_sys_role (
|
CREATE TABLE IF NOT EXISTS upms.tb_sys_role (
|
||||||
role_id VARCHAR(64) PRIMARY KEY,
|
role_id VARCHAR(64) PRIMARY KEY,
|
||||||
role_code VARCHAR(64) UNIQUE NOT NULL,
|
role_code VARCHAR(64) UNIQUE NOT NULL,
|
||||||
role_name VARCHAR(128) NOT NULL,
|
role_name VARCHAR(128) NOT NULL,
|
||||||
province_code VARCHAR(12) NOT NULL,
|
adcode VARCHAR(12) NOT NULL,
|
||||||
area_code VARCHAR(12) NOT NULL,
|
|
||||||
tenant_id VARCHAR(64) NOT NULL,
|
tenant_id VARCHAR(64) NOT NULL,
|
||||||
tenant_path VARCHAR(255) NOT NULL,
|
tenant_path VARCHAR(255) NOT NULL,
|
||||||
dept_id VARCHAR(64),
|
dept_id VARCHAR(64),
|
||||||
dept_path VARCHAR(255),
|
dept_path VARCHAR(255),
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||||
);
|
);
|
||||||
|
COMMENT ON TABLE upms.tb_sys_role IS '角色表';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_role.role_id IS '角色ID';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_role.role_code IS '角色编码';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_role.role_name IS '角色名称';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_role.adcode IS '行政区划编码';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_role.tenant_id IS '租户ID';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_role.tenant_path IS '租户路径';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_role.dept_id IS '部门ID';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_role.dept_path IS '部门路径';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_role.created_at IS '创建时间';
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS upms.tb_sys_permission (
|
CREATE TABLE IF NOT EXISTS upms.tb_sys_permission (
|
||||||
permission_id VARCHAR(64) PRIMARY KEY,
|
permission_id VARCHAR(64) PRIMARY KEY,
|
||||||
permission_code VARCHAR(128) UNIQUE NOT NULL,
|
permission_code VARCHAR(128) UNIQUE NOT NULL,
|
||||||
permission_name VARCHAR(128) NOT NULL,
|
permission_name VARCHAR(128) NOT NULL,
|
||||||
province_code VARCHAR(12) NOT NULL,
|
adcode VARCHAR(12) NOT NULL,
|
||||||
area_code VARCHAR(12) NOT NULL,
|
|
||||||
tenant_id VARCHAR(64) NOT NULL,
|
tenant_id VARCHAR(64) NOT NULL,
|
||||||
tenant_path VARCHAR(255) NOT NULL,
|
tenant_path VARCHAR(255) NOT NULL,
|
||||||
dept_id VARCHAR(64),
|
dept_id VARCHAR(64),
|
||||||
dept_path VARCHAR(255),
|
dept_path VARCHAR(255),
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||||
);
|
);
|
||||||
|
COMMENT ON TABLE upms.tb_sys_permission IS '权限表';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_permission.permission_id IS '权限ID';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_permission.permission_code IS '权限编码';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_permission.permission_name IS '权限名称';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_permission.adcode IS '行政区划编码';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_permission.tenant_id IS '租户ID';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_permission.tenant_path IS '租户路径';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_permission.dept_id IS '部门ID';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_permission.dept_path IS '部门路径';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_permission.created_at IS '创建时间';
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS upms.tb_sys_menu_route (
|
CREATE TABLE IF NOT EXISTS upms.tb_sys_menu (
|
||||||
route_id VARCHAR(64) PRIMARY KEY,
|
route_id VARCHAR(64) PRIMARY KEY,
|
||||||
parent_route_id VARCHAR(64),
|
parent_route_id VARCHAR(64),
|
||||||
route_path VARCHAR(255) NOT NULL,
|
route_path VARCHAR(255) NOT NULL,
|
||||||
@@ -76,16 +122,32 @@ CREATE TABLE IF NOT EXISTS upms.tb_sys_menu_route (
|
|||||||
icon VARCHAR(64),
|
icon VARCHAR(64),
|
||||||
permission_code VARCHAR(128),
|
permission_code VARCHAR(128),
|
||||||
hidden BOOLEAN NOT NULL DEFAULT FALSE,
|
hidden BOOLEAN NOT NULL DEFAULT FALSE,
|
||||||
province_code VARCHAR(12) NOT NULL,
|
adcode VARCHAR(12) NOT NULL,
|
||||||
area_code VARCHAR(12) NOT NULL,
|
|
||||||
tenant_id VARCHAR(64) NOT NULL,
|
tenant_id VARCHAR(64) NOT NULL,
|
||||||
tenant_path VARCHAR(255) NOT NULL,
|
tenant_path VARCHAR(255) NOT NULL,
|
||||||
dept_id VARCHAR(64),
|
dept_id VARCHAR(64),
|
||||||
dept_path VARCHAR(255),
|
dept_path VARCHAR(255),
|
||||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||||
);
|
);
|
||||||
|
COMMENT ON TABLE upms.tb_sys_menu IS '菜单表';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_menu.route_id IS '路由ID';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_menu.parent_route_id IS '父路由ID';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_menu.route_path IS '路由路径';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_menu.route_name IS '路由名称';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_menu.component_key IS '组件标识';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_menu.layout_type IS '布局类型';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_menu.title IS '菜单标题';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_menu.icon IS '图标';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_menu.permission_code IS '权限编码';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_menu.hidden IS '是否隐藏';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_menu.adcode IS '行政区划编码';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_menu.tenant_id IS '租户ID';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_menu.tenant_path IS '租户路径';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_menu.dept_id IS '部门ID';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_menu.dept_path IS '部门路径';
|
||||||
|
COMMENT ON COLUMN upms.tb_sys_menu.created_at IS '创建时间';
|
||||||
|
|
||||||
CREATE INDEX IF NOT EXISTS idx_sys_tenant_area ON upms.tb_sys_tenant(province_code, area_code);
|
CREATE INDEX IF NOT EXISTS idx_sys_tenant_adcode ON upms.tb_sys_tenant(adcode);
|
||||||
CREATE INDEX IF NOT EXISTS idx_dept_tenant ON upms.tb_sys_dept(tenant_id, dept_path);
|
CREATE INDEX IF NOT EXISTS idx_dept_tenant ON upms.tb_sys_dept(tenant_id, dept_path);
|
||||||
CREATE INDEX IF NOT EXISTS idx_user_tenant ON upms.tb_sys_user(tenant_id, dept_id);
|
CREATE INDEX IF NOT EXISTS idx_user_tenant ON upms.tb_sys_user(tenant_id, dept_id);
|
||||||
CREATE INDEX IF NOT EXISTS idx_route_tenant ON upms.tb_sys_menu_route(tenant_id, route_path);
|
CREATE INDEX IF NOT EXISTS idx_route_tenant ON upms.tb_sys_menu(tenant_id, route_path);
|
||||||
|
|||||||
@@ -1,43 +1,43 @@
|
|||||||
INSERT INTO upms.tb_sys_tenant (
|
INSERT INTO upms.tb_sys_tenant (
|
||||||
tenant_id, parent_tenant_id, tenant_name, tenant_type, province_code, area_code, tenant_path
|
tenant_id, parent_tenant_id, tenant_name, tenant_type, adcode, tenant_path
|
||||||
) VALUES
|
) VALUES
|
||||||
('SCH-HQ', NULL, 'K12Study 总校', 'HEAD_SCHOOL', '330000', '330100', '/SCH-HQ/'),
|
('SCH-HQ', NULL, 'K12Study 总校', 'HEAD_SCHOOL', '330100', '/SCH-HQ/'),
|
||||||
('SCH-ZJ-HZ-01', 'SCH-HQ', '杭州分校', 'CITY_SCHOOL', '330000', '330100', '/SCH-HQ/SCH-ZJ-HZ-01/')
|
('SCH-ZJ-HZ-01', 'SCH-HQ', '杭州分校', 'CITY_SCHOOL', '330100', '/SCH-HQ/SCH-ZJ-HZ-01/')
|
||||||
ON CONFLICT (tenant_id) DO NOTHING;
|
ON CONFLICT (tenant_id) DO NOTHING;
|
||||||
|
|
||||||
INSERT INTO upms.tb_sys_dept (
|
INSERT INTO upms.tb_sys_dept (
|
||||||
dept_id, parent_dept_id, tenant_id, dept_name, dept_type, province_code, area_code, tenant_path, dept_path
|
dept_id, parent_dept_id, tenant_id, dept_name, dept_type, adcode, tenant_path, dept_path
|
||||||
) VALUES
|
) VALUES
|
||||||
('DEPT-HQ', NULL, 'SCH-HQ', '总校教学部', 'GRADE', '330000', '330100', '/SCH-HQ/', '/DEPT-HQ/'),
|
('DEPT-HQ', NULL, 'SCH-HQ', '总校教学部', 'GRADE', '330100', '/SCH-HQ/', '/DEPT-HQ/'),
|
||||||
('DEPT-HQ-MATH', 'DEPT-HQ', 'SCH-HQ', '数学学科组', 'SUBJECT', '330000', '330100', '/SCH-HQ/', '/DEPT-HQ/DEPT-HQ-MATH/'),
|
('DEPT-HQ-MATH', 'DEPT-HQ', 'SCH-HQ', '数学学科组', 'SUBJECT', '330100', '/SCH-HQ/', '/DEPT-HQ/DEPT-HQ-MATH/'),
|
||||||
('DEPT-HQ-ADMIN', 'DEPT-HQ', 'SCH-HQ', '总校运营组', 'ADMIN', '330000', '330100', '/SCH-HQ/', '/DEPT-HQ/DEPT-HQ-ADMIN/')
|
('DEPT-HQ-ADMIN', 'DEPT-HQ', 'SCH-HQ', '总校运营组', 'ADMIN', '330100', '/SCH-HQ/', '/DEPT-HQ/DEPT-HQ-ADMIN/')
|
||||||
ON CONFLICT (dept_id) DO NOTHING;
|
ON CONFLICT (dept_id) DO NOTHING;
|
||||||
|
|
||||||
INSERT INTO upms.tb_sys_user (
|
INSERT INTO upms.tb_sys_user (
|
||||||
user_id, username, display_name, password_hash, province_code, area_code, tenant_id, tenant_path, dept_id, dept_path
|
user_id, username, display_name, password_hash, adcode, tenant_id, tenant_path, dept_id, dept_path
|
||||||
) VALUES
|
) VALUES
|
||||||
('U10001', 'admin', 'K12Study 管理员', '$2a$10$bootstrap', '330000', '330100', 'SCH-HQ', '/SCH-HQ/', 'DEPT-HQ-ADMIN', '/DEPT-HQ/DEPT-HQ-ADMIN/')
|
('U10001', 'admin', 'K12Study 管理员', '$2a$10$bootstrap', '330100', 'SCH-HQ', '/SCH-HQ/', 'DEPT-HQ-ADMIN', '/DEPT-HQ/DEPT-HQ-ADMIN/')
|
||||||
ON CONFLICT (user_id) DO NOTHING;
|
ON CONFLICT (user_id) DO NOTHING;
|
||||||
|
|
||||||
INSERT INTO upms.tb_sys_role (
|
INSERT INTO upms.tb_sys_role (
|
||||||
role_id, role_code, role_name, province_code, area_code, tenant_id, tenant_path, dept_id, dept_path
|
role_id, role_code, role_name, adcode, tenant_id, tenant_path, dept_id, dept_path
|
||||||
) VALUES
|
) VALUES
|
||||||
('ROLE-ORG-ADMIN', 'ORG_ADMIN', '机构管理员', '330000', '330100', 'SCH-HQ', '/SCH-HQ/', 'DEPT-HQ-ADMIN', '/DEPT-HQ/DEPT-HQ-ADMIN/')
|
('ROLE-ORG-ADMIN', 'ORG_ADMIN', '机构管理员', '330100', 'SCH-HQ', '/SCH-HQ/', 'DEPT-HQ-ADMIN', '/DEPT-HQ/DEPT-HQ-ADMIN/')
|
||||||
ON CONFLICT (role_id) DO NOTHING;
|
ON CONFLICT (role_id) DO NOTHING;
|
||||||
|
|
||||||
INSERT INTO upms.tb_sys_permission (
|
INSERT INTO upms.tb_sys_permission (
|
||||||
permission_id, permission_code, permission_name, province_code, area_code, tenant_id, tenant_path, dept_id, dept_path
|
permission_id, permission_code, permission_name, adcode, tenant_id, tenant_path, dept_id, dept_path
|
||||||
) VALUES
|
) VALUES
|
||||||
('PERM-DASHBOARD', 'dashboard:view', '查看控制台', '330000', '330100', 'SCH-HQ', '/SCH-HQ/', 'DEPT-HQ-ADMIN', '/DEPT-HQ/DEPT-HQ-ADMIN/'),
|
('PERM-DASHBOARD', 'dashboard:view', '查看控制台', '330100', 'SCH-HQ', '/SCH-HQ/', 'DEPT-HQ-ADMIN', '/DEPT-HQ/DEPT-HQ-ADMIN/'),
|
||||||
('PERM-TENANT', 'tenant:view', '查看租户组织', '330000', '330100', 'SCH-HQ', '/SCH-HQ/', 'DEPT-HQ-ADMIN', '/DEPT-HQ/DEPT-HQ-ADMIN/')
|
('PERM-TENANT', 'tenant:view', '查看租户组织', '330100', 'SCH-HQ', '/SCH-HQ/', 'DEPT-HQ-ADMIN', '/DEPT-HQ/DEPT-HQ-ADMIN/')
|
||||||
ON CONFLICT (permission_id) DO NOTHING;
|
ON CONFLICT (permission_id) DO NOTHING;
|
||||||
|
|
||||||
INSERT INTO upms.tb_sys_menu_route (
|
INSERT INTO upms.tb_sys_menu (
|
||||||
route_id, parent_route_id, route_path, route_name, component_key, layout_type, title, icon, permission_code,
|
route_id, parent_route_id, route_path, route_name, component_key, layout_type, title, icon, permission_code,
|
||||||
hidden, province_code, area_code, tenant_id, tenant_path, dept_id, dept_path
|
hidden, adcode, tenant_id, tenant_path, dept_id, dept_path
|
||||||
) VALUES
|
) VALUES
|
||||||
('ROUTE-DASHBOARD', NULL, '/', 'dashboard', 'dashboard', 'SIDEBAR', '控制台', 'layout-dashboard', 'dashboard:view', FALSE,
|
('ROUTE-DASHBOARD', NULL, '/', 'dashboard', 'dashboard', 'SIDEBAR', '控制台', 'layout-dashboard', 'dashboard:view', FALSE,
|
||||||
'330000', '330100', 'SCH-HQ', '/SCH-HQ/', 'DEPT-HQ-ADMIN', '/DEPT-HQ/DEPT-HQ-ADMIN/'),
|
'330100', 'SCH-HQ', '/SCH-HQ/', 'DEPT-HQ-ADMIN', '/DEPT-HQ/DEPT-HQ-ADMIN/'),
|
||||||
('ROUTE-TENANT', NULL, '/tenant', 'tenant-management', 'tenant', 'SIDEBAR', '租户组织', 'building-2', 'tenant:view', FALSE,
|
('ROUTE-TENANT', NULL, '/tenant', 'tenant-management', 'tenant', 'SIDEBAR', '租户组织', 'building-2', 'tenant:view', FALSE,
|
||||||
'330000', '330100', 'SCH-HQ', '/SCH-HQ/', 'DEPT-HQ-ADMIN', '/DEPT-HQ/DEPT-HQ-ADMIN/')
|
'330100', 'SCH-HQ', '/SCH-HQ/', 'DEPT-HQ-ADMIN', '/DEPT-HQ/DEPT-HQ-ADMIN/')
|
||||||
ON CONFLICT (route_id) DO NOTHING;
|
ON CONFLICT (route_id) DO NOTHING;
|
||||||
|
|||||||
Reference in New Issue
Block a user